diff --git a/README.md b/README.md index 5ad01ccca..0aa4aedb1 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,7 @@ Browse pre-built agents, tools, filesystems, and software packages at the [agent | Package | apt Equivalent | Description | Source | Combined Size | Gzipped | |---------|---------------|-------------|--------|---------------|---------| +| `@rivet-dev/agent-os-codedb` | codedb | codedb code intelligence CLI (reduced WASI fork) | zig | 228 KiB | 36.7 KiB | | `@rivet-dev/agent-os-codex` | codex | OpenAI Codex integration (codex, codex-exec) | rust | - | - | | `@rivet-dev/agent-os-coreutils` | coreutils | GNU coreutils: sh, cat, ls, cp, sort, and 80+ commands | rust | - | - | | `@rivet-dev/agent-os-curl` | curl | curl HTTP client | c | - | - | diff --git a/packages/core/tests/duckdb-package.test.ts b/packages/core/tests/duckdb-package.test.ts index 5ad86307d..3d1aa8a39 100644 --- a/packages/core/tests/duckdb-package.test.ts +++ b/packages/core/tests/duckdb-package.test.ts @@ -4,7 +4,7 @@ import { existsSync } from "node:fs"; import coreutils from "@rivet-dev/agent-os-coreutils"; import duckdb from "../../../registry/software/duckdb/dist/index.js"; import httpGet from "../../../registry/software/http-get/dist/index.js"; -import { AgentOs } from "../src/index.js"; +import { AgentOs } from "../dist/index.js"; const hasDuckdbPackage = existsSync(`${duckdb.commandDir}/duckdb`); const hasHttpGetPackage = existsSync(`${httpGet.commandDir}/http_get`); @@ -36,12 +36,12 @@ describe.skipIf(!hasDuckdbPackage || !hasHttpGetPackage || !hasCoreutilsPackage) let result = await vm.exec( `duckdb -csv /tmp/app.duckdb -c "CREATE TABLE items(id INTEGER, value INTEGER); INSERT INTO items VALUES (1, 10), (2, 20); UPDATE items SET value = value + 1 WHERE id = 2;"`, ); - expect(result.exitCode).toBe(0); + expect(result.exitCode, result.stderr || result.stdout).toBe(0); result = await vm.exec( `duckdb -csv /tmp/app.duckdb -c "SELECT id, value FROM items ORDER BY id;"`, ); - expect(result.exitCode).toBe(0); + expect(result.exitCode, result.stderr || result.stdout).toBe(0); expect(result.stdout.trim()).toBe("id,value\n1,10\n2,21"); expect(await vm.exists("/tmp/app.duckdb")).toBe(true); }); @@ -69,12 +69,12 @@ describe.skipIf(!hasDuckdbPackage || !hasHttpGetPackage || !hasCoreutilsPackage) let result = await vm.exec( `http_get ${address.port} /remote.csv /tmp/remote.csv`, ); - expect(result.exitCode).toBe(0); + expect(result.exitCode, result.stderr || result.stdout).toBe(0); result = await vm.exec( `duckdb -csv -c "SELECT SUM(value) AS total FROM read_csv_auto('/tmp/remote.csv');"`, ); - expect(result.exitCode).toBe(0); + expect(result.exitCode, result.stderr || result.stdout).toBe(0); expect(result.stdout.trim()).toBe("total\n8"); } finally { await closeServer(server); diff --git a/packages/registry-types/src/index.ts b/packages/registry-types/src/index.ts index 10baaede1..0e0493163 100644 --- a/packages/registry-types/src/index.ts +++ b/packages/registry-types/src/index.ts @@ -32,8 +32,8 @@ export interface WasmCommandPackage { aptName: string; /** Human-readable description. */ description: string; - /** Build source: "rust" or "c". */ - source: "rust" | "c"; + /** Build source: "rust", "c", or "zig". */ + source: "rust" | "c" | "zig"; /** Commands provided by this package. */ commands: WasmCommandEntry[]; /** Absolute path to the directory containing WASM command binaries. */ diff --git a/registry/CLAUDE.md b/registry/CLAUDE.md index 62c04a535..34c36d337 100644 --- a/registry/CLAUDE.md +++ b/registry/CLAUDE.md @@ -42,6 +42,7 @@ All published packages follow `@rivet-dev/agent-os-{apt-name}` where `{apt-name} | (none) | @rivet-dev/agent-os-codex | codex, codex-exec | | git | @rivet-dev/agent-os-git | git (planned) | | make | @rivet-dev/agent-os-make | make (planned) | +| codedb | @rivet-dev/agent-os-codedb | codedb | ### Disabled packages (WASM binaries not built) @@ -56,6 +57,8 @@ The following packages exist but **cannot be compiled** until a patched wasi-lib To unblock: run `cd native && ./scripts/patch-wasi-libc.sh` to build the patched sysroot, then `cd .. && make build-wasm-c copy-wasm`. +`@rivet-dev/agent-os-codedb` is built from a repo-side Zig fork under `native/zig/codedb/`. It reuses upstream indexing/search code but only ships the single-shot CLI subcommands that work in WasmVM today: `tree`, `outline`, `find`, `search`, `word`, `deps`, and `read`. The upstream daemon, HTTP server, watcher loop, and MCP server still rely on threads, sockets, child-process spawning, and POSIX file locking, so they remain out of scope for the current WASI package. + ### Meta-packages | Package | Includes | diff --git a/registry/Makefile b/registry/Makefile index 2f90ee938..99321151c 100644 --- a/registry/Makefile +++ b/registry/Makefile @@ -8,13 +8,16 @@ COMMANDS_DIR := $(NATIVE_DIR)/target/wasm32-wasip1/release/commands MARKER_DIR := .build-markers RUST_MARKER := $(MARKER_DIR)/rust-wasm-built C_MARKER := $(MARKER_DIR)/c-wasm-built +ZIG_MARKER := $(MARKER_DIR)/zig-wasm-built COPY_MARKER := $(MARKER_DIR)/wasm-copied META_MARKER := $(MARKER_DIR)/meta-generated TS_MARKER := $(MARKER_DIR)/ts-built +ZIG ?= zig + # Command packages (excludes _types and meta-packages) CMD_PACKAGES := coreutils sed grep gawk findutils diffutils tar gzip \ - curl http-get wget zip unzip jq ripgrep fd tree file sqlite3 duckdb yq codex git + curl http-get wget zip unzip jq ripgrep fd tree file sqlite3 duckdb yq codex git codedb # Meta-packages META_PACKAGES := common build-essential everything @@ -22,7 +25,7 @@ META_PACKAGES := common build-essential everything # All publishable packages ALL_PACKAGES := $(CMD_PACKAGES) $(META_PACKAGES) -.PHONY: all build-wasm build-wasm-rust build-wasm-c copy-wasm generate-meta build test \ +.PHONY: all build-wasm build-wasm-rust build-wasm-c build-wasm-zig copy-wasm generate-meta build test \ publish publish-dry publish-force publish-clean clean rebuild all: build @@ -36,7 +39,7 @@ $(MARKER_DIR): # --------------------------------------------------------------------------- # Build WASM binaries from source (in native/) # --------------------------------------------------------------------------- -build-wasm: build-wasm-rust build-wasm-c +build-wasm: build-wasm-rust build-wasm-c build-wasm-zig build-wasm-rust: $(RUST_MARKER) $(RUST_MARKER): $(MARKER_DIR) @@ -51,11 +54,23 @@ $(C_MARKER): $(MARKER_DIR) cd $(NATIVE_DIR)/c && make install COMMANDS_DIR=../target/wasm32-wasip1/release/commands @touch $(C_MARKER) +build-wasm-zig: $(ZIG_MARKER) +$(ZIG_MARKER): $(MARKER_DIR) + @echo "=== Building Zig WASM commands ===" + @if command -v "$(ZIG)" >/dev/null 2>&1; then \ + cd $(NATIVE_DIR)/zig/codedb && \ + "$(ZIG)" build -Dtarget=wasm32-wasi -Doptimize=ReleaseSmall && \ + cp -f zig-out/bin/codedb.wasm zig-out/bin/codedb; \ + else \ + echo " WARN: zig not found; skipping Zig builds"; \ + fi + @touch $(ZIG_MARKER) + # --------------------------------------------------------------------------- # Copy WASM binaries from native build output into per-package wasm/ dirs # --------------------------------------------------------------------------- copy-wasm: $(COPY_MARKER) -$(COPY_MARKER): $(RUST_MARKER) $(C_MARKER) +$(COPY_MARKER): $(RUST_MARKER) $(C_MARKER) $(ZIG_MARKER) @echo "=== Copying WASM binaries to packages ===" @# --- coreutils --- @@ -186,6 +201,10 @@ $(COPY_MARKER): $(RUST_MARKER) $(C_MARKER) @mkdir -p software/git/wasm @[ -f "$(COMMANDS_DIR)/git" ] && cp -f "$(COMMANDS_DIR)/git" software/git/wasm/ || echo " WARN: git not found" + @# --- codedb (repo-side Zig fork) --- + @mkdir -p software/codedb/wasm + @[ -f "$(NATIVE_DIR)/zig/codedb/zig-out/bin/codedb" ] && cp -f "$(NATIVE_DIR)/zig/codedb/zig-out/bin/codedb" software/codedb/wasm/ || echo " WARN: codedb not found (needs Zig toolchain)" + @echo "=== Copy complete ===" @touch $(COPY_MARKER) diff --git a/registry/README.md b/registry/README.md index 306f18ea4..b4687f35e 100644 --- a/registry/README.md +++ b/registry/README.md @@ -48,6 +48,7 @@ Node.js agent and tool packages that are projected into the VM via the ModuleAcc | Package | apt Equivalent | Description | Source | Combined Size | Gzipped | |---------|---------------|-------------|--------|---------------|---------| +| `@rivet-dev/agent-os-codedb` | codedb | codedb code intelligence CLI (reduced WASI fork) | zig | - | - | | `@rivet-dev/agent-os-codex` | codex | OpenAI Codex integration (codex, codex-exec) | rust | 274 KiB | 118 KiB | | `@rivet-dev/agent-os-coreutils` | coreutils | GNU coreutils: sh, cat, ls, cp, sort, and 80+ commands | rust | 51.4 MiB | 23.5 MiB | | `@rivet-dev/agent-os-curl` | curl | curl HTTP client | c | - | - | @@ -93,6 +94,8 @@ make copy-wasm # Copy binaries into per-package wasm/ directories make build # Build TypeScript (includes above steps) ``` +`codedb` also has a repo-side Zig source tree under `native/zig/codedb/`. Rebuilding that package currently requires a Zig 0.15.x toolchain available as `zig`, or passing `ZIG=/path/to/zig` to `make`. + ## Publishing All packages use date-based versioning (`0.0.{YYMMDDHHmmss}`). Publishing skips unchanged packages via content hashing. diff --git a/registry/native/c/Makefile b/registry/native/c/Makefile index 2d2c90b7a..ad30f84b1 100644 --- a/registry/native/c/Makefile +++ b/registry/native/c/Makefile @@ -514,15 +514,11 @@ $(NATIVE_DIR)/unzip: programs/unzip.c $(ZLIB_SRCS) $(MINIZIP_UNZIP_SRCS) $(NATIVE_CC) $(NATIVE_CFLAGS) $(ZIP_INCLUDES) -o $@ programs/unzip.c $(ZLIB_SRCS) $(MINIZIP_UNZIP_SRCS) -lz # curl_test: links libcurl (HTTP/HTTPS build for WASM via host_net + host_tls) -# Curl still expects stable local/peer socket-name queries after connect, so -# keep its WASI compatibility shim but route curl's own references onto private -# wrapper symbols to avoid colliding with our patched sysroot exports. CURL_SRCS := $(wildcard libs/curl/lib/*.c) $(wildcard libs/curl/lib/vauth/*.c) \ $(wildcard libs/curl/lib/vtls/*.c) $(wildcard libs/curl/lib/vquic/*.c) \ $(wildcard libs/curl/lib/vssh/*.c) CURL_INCLUDES := -Ilibs/curl/include -Ilibs/curl/lib -include libs/curl/lib/curl_setup.h -include libs/curl/lib/curl_printf.h -CURL_LIB_DEFS := -DHAVE_CONFIG_H -DBUILDING_LIBCURL -D_WASI_EMULATED_SIGNAL -DHAVE_BASENAME -DHAVE_LIBGEN_H \ - -Dgetsockname=curl_wasi_getsockname -Dgetpeername=curl_wasi_getpeername +CURL_LIB_DEFS := -DHAVE_CONFIG_H -DBUILDING_LIBCURL -D_WASI_EMULATED_SIGNAL -DHAVE_BASENAME -DHAVE_LIBGEN_H $(BUILD_DIR)/curl: scripts/build-curl-upstream.sh $(CURL_UPSTREAM_OVERLAY_FILES) $(WASI_SDK_DIR)/bin/clang @mkdir -p $(BUILD_DIR) diff --git a/registry/native/zig/codedb/.zig-cache/h/0ee7a810f5f29a6226c02be766d8ce4c.txt b/registry/native/zig/codedb/.zig-cache/h/0ee7a810f5f29a6226c02be766d8ce4c.txt new file mode 100644 index 000000000..a175ee0e4 --- /dev/null +++ b/registry/native/zig/codedb/.zig-cache/h/0ee7a810f5f29a6226c02be766d8ce4c.txt @@ -0,0 +1,841 @@ +0 +9554 30463873 1775105901305392631 27cd565b3dad8cdfe056e197a3c40c4f 0 src/main.zig +11083 29955562 1755651171000000000 3c8016eb348fede9a19b94ec4869d8a6 1 compiler_rt.zig +7957 30873080 1755651176000000000 0ebbb46b337b65e85e7d177cfc93d2ca 1 std/std.zig +2525 30872531 1755651176000000000 71e0dabdb301ba10f8ca420941767e70 1 std/BitStack.zig +100782 30872563 1755651176000000000 93d126516cbe85e7dab1c855c82058cb 1 std/Build.zig +4266 30872643 1755651176000000000 16fdba428de22eb1305e855dec42f9a9 1 std/buf_map.zig +4526 30872644 1755651176000000000 8e63f8aad9b21f2cac5dcdcafd975d93 1 std/buf_set.zig +8139 30872564 1755651176000000000 b344fa05d00dd94ca9bb8e95cc23b3fc 1 std/DoublyLinkedList.zig +25874 30872813 1755651176000000000 84e0fbf3feb0ac8196cb74e389a3ccb0 1 std/dynamic_library.zig +35271 30872577 1755651176000000000 0d7d03be6dc0cb75afa123aa4eb4d818 1 std/Io.zig +43556 30872965 1755651176000000000 5bfaba216d6a1896e7f4b43e7ee7fe1a 1 std/multi_array_list.zig +21416 30873068 1755651176000000000 4328abc876b82840e689434566876bc7 1 std/priority_queue.zig +33889 30873067 1755651176000000000 431c78ed77c39d0be4be43c7634c12d0 1 std/priority_dequeue.zig +60600 30872578 1755651176000000000 518fc21273ed20754da5c332f4c01208 1 std/Progress.zig +17628 30872592 1755651176000000000 697e28034ef9cf05bb04d3be028a9653 1 std/Random.zig +20351 30873072 1755651176000000000 41f61f133b5c7661bc5f90889fd39045 1 std/segmented_list.zig +10911 30872593 1755651176000000000 72379f2cc10c10e56c76ebebd42ca14c 1 std/SemanticVersion.zig +5252 30872594 1755651176000000000 b2d7e2ffcc15cc25fbc30a3e3799cfba 1 std/SinglyLinkedList.zig +107040 30872623 1755651176000000000 f931b01a199517a5df7184e98bad442e 1 std/Target.zig +60770 30872635 1755651176000000000 9d935b7746e443b6cfa58f88eb113dc4 1 std/Thread.zig +24524 30873092 1755651176000000000 1694ad0602c4425ddf33879d415f4ab1 1 std/treap.zig +31490 30872636 1755651176000000000 7cd075d309fe4bb3e810216b10d3f0c8 1 std/Uri.zig +95685 30872638 1755651176000000000 a68eb5aa7a6d2c07cb820b6b5ffa0604 1 std/array_list.zig +119750 30872637 1755651176000000000 a483a92911be1b36d25671285d410963 1 std/array_hash_map.zig +19425 30872640 1755651176000000000 09d08e5d80b113466699bf4262b53875 1 std/atomic.zig +24490 30872641 1755651176000000000 db10a569a8a9a16313103b691a443b4a 1 std/base64.zig +69019 30872642 1755651176000000000 a44de477fecc990a1381fe54649a934b 1 std/bit_set.zig +39860 30872647 1755651176000000000 bab8724be90660375455f96475ebd26f 1 std/builtin.zig +360045 30872657 1755651176000000000 41c881372d765477c751e9b06e39e91f 1 std/c.zig +51742 30872658 1755651176000000000 a9384cc5046eaeedcb1b30e646b423dc 1 std/coff.zig +372 30872691 1755651176000000000 b867983786f01e8333e32b633eb10410 1 std/compress.zig +17640 30873079 1755651176000000000 bd79322afba3cc08000a99c21bfd26d7 1 std/static_string_map.zig +13676 30872788 1755651176000000000 56a50f35f9d4227c9754ad2bad741de1 1 std/crypto.zig +69500 30872803 1755651176000000000 f2ac0dce249b308c0c7483a07e9d8c21 1 std/debug.zig +4894 30872812 1755651176000000000 61fff94fe737bda88edd8ca624c0a93c 1 std/dwarf.zig +65720 30872814 1755651176000000000 bbe1ed25b53adc620fcc2bcd89a2a536 1 std/elf.zig +57857 30872815 1755651176000000000 e8bdba1d4814ce140abed00d8ac27c66 1 std/enums.zig +58752 30872829 1755651176000000000 94d08677478fb7c8fd9ecad13a05a7f6 1 std/fmt.zig +34417 30872838 1755651176000000000 2d9a528a5756bb811d20d393011711e8 1 std/fs.zig +4919 30872839 1755651176000000000 9c3f0431c1637a1fc64fa91b0520d1b3 1 std/gpu.zig +4120 30872854 1755651176000000000 287776a366bc2fa9071678dd14432afc 1 std/hash.zig +80684 30872855 1755651176000000000 5d2dba5503b8646ccb51c7481cec177d 1 std/hash_map.zig +35783 30872866 1755651176000000000 291afdd8c7934ab8495ad0cb24e3272b 1 std/heap.zig +39240 30872874 1755651176000000000 948901b44d7c0b5b43749fa91ebd4552 1 std/http.zig +5465 30872887 1755651176000000000 050dd347d737c8ab1673d3762b02a7e0 1 std/json.zig +18649 30872888 1755651176000000000 f1185edfabdd268969ce0577870e98a2 1 std/leb128.zig +8342 30872889 1755651176000000000 7a79e5053bcf4725fcf9ca5e03c43252 1 std/log.zig +70826 30872890 1755651176000000000 6a8358e9e839fb48052b1b0c7aa87559 1 std/macho.zig +74776 30872958 1755651176000000000 d4a0c6126fce11a0cafaea7b313668ac 1 std/math.zig +184945 30872961 1755651176000000000 780cc406a638f4fee16e04354f8b9612 1 std/mem.zig +39789 30872964 1755651176000000000 05e33fd489986e7ef7a2114c8f3040d0 1 std/meta.zig +88641 30872968 1755651176000000000 f046d7172f3a3de58ed9e665b16b72ce 1 std/net.zig +10310 30873061 1755651176000000000 2384f794189b66c622279a439a06e7a5 1 std/os.zig +2016 30872969 1755651176000000000 b634eff517218815e970c18230425d31 1 std/once.zig +13947 30873062 1755651176000000000 4e879b4dee70c859bd0938a160593e4c 1 std/pdb.zig +11147 30873063 1755651176000000000 67e0f1b41fa1dbada2b0874d26ef4d81 1 std/pie.zig +290871 30873066 1755651176000000000 0a923dee580fffa1623318e59d0a2b3e 1 std/posix.zig +78344 30873071 1755651176000000000 b08239d255f89ec21465710fcbc5e908 1 std/process.zig +39596 30873077 1755651176000000000 338f2628729e859f51865caf708004bc 1 std/sort.zig +23280 30873073 1755651176000000000 8de2dfb1368f1051037084ba56ea4a97 1 std/simd.zig +16059 30872639 1755651176000000000 7d6ee226b3aea4e399efa02748582a57 1 std/ascii.zig +42826 30873085 1755651176000000000 55143931b33969e1e759f8623049586c 1 std/tar.zig +48207 30873088 1755651176000000000 deee7351dbab0664b3bc9a4bdb2a5d38 1 std/testing.zig +11575 30873091 1755651176000000000 04290176ff236793a2846b7afe763a99 1 std/time.zig +11173 30873094 1755651176000000000 a51ee0838574fdd01999198cbeff620f 1 std/tz.zig +85999 30873097 1755651176000000000 a384b975bb355f986219464058d80145 1 std/unicode.zig +12292 30873102 1755651176000000000 8757ba546e520503fcc6a58d9b0d0083 1 std/valgrind.zig +17661 30873103 1755651176000000000 a8988138c7ee50f868cd1db24ab3d1d6 1 std/wasm.zig +37103 30873146 1755651176000000000 954dfee598538ddb98e9fc105c2e0a39 1 std/zig.zig +26592 30873147 1755651176000000000 2d4666d88f0c60307ae5724c74a78854 1 std/zip.zig +1242 30873152 1755651176000000000 c5e5cebc2cfc9353dc65aa5193442b60 1 std/zon.zig +28071 30873078 1755651176000000000 76d2b688d1d45fbb74ca560efdaac238 1 std/start.zig +5929 30872784 1755651176000000000 a75e2588e1a73369810b6ba7657e4bfd 1 std/crypto/tlcsprng.zig +59803 30872537 1755651176000000000 b6406a99c6bcfa6765bfb08eafcbff0d 1 std/Build/Cache.zig +38694 30872557 1755651176000000000 4bafc6be1344a4b0b4bfce1abc099568 1 std/Build/Step.zig +26376 30872539 1755651176000000000 bb934510edbc055949ffff1646e5e1e6 1 std/Build/Module.zig +43006 30872560 1755651176000000000 01457aac972ac3a8e51fa2185c19c1be 1 std/Build/Watch.zig +17168 30872538 1755651176000000000 907b4dad04e8cdc9fb34a46e35e44fb3 1 std/Build/Fuzz.zig +30748 30872561 1755651176000000000 5bf5917eafea467894d1bdebd37cc3aa 1 std/Build/WebServer.zig +10407 30872562 1755651176000000000 219f7675797b83c184e56753dff6542a 1 std/Build/abi.zig +64087 30872571 1755651176000000000 1ba61be2534ce203f154a61c6565f179 1 std/Io/Reader.zig +106521 30872572 1755651176000000000 d8e9286f3772f2b52339c5bf9facf601 1 std/Io/Writer.zig +14469 30872566 1755651176000000000 50460af6b2b24665a01f2798a19968d6 1 std/Io/DeprecatedReader.zig +3660 30872567 1755651176000000000 667198a0bb922d33d2c2fb81a9a25d30 1 std/Io/DeprecatedWriter.zig +6043 30872574 1755651176000000000 8a44e6b03e4a42b09a4077448a7c41db 1 std/Io/fixed_buffer_stream.zig +1227 30872573 1755651176000000000 8e42c53c443deeb5a1d9cd2b1a3dbee7 1 std/Io/counting_reader.zig +5692 30872576 1755651176000000000 1ef2fac09b5b843536005bd1350d920d 1 std/Io/tty.zig +0 30872575 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/Io/test.zig +1811 30872580 1755651176000000000 4f975bd4c885c2b17936c7c15e2a1fa0 1 std/Random/Ascon.zig +2685 30872581 1755651176000000000 5244bfd5edd68ad074bfdf866029fa86 1 std/Random/ChaCha.zig +6100 30872582 1755651176000000000 14fb5367ee7128106466c91abe89d828 1 std/Random/Isaac64.zig +2727 30872583 1755651176000000000 98b129620d81fc551cc2747eb5e93a2d 1 std/Random/Pcg.zig +3242 30872587 1755651176000000000 13e05c7b4ba6bd757c30dbc6e1520198 1 std/Random/Xoroshiro128.zig +3177 30872588 1755651176000000000 ece4176296c0d5a4735a0e13195d3e89 1 std/Random/Xoshiro256.zig +3158 30872585 1755651176000000000 e0b128479f8a117718ec288761f83ac0 1 std/Random/Sfc64.zig +3699 30872584 1755651176000000000 f562dad96707be48e6745a1f57cbf27c 1 std/Random/RomuTrio.zig +530 30872586 1755651176000000000 6862d091fadcbbb652464ab10689bd23 1 std/Random/SplitMix64.zig +4526 30872591 1755651176000000000 8ac3cfca93be2f623ce661fc9fb27686 1 std/Random/ziggurat.zig +0 30872590 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/Random/test.zig +29955 30872596 1755651176000000000 7abef445358bc9111ee7720810ab2dfe 1 std/Target/Query.zig +106498 30872597 1755651176000000000 4e1faa0e06f720a8513cc19957f2cd52 1 std/Target/aarch64.zig +104612 30872598 1755651176000000000 06339133610c2f04ff7073b54ed9f610 1 std/Target/amdgcn.zig +1274 30872599 1755651176000000000 c251325fefba8d6614a0692c5ceb2eea 1 std/Target/arc.zig +79071 30872600 1755651176000000000 c8ffd174d8ea40cc06efcf87bf4b657a 1 std/Target/arm.zig +71492 30872601 1755651176000000000 8dcc898c0cae23c1a6c85b1acad47ada 1 std/Target/avr.zig +2425 30872602 1755651176000000000 3376bf5f146580e9b3ce5e329a604817 1 std/Target/bpf.zig +77604 30872603 1755651176000000000 be007dfe415760a79fc1d9d7dc89a548 1 std/Target/csky.zig +18058 30872605 1755651176000000000 8ccf22d3bcff20d7636d8251948f4618 1 std/Target/hexagon.zig +665 30872604 1755651176000000000 1dec26e22b22006cd47d45b427f8a00c 1 std/Target/generic.zig +1207 30872606 1755651176000000000 2119135642c6ce06557e5005da5d27d3 1 std/Target/lanai.zig +6753 30872607 1755651176000000000 da13f92a1b8d03cc797a3beeaa2922d6 1 std/Target/loongarch.zig +7140 30872608 1755651176000000000 85a640161b5e75f1b0e44aafa7b2ac12 1 std/Target/m68k.zig +16348 30872609 1755651176000000000 12a09875d65985836758c030c651b686 1 std/Target/mips.zig +2227 30872610 1755651176000000000 f424aba074f946c774143fd6a0cc9b02 1 std/Target/msp430.zig +16613 30872611 1755651176000000000 166964aa1c4340f0f5e8c2079fbe6806 1 std/Target/nvptx.zig +36467 30872612 1755651176000000000 aba041f244b5c814708cec688ed2ab9b 1 std/Target/powerpc.zig +1396 30872613 1755651176000000000 11966b944c6a6f5eb378759087686f44 1 std/Target/propeller.zig +90023 30872614 1755651176000000000 f9c2faa81a8573bbbf95b94084ffd3be 1 std/Target/riscv.zig +30256 30872615 1755651176000000000 a3772db647d2b9a091f142be3fe81a5a 1 std/Target/s390x.zig +21324 30872616 1755651176000000000 dff9a38ced436d7efc5afea4972eb822 1 std/Target/sparc.zig +5037 30872617 1755651176000000000 7a802abba56de166296a02820267f278 1 std/Target/spirv.zig +1276 30872618 1755651176000000000 320e5694ddc1e4347015e29952472e47 1 std/Target/ve.zig +6517 30872619 1755651176000000000 1babc8b342fb599193f79f08f76e9463 1 std/Target/wasm.zig +139090 30872620 1755651176000000000 6c63cbfe59447c9f4755d8b977fd0e4d 1 std/Target/x86.zig +1234 30872621 1755651176000000000 9977314bd28dc12c6017784ed96cc578 1 std/Target/xcore.zig +1274 30872622 1755651176000000000 b20b4af52a8974acb1c9cf688822a23c 1 std/Target/xtensa.zig +42124 30872626 1755651176000000000 a3d49f74bb65b5f4d7a02d5cac8c7afe 1 std/Thread/Futex.zig +9112 30872631 1755651176000000000 fe6a25bfea2dcf9533b026b4e0846b98 1 std/Thread/ResetEvent.zig +10156 30872629 1755651176000000000 f3390bd4b6bae3fe12192885ee63130d 1 std/Thread/Mutex.zig +2650 30872633 1755651176000000000 3ea6f138fe347f9c36c6331f8ba278e3 1 std/Thread/Semaphore.zig +23329 30872625 1755651176000000000 6fcf321e05d855b3995cb3a50125c3f8 1 std/Thread/Condition.zig +11411 30872632 1755651176000000000 215e3b4416494f856a25895960f5a4ca 1 std/Thread/RwLock.zig +9540 30872630 1755651176000000000 628f9bee010911810b3c9193792c6f53 1 std/Thread/Pool.zig +1988 30872634 1755651176000000000 6793266710d780758ac32c2edcc166a9 1 std/Thread/WaitGroup.zig +59140 30872646 1755651176000000000 92182faee34134d52a9ad2d0a5a5fb2f 1 std/builtin/assembly.zig +50235 30872649 1755651176000000000 9708ebe35d8d2550494584ceeba81209 1 std/c/darwin.zig +11274 30872651 1755651176000000000 09bec7c3f40f6de5099b6d1914d351cf 1 std/c/freebsd.zig +9878 30872656 1755651176000000000 ab1e53cee5c67832574a9055e0108e66 1 std/c/solaris.zig +6617 30872653 1755651176000000000 d16786c18fabd57be5a8635a6ef08bb1 1 std/c/netbsd.zig +3875 30872650 1755651176000000000 907c436f260d11e9f80420d838051111 1 std/c/dragonfly.zig +15535 30872652 1755651176000000000 43ebba145dd0318d69788910b66220e7 1 std/c/haiku.zig +13681 30872654 1755651176000000000 06689937d111c195fd6baae889fc720b 1 std/c/openbsd.zig +3099 30872655 1755651176000000000 6a897bb99820db129b41bc2b5d6046bb 1 std/c/serenity.zig +6341 30872669 1755651176000000000 33490794e8bee84517ccfebe261d4eae 1 std/compress/flate.zig +3010 30872678 1755651176000000000 e6aae4a5afa281030d98b006a53807e0 1 std/compress/lzma.zig +894 30872681 1755651176000000000 0112dea02a7ad758670754ecb2e3ff09 1 std/compress/lzma2.zig +5317 30872687 1755651176000000000 23792685eae819b737bc8922607d4ba7 1 std/compress/xz.zig +6605 30872690 1755651176000000000 295f3b5136806a9f26e893c51e33025d 1 std/compress/zstd.zig +10441 30872783 1755651176000000000 b922de5f94704738f619903775fecb17 1 std/crypto/timing_safe.zig +47614 30872707 1755651176000000000 a03a980a4a1a9a95bf94441f8c307101 1 std/crypto/aegis.zig +6851 30872713 1755651176000000000 ea7fad6fda828c72abcc0148e4659e9c 1 std/crypto/aes_gcm.zig +14129 30872714 1755651176000000000 65b51cb2f9dda41995f89b221db5507e 1 std/crypto/aes_ocb.zig +51909 30872721 1755651176000000000 451cb3546d86929665419cd05bea0293 1 std/crypto/chacha20.zig +6309 30872745 1755651176000000000 1318dc8b9450bda7d30b2f2bd66ef98f 1 std/crypto/isap.zig +27260 30872777 1755651176000000000 b95f25fd28a65f6f71761d12efaee503 1 std/crypto/salsa20.zig +3626 30872744 1755651176000000000 7d28bd5a64f521b7f7322612e4d5f562 1 std/crypto/hmac.zig +18629 30872781 1755651176000000000 0ee80c1bcfed0bfc7fe20c0fd3c04d22 1 std/crypto/siphash.zig +6226 30872722 1755651176000000000 4270e1555211de4aca948cd086fc7129 1 std/crypto/cmac.zig +8993 30872712 1755651176000000000 1565baef5de85c1722fc1f3661e7418c 1 std/crypto/aes.zig +15303 30872746 1755651176000000000 ac2b7ab43674f07a4208ffa738f420c5 1 std/crypto/keccak_p.zig +9666 30872716 1755651176000000000 bfcf52448d42cda00bcaa777deca80cf 1 std/crypto/ascon.zig +2303 30872749 1755651176000000000 64e2696fd33ff024c44aee16a197afac 1 std/crypto/modes.zig +8666 30872700 1755651176000000000 3f63b88b98e1cb4a076af7d105c52b5f 1 std/crypto/25519/x25519.zig +65291 30872748 1755651176000000000 d602189df4b86e3751c21259bc485f24 1 std/crypto/ml_kem.zig +8492 30872694 1755651176000000000 1ad8b856fa664e2584776361ba03bdc0 1 std/crypto/25519/curve25519.zig +25932 30872696 1755651176000000000 a2d994ac2ed36751f95ac92b85a4931d 1 std/crypto/25519/edwards25519.zig +16174 30872758 1755651176000000000 1624d5389942bffd6016dc87453db0b7 1 std/crypto/pcurves/p256.zig +16370 30872764 1755651176000000000 c7fb645fa9fd8e26db3c4252856cdc9d 1 std/crypto/pcurves/p384.zig +7971 30872698 1755651176000000000 d0d33655dcbd80c50d53283108a54034 1 std/crypto/25519/ristretto255.zig +20520 30872770 1755651176000000000 e8ead8fcc9affae7d203ecb87a0e8236 1 std/crypto/pcurves/secp256k1.zig +29319 30872719 1755651176000000000 30d94c7ccda432eb5df2b6e7c68e0c35 1 std/crypto/blake2.zig +41428 30872720 1755651176000000000 711b0501d46a7c267b6f90ee8be3aacd 1 std/crypto/blake3.zig +9751 30872747 1755651176000000000 d4911af79a2684c60a4325e9142b1609 1 std/crypto/md5.zig +9321 30872706 1755651176000000000 15ebe6e9b9de51b93b00e1b463f00cb4 1 std/crypto/Sha1.zig +36825 30872779 1755651176000000000 bfc45b688f4f79b09cd3fa2ec3ce7a9e 1 std/crypto/sha2.zig +35726 30872780 1755651176000000000 74ba21545a132750f9a4eef5a37da502 1 std/crypto/sha3.zig +2756 30872742 1755651176000000000 3f1b15f01d5b6045525b1b5b73081e67 1 std/crypto/hash_composition.zig +3703 30872743 1755651176000000000 09d36564cbdc5d24ea6fa90e4b7dd6e5 1 std/crypto/hkdf.zig +20494 30872741 1755651176000000000 c857473fa22ec9e817a3c52e298e2eec 1 std/crypto/ghash_polyval.zig +7259 30872776 1755651176000000000 1b5aed273103196d0bdc885bc2b6ec2c 1 std/crypto/poly1305.zig +28906 30872715 1755651176000000000 da61f4b2f151f214129e329fd7af44dc 1 std/crypto/argon2.zig +37669 30872717 1755651176000000000 147c9e47e9a5a805c79882ce141f1fad 1 std/crypto/bcrypt.zig +25878 30872778 1755651176000000000 21725e7f671298d416186499754301ea 1 std/crypto/scrypt.zig +8451 30872750 1755651176000000000 e0bc6ddf2119b9cfe2a19626ded9635a 1 std/crypto/pbkdf2.zig +13838 30872775 1755651176000000000 7867fa74be498feed958e4107163a822 1 std/crypto/phc_encoding.zig +31401 30872695 1755651176000000000 727ee4c7eeb22bc4a90a96437f332593 1 std/crypto/25519/ed25519.zig +395201 30872738 1755651176000000000 4f4d382c531f90a2b4550ea4207a4d70 1 std/crypto/ecdsa.zig +38465 30872740 1755651176000000000 5ec16eac7226fcb11dbfeba8f371ee79 1 std/crypto/ff.zig +165 30872737 1755651176000000000 0ab9a19cc7544d7896d8555b38c3292a 1 std/crypto/codecs.zig +1715 30872739 1755651176000000000 f0b8832dd923baeda761e9855ed9d1ab 1 std/crypto/errors.zig +25575 30872787 1755651176000000000 05de4a472e23ccd4ece1a15329fc0dcb 1 std/crypto/tls.zig +50895 30872705 1755651176000000000 37739975874d2d5867dbd6043614417c 1 std/crypto/Certificate.zig +4783 30872798 1755651176000000000 bcebc8664d30ed61fbe6f4f52df7e6c8 1 std/debug/MemoryAccessor.zig +2664 30872796 1755651176000000000 d18c45d7c3943d59326b6215041f7b9b 1 std/debug/FixedBufferReader.zig +95718 30872795 1755651176000000000 031ee6c2142eb78ee4d751fdef4e8aee 1 std/debug/Dwarf.zig +22200 30872799 1755651176000000000 cadc751a24d7fe6cd0045c67d91fccc4 1 std/debug/Pdb.zig +90918 30872800 1755651176000000000 1af6e89bf60261270c63c0b89b93dbe4 1 std/debug/SelfInfo.zig +2274 30872797 1755651176000000000 a1cbdaf27c5043ba4157f3a1bfcd68fd 1 std/debug/Info.zig +8486 30872790 1755651176000000000 2ff9c5b27e3411a59088d247231e9d0f 1 std/debug/Coverage.zig +3221 30872802 1755651176000000000 ff7b6d80307d98046c1a6b71ce9736cb 1 std/debug/simple_panic.zig +2349 30872801 1755651176000000000 58f6d8954e49f4e277db7b9bad6e1f3c 1 std/debug/no_panic.zig +3939 30872811 1755651176000000000 5ee5df976eaaf300e36cd234fc3f2f43 1 std/dwarf/TAG.zig +7632 30872805 1755651176000000000 101aeaf3e9df594bf04093c15135dc96 1 std/dwarf/AT.zig +5693 30872810 1755651176000000000 01d731f8d28ba8382ff3c5885d5e0c75 1 std/dwarf/OP.zig +1963 30872809 1755651176000000000 055280c08a34f56d3d4ea7d69cf3fca3 1 std/dwarf/LANG.zig +1399 30872808 1755651176000000000 40a7d4ac60d12c6e9ca294acaed35474 1 std/dwarf/FORM.zig +1479 30872806 1755651176000000000 8bd901aaa561652b86f99819d0da7a57 1 std/dwarf/ATE.zig +643 30872807 1755651176000000000 6f6a9e4e1602df062ad02179710971c4 1 std/dwarf/EH.zig +94944 30872817 1755651176000000000 f351cb76a2427938af1d074abce787ce 1 std/fmt/float.zig +13189 30872828 1755651176000000000 8fcd1365fb1fe2c743d223fc34880b6a 1 std/fmt/parse_float.zig +2845 30872831 1755651176000000000 4f058fd80be3876870bc26a123c9de42 1 std/fs/AtomicFile.zig +114999 30872832 1755651176000000000 a44f3eadd8cf27aad7b7c047f184c8e7 1 std/fs/Dir.zig +86478 30872833 1755651176000000000 995d0bf84e899044cc3510a9ca641329 1 std/fs/File.zig +78108 30872835 1755651176000000000 be1cf725a1de08084d5bf813f6758d74 1 std/fs/path.zig +1888 30872837 1755651176000000000 2c143a188f1f9a5e0b6cf6eb3a2a3825 1 std/fs/wasi.zig +2665 30872834 1755651176000000000 a74f4aed0521f238f302bbce59933ebd 1 std/fs/get_app_data_dir.zig +0 30872836 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/fs/test.zig +2797 30872841 1755651176000000000 e2d2903d78455f002bdf1543be5bd9b3 1 std/hash/Adler32.zig +14624 30872842 1755651176000000000 5d40bb3c14d452873d2170a0dc501e12 1 std/hash/auto_hash.zig +19972 30872848 1755651176000000000 c36dede4b91e35db37ea45c66dbe6fe9 1 std/hash/crc.zig +1890 30872849 1755651176000000000 8022a7844b1545ef9cc7889a3a71944a 1 std/hash/fnv.zig +9977 30872850 1755651176000000000 26add2cb2571b835338f163c8ca63459 1 std/hash/murmur.zig +12412 30872844 1755651176000000000 cd681dc3507b42839b769eae04b1dc3b 1 std/hash/cityhash.zig +8367 30872852 1755651176000000000 4744eb583f951c0ddcee1cf3bdde33fb 1 std/hash/wyhash.zig +41799 30872853 1755651176000000000 ee3e90d0630039df9f6254b022ce80e1 1 std/hash/xxhash.zig +13560 30872862 1755651176000000000 12f037849d64048bd40c550289bf0826 1 std/heap/arena_allocator.zig +7465 30872859 1755651176000000000 c45d8aa65e37758c03dbedc65850dbf5 1 std/heap/SmpAllocator.zig +7575 30872857 1755651176000000000 b8819311409154f2ecf659e0c1e915b6 1 std/heap/FixedBufferAllocator.zig +8217 30872858 1755651176000000000 fb438f5e75bc8857d9d1a5b0e9421e85 1 std/heap/PageAllocator.zig +7469 30872865 1755651176000000000 d0066bdd4d2784177387f85d9c416259 1 std/heap/sbrk_allocator.zig +1681 30872860 1755651176000000000 720fc81adedeb4b35463081496f20d4a 1 std/heap/ThreadSafeAllocator.zig +10472 30872861 1755651176000000000 21ee044c07f5991f129755da06deea5a 1 std/heap/WasmAllocator.zig +59918 30872863 1755651176000000000 552ab3f08dc9b1a495663dc5b84ab562 1 std/heap/debug_allocator.zig +8049 30872864 1755651176000000000 cd6c38f86fa0a1bd7ddaa85a0e7f94f7 1 std/heap/memory_pool.zig +70675 30872869 1755651176000000000 dbf2b76bc62a45f82da46916ded41556 1 std/http/Client.zig +31360 30872872 1755651176000000000 abd6ae4080522f73e4745e5efce346dc 1 std/http/Server.zig +13015 30872870 1755651176000000000 4c7e2ad894ad12f141066550c9bb326a 1 std/http/HeadParser.zig +3791 30872868 1755651176000000000 61420280e3c9986a74a687031fdcf831 1 std/http/ChunkParser.zig +3108 30872871 1755651176000000000 149ac2b5413f4e7bdf793b3740a63558 1 std/http/HeaderIterator.zig +0 30872873 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/http/test.zig +7996 30872879 1755651176000000000 8b3aa35651f2969c3a859a3fab94f443 1 std/json/dynamic.zig +3272 30872881 1755651176000000000 39fdbe23f321a0cb11a35e428810a09e 1 std/json/hashmap.zig +72868 30872877 1755651176000000000 ae7b2e59c7744ce34ba98c07df5ef06b 1 std/json/Scanner.zig +33828 30872884 1755651176000000000 bb79d803b31bd0bc320ba90aa1d2b0dd 1 std/json/static.zig +37319 30872878 1755651176000000000 48c6d66b659b03b4e105add369592eda 1 std/json/Stringify.zig +0 30872886 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/json/test.zig +0 30872876 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/json/JSONTestSuite_test.zig +12048 30872931 1755651176000000000 423025cbe9a3339e236aaf0fc007496c 1 std/math/float.zig +1681 30872939 1755651176000000000 23aba00e34aa5a807ee8d4bddf2738c5 1 std/math/isnan.zig +7877 30872932 1755651176000000000 21099ae36d31e459824cfc3757a834f2 1 std/math/frexp.zig +4458 30872949 1755651176000000000 78dbab36632b04ee9c8bc0e72a713100 1 std/math/modf.zig +1136 30872927 1755651176000000000 9f0946a16071ec7d7cb9f45c227c22f1 1 std/math/copysign.zig +1083 30872937 1755651176000000000 eb357e7577b828d5fc2ce3b4118459f2 1 std/math/isfinite.zig +1775 30872938 1755651176000000000 44fb86a5536455ca3877bb415347c6ac 1 std/math/isinf.zig +1456 30872941 1755651176000000000 a37461dca6f9345d8f8a2729c13b9ff6 1 std/math/iszero.zig +1837 30872940 1755651176000000000 cb4e66e7b3adbf190150294715c788b0 1 std/math/isnormal.zig +19209 30872950 1755651176000000000 000ec81e9c79a332fb482883ab800777 1 std/math/nextafter.zig +1557 30872954 1755651176000000000 3157574850d20851e8580a398e6895a9 1 std/math/signbit.zig +503 30872953 1755651176000000000 66d1263715127908b281862dba5dc24b 1 std/math/scalbn.zig +6839 30872943 1755651176000000000 65cf74d2abee4d99cea2993060dc9cc0 1 std/math/ldexp.zig +9113 30872951 1755651176000000000 2a24fb6143c914862a5d74c95a9f8b13 1 std/math/pow.zig +7643 30872952 1755651176000000000 5c50833e1a201a5be1f48de7ea538f0d 1 std/math/powi.zig +2837 30872956 1755651176000000000 50e9a695059ca6bb04cd979304e4c09b 1 std/math/sqrt.zig +4812 30872903 1755651176000000000 6f62d1f1ae7bff93c034f6f664aeaa12 1 std/math/cbrt.zig +5378 30872892 1755651176000000000 25b4039f6f32ddc437baa4061a3f8c3d 1 std/math/acos.zig +5337 30872894 1755651176000000000 eb35acdb17b747cc2f790e4ff8666d54 1 std/math/asin.zig +7275 30872896 1755651176000000000 5d8af88aea5f35ce7e37d0f0af8a4baf 1 std/math/atan.zig +10553 30872897 1755651176000000000 0cafcb907ba579b6b64631165a647329 1 std/math/atan2.zig +4748 30872935 1755651176000000000 910e3c3ba1e7626618c73be7f12f9319 1 std/math/hypot.zig +11499 30872929 1755651176000000000 1ddb2b66fbdf7acb2a4ad484203ae340 1 std/math/expm1.zig +5519 30872936 1755651176000000000 eacf48263508740f77738f675caef7a6 1 std/math/ilogb.zig +2531 30872944 1755651176000000000 b3b40fd4682f372913e09bc18ca3fcd6 1 std/math/log.zig +1919 30872947 1755651176000000000 a350e2bd40b9fc740607c3d658668abb 1 std/math/log2.zig +5553 30872945 1755651176000000000 e10fe90c6d01abfe27b7f2ee6e929a68 1 std/math/log10.zig +4219 30872948 1755651176000000000 88ffa0f96518ccc1715935c0618e543e 1 std/math/log_int.zig +8872 30872946 1755651176000000000 754de08c8dc06a6115beb96e5a991ad7 1 std/math/log1p.zig +4299 30872895 1755651176000000000 9d6c681faf8421823919e5bf347bf740 1 std/math/asinh.zig +2756 30872893 1755651176000000000 349667a0bb1e62bdc0383bce5747190c 1 std/math/acosh.zig +3399 30872898 1755651176000000000 7b22337c4a4df112f2c4be431b076007 1 std/math/atanh.zig +4294 30872955 1755651176000000000 42ef534228feb279b81e6fa2a5d79333 1 std/math/sinh.zig +4157 30872928 1755651176000000000 1dcc281bf0ca8a9782e5ae845f7b1fa5 1 std/math/cosh.zig +4581 30872957 1755651176000000000 2b64632014a58c73e7052420b356fcaa 1 std/math/tanh.zig +2024 30872934 1755651176000000000 28fd0ee50d92f0c08fd6aab95d6f15ee 1 std/math/gcd.zig +1194 30872942 1755651176000000000 40b3836f0a2277cb76754547dd483869 1 std/math/lcm.zig +11487 30872933 1755651176000000000 c0bf0098a075fd684bcbeff41e5abbc4 1 std/math/gamma.zig +6563 30872926 1755651176000000000 dccdf309b3630a59978e204ea0cbde99 1 std/math/complex.zig +746 30872902 1755651176000000000 cd57ee7b96c9ee1b66a3e7fc3ef16da9 1 std/math/big.zig +17718 30872960 1755651176000000000 aeefc50be34a4361ff7a2aa85861ab23 1 std/mem/Allocator.zig +6027 30872963 1755651176000000000 a9b245c6e260e2a4606e53d2d51f65c6 1 std/meta/trailer_flags.zig +0 30872967 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/net/test.zig +283817 30873004 1755651176000000000 e22376b03b7f60e971b4376ee895d68b 1 std/os/linux.zig +10460 30873007 1755651176000000000 488b62d22bbe9301ab373d2949f7d23b 1 std/os/plan9.zig +7746 30873045 1755651176000000000 931017d063b5a98aee21c888aac3dc3d 1 std/os/uefi.zig +16108 30873046 1755651176000000000 3cfe5b8a9735273d6782d1c456b08f15 1 std/os/wasi.zig +34093 30872971 1755651176000000000 d0e8187f608f5706844bd3662b1ea1ad 1 std/os/emscripten.zig +207257 30873060 1755651176000000000 773327deeb78ed0db89c9fa256583be1 1 std/os/windows.zig +2097 30872972 1755651176000000000 6b77b7f42ffec7eedf37dfecdfdd7014 1 std/os/freebsd.zig +0 30873065 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/posix/test.zig +72290 30873070 1755651176000000000 e37f5a4f9f40fbfad5a97b8ac9aacaae 1 std/process/Child.zig +51714 30873075 1755651176000000000 eb8790d984ce4a6ddd6376d877c85ff1 1 std/sort/block.zig +10719 30873076 1755651176000000000 112b7c1a501cf9a872fe6b59ffa7df08 1 std/sort/pdq.zig +17117 30873082 1755651176000000000 5e6a75c2975430f5d46623d1537855a5 1 std/tar/Writer.zig +0 30873083 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/tar/test.zig +5694 30873087 1755651176000000000 cd71b2d90772c02d65444191f9fd7d5d 1 std/testing/FailingAllocator.zig +6764 30873090 1755651176000000000 c674a37722ac57c1bfc929140e058755 1 std/time/epoch.zig +7574 30873101 1755651176000000000 d017fea857f95f2c01199efab8dbf965 1 std/valgrind/memcheck.zig +2493 30873100 1755651176000000000 30a771b8491dd283a50c6166babded38 1 std/valgrind/callgrind.zig +1249 30873099 1755651176000000000 6781a2e56089a14f4f2a391169bf7c05 1 std/valgrind/cachegrind.zig +62827 30873145 1755651176000000000 d1f5a0dbf135b754ed6a703e23df50e6 1 std/zig/tokenizer.zig +32614 30873112 1755651176000000000 198542319824c4a3f109c64260324d68 1 std/zig/ErrorBundle.zig +7166 30873116 1755651176000000000 860d7dc4b9813278374fb24397bb0a4d 1 std/zig/Server.zig +1605 30873111 1755651176000000000 7cfa1ea3449449667ebf6c5201f6dbaf 1 std/zig/Client.zig +14323 30873133 1755651176000000000 7e26c1a770304af7ccd5f605ada0a2e5 1 std/zig/string_literal.zig +6720 30873129 1755651176000000000 07baee4aa2d7c097b1307a2cdec422cf 1 std/zig/number_literal.zig +1666 30873132 1755651176000000000 87e0eb501395d68ddce525f8555f960c 1 std/zig/primitives.zig +148759 30873107 1755651176000000000 5f6f4c60784f8ab4107f3383e980dfca 1 std/zig/Ast.zig +568292 30873108 1755651176000000000 cd6d40183f2ae21282fd3d5fbbfc8238 1 std/zig/AstGen.zig +204779 30873118 1755651176000000000 4104285d49190afffd58ec1c3544ed4a 1 std/zig/Zir.zig +9166 30873119 1755651176000000000 6e1c16d90de3a0ffaeaf1d478014a072 1 std/zig/Zoir.zig +36096 30873120 1755651176000000000 a625edc6603167137dcd761c6dc77e82 1 std/zig/ZonGen.zig +58141 30873143 1755651176000000000 816fe631c09ee2b8359e520acee70d8b 1 std/zig/system.zig +21416 30873110 1755651176000000000 d1b3749b34a2551f94643e698928aae0 1 std/zig/BuiltinFn.zig +41574 30873109 1755651176000000000 a042f3e8774e8bd3822b35117bbc3d78 1 std/zig/AstRlAnnotate.zig +36100 30873114 1755651176000000000 62fa4ce130060129db4288d3749f2488 1 std/zig/LibCInstallation.zig +45848 30873117 1755651176000000000 e70747937d94d1333d148947c57547da 1 std/zig/WindowsSdk.zig +9786 30873113 1755651176000000000 280d2bdf0f1a8f96ecaa4af86ba0a60e 1 std/zig/LibCDirs.zig +25071 30873144 1755651176000000000 959e2ad518bd8b10bbd16a31cfe2cf7a 1 std/zig/target.zig +247 30873128 1755651176000000000 4fee6920e55c663811dd32d69b7f2937 1 std/zig/llvm.zig +8713 30873121 1755651176000000000 53cfae8a8276d7204622550f50243f6b 1 std/zig/c_builtins.zig +28363 30873122 1755651176000000000 e2c60f43c6ae6eb4e168dc7fabd2138a 1 std/zig/c_translation.zig +117354 30873150 1755651176000000000 ab567b993b2504504e04ae0815a40fed 1 std/zon/parse.zig +46916 30873151 1755651176000000000 7bf4408cdd1c84975a793e5daefb12a8 1 std/zon/stringify.zig +32288 30873149 1755651176000000000 5eeb9845ed3d086fe03083e2f7b9e446 1 std/zon/Serializer.zig +2159 30873057 1755651176000000000 e912d0164349d3c86eb8b1226a86388f 1 std/os/windows/tls.zig +10957 30453592 1755651171000000000 86adef0c76818174cbce959185f8aa9c 1 compiler_rt/common.zig +7394 30453597 1755651171000000000 4d63e8360c0ca220253582124186fb27 1 compiler_rt/count0bits.zig +1385 30453782 1755651171000000000 929736d7c0636ec88ef908c0b4c15a65 1 compiler_rt/parity.zig +1916 30453786 1755651171000000000 9e893175f43f5d42fd541260ca5386e7 1 compiler_rt/popcount.zig +2762 30453570 1755651171000000000 972f20e5339815a5e21e7b0bc6202353 1 compiler_rt/bitreverse.zig +3260 30453574 1755651171000000000 0ec938dfe8c0a2d466838df303eef58d 1 compiler_rt/bswap.zig +1971 30453583 1755651171000000000 f4b500a005ae4486ff3df7110a9e2523 1 compiler_rt/cmp.zig +4845 30453796 1755651171000000000 8761326b4fa02822928e9a2bf1845ea7 1 compiler_rt/shift.zig +1171 30453768 1755651171000000000 b64a4252e2958ab85e11cf3e72046c01 1 compiler_rt/negXi2.zig +27737 30453735 1755651171000000000 0dc9529debd21eeb1908af208d1f2e9e 1 compiler_rt/int.zig +3064 30453747 1755651171000000000 c4a4e1485c87b5438551c701951d1b90 1 compiler_rt/mulXi3.zig +1113 30453615 1755651171000000000 8a9686a30bb60ded94cfbc7b0c188192 1 compiler_rt/divti3.zig +770 30453838 1755651171000000000 6c53a5d81aa4786ec59e8bd320265f7d 1 compiler_rt/udivti3.zig +1380 30453745 1755651171000000000 e03900eae21e2b320a2e62fc03e5074f 1 compiler_rt/modti3.zig +846 30453839 1755651171000000000 afc9b4b801628d3040423cf318155f2f 1 compiler_rt/umodti3.zig +671 30453546 1755651171000000000 a6cfe83f9d8eb6e22dee6dc0ccee3367 1 compiler_rt/absv.zig +311 30453549 1755651171000000000 9a044dbb5695c2eea3bda231bfeda676 1 compiler_rt/absvsi2.zig +311 30453547 1755651171000000000 0c0607d153f93dee28f63beeb116cbc1 1 compiler_rt/absvdi2.zig +314 30453551 1755651171000000000 d826815938d3df68320935b9968c29db 1 compiler_rt/absvti2.zig +1303 30453776 1755651171000000000 50df1f7234ac1a8d4f2093362c90b93e 1 compiler_rt/negv.zig +874 30453563 1755651171000000000 02f065d511a9d47115363632c4dbdeda 1 compiler_rt/addvsi3.zig +860 30453812 1755651171000000000 28391dec7d271786c0a340a5d698d3ba 1 compiler_rt/subvsi3.zig +932 30453811 1755651171000000000 c20c4bc9d2bbfbdf0b900e7d7218879e 1 compiler_rt/subvdi3.zig +902 30453765 1755651171000000000 45f09fd05e65513dfd810114991820f4 1 compiler_rt/mulvsi3.zig +1752 30453557 1755651171000000000 1e067dd191e3750e2eebc9a9891bfe8d 1 compiler_rt/addo.zig +1742 30453805 1755651171000000000 a6e4dadcd9f88d3c47b48642ea0242d5 1 compiler_rt/subo.zig +2643 30453757 1755651171000000000 7437cfee5e2a6d47f221d2f163a92242 1 compiler_rt/mulo.zig +6009 30453625 1755651171000000000 013ab2758ced7bbc2fc6988565eeb6c7 1 compiler_rt/extendf.zig +920 30453628 1755651171000000000 f422913a85e1e91ef2039ab58547c0fc 1 compiler_rt/extendhfsf2.zig +373 30453627 1755651171000000000 ed651ccba735e247ddf2016832e06f1c 1 compiler_rt/extendhfdf2.zig +376 30453629 1755651171000000000 0c74a49a05b638424700546195a373ee 1 compiler_rt/extendhftf2.zig +373 30453630 1755651171000000000 23b1c51db225608b57400e8118ffa9ec 1 compiler_rt/extendhfxf2.zig +644 30453631 1755651171000000000 5bd066e81499f866ae53e4e86d5e5c07 1 compiler_rt/extendsfdf2.zig +781 30453632 1755651171000000000 e52fbda9a494609786f8fcb77d847604 1 compiler_rt/extendsftf2.zig +360 30453633 1755651171000000000 e942ea8b9c6b17baaeea42c96e99effa 1 compiler_rt/extendsfxf2.zig +781 30453623 1755651171000000000 87ecde8777ad8ff8ed4dbc9c650f0270 1 compiler_rt/extenddftf2.zig +364 30453624 1755651171000000000 9f715eab9e2e310deef980aead0e7500 1 compiler_rt/extenddfxf2.zig +1604 30453634 1755651171000000000 c4862b4d4cfcee360ed2c56a114cbf4a 1 compiler_rt/extendxftf2.zig +8121 30453819 1755651171000000000 20afe15564559323e44421df48412060 1 compiler_rt/truncf.zig +881 30453821 1755651171000000000 47d13f34934c26c69eb88e81670d8f85 1 compiler_rt/truncsfhf2.zig +616 30453817 1755651171000000000 0641d56997ae4f4b5207adc68dc72f3b 1 compiler_rt/truncdfhf2.zig +600 30453818 1755651171000000000 02da0cc6b32c97637c74cbb10ccb54db 1 compiler_rt/truncdfsf2.zig +356 30453827 1755651171000000000 3bf820f222640094f3a72a66ffe8198e 1 compiler_rt/truncxfhf2.zig +333 30453828 1755651171000000000 66119941d376ee0a437b06bd3072d524 1 compiler_rt/truncxfsf2.zig +333 30453826 1755651171000000000 c13541abc36c28230d412dc5252b693e 1 compiler_rt/truncxfdf2.zig +359 30453823 1755651171000000000 d8f660a94187293e5a911454282b4029 1 compiler_rt/trunctfhf2.zig +731 30453824 1755651171000000000 13584c74605e851e6d831a9e0fce9886 1 compiler_rt/trunctfsf2.zig +731 30453822 1755651171000000000 457c0f6c909aa10450fd884ff88287f9 1 compiler_rt/trunctfdf2.zig +2852 30453825 1755651171000000000 d8494bd8878af1312bf45635b710a4b1 1 compiler_rt/trunctfxf2.zig +4079 30453736 1755651171000000000 5a505058b770b465ce081eb6a57e7a43 1 compiler_rt/int_from_float.zig +341 30453645 1755651171000000000 287cd5239eed800fcc228dfe9a2734d4 1 compiler_rt/fixhfsi.zig +341 30453643 1755651171000000000 8acd6b1ce769a390c40385d65d7fad51 1 compiler_rt/fixhfdi.zig +713 30453646 1755651171000000000 f02a5506718df6aec134d680607bf58f 1 compiler_rt/fixhfti.zig +564 30453644 1755651171000000000 9ae4ea7e25821706c5468c7c2c445448 1 compiler_rt/fixhfei.zig +616 30453650 1755651171000000000 703dfbffebdc9fddd06b6c8d668e5e6a 1 compiler_rt/fixsfsi.zig +701 30453648 1755651171000000000 88e7049e069292d16c1ff8720dff21c5 1 compiler_rt/fixsfdi.zig +713 30453651 1755651171000000000 27665f157ae97b6a905d2c3b3d14b55c 1 compiler_rt/fixsfti.zig +564 30453649 1755651171000000000 9296a734389623faf0ccbbce95248896 1 compiler_rt/fixsfei.zig +616 30453641 1755651171000000000 d6c6cfff39408568470a4ce56f20701b 1 compiler_rt/fixdfsi.zig +701 30453639 1755651171000000000 d37fe214a882924d291912211617b7e0 1 compiler_rt/fixdfdi.zig +713 30453642 1755651171000000000 acf45affbae83f950121a0e78d1d9d43 1 compiler_rt/fixdfti.zig +564 30453640 1755651171000000000 475c0ed3637871aa4bdba39fb7ac07c7 1 compiler_rt/fixdfei.zig +736 30453654 1755651171000000000 9e04b0c9b7e24d0a417e6418967a82bf 1 compiler_rt/fixtfsi.zig +736 30453652 1755651171000000000 54e8e270c03030539e0b628265ebe138 1 compiler_rt/fixtfdi.zig +867 30453655 1755651171000000000 159fff04699a850f0877d0d860fc5c23 1 compiler_rt/fixtfti.zig +565 30453653 1755651171000000000 f3202275d298913c25f0f8dfd3242be8 1 compiler_rt/fixtfei.zig +341 30453678 1755651171000000000 c5d9b1d68c225613e28b45cb4cec11bc 1 compiler_rt/fixxfsi.zig +341 30453676 1755651171000000000 87e625ba575a65977f04b534e5fc766d 1 compiler_rt/fixxfdi.zig +713 30453679 1755651171000000000 66c8929d08870c9d48875898ac51d464 1 compiler_rt/fixxfti.zig +564 30453677 1755651171000000000 4e4a4e4ac45142bc6c99b298914cc0e4 1 compiler_rt/fixxfei.zig +350 30453662 1755651171000000000 ba04537148169a4eda9cc74755e9d2b2 1 compiler_rt/fixunshfsi.zig +350 30453660 1755651171000000000 3f19d12e7ff9198e211b2298b6bd5efc 1 compiler_rt/fixunshfdi.zig +731 30453663 1755651171000000000 3dc5d5bb0159c254a4dc44defc534d08 1 compiler_rt/fixunshfti.zig +575 30453661 1755651171000000000 7747207f7d598d23ace14265322b94f9 1 compiler_rt/fixunshfei.zig +628 30453666 1755651171000000000 57232664ed8c180d0347c1a5b7fb707c 1 compiler_rt/fixunssfsi.zig +713 30453664 1755651171000000000 7ccb1263e66738a414ca7a9521baf546 1 compiler_rt/fixunssfdi.zig +731 30453667 1755651171000000000 46aa3b64c89e9e65d2ce377e2fda821b 1 compiler_rt/fixunssfti.zig +575 30453665 1755651171000000000 38283592b0bac48f035456b4aa28b777 1 compiler_rt/fixunssfei.zig +628 30453658 1755651171000000000 18ae349f0a3aee101c1024994601c18b 1 compiler_rt/fixunsdfsi.zig +713 30453656 1755651171000000000 15697c6d14ff144c8a8fbbbfc25b56ac 1 compiler_rt/fixunsdfdi.zig +731 30453659 1755651171000000000 ccb4ab408cf9f6b931333d2e2281d138 1 compiler_rt/fixunsdfti.zig +575 30453657 1755651171000000000 0a1cb46013571dde4b1bb4448121ba85 1 compiler_rt/fixunsdfei.zig +754 30453670 1755651171000000000 717dbc2cecb0b7f0417ed241602b0235 1 compiler_rt/fixunstfsi.zig +754 30453668 1755651171000000000 e0117ad5626119b0e5de39f22424c41d 1 compiler_rt/fixunstfdi.zig +891 30453671 1755651171000000000 c4d7fd8a337264713824559441d264bf 1 compiler_rt/fixunstfti.zig +576 30453669 1755651171000000000 cf926c64f6225389c139b32f9fce285b 1 compiler_rt/fixunstfei.zig +350 30453674 1755651171000000000 08e70a885b4a61a0e97871cbe7781a36 1 compiler_rt/fixunsxfsi.zig +350 30453672 1755651171000000000 9df747511c3f54bb2bb63cfce791b071 1 compiler_rt/fixunsxfdi.zig +731 30453675 1755651171000000000 89cbbf3a56b9124c65e08a4c565b4754 1 compiler_rt/fixunsxfti.zig +575 30453673 1755651171000000000 9834bffa03e61a47b5f6368b93c2b278 1 compiler_rt/fixunsxfei.zig +4111 30453680 1755651171000000000 0731ddef2609f045793d30b988a64339 1 compiler_rt/float_from_int.zig +347 30453693 1755651171000000000 46437c47ae3550f8dfea8ffe706e5cd5 1 compiler_rt/floatsihf.zig +619 30453694 1755651171000000000 d0709844134d344f649fe5de487e8d43 1 compiler_rt/floatsisf.zig +619 30453692 1755651171000000000 eb5e4bb9bdf0af3d17044dbab1c19f6a 1 compiler_rt/floatsidf.zig +748 30453695 1755651171000000000 6acf05da538e6fe3f7a19cdbf9326f26 1 compiler_rt/floatsitf.zig +347 30453696 1755651171000000000 f364c5d870c6ecf44a5a38ec49aaabe6 1 compiler_rt/floatsixf.zig +347 30453683 1755651171000000000 2b30fc40286f695404a52daa3020e46d 1 compiler_rt/floatdihf.zig +704 30453684 1755651171000000000 be61dfcf3ef7f7cb87fdb442491846aa 1 compiler_rt/floatdisf.zig +704 30453682 1755651171000000000 cf1600427d0617517935eed129801a82 1 compiler_rt/floatdidf.zig +748 30453685 1755651171000000000 8811790f2053d4000e252e7019110198 1 compiler_rt/floatditf.zig +347 30453686 1755651171000000000 eb71124e4f62f32423d28d002b3dc4fa 1 compiler_rt/floatdixf.zig +712 30453698 1755651171000000000 b0cac521d295bf19d575119ed72c24e5 1 compiler_rt/floattihf.zig +712 30453699 1755651171000000000 72a9275278530696bb432b1a92758b42 1 compiler_rt/floattisf.zig +712 30453697 1755651171000000000 5dde3f565fe32da11fe052594ee197ee 1 compiler_rt/floattidf.zig +872 30453700 1755651171000000000 1ae512923174c3e6fa1ba8d65abf6c4f 1 compiler_rt/floattitf.zig +712 30453701 1755651171000000000 e7550374f92dcebdb11cdef092ffb719 1 compiler_rt/floattixf.zig +569 30453688 1755651171000000000 6cacec7f1baf3962451f632af2333d15 1 compiler_rt/floateihf.zig +569 30453689 1755651171000000000 00ff12ec132a6de0ddba566b32f0ce56 1 compiler_rt/floateisf.zig +569 30453687 1755651171000000000 39f48db5b22c07b8e1ede4f6ad7dfeab 1 compiler_rt/floateidf.zig +571 30453690 1755651171000000000 558b7faae150629fc02a56c6f795823a 1 compiler_rt/floateitf.zig +569 30453691 1755651171000000000 3219adecb483c360d12a9f49677362a1 1 compiler_rt/floateixf.zig +357 30453713 1755651171000000000 00a0cc52e80a5d8768c00c875a2c38fb 1 compiler_rt/floatunsihf.zig +628 30453714 1755651171000000000 7758994bb35f2593765f89bd87e8f055 1 compiler_rt/floatunsisf.zig +628 30453712 1755651171000000000 20cada91ea193709f7cdb30fc7e305ed 1 compiler_rt/floatunsidf.zig +761 30453715 1755651171000000000 c3fa8cad530a016146e93e31095198f1 1 compiler_rt/floatunsitf.zig +353 30453716 1755651171000000000 182b577da08432924ceb5ee9bd0f2d88 1 compiler_rt/floatunsixf.zig +353 30453703 1755651171000000000 0e605deb96515a6775375e7e47db3215 1 compiler_rt/floatundihf.zig +713 30453704 1755651171000000000 e063c2d245ac649a28457da928aa6736 1 compiler_rt/floatundisf.zig +713 30453702 1755651171000000000 904d6181c4aecb7405c8e4edc325cc82 1 compiler_rt/floatundidf.zig +761 30453705 1755651171000000000 3e7630bf1c35c7de0a6c3ffd69b2673d 1 compiler_rt/floatunditf.zig +353 30453706 1755651171000000000 1799170b2737a9e2a28a9808dd0e051a 1 compiler_rt/floatundixf.zig +724 30453718 1755651171000000000 2df4b1f0edb48dd79ccda95408b91311 1 compiler_rt/floatuntihf.zig +724 30453719 1755651171000000000 b990cd4c97634e1f3f4261191531b301 1 compiler_rt/floatuntisf.zig +724 30453717 1755651171000000000 f7a4d0e5f29f41cadf67ddd6f68c29df 1 compiler_rt/floatuntidf.zig +888 30453720 1755651171000000000 db22f0e3984446069375f2cae2a9aca7 1 compiler_rt/floatuntitf.zig +724 30453721 1755651171000000000 bc561095bbe802fe90354de9e376c896 1 compiler_rt/floatuntixf.zig +577 30453708 1755651171000000000 588ff37c9a79b9efee8d8ab27866c544 1 compiler_rt/floatuneihf.zig +577 30453709 1755651171000000000 83c4fadef25daa676e2b17560f7b5b9f 1 compiler_rt/floatuneisf.zig +577 30453707 1755651171000000000 9ab7e41efc150cfc29183a68faa98145 1 compiler_rt/floatuneidf.zig +579 30453710 1755651171000000000 c63445cffc5e5f137b97a50c2bb9ef88 1 compiler_rt/floatuneitf.zig +577 30453711 1755651171000000000 36f8e586a4b887c1b1b1537a5a28ae74 1 compiler_rt/floatuneixf.zig +4582 30453594 1755651171000000000 e5686ffdd46c3d4d1c4485eb9eef4475 1 compiler_rt/comparef.zig +2267 30453586 1755651171000000000 f21670514136306b5c179b4ee414d001 1 compiler_rt/cmphf2.zig +3161 30453587 1755651171000000000 2bb653afb77db3d5045cbb9a02ba3d6f 1 compiler_rt/cmpsf2.zig +3161 30453584 1755651171000000000 5ff781811d3f999df43ff5a63d8e0b2f 1 compiler_rt/cmpdf2.zig +4739 30453589 1755651171000000000 13d86b526247d5092d8aacf0b67bdcf1 1 compiler_rt/cmptf2.zig +2248 30453591 1755651171000000000 c47b1b506563f516dd85df37da1ca80d 1 compiler_rt/cmpxf2.zig +341 30453841 1755651171000000000 2ed4e26e2ea3869e810a2840aa44890c 1 compiler_rt/unordhf2.zig +634 30453842 1755651171000000000 ab97f41ff7e85578831672d29873bb7c 1 compiler_rt/unordsf2.zig +634 30453840 1755651171000000000 8fcd7331877db9156a9489d458816d1a 1 compiler_rt/unorddf2.zig +341 30453844 1755651171000000000 c6765ab1f830c13ccdf800de46e1d4c3 1 compiler_rt/unordxf2.zig +656 30453843 1755651171000000000 2a6c721c57e5b4fc4d03f1414d3bfa0c 1 compiler_rt/unordtf2.zig +960 30453730 1755651171000000000 44f070ee85c4299b7b861a8753e20983 1 compiler_rt/gehf2.zig +1567 30453731 1755651171000000000 d83ee65d70e22642ca348d28af9e8b1d 1 compiler_rt/gesf2.zig +1567 30453729 1755651171000000000 f7babfa2824209ae274b4f7f048979ff 1 compiler_rt/gedf2.zig +531 30453733 1755651171000000000 825137d9239fe8820abd067fa358ff6c 1 compiler_rt/gexf2.zig +1375 30453732 1755651171000000000 baf5038daac3654c38c49861c12af8f8 1 compiler_rt/getf2.zig +6348 30453554 1755651171000000000 9d6fb22665d5ae546ff48bce14f4265e 1 compiler_rt/addf3.zig +319 30453556 1755651171000000000 522a47928eb441889cd2d8293ee58f93 1 compiler_rt/addhf3.zig +594 30453561 1755651171000000000 98c81cd3c52b093c912ead4cc50ee463 1 compiler_rt/addsf3.zig +594 30453553 1755651171000000000 2fd1f70cd54ab97c68acda6ccd8698ca 1 compiler_rt/adddf3.zig +725 30453562 1755651171000000000 37b20d2aff3bdc9e0e864c4dd0285ce2 1 compiler_rt/addtf3.zig +323 30453564 1755651171000000000 3de55ee7141ae65ffda2d57872f49058 1 compiler_rt/addxf3.zig +406 30453804 1755651171000000000 974a08d8b377c7154ee50e645c4aa5f1 1 compiler_rt/subhf3.zig +735 30453809 1755651171000000000 c6bad960b48197993e5154abc0dad73e 1 compiler_rt/subsf3.zig +735 30453803 1755651171000000000 932c462bb7a1ebd827a8601a1a673d8f 1 compiler_rt/subdf3.zig +884 30453810 1755651171000000000 68c91ec93f437c6420395ef3a23d922a 1 compiler_rt/subtf3.zig +399 30453813 1755651171000000000 78f78d004278fcfad7128556fb169afb 1 compiler_rt/subxf3.zig +8398 30453753 1755651171000000000 2e26880d97fb35e9bd4cc1993465b0cb 1 compiler_rt/mulf3.zig +323 30453756 1755651171000000000 da7bee33a5dc12783e6265082c6339c5 1 compiler_rt/mulhf3.zig +598 30453762 1755651171000000000 fee4abf27cb742c17acbc579ce4181c9 1 compiler_rt/mulsf3.zig +598 30453752 1755651171000000000 a3c5a4d1d76996c6a8862bc7edee60e9 1 compiler_rt/muldf3.zig +737 30453764 1755651171000000000 05e662af04b7c0553caed681261620bc 1 compiler_rt/multf3.zig +323 30453767 1755651171000000000 20b9631d337fdb552805ef976ffdc51e 1 compiler_rt/mulxf3.zig +344 30453607 1755651171000000000 c658197861ba0fe65f6c4da66921da72 1 compiler_rt/divhf3.zig +8574 30453610 1755651171000000000 57deaddafd7a8db15df6bbeca7d2d850 1 compiler_rt/divsf3.zig +9366 30453604 1755651171000000000 3f0a4a77ece42e5c0a92b591f8219814 1 compiler_rt/divdf3.zig +8669 30453618 1755651171000000000 9c07b341767fa995dedd55167cc3e222 1 compiler_rt/divxf3.zig +9925 30453613 1755651171000000000 28531f064bbb7a862fb99a6dd7127380 1 compiler_rt/divtf3.zig +265 30453771 1755651171000000000 ff779eb9e3281d0f8136f5b61b8e6515 1 compiler_rt/neghf2.zig +530 30453772 1755651171000000000 e570a93d326095aad9dfa0af89f5e12d 1 compiler_rt/negsf2.zig +530 30453769 1755651171000000000 239867284b810ba2b4b7139ff96a22c0 1 compiler_rt/negdf2.zig +409 30453774 1755651171000000000 68cda8c4538ebcdadbb16771ebed9613 1 compiler_rt/negtf2.zig +265 30453780 1755651171000000000 e6f608fbc42d09928e6d353d3e4ae05e 1 compiler_rt/negxf2.zig +2072 30453790 1755651171000000000 73e4d664a217ad2fe999244a64307073 1 compiler_rt/powiXf2.zig +2275 30453749 1755651171000000000 31c049fe940585ddd225b0c4f49de0ab 1 compiler_rt/mulc3.zig +425 30453755 1755651171000000000 9057d1c7c2b8e98f5c09215baab464e3 1 compiler_rt/mulhc3.zig +425 30453761 1755651171000000000 46a186b40dbf8b1a78fd7664e825477d 1 compiler_rt/mulsc3.zig +425 30453751 1755651171000000000 ae9761607983803a875dc03e2bcf93b2 1 compiler_rt/muldc3.zig +425 30453766 1755651171000000000 241de1bd5170ea794fe6a65e3ca1c4b6 1 compiler_rt/mulxc3.zig +581 30453763 1755651171000000000 8ff2e7539ccf94a8ea6a7d0fb870f8ac 1 compiler_rt/multc3.zig +2280 30453601 1755651171000000000 9e6aaeda713b6cd43eca1180606dc9f8 1 compiler_rt/divc3.zig +434 30453606 1755651171000000000 99234ee0594362f25d0034479872a24d 1 compiler_rt/divhc3.zig +434 30453609 1755651171000000000 19324ba1cf08e607b54db47c52783c60 1 compiler_rt/divsc3.zig +434 30453603 1755651171000000000 a5c0557ad47ea2daea69c331226b6bb8 1 compiler_rt/divdc3.zig +434 30453617 1755651171000000000 0ba3ba63c22ba9609413264f8e142986 1 compiler_rt/divxc3.zig +590 30453612 1755651171000000000 b09a8555aa3985adc8de9d9dbbaeaab0 1 compiler_rt/divtc3.zig +5139 30453578 1755651171000000000 3377d5bdbc89549229fcc2bdded00385 1 compiler_rt/ceil.zig +5691 30453596 1755651171000000000 4e53be9b20a311a96eb63bafe37225d8 1 compiler_rt/cos.zig +11677 30453621 1755651171000000000 c4da63d897aa5d3cef3988faddf0733e 1 compiler_rt/exp.zig +20924 30453622 1755651171000000000 8444963967b3c617eebec50d6b319393 1 compiler_rt/exp2.zig +1913 30453635 1755651171000000000 d639f3899db4d8abd8eb6de3c9db692b 1 compiler_rt/fabs.zig +6290 30453722 1755651171000000000 f78026c2945813b1868334b3f8d6b1ea 1 compiler_rt/floor.zig +11575 30453723 1755651171000000000 acbf337ea57443d50122200a70477bd3 1 compiler_rt/fma.zig +2867 30453724 1755651171000000000 53832890224a36ee564f78656fad8acb 1 compiler_rt/fmax.zig +2869 30453725 1755651171000000000 16d3b98ffc9e7622d085e6ec340bef8b 1 compiler_rt/fmin.zig +12218 30453726 1755651171000000000 6096cb43202506289c56b29536a3c88b 1 compiler_rt/fmod.zig +8304 30453738 1755651171000000000 4a2ae209edc8dde5555884addb0c3270 1 compiler_rt/log.zig +9499 30453739 1755651171000000000 192e6cb083dc2203281a462a1129dc3e 1 compiler_rt/log10.zig +8927 30453740 1755651171000000000 788bd8e755b980f4765163024433bbef 1 compiler_rt/log2.zig +5307 30453795 1755651171000000000 64efbcc2e1df4cd325e1f4f05a9b43b6 1 compiler_rt/round.zig +6783 30453798 1755651171000000000 46b58824ce56ea0819341b2de4e4ce88 1 compiler_rt/sin.zig +8779 30453799 1755651171000000000 3372bf45f142a4244845a7d576e8a739 1 compiler_rt/sincos.zig +8445 30453800 1755651171000000000 834a20db0b154a40177782adbf1d021c 1 compiler_rt/sqrt.zig +6175 30453814 1755651171000000000 38bdd1e5397ae3ef6734324ee90f2cd8 1 compiler_rt/tan.zig +4509 30453816 1755651171000000000 452e79786bcf746a89464e0b468a1772 1 compiler_rt/trunc.zig +2047 30453608 1755651171000000000 1b5ba254fdfc08708a375c730450065e 1 compiler_rt/divmodei4.zig +5345 30453834 1755651171000000000 ce988d5b59fa957acec0cc0f5514f027 1 compiler_rt/udivmodei4.zig +886 30453836 1755651171000000000 3884d7d5d17d10b6c390591f14760c21 1 compiler_rt/udivmodti4.zig +2988 30453781 1755651171000000000 727f94ca1d77099453ad061b28f9f45b 1 compiler_rt/os_version_check.zig +12571 30453620 1755651171000000000 f2228bdf0cb635f1b1b962a3db633e85 1 compiler_rt/emutls.zig +11129 30453565 1755651171000000000 48b4362e028a3e1634d5ca553bd4f739 1 compiler_rt/arm.zig +2563 30453567 1755651171000000000 667b1a412a0d66f8b44b2a8e8e4e16e2 1 compiler_rt/aulldiv.zig +2618 30453568 1755651171000000000 420aa19734f8e183daf736d09d96e8e9 1 compiler_rt/aullrem.zig +7746 30453579 1755651171000000000 65f560b740acc191d870c5c89599c99a 1 compiler_rt/clear_cache.zig +45809 30453734 1755651171000000000 8aceb9f3653d891b582dbd9b55b0d02a 1 compiler_rt/hexagon.zig +26388 30453566 1755651171000000000 2dbf62f073b314f8249867dbbbfb5589 1 compiler_rt/atomics.zig +9539 30453802 1755651171000000000 1d35c260060522cd892607322c1b0e17 1 compiler_rt/stack_probe.zig +79084 30453545 1755651171000000000 bda0e04701fa77ae568c29186ee9ccfb 1 compiler_rt/aarch64_outline_atomics.zig +6452 30453742 1755651171000000000 4cf074ce1df0bab8aba60356cc8ab857 1 compiler_rt/memcpy.zig +876 30453744 1755651171000000000 13a474bc83ea39da1548064a0ec84fe6 1 compiler_rt/memset.zig +7246 30453743 1755651171000000000 ab21f482b4ceecf867dcaf6370424fd5 1 compiler_rt/memmove.zig +931 30453741 1755651171000000000 ab9203076a9f7358651a1ac57a2238e6 1 compiler_rt/memcmp.zig +874 30453569 1755651171000000000 964d18da8969575344227310559069cf 1 compiler_rt/bcmp.zig +4524 30453801 1755651171000000000 3e80fe1b407f6f691b38a2b042fb4b64 1 compiler_rt/ssp.zig +8052 30872536 1755651176000000000 bbc3cbd53ca9eaab481a4b2874506c59 1 std/Build/Cache/Path.zig +2142 30872535 1755651176000000000 fe57a392618de045bf46b476d4e9b36f 1 std/Build/Cache/Directory.zig +37958 30872534 1755651176000000000 09f6c6d5c5a3e85759082f1ad46ebffa 1 std/Build/Cache/DepTokenizer.zig +2901 30872541 1755651176000000000 d277c72d570fa923fd437605bbd83e30 1 std/Build/Step/CheckFile.zig +117426 30872542 1755651176000000000 f327f9fe4a8649cc483e714c56bdafff 1 std/Build/Step/CheckObject.zig +41853 30872544 1755651176000000000 b089407ebc9e35a98f96dcfafbea622a 1 std/Build/Step/ConfigHeader.zig +831 30872545 1755651176000000000 0f223ee68995072c4beb7fd3ae600b02 1 std/Build/Step/Fail.zig +2711 30872546 1755651176000000000 72715636b21818d37288de283148c101 1 std/Build/Step/Fmt.zig +7843 30872547 1755651176000000000 b720790bf6e89535660d8996075ceed1 1 std/Build/Step/InstallArtifact.zig +4431 30872548 1755651176000000000 d1f0707c6afc3c9202b9d6dd0c114338 1 std/Build/Step/InstallDir.zig +1460 30872549 1755651176000000000 0040eb5b0836e8fa2056b8e33d66b4dd 1 std/Build/Step/InstallFile.zig +8154 30872550 1755651176000000000 fdd933a4e6d14f259812199ba337c9f2 1 std/Build/Step/ObjCopy.zig +86953 30872543 1755651176000000000 e814ef2854d0025d3c1a64913f7cbbf2 1 std/Build/Step/Compile.zig +23856 30872551 1755651176000000000 04314b9ec6c4719520c8922f20479b10 1 std/Build/Step/Options.zig +1443 30872552 1755651176000000000 ad5ec7793142fc110b85e04588c7be90 1 std/Build/Step/RemoveDir.zig +73144 30872553 1755651176000000000 defa27d5c5918845503abf3bee647924 1 std/Build/Step/Run.zig +7344 30872554 1755651176000000000 1a07c4e3f9436bca621e0ab521e389b5 1 std/Build/Step/TranslateC.zig +13184 30872556 1755651176000000000 d3b8a19eb1eb2d1fa857b99bfea07950 1 std/Build/Step/WriteFile.zig +4247 30872555 1755651176000000000 78c06c4c05a1846f4e7d6ff9c0da4068 1 std/Build/Step/UpdateSourceFiles.zig +22825 30872559 1755651176000000000 e4bcf69644dd1afc10772570851bf6db 1 std/Build/Watch/FsEvents.zig +1731 30872569 1755651176000000000 daa1d02b14c40a08f9a23bf20fa27ab2 1 std/Io/Reader/Limited.zig +0 30872570 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/Io/Reader/test.zig +2533 30872628 1755651176000000000 e0af5510611c7c2688093972c6ace145 1 std/Thread/Mutex/Recursive.zig +11928 30872662 1755651176000000000 7a1e10e0d0e9210d2757e410d8473def 1 std/compress/flate/Compress.zig +47768 30872663 1755651176000000000 d87a77c2d3a950f7fb4503b2e91beb66 1 std/compress/flate/Decompress.zig +18914 30872664 1755651176000000000 c9cb33e59ca13018183045e0a1d980a9 1 std/compress/flate/HuffmanEncoder.zig +11871 30872674 1755651176000000000 1a80b6a0f5b379bcaa6324ad497a62d9 1 std/compress/lzma/decode.zig +0 30872675 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/compress/lzma/test.zig +3774 30872677 1755651176000000000 ba9dc0a0f8124583244e2f0c677410fc 1 std/compress/lzma/vec2d.zig +4704 30872680 1755651176000000000 34dab553e7d44c4c18351939467c745c 1 std/compress/lzma2/decode.zig +7157 30872684 1755651176000000000 a0e5aefb8ceae6798c4b2fe9540cefee 1 std/compress/xz/block.zig +0 30872685 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/compress/xz/test.zig +78531 30872689 1755651176000000000 d44d8434a6ff685d9cec10bd257151c5 1 std/compress/zstd/Decompress.zig +0 30872782 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/crypto/test.zig +22223 30872709 1755651176000000000 7e23bb5bcd64c4725f7c071dd3496b74 1 std/crypto/aes/aesni.zig +22711 30872710 1755651176000000000 8e77a640bfd456ac5363ff36bd93c4ba 1 std/crypto/aes/armcrypto.zig +33347 30872711 1755651176000000000 7de9cecbcab3c869e16f2fbaf7076a48 1 std/crypto/aes/soft.zig +14574 30872697 1755651176000000000 b552b509d9ec611014aa027c881ac91c 1 std/crypto/25519/field.zig +33703 30872699 1755651176000000000 d4b52682012c0195eb1aa7312d067798 1 std/crypto/25519/scalar.zig +338 30872754 1755651176000000000 433b788abb384ec7e4c3641754e6dde9 1 std/crypto/pcurves/p256/field.zig +7421 30872757 1755651176000000000 00494b8811c2d7df07fff5d27198954c 1 std/crypto/pcurves/p256/scalar.zig +5656 30872772 1755651176000000000 05c95744a349b07172e4c400b1e28cc1 1 std/crypto/pcurves/tests/p256.zig +376 30872760 1755651176000000000 69a49ff5f537dcd2044702ac14b6891c 1 std/crypto/pcurves/p384/field.zig +6669 30872763 1755651176000000000 7aee4435d80a972d5bcff185b164ee8e 1 std/crypto/pcurves/p384/scalar.zig +6707 30872773 1755651176000000000 3f1e1e56980e64672ccd1fba3a631951 1 std/crypto/pcurves/tests/p384.zig +343 30872766 1755651176000000000 738b22249e1d3a4c001765286bc82756 1 std/crypto/pcurves/secp256k1/field.zig +7426 30872767 1755651176000000000 1b99358655e3f9a938c25cb631d52e50 1 std/crypto/pcurves/secp256k1/scalar.zig +6029 30872774 1755651176000000000 4a9ce792ab6709c6ebf9e7dbf5e30590 1 std/crypto/pcurves/tests/secp256k1.zig +11649 30872735 1755651176000000000 884bf9edd77ebad5200670e26c236280 1 std/crypto/codecs/asn1.zig +17997 30872736 1755651176000000000 7ea1a954927b43ca5ab7f95c3becd401 1 std/crypto/codecs/base64_hex_ct.zig +80831 30872786 1755651176000000000 f151081149e53c1078be673dc2116ec2 1 std/crypto/tls/Client.zig +12470 30872704 1755651176000000000 9c92810e5147e8de0f25e1658fa23a75 1 std/crypto/Certificate/Bundle.zig +71838 30872794 1755651176000000000 5c3513456ba79222f02ca36a90963776 1 std/debug/Dwarf/expression.zig +17609 30872792 1755651176000000000 f39611d52911878891dbef3fba794ac1 1 std/debug/Dwarf/abi.zig +10007 30872793 1755651176000000000 46471a00c4eea2acab55cc6337899adc 1 std/debug/Dwarf/call_frame.zig +9426 30872827 1755651176000000000 19fe74e26814be7f5083c3d8b5a0983e 1 std/fmt/parse_float/parse.zig +2950 30872824 1755651176000000000 e2f6cedde735fdaf086b7e0efdb66505 1 std/fmt/parse_float/convert_hex.zig +5401 30872823 1755651176000000000 cbeba905313f9b6c917fb231993989fe 1 std/fmt/parse_float/convert_fast.zig +48543 30872822 1755651176000000000 82c419f8469193cf67852d0ac4c65f55 1 std/fmt/parse_float/convert_eisel_lemire.zig +4586 30872825 1755651176000000000 2562e4c50c6403023d508a0c7e1f15f0 1 std/fmt/parse_float/convert_slow.zig +3506 30872846 1755651176000000000 9428b7df45d5b928d9c004b955588fe0 1 std/hash/crc/impl.zig +0 30872847 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/hash/crc/test.zig +2075 30872851 1755651176000000000 5910881f138d791cfa09dd89cc12fc40 1 std/hash/verify.zig +237477 30873054 1755651176000000000 67644436e9162e79563b60f574b36f99 1 std/os/windows/ntstatus.zig +0 30872880 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/json/dynamic_test.zig +0 30872882 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/json/hashmap_test.zig +0 30872883 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/json/scanner_test.zig +0 30872885 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/json/static_test.zig +995 30872930 1755651176000000000 59077bc2784a5df334de08609b4c2a55 1 std/math/expo2.zig +452 30872905 1755651176000000000 ce633e6b665f3caba98995a3f146d7c7 1 std/math/complex/abs.zig +678 30872907 1755651176000000000 9dd2ece0bd4c6366c4a3cb5bf7b3db17 1 std/math/complex/acosh.zig +608 30872906 1755651176000000000 e3a7d70f219edead2e32e66a9476a469 1 std/math/complex/acos.zig +458 30872908 1755651176000000000 2fea305ef49ff29fdd688d2f7342051d 1 std/math/complex/arg.zig +641 30872910 1755651176000000000 59bed4da0e5763cbf2a3e08ec4bc9c6c 1 std/math/complex/asinh.zig +750 30872909 1755651176000000000 26f02f5afc54b9ec7673ddd6d0fcc3a9 1 std/math/complex/asin.zig +645 30872912 1755651176000000000 adf7751d27453fed0d4977a2dc50e85e 1 std/math/complex/atanh.zig +2527 30872911 1755651176000000000 2a909954adb7520e1eb158124c280ca2 1 std/math/complex/atan.zig +484 30872913 1755651176000000000 a9e61e0f7280deab3d077856af6ca8d9 1 std/math/complex/conj.zig +5818 30872915 1755651176000000000 3b53a3d1a1285447f00cc90f422cb7b1 1 std/math/complex/cosh.zig +577 30872914 1755651176000000000 26877517b7d9d620e841272fd8ea3661 1 std/math/complex/cos.zig +4899 30872916 1755651176000000000 4f31c5e9d921097840da690cc0324595 1 std/math/complex/exp.zig +620 30872918 1755651176000000000 4e4bb03cdbb57072938d447952587286 1 std/math/complex/log.zig +608 30872919 1755651176000000000 1258f2af84237de74fd033b6776798f2 1 std/math/complex/pow.zig +628 30872920 1755651176000000000 b5f2e65410101f915fb75fa5712c2fd4 1 std/math/complex/proj.zig +5363 30872922 1755651176000000000 89568cfbf7f8196aafffbd55ea670070 1 std/math/complex/sinh.zig +620 30872921 1755651176000000000 4aade0cdfc8ac82b062412f5566aec6c 1 std/math/complex/sin.zig +4249 30872923 1755651176000000000 0aeb21db75d92940ddcb1491d2f0445e 1 std/math/complex/sqrt.zig +3847 30872925 1755651176000000000 98009ed972f9f5fcb177d10a345456e1 1 std/math/complex/tanh.zig +626 30872924 1755651176000000000 ac4f4ba1ea51c6a8f2101a7bdf3b0d7c 1 std/math/complex/tan.zig +175931 30872900 1755651176000000000 cb0553d36d2eb461b87312f4e15a99e8 1 std/math/big/int.zig +3762 30873001 1755651176000000000 2fd0c246f4a8e9ba6ccef5ff7cf0ccfe 1 std/os/linux/vdso.zig +0 30872998 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/os/linux/test.zig +13117 30873002 1755651176000000000 71b9a59db11f287d3253e001a21a4028 1 std/os/linux/x86.zig +13489 30873003 1755651176000000000 958bec870d653d2a62890b93b463512b 1 std/os/linux/x86_64.zig +6720 30872975 1755651176000000000 186c59f27378f16795ba8c8611b5ed95 1 std/os/linux/aarch64.zig +7970 30872976 1755651176000000000 0f4c26b73e6698859b53f9b715f3d611 1 std/os/linux/arm.zig +6097 30872983 1755651176000000000 a5e8b96435a27d99de81726a3b93e16d 1 std/os/linux/hexagon.zig +6540 30872992 1755651176000000000 9b9c64b903ecbb48c7b6c661455ef036 1 std/os/linux/riscv32.zig +6541 30872993 1755651176000000000 b833f96b582cdd1676bf2bda0ac01e90 1 std/os/linux/riscv64.zig +10847 30872996 1755651176000000000 0c589fb5ebf73b4b5662a31d45d76c75 1 std/os/linux/sparc64.zig +7941 30872986 1755651176000000000 7e1c50fd483adea99b19665fe38b2f72 1 std/os/linux/loongarch64.zig +6634 30872987 1755651176000000000 ad9a26a1c9c2d04c67203fdcf578c9f1 1 std/os/linux/m68k.zig +11254 30872988 1755651176000000000 69fd31ffc9e830951f1293a9ee9cfb72 1 std/os/linux/mips.zig +10635 30872989 1755651176000000000 ff911a8bf83253a4b85221f8a5f72189 1 std/os/linux/mips64.zig +8845 30872990 1755651176000000000 bd51d61d7005f2954e793de4ea335f5c 1 std/os/linux/powerpc.zig +8837 30872991 1755651176000000000 c1b8858b561db0b710d1f0d729e836e5 1 std/os/linux/powerpc64.zig +7186 30872994 1755651176000000000 29692c77734256a2fc877fcec567d9a0 1 std/os/linux/s390x.zig +4390 30872999 1755651176000000000 9e872767168dbe4e563e8ca82d35d42e 1 std/os/linux/thumb.zig +18676 30873000 1755651176000000000 79cbf225d0993e9837e569f3e09e0314 1 std/os/linux/tls.zig +46056 30872982 1755651176000000000 fe2f435321fb0e6eb75eeb3ca30c93b4 1 std/os/linux/bpf.zig +1297 30872985 1755651176000000000 daac8c407161fbb4bb996238aee46635 1 std/os/linux/ioctl.zig +8427 30872995 1755651176000000000 b845f84a2ea6f5532d8ffc78297dafed 1 std/os/linux/seccomp.zig +183126 30872997 1755651176000000000 fd2ae47bc58a4f876d2cb8205d4888ea 1 std/os/linux/syscalls.zig +19909 30872984 1755651176000000000 a1611786e4dda806effaf2301a5cf0ae 1 std/os/linux/io_uring_sqe.zig +173427 30872974 1755651176000000000 46b12a066a5e37b8a275732fa67d5529 1 std/os/linux/IoUring.zig +2126 30873006 1755651176000000000 d6f497f7c3ede56b9dd8eb2cae54c566 1 std/os/plan9/x86_64.zig +2368 30873036 1755651176000000000 ef3b4d934ff0fc89d4b9c013f363e19f 1 std/os/uefi/protocol.zig +37311 30873009 1755651176000000000 a67c5d40f56e40984ce32fba49cfa0bc 1 std/os/uefi/device_path.zig +2078 30873010 1755651176000000000 13b23e26af6b210b16c77d73b956e867 1 std/os/uefi/hii.zig +10107 30873037 1755651176000000000 e4c1fe82be2b68376749dbb625002706 1 std/os/uefi/status.zig +10739 30873044 1755651176000000000 627c77aa253ea0232b674a9a41a09650 1 std/os/uefi/tables.zig +3906 30873011 1755651176000000000 5c4587a7b4f3370e256119bdab607b4a 1 std/os/uefi/pool_allocator.zig +0 30873056 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/os/windows/test.zig +2144 30873048 1755651176000000000 25e202ff708858513ae7203c6f1043cf 1 std/os/windows/advapi32.zig +19302 30873050 1755651176000000000 4166d597fb4bd529b9418c145598c4d4 1 std/os/windows/kernel32.zig +12119 30873053 1755651176000000000 90384510a1298bc4a80542f39d2cc399 1 std/os/windows/ntdll.zig +77480 30873059 1755651176000000000 d85c6950ac08847c1673726e62f4953f 1 std/os/windows/ws2_32.zig +850 30873049 1755651176000000000 058a13f92bf4ee16e52beb60bf057dc9 1 std/os/windows/crypt32.zig +20117 30873052 1755651176000000000 696b67a75a9a665eb00672233edffbb2 1 std/os/windows/nls.zig +130227 30873058 1755651176000000000 a0ee928ca20f189c11667764ca96b243 1 std/os/windows/win32error.zig +3697 30873051 1755651176000000000 f5f54b1cf522ff663148d3c96268d459 1 std/os/windows/lang.zig +8449 30873055 1755651176000000000 3c42a760ba486f9b9455bd95d20d2e0b 1 std/os/windows/sublang.zig +135650 30873115 1755651176000000000 a31eb8d48506c25579555c4efd1a9faf 1 std/zig/Parse.zig +142067 30873106 1755651176000000000 c11d0a46b8fb10db9e0b6b86306a47a4 1 std/zig/Ast/Render.zig +8409 30873135 1755651176000000000 05fc398cc2e6071c55b8a2a2fbc73720 1 std/zig/system/NativePaths.zig +12217 30873141 1755651176000000000 431d341ca0da87ee822118293b8def7c 1 std/zig/system/windows.zig +2441 30873139 1755651176000000000 35ecedf1e23a5fca314cc4de0bb8b2f9 1 std/zig/system/darwin.zig +15304 30873140 1755651176000000000 580566ad2ff69b205932568d7672a3e9 1 std/zig/system/linux.zig +26641 30873142 1755651176000000000 1653caac0003b8e8b9474f11b36c5a76 1 std/zig/system/x86.zig +19758 30873124 1755651176000000000 3952091e9a90d59dd1ba998c365bce09 1 std/zig/llvm/BitcodeReader.zig +17956 30873126 1755651176000000000 fc195102d6af02ed5678e5f0aa8b8390 1 std/zig/llvm/bitcode_writer.zig +592181 30873125 1755651176000000000 eb4547393bea04ef1cf32079beef364a 1 std/zig/llvm/Builder.zig +0 30453581 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/clzsi2_test.zig +0 30453580 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/clzdi2_test.zig +0 30453582 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/clzti2_test.zig +0 30453599 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ctzsi2_test.zig +0 30453598 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ctzdi2_test.zig +0 30453600 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ctzti2_test.zig +0 30453637 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ffssi2_test.zig +0 30453636 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ffsdi2_test.zig +0 30453638 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ffsti2_test.zig +0 30453784 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/paritysi2_test.zig +0 30453783 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/paritydi2_test.zig +0 30453785 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/parityti2_test.zig +0 30453788 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/popcountsi2_test.zig +0 30453787 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/popcountdi2_test.zig +0 30453789 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/popcountti2_test.zig +0 30453572 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/bitreversesi2_test.zig +0 30453571 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/bitreversedi2_test.zig +0 30453573 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/bitreverseti2_test.zig +0 30453576 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/bswapsi2_test.zig +0 30453575 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/bswapdi2_test.zig +0 30453577 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/bswapti2_test.zig +0 30453588 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/cmpsi2_test.zig +0 30453585 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/cmpdi2_test.zig +0 30453590 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/cmpti2_test.zig +0 30453830 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ucmpsi2_test.zig +0 30453829 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ucmpdi2_test.zig +0 30453831 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ucmpti2_test.zig +0 30453797 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/shift_test.zig +0 30453773 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/negsi2_test.zig +0 30453770 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/negdi2_test.zig +0 30453775 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/negti2_test.zig +4285 30453832 1755651171000000000 3a706e00becb790763e2c63d183e345f 1 compiler_rt/udivmod.zig +0 30453833 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/udivmoddi4_test.zig +0 30453748 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/mulXi3_test.zig +0 30453616 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/divti3_test.zig +0 30453746 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/modti3_test.zig +0 30453550 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/absvsi2_test.zig +0 30453548 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/absvdi2_test.zig +0 30453552 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/absvti2_test.zig +0 30453778 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/negvsi2_test.zig +0 30453777 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/negvdi2_test.zig +0 30453779 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/negvti2_test.zig +0 30453559 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/addosi4_test.zig +0 30453558 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/addodi4_test.zig +0 30453560 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/addoti4_test.zig +0 30453807 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/subosi4_test.zig +0 30453806 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/subodi4_test.zig +0 30453808 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/suboti4_test.zig +0 30453759 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/mulosi4_test.zig +0 30453758 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/mulodi4_test.zig +0 30453760 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/muloti4_test.zig +0 30453626 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/extendf_test.zig +0 30453820 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/truncf_test.zig +0 30453737 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/int_from_float_test.zig +0 30453681 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/float_from_int_test.zig +0 30453595 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/comparesf2_test.zig +0 30453593 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/comparedf2_test.zig +0 30453555 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/addf3_test.zig +0 30453754 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/mulf3_test.zig +0 30453611 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/divsf3_test.zig +0 30453605 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/divdf3_test.zig +0 30453619 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/divxf3_test.zig +0 30453614 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/divtf3_test.zig +0 30453791 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/powiXf2_test.zig +11743 30453815 1755651171000000000 20b5273f511a6677b3f49f750fcaf786 1 compiler_rt/trig.zig +6045 30453792 1755651171000000000 18b634df64d66eb7c240db46b32eea60 1 compiler_rt/rem_pio2.zig +2247 30453794 1755651171000000000 2337e183931c970621500018ffe636df 1 compiler_rt/rem_pio2f.zig +0 30453727 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/fmodq_test.zig +0 30453728 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/fmodx_test.zig +0 30453837 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/udivmodti4_test.zig +13531 30872666 1755651176000000000 479ed8dfe695d0a2eea06b674b3ed0da 1 std/compress/flate/Token.zig +20508 30872661 1755651176000000000 453a65b5b55858b073099208c4e07ca8 1 std/compress/flate/BlockWriter.zig +3588 30872665 1755651176000000000 5a3d7acaca811bf6b6e62a58645eddae 1 std/compress/flate/Lookup.zig +5945 30872672 1755651176000000000 937d6b84c08ac71922db69ef4603ee39 1 std/compress/lzma/decode/lzbuffer.zig +4994 30872673 1755651176000000000 159872c0de3e30f43567e5ed7666125d 1 std/compress/lzma/decode/rangecoder.zig +12650 30872752 1755651176000000000 56befc361ef070a7bd0a2d3c1dc46994 1 std/crypto/pcurves/common.zig +67958 30872755 1755651176000000000 0f2daafefad01026d6796eec68d65d2e 1 std/crypto/pcurves/p256/p256_64.zig +76136 30872756 1755651176000000000 8ec5f177ef28f7a2a0ec8d103665db00 1 std/crypto/pcurves/p256/p256_scalar_64.zig +134511 30872761 1755651176000000000 2e0dda7c40794e981dd2d2471c4776a5 1 std/crypto/pcurves/p384/p384_64.zig +137291 30872762 1755651176000000000 81eb087d46e6c49907ae0c02d3230828 1 std/crypto/pcurves/p384/p384_scalar_64.zig +73280 30872768 1755651176000000000 c871f98dad15c7a8c29be9ccefa4b181 1 std/crypto/pcurves/secp256k1/secp256k1_64.zig +75859 30872769 1755651176000000000 e29275bdb0eb931fc383e7f2f5ded944 1 std/crypto/pcurves/secp256k1/secp256k1_scalar_64.zig +1807 30872733 1755651176000000000 f47429307ac0920ff18758ce86074549 1 std/crypto/codecs/asn1/der.zig +7178 30872725 1755651176000000000 6d4dab023a981a670d308b0b120c9077 1 std/crypto/codecs/asn1/Oid.zig +0 30872734 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/crypto/codecs/asn1/test.zig +3892 30872703 1755651176000000000 b6e0d691e62b1e9830666c4f8c67fdf4 1 std/crypto/Certificate/Bundle/macos.zig +3081 30872821 1755651176000000000 2aeda0b8b6036bb4d980778abb5a928a 1 std/fmt/parse_float/common.zig +3073 30872820 1755651176000000000 3950e4fa1fdd11d50db0b4abfc254022 1 std/fmt/parse_float/FloatStream.zig +6036 30872819 1755651176000000000 68169ffe43d55f0eb5e26b984ef98670 1 std/fmt/parse_float/FloatInfo.zig +29140 30872826 1755651176000000000 04115d79320f402803a56bd43cc34cf9 1 std/fmt/parse_float/decimal.zig +2726 30872917 1755651176000000000 7f318d60fafbfa10754d5644fd131ffe 1 std/math/complex/ldexp.zig +0 30872901 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/math/big/int_test.zig +4082 30872978 1755651176000000000 11a08913a0ec64b8325b0d29601479a7 1 std/os/linux/bpf/btf.zig +1543 30872981 1755651176000000000 95995c37b42f8d7a12578170850af6ee 1 std/os/linux/bpf/kern.zig +1998 30873027 1755651176000000000 5a705fc01bb083d82cd43ab9ab1c6542 1 std/os/uefi/protocol/service_binding.zig +1743 30873023 1755651176000000000 e4e18b6e0741218763e2f0eefe57c63c 1 std/os/uefi/protocol/loaded_image.zig +4860 30873015 1755651176000000000 db6a8b32ce1366281968b6a3dbffb173 1 std/os/uefi/protocol/device_path.zig +3924 30873025 1755651176000000000 636ee102096b7ee8d15380af87b55c99 1 std/os/uefi/protocol/rng.zig +544 30873028 1755651176000000000 a0f63cfe62d021c13659600cea4aaa1a 1 std/os/uefi/protocol/shell_parameters.zig +1524 30873029 1755651176000000000 7748a7cf094118fb46a4fa8cb0e326fb 1 std/os/uefi/protocol/simple_file_system.zig +13432 30873017 1755651176000000000 995882ac23c2af4019a5dd716a5f09f3 1 std/os/uefi/protocol/file.zig +5171 30873014 1755651176000000000 9136b751bd537d37181af6f96f23bc0d 1 std/os/uefi/protocol/block_io.zig +1827 30873032 1755651176000000000 dc816c9ebf174e0f2191f721ebf627fd 1 std/os/uefi/protocol/simple_text_input.zig +5002 30873033 1755651176000000000 33197652ebd5358fbd566ba1598a738f 1 std/os/uefi/protocol/simple_text_input_ex.zig +9857 30873034 1755651176000000000 ac75efaf87e83f490e1b05ca64f3d221 1 std/os/uefi/protocol/simple_text_output.zig +2028 30873031 1755651176000000000 2b300415efacd2dec40e6f1d67488799 1 std/os/uefi/protocol/simple_pointer.zig +2398 30873013 1755651176000000000 2c87d630cff25fb47ddfd2241990d8f4 1 std/os/uefi/protocol/absolute_pointer.zig +4876 30873026 1755651176000000000 1955a5a309db3628c52bf415af05b0f8 1 std/os/uefi/protocol/serial_io.zig +4296 30873018 1755651176000000000 702a798c1a856afdd0ade5a1ee67b3cd 1 std/os/uefi/protocol/graphics_output.zig +2479 30873016 1755651176000000000 0fab22ebe8c02b50099313679d4e2eb5 1 std/os/uefi/protocol/edid.zig +15978 30873030 1755651176000000000 95a49124c8237f8d2ab01672bf2a69b1 1 std/os/uefi/protocol/simple_network.zig +9851 30873024 1755651176000000000 fc89ee17ffacbefb54626ee378473525 1 std/os/uefi/protocol/managed_network.zig +13201 30873021 1755651176000000000 427b83b08791055f001b217a1bd39a8b 1 std/os/uefi/protocol/ip6.zig +5373 30873022 1755651176000000000 911ecc11b1404b1bef6afcda6cd7868e 1 std/os/uefi/protocol/ip6_config.zig +8567 30873035 1755651176000000000 47adbb9c98a53124032c9ef80ce5889f 1 std/os/uefi/protocol/udp6.zig +4199 30873019 1755651176000000000 b821152f4c9abddf1c1fb114333c66dd 1 std/os/uefi/protocol/hii_database.zig +1712 30873020 1755651176000000000 1a882e3749f4ef9b5c5827cbb346f6a3 1 std/os/uefi/protocol/hii_popup.zig +47589 30873039 1755651176000000000 da7566eb78da06f1636e8eb3a693eb3e 1 std/os/uefi/tables/boot_services.zig +18947 30873041 1755651176000000000 cb1eb30776a43459956ea4c0675dee88 1 std/os/uefi/tables/runtime_services.zig +2796 30873040 1755651176000000000 f0a08fa361dffa5eadb351a471801946 1 std/os/uefi/tables/configuration_table.zig +2295 30873042 1755651176000000000 25bf31dd5f33af51b4b9da897fa1e3d5 1 std/os/uefi/tables/system_table.zig +214 30873043 1755651176000000000 cdb95d6c52cd4654ef26be0bd9f114d4 1 std/os/uefi/tables/table_header.zig +0 30873130 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/zig/parser_test.zig +15091 30873136 1755651176000000000 e1ff2fae360a9d1df9777ae4f90bda6a 1 std/zig/system/arm.zig +16495 30873138 1755651176000000000 753462fa54f971ae23b566336ad73030 1 std/zig/system/darwin/macos.zig +50924 30873127 1755651176000000000 5c60970433f1092302f7ef4ff90d3f62 1 std/zig/llvm/ir.zig +20581 30453793 1755651171000000000 e8eaf68a4ffa3364b8f352326a575189 1 compiler_rt/rem_pio2_large.zig +5806 30872728 1755651176000000000 92f1dd53520d8191f93c177825b7845c 1 std/crypto/codecs/asn1/der/Decoder.zig +5861 30872729 1755651176000000000 650695830257d32d9ea72d767d918703 1 std/crypto/codecs/asn1/der/Encoder.zig +419 30872979 1755651176000000000 ed7dfc04a5d0c4f0853edb5414ce981e 1 std/os/linux/bpf/btf_ext.zig +24293 30872980 1755651176000000000 0c7d3ee9ea8e698a843ee6039fd161c4 1 std/os/linux/bpf/helpers.zig +3221 30872727 1755651176000000000 fda67b74062c7f535bb0a6d0f1fe74fb 1 std/crypto/codecs/asn1/der/ArrayListReverse.zig +9554 30463873 1775105901305392631 27cd565b3dad8cdfe056e197a3c40c4f 0 /home/nathan/a4/registry/native/zig/codedb/src/main.zig +63503 30090095 1775106272021427186 8ab70d7c8fde741a18236d4782b4ea52 0 /home/nathan/a4/registry/native/zig/codedb/src/vendor/explore.zig +7289 30090097 1775105459125595054 9d9215f287da70f9392a92a2b5570554 0 /home/nathan/a4/registry/native/zig/codedb/src/vendor/store.zig +60168 30090096 1775105323593753135 023bebf778f7002c2a6a8ccaf73645c1 0 /home/nathan/a4/registry/native/zig/codedb/src/vendor/index.zig +4325 30090098 1775105323593753135 638a0d03033c25d2c7d5005b1e089849 0 /home/nathan/a4/registry/native/zig/codedb/src/vendor/style.zig +5221 30090093 1775105323593753135 85fba111a4f77a3976a57e073066cb4f 0 /home/nathan/a4/registry/native/zig/codedb/src/vendor/agent.zig +1802 30090099 1775105323593753135 1083fff11068702929c0168bc3f01074 0 /home/nathan/a4/registry/native/zig/codedb/src/vendor/version.zig diff --git a/registry/native/zig/codedb/.zig-cache/h/b660c9f34d33e2782b8dab1d60e035b2.txt b/registry/native/zig/codedb/.zig-cache/h/b660c9f34d33e2782b8dab1d60e035b2.txt new file mode 100644 index 000000000..940d5550c --- /dev/null +++ b/registry/native/zig/codedb/.zig-cache/h/b660c9f34d33e2782b8dab1d60e035b2.txt @@ -0,0 +1,838 @@ +0 +66312 30453513 1755651176000000000 14fae37210c02c5e37e12220a8d796e3 1 compiler/build_runner.zig +618 29955575 1775105374121686966 899e416056a0f857fa22c2329070e710 0 build.zig +103 0 0 35b10ba982858800c98ffbaad5536a86 2 o/cfaf7a24095f5d89fc7e30798eca24da/dependencies.zig +22187 29955564 1755651176000000000 408a2a1c3d712caf2107e3e3dfb7022b 1 ubsan_rt.zig +11083 29955562 1755651171000000000 3c8016eb348fede9a19b94ec4869d8a6 1 compiler_rt.zig +7957 30873080 1755651176000000000 0ebbb46b337b65e85e7d177cfc93d2ca 1 std/std.zig +2525 30872531 1755651176000000000 71e0dabdb301ba10f8ca420941767e70 1 std/BitStack.zig +100782 30872563 1755651176000000000 93d126516cbe85e7dab1c855c82058cb 1 std/Build.zig +4266 30872643 1755651176000000000 16fdba428de22eb1305e855dec42f9a9 1 std/buf_map.zig +4526 30872644 1755651176000000000 8e63f8aad9b21f2cac5dcdcafd975d93 1 std/buf_set.zig +8139 30872564 1755651176000000000 b344fa05d00dd94ca9bb8e95cc23b3fc 1 std/DoublyLinkedList.zig +25874 30872813 1755651176000000000 84e0fbf3feb0ac8196cb74e389a3ccb0 1 std/dynamic_library.zig +35271 30872577 1755651176000000000 0d7d03be6dc0cb75afa123aa4eb4d818 1 std/Io.zig +43556 30872965 1755651176000000000 5bfaba216d6a1896e7f4b43e7ee7fe1a 1 std/multi_array_list.zig +21416 30873068 1755651176000000000 4328abc876b82840e689434566876bc7 1 std/priority_queue.zig +33889 30873067 1755651176000000000 431c78ed77c39d0be4be43c7634c12d0 1 std/priority_dequeue.zig +60600 30872578 1755651176000000000 518fc21273ed20754da5c332f4c01208 1 std/Progress.zig +17628 30872592 1755651176000000000 697e28034ef9cf05bb04d3be028a9653 1 std/Random.zig +20351 30873072 1755651176000000000 41f61f133b5c7661bc5f90889fd39045 1 std/segmented_list.zig +10911 30872593 1755651176000000000 72379f2cc10c10e56c76ebebd42ca14c 1 std/SemanticVersion.zig +5252 30872594 1755651176000000000 b2d7e2ffcc15cc25fbc30a3e3799cfba 1 std/SinglyLinkedList.zig +107040 30872623 1755651176000000000 f931b01a199517a5df7184e98bad442e 1 std/Target.zig +60770 30872635 1755651176000000000 9d935b7746e443b6cfa58f88eb113dc4 1 std/Thread.zig +24524 30873092 1755651176000000000 1694ad0602c4425ddf33879d415f4ab1 1 std/treap.zig +31490 30872636 1755651176000000000 7cd075d309fe4bb3e810216b10d3f0c8 1 std/Uri.zig +95685 30872638 1755651176000000000 a68eb5aa7a6d2c07cb820b6b5ffa0604 1 std/array_list.zig +119750 30872637 1755651176000000000 a483a92911be1b36d25671285d410963 1 std/array_hash_map.zig +19425 30872640 1755651176000000000 09d08e5d80b113466699bf4262b53875 1 std/atomic.zig +24490 30872641 1755651176000000000 db10a569a8a9a16313103b691a443b4a 1 std/base64.zig +69019 30872642 1755651176000000000 a44de477fecc990a1381fe54649a934b 1 std/bit_set.zig +39860 30872647 1755651176000000000 bab8724be90660375455f96475ebd26f 1 std/builtin.zig +360045 30872657 1755651176000000000 41c881372d765477c751e9b06e39e91f 1 std/c.zig +51742 30872658 1755651176000000000 a9384cc5046eaeedcb1b30e646b423dc 1 std/coff.zig +372 30872691 1755651176000000000 b867983786f01e8333e32b633eb10410 1 std/compress.zig +17640 30873079 1755651176000000000 bd79322afba3cc08000a99c21bfd26d7 1 std/static_string_map.zig +13676 30872788 1755651176000000000 56a50f35f9d4227c9754ad2bad741de1 1 std/crypto.zig +69500 30872803 1755651176000000000 f2ac0dce249b308c0c7483a07e9d8c21 1 std/debug.zig +4894 30872812 1755651176000000000 61fff94fe737bda88edd8ca624c0a93c 1 std/dwarf.zig +65720 30872814 1755651176000000000 bbe1ed25b53adc620fcc2bcd89a2a536 1 std/elf.zig +57857 30872815 1755651176000000000 e8bdba1d4814ce140abed00d8ac27c66 1 std/enums.zig +58752 30872829 1755651176000000000 94d08677478fb7c8fd9ecad13a05a7f6 1 std/fmt.zig +34417 30872838 1755651176000000000 2d9a528a5756bb811d20d393011711e8 1 std/fs.zig +4919 30872839 1755651176000000000 9c3f0431c1637a1fc64fa91b0520d1b3 1 std/gpu.zig +4120 30872854 1755651176000000000 287776a366bc2fa9071678dd14432afc 1 std/hash.zig +80684 30872855 1755651176000000000 5d2dba5503b8646ccb51c7481cec177d 1 std/hash_map.zig +35783 30872866 1755651176000000000 291afdd8c7934ab8495ad0cb24e3272b 1 std/heap.zig +39240 30872874 1755651176000000000 948901b44d7c0b5b43749fa91ebd4552 1 std/http.zig +5465 30872887 1755651176000000000 050dd347d737c8ab1673d3762b02a7e0 1 std/json.zig +18649 30872888 1755651176000000000 f1185edfabdd268969ce0577870e98a2 1 std/leb128.zig +8342 30872889 1755651176000000000 7a79e5053bcf4725fcf9ca5e03c43252 1 std/log.zig +70826 30872890 1755651176000000000 6a8358e9e839fb48052b1b0c7aa87559 1 std/macho.zig +74776 30872958 1755651176000000000 d4a0c6126fce11a0cafaea7b313668ac 1 std/math.zig +184945 30872961 1755651176000000000 780cc406a638f4fee16e04354f8b9612 1 std/mem.zig +39789 30872964 1755651176000000000 05e33fd489986e7ef7a2114c8f3040d0 1 std/meta.zig +88641 30872968 1755651176000000000 f046d7172f3a3de58ed9e665b16b72ce 1 std/net.zig +10310 30873061 1755651176000000000 2384f794189b66c622279a439a06e7a5 1 std/os.zig +2016 30872969 1755651176000000000 b634eff517218815e970c18230425d31 1 std/once.zig +13947 30873062 1755651176000000000 4e879b4dee70c859bd0938a160593e4c 1 std/pdb.zig +11147 30873063 1755651176000000000 67e0f1b41fa1dbada2b0874d26ef4d81 1 std/pie.zig +290871 30873066 1755651176000000000 0a923dee580fffa1623318e59d0a2b3e 1 std/posix.zig +78344 30873071 1755651176000000000 b08239d255f89ec21465710fcbc5e908 1 std/process.zig +39596 30873077 1755651176000000000 338f2628729e859f51865caf708004bc 1 std/sort.zig +23280 30873073 1755651176000000000 8de2dfb1368f1051037084ba56ea4a97 1 std/simd.zig +16059 30872639 1755651176000000000 7d6ee226b3aea4e399efa02748582a57 1 std/ascii.zig +42826 30873085 1755651176000000000 55143931b33969e1e759f8623049586c 1 std/tar.zig +48207 30873088 1755651176000000000 deee7351dbab0664b3bc9a4bdb2a5d38 1 std/testing.zig +11575 30873091 1755651176000000000 04290176ff236793a2846b7afe763a99 1 std/time.zig +11173 30873094 1755651176000000000 a51ee0838574fdd01999198cbeff620f 1 std/tz.zig +85999 30873097 1755651176000000000 a384b975bb355f986219464058d80145 1 std/unicode.zig +12292 30873102 1755651176000000000 8757ba546e520503fcc6a58d9b0d0083 1 std/valgrind.zig +17661 30873103 1755651176000000000 a8988138c7ee50f868cd1db24ab3d1d6 1 std/wasm.zig +37103 30873146 1755651176000000000 954dfee598538ddb98e9fc105c2e0a39 1 std/zig.zig +26592 30873147 1755651176000000000 2d4666d88f0c60307ae5724c74a78854 1 std/zip.zig +1242 30873152 1755651176000000000 c5e5cebc2cfc9353dc65aa5193442b60 1 std/zon.zig +28071 30873078 1755651176000000000 76d2b688d1d45fbb74ca560efdaac238 1 std/start.zig +5929 30872784 1755651176000000000 a75e2588e1a73369810b6ba7657e4bfd 1 std/crypto/tlcsprng.zig +59803 30872537 1755651176000000000 b6406a99c6bcfa6765bfb08eafcbff0d 1 std/Build/Cache.zig +38694 30872557 1755651176000000000 4bafc6be1344a4b0b4bfce1abc099568 1 std/Build/Step.zig +26376 30872539 1755651176000000000 bb934510edbc055949ffff1646e5e1e6 1 std/Build/Module.zig +43006 30872560 1755651176000000000 01457aac972ac3a8e51fa2185c19c1be 1 std/Build/Watch.zig +17168 30872538 1755651176000000000 907b4dad04e8cdc9fb34a46e35e44fb3 1 std/Build/Fuzz.zig +30748 30872561 1755651176000000000 5bf5917eafea467894d1bdebd37cc3aa 1 std/Build/WebServer.zig +10407 30872562 1755651176000000000 219f7675797b83c184e56753dff6542a 1 std/Build/abi.zig +64087 30872571 1755651176000000000 1ba61be2534ce203f154a61c6565f179 1 std/Io/Reader.zig +106521 30872572 1755651176000000000 d8e9286f3772f2b52339c5bf9facf601 1 std/Io/Writer.zig +14469 30872566 1755651176000000000 50460af6b2b24665a01f2798a19968d6 1 std/Io/DeprecatedReader.zig +3660 30872567 1755651176000000000 667198a0bb922d33d2c2fb81a9a25d30 1 std/Io/DeprecatedWriter.zig +6043 30872574 1755651176000000000 8a44e6b03e4a42b09a4077448a7c41db 1 std/Io/fixed_buffer_stream.zig +1227 30872573 1755651176000000000 8e42c53c443deeb5a1d9cd2b1a3dbee7 1 std/Io/counting_reader.zig +5692 30872576 1755651176000000000 1ef2fac09b5b843536005bd1350d920d 1 std/Io/tty.zig +0 30872575 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/Io/test.zig +1811 30872580 1755651176000000000 4f975bd4c885c2b17936c7c15e2a1fa0 1 std/Random/Ascon.zig +2685 30872581 1755651176000000000 5244bfd5edd68ad074bfdf866029fa86 1 std/Random/ChaCha.zig +6100 30872582 1755651176000000000 14fb5367ee7128106466c91abe89d828 1 std/Random/Isaac64.zig +2727 30872583 1755651176000000000 98b129620d81fc551cc2747eb5e93a2d 1 std/Random/Pcg.zig +3242 30872587 1755651176000000000 13e05c7b4ba6bd757c30dbc6e1520198 1 std/Random/Xoroshiro128.zig +3177 30872588 1755651176000000000 ece4176296c0d5a4735a0e13195d3e89 1 std/Random/Xoshiro256.zig +3158 30872585 1755651176000000000 e0b128479f8a117718ec288761f83ac0 1 std/Random/Sfc64.zig +3699 30872584 1755651176000000000 f562dad96707be48e6745a1f57cbf27c 1 std/Random/RomuTrio.zig +530 30872586 1755651176000000000 6862d091fadcbbb652464ab10689bd23 1 std/Random/SplitMix64.zig +4526 30872591 1755651176000000000 8ac3cfca93be2f623ce661fc9fb27686 1 std/Random/ziggurat.zig +0 30872590 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/Random/test.zig +29955 30872596 1755651176000000000 7abef445358bc9111ee7720810ab2dfe 1 std/Target/Query.zig +106498 30872597 1755651176000000000 4e1faa0e06f720a8513cc19957f2cd52 1 std/Target/aarch64.zig +104612 30872598 1755651176000000000 06339133610c2f04ff7073b54ed9f610 1 std/Target/amdgcn.zig +1274 30872599 1755651176000000000 c251325fefba8d6614a0692c5ceb2eea 1 std/Target/arc.zig +79071 30872600 1755651176000000000 c8ffd174d8ea40cc06efcf87bf4b657a 1 std/Target/arm.zig +71492 30872601 1755651176000000000 8dcc898c0cae23c1a6c85b1acad47ada 1 std/Target/avr.zig +2425 30872602 1755651176000000000 3376bf5f146580e9b3ce5e329a604817 1 std/Target/bpf.zig +77604 30872603 1755651176000000000 be007dfe415760a79fc1d9d7dc89a548 1 std/Target/csky.zig +18058 30872605 1755651176000000000 8ccf22d3bcff20d7636d8251948f4618 1 std/Target/hexagon.zig +665 30872604 1755651176000000000 1dec26e22b22006cd47d45b427f8a00c 1 std/Target/generic.zig +1207 30872606 1755651176000000000 2119135642c6ce06557e5005da5d27d3 1 std/Target/lanai.zig +6753 30872607 1755651176000000000 da13f92a1b8d03cc797a3beeaa2922d6 1 std/Target/loongarch.zig +7140 30872608 1755651176000000000 85a640161b5e75f1b0e44aafa7b2ac12 1 std/Target/m68k.zig +16348 30872609 1755651176000000000 12a09875d65985836758c030c651b686 1 std/Target/mips.zig +2227 30872610 1755651176000000000 f424aba074f946c774143fd6a0cc9b02 1 std/Target/msp430.zig +16613 30872611 1755651176000000000 166964aa1c4340f0f5e8c2079fbe6806 1 std/Target/nvptx.zig +36467 30872612 1755651176000000000 aba041f244b5c814708cec688ed2ab9b 1 std/Target/powerpc.zig +1396 30872613 1755651176000000000 11966b944c6a6f5eb378759087686f44 1 std/Target/propeller.zig +90023 30872614 1755651176000000000 f9c2faa81a8573bbbf95b94084ffd3be 1 std/Target/riscv.zig +30256 30872615 1755651176000000000 a3772db647d2b9a091f142be3fe81a5a 1 std/Target/s390x.zig +21324 30872616 1755651176000000000 dff9a38ced436d7efc5afea4972eb822 1 std/Target/sparc.zig +5037 30872617 1755651176000000000 7a802abba56de166296a02820267f278 1 std/Target/spirv.zig +1276 30872618 1755651176000000000 320e5694ddc1e4347015e29952472e47 1 std/Target/ve.zig +6517 30872619 1755651176000000000 1babc8b342fb599193f79f08f76e9463 1 std/Target/wasm.zig +139090 30872620 1755651176000000000 6c63cbfe59447c9f4755d8b977fd0e4d 1 std/Target/x86.zig +1234 30872621 1755651176000000000 9977314bd28dc12c6017784ed96cc578 1 std/Target/xcore.zig +1274 30872622 1755651176000000000 b20b4af52a8974acb1c9cf688822a23c 1 std/Target/xtensa.zig +42124 30872626 1755651176000000000 a3d49f74bb65b5f4d7a02d5cac8c7afe 1 std/Thread/Futex.zig +9112 30872631 1755651176000000000 fe6a25bfea2dcf9533b026b4e0846b98 1 std/Thread/ResetEvent.zig +10156 30872629 1755651176000000000 f3390bd4b6bae3fe12192885ee63130d 1 std/Thread/Mutex.zig +2650 30872633 1755651176000000000 3ea6f138fe347f9c36c6331f8ba278e3 1 std/Thread/Semaphore.zig +23329 30872625 1755651176000000000 6fcf321e05d855b3995cb3a50125c3f8 1 std/Thread/Condition.zig +11411 30872632 1755651176000000000 215e3b4416494f856a25895960f5a4ca 1 std/Thread/RwLock.zig +9540 30872630 1755651176000000000 628f9bee010911810b3c9193792c6f53 1 std/Thread/Pool.zig +1988 30872634 1755651176000000000 6793266710d780758ac32c2edcc166a9 1 std/Thread/WaitGroup.zig +59140 30872646 1755651176000000000 92182faee34134d52a9ad2d0a5a5fb2f 1 std/builtin/assembly.zig +50235 30872649 1755651176000000000 9708ebe35d8d2550494584ceeba81209 1 std/c/darwin.zig +11274 30872651 1755651176000000000 09bec7c3f40f6de5099b6d1914d351cf 1 std/c/freebsd.zig +9878 30872656 1755651176000000000 ab1e53cee5c67832574a9055e0108e66 1 std/c/solaris.zig +6617 30872653 1755651176000000000 d16786c18fabd57be5a8635a6ef08bb1 1 std/c/netbsd.zig +3875 30872650 1755651176000000000 907c436f260d11e9f80420d838051111 1 std/c/dragonfly.zig +15535 30872652 1755651176000000000 43ebba145dd0318d69788910b66220e7 1 std/c/haiku.zig +13681 30872654 1755651176000000000 06689937d111c195fd6baae889fc720b 1 std/c/openbsd.zig +3099 30872655 1755651176000000000 6a897bb99820db129b41bc2b5d6046bb 1 std/c/serenity.zig +6341 30872669 1755651176000000000 33490794e8bee84517ccfebe261d4eae 1 std/compress/flate.zig +3010 30872678 1755651176000000000 e6aae4a5afa281030d98b006a53807e0 1 std/compress/lzma.zig +894 30872681 1755651176000000000 0112dea02a7ad758670754ecb2e3ff09 1 std/compress/lzma2.zig +5317 30872687 1755651176000000000 23792685eae819b737bc8922607d4ba7 1 std/compress/xz.zig +6605 30872690 1755651176000000000 295f3b5136806a9f26e893c51e33025d 1 std/compress/zstd.zig +10441 30872783 1755651176000000000 b922de5f94704738f619903775fecb17 1 std/crypto/timing_safe.zig +47614 30872707 1755651176000000000 a03a980a4a1a9a95bf94441f8c307101 1 std/crypto/aegis.zig +6851 30872713 1755651176000000000 ea7fad6fda828c72abcc0148e4659e9c 1 std/crypto/aes_gcm.zig +14129 30872714 1755651176000000000 65b51cb2f9dda41995f89b221db5507e 1 std/crypto/aes_ocb.zig +51909 30872721 1755651176000000000 451cb3546d86929665419cd05bea0293 1 std/crypto/chacha20.zig +6309 30872745 1755651176000000000 1318dc8b9450bda7d30b2f2bd66ef98f 1 std/crypto/isap.zig +27260 30872777 1755651176000000000 b95f25fd28a65f6f71761d12efaee503 1 std/crypto/salsa20.zig +3626 30872744 1755651176000000000 7d28bd5a64f521b7f7322612e4d5f562 1 std/crypto/hmac.zig +18629 30872781 1755651176000000000 0ee80c1bcfed0bfc7fe20c0fd3c04d22 1 std/crypto/siphash.zig +6226 30872722 1755651176000000000 4270e1555211de4aca948cd086fc7129 1 std/crypto/cmac.zig +8993 30872712 1755651176000000000 1565baef5de85c1722fc1f3661e7418c 1 std/crypto/aes.zig +15303 30872746 1755651176000000000 ac2b7ab43674f07a4208ffa738f420c5 1 std/crypto/keccak_p.zig +9666 30872716 1755651176000000000 bfcf52448d42cda00bcaa777deca80cf 1 std/crypto/ascon.zig +2303 30872749 1755651176000000000 64e2696fd33ff024c44aee16a197afac 1 std/crypto/modes.zig +8666 30872700 1755651176000000000 3f63b88b98e1cb4a076af7d105c52b5f 1 std/crypto/25519/x25519.zig +65291 30872748 1755651176000000000 d602189df4b86e3751c21259bc485f24 1 std/crypto/ml_kem.zig +8492 30872694 1755651176000000000 1ad8b856fa664e2584776361ba03bdc0 1 std/crypto/25519/curve25519.zig +25932 30872696 1755651176000000000 a2d994ac2ed36751f95ac92b85a4931d 1 std/crypto/25519/edwards25519.zig +16174 30872758 1755651176000000000 1624d5389942bffd6016dc87453db0b7 1 std/crypto/pcurves/p256.zig +16370 30872764 1755651176000000000 c7fb645fa9fd8e26db3c4252856cdc9d 1 std/crypto/pcurves/p384.zig +7971 30872698 1755651176000000000 d0d33655dcbd80c50d53283108a54034 1 std/crypto/25519/ristretto255.zig +20520 30872770 1755651176000000000 e8ead8fcc9affae7d203ecb87a0e8236 1 std/crypto/pcurves/secp256k1.zig +29319 30872719 1755651176000000000 30d94c7ccda432eb5df2b6e7c68e0c35 1 std/crypto/blake2.zig +41428 30872720 1755651176000000000 711b0501d46a7c267b6f90ee8be3aacd 1 std/crypto/blake3.zig +9751 30872747 1755651176000000000 d4911af79a2684c60a4325e9142b1609 1 std/crypto/md5.zig +9321 30872706 1755651176000000000 15ebe6e9b9de51b93b00e1b463f00cb4 1 std/crypto/Sha1.zig +36825 30872779 1755651176000000000 bfc45b688f4f79b09cd3fa2ec3ce7a9e 1 std/crypto/sha2.zig +35726 30872780 1755651176000000000 74ba21545a132750f9a4eef5a37da502 1 std/crypto/sha3.zig +2756 30872742 1755651176000000000 3f1b15f01d5b6045525b1b5b73081e67 1 std/crypto/hash_composition.zig +3703 30872743 1755651176000000000 09d36564cbdc5d24ea6fa90e4b7dd6e5 1 std/crypto/hkdf.zig +20494 30872741 1755651176000000000 c857473fa22ec9e817a3c52e298e2eec 1 std/crypto/ghash_polyval.zig +7259 30872776 1755651176000000000 1b5aed273103196d0bdc885bc2b6ec2c 1 std/crypto/poly1305.zig +28906 30872715 1755651176000000000 da61f4b2f151f214129e329fd7af44dc 1 std/crypto/argon2.zig +37669 30872717 1755651176000000000 147c9e47e9a5a805c79882ce141f1fad 1 std/crypto/bcrypt.zig +25878 30872778 1755651176000000000 21725e7f671298d416186499754301ea 1 std/crypto/scrypt.zig +8451 30872750 1755651176000000000 e0bc6ddf2119b9cfe2a19626ded9635a 1 std/crypto/pbkdf2.zig +13838 30872775 1755651176000000000 7867fa74be498feed958e4107163a822 1 std/crypto/phc_encoding.zig +31401 30872695 1755651176000000000 727ee4c7eeb22bc4a90a96437f332593 1 std/crypto/25519/ed25519.zig +395201 30872738 1755651176000000000 4f4d382c531f90a2b4550ea4207a4d70 1 std/crypto/ecdsa.zig +38465 30872740 1755651176000000000 5ec16eac7226fcb11dbfeba8f371ee79 1 std/crypto/ff.zig +165 30872737 1755651176000000000 0ab9a19cc7544d7896d8555b38c3292a 1 std/crypto/codecs.zig +1715 30872739 1755651176000000000 f0b8832dd923baeda761e9855ed9d1ab 1 std/crypto/errors.zig +25575 30872787 1755651176000000000 05de4a472e23ccd4ece1a15329fc0dcb 1 std/crypto/tls.zig +50895 30872705 1755651176000000000 37739975874d2d5867dbd6043614417c 1 std/crypto/Certificate.zig +4783 30872798 1755651176000000000 bcebc8664d30ed61fbe6f4f52df7e6c8 1 std/debug/MemoryAccessor.zig +2664 30872796 1755651176000000000 d18c45d7c3943d59326b6215041f7b9b 1 std/debug/FixedBufferReader.zig +95718 30872795 1755651176000000000 031ee6c2142eb78ee4d751fdef4e8aee 1 std/debug/Dwarf.zig +22200 30872799 1755651176000000000 cadc751a24d7fe6cd0045c67d91fccc4 1 std/debug/Pdb.zig +90918 30872800 1755651176000000000 1af6e89bf60261270c63c0b89b93dbe4 1 std/debug/SelfInfo.zig +2274 30872797 1755651176000000000 a1cbdaf27c5043ba4157f3a1bfcd68fd 1 std/debug/Info.zig +8486 30872790 1755651176000000000 2ff9c5b27e3411a59088d247231e9d0f 1 std/debug/Coverage.zig +3221 30872802 1755651176000000000 ff7b6d80307d98046c1a6b71ce9736cb 1 std/debug/simple_panic.zig +2349 30872801 1755651176000000000 58f6d8954e49f4e277db7b9bad6e1f3c 1 std/debug/no_panic.zig +3939 30872811 1755651176000000000 5ee5df976eaaf300e36cd234fc3f2f43 1 std/dwarf/TAG.zig +7632 30872805 1755651176000000000 101aeaf3e9df594bf04093c15135dc96 1 std/dwarf/AT.zig +5693 30872810 1755651176000000000 01d731f8d28ba8382ff3c5885d5e0c75 1 std/dwarf/OP.zig +1963 30872809 1755651176000000000 055280c08a34f56d3d4ea7d69cf3fca3 1 std/dwarf/LANG.zig +1399 30872808 1755651176000000000 40a7d4ac60d12c6e9ca294acaed35474 1 std/dwarf/FORM.zig +1479 30872806 1755651176000000000 8bd901aaa561652b86f99819d0da7a57 1 std/dwarf/ATE.zig +643 30872807 1755651176000000000 6f6a9e4e1602df062ad02179710971c4 1 std/dwarf/EH.zig +94944 30872817 1755651176000000000 f351cb76a2427938af1d074abce787ce 1 std/fmt/float.zig +13189 30872828 1755651176000000000 8fcd1365fb1fe2c743d223fc34880b6a 1 std/fmt/parse_float.zig +2845 30872831 1755651176000000000 4f058fd80be3876870bc26a123c9de42 1 std/fs/AtomicFile.zig +114999 30872832 1755651176000000000 a44f3eadd8cf27aad7b7c047f184c8e7 1 std/fs/Dir.zig +86478 30872833 1755651176000000000 995d0bf84e899044cc3510a9ca641329 1 std/fs/File.zig +78108 30872835 1755651176000000000 be1cf725a1de08084d5bf813f6758d74 1 std/fs/path.zig +1888 30872837 1755651176000000000 2c143a188f1f9a5e0b6cf6eb3a2a3825 1 std/fs/wasi.zig +2665 30872834 1755651176000000000 a74f4aed0521f238f302bbce59933ebd 1 std/fs/get_app_data_dir.zig +0 30872836 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/fs/test.zig +2797 30872841 1755651176000000000 e2d2903d78455f002bdf1543be5bd9b3 1 std/hash/Adler32.zig +14624 30872842 1755651176000000000 5d40bb3c14d452873d2170a0dc501e12 1 std/hash/auto_hash.zig +19972 30872848 1755651176000000000 c36dede4b91e35db37ea45c66dbe6fe9 1 std/hash/crc.zig +1890 30872849 1755651176000000000 8022a7844b1545ef9cc7889a3a71944a 1 std/hash/fnv.zig +9977 30872850 1755651176000000000 26add2cb2571b835338f163c8ca63459 1 std/hash/murmur.zig +12412 30872844 1755651176000000000 cd681dc3507b42839b769eae04b1dc3b 1 std/hash/cityhash.zig +8367 30872852 1755651176000000000 4744eb583f951c0ddcee1cf3bdde33fb 1 std/hash/wyhash.zig +41799 30872853 1755651176000000000 ee3e90d0630039df9f6254b022ce80e1 1 std/hash/xxhash.zig +13560 30872862 1755651176000000000 12f037849d64048bd40c550289bf0826 1 std/heap/arena_allocator.zig +7465 30872859 1755651176000000000 c45d8aa65e37758c03dbedc65850dbf5 1 std/heap/SmpAllocator.zig +7575 30872857 1755651176000000000 b8819311409154f2ecf659e0c1e915b6 1 std/heap/FixedBufferAllocator.zig +8217 30872858 1755651176000000000 fb438f5e75bc8857d9d1a5b0e9421e85 1 std/heap/PageAllocator.zig +7469 30872865 1755651176000000000 d0066bdd4d2784177387f85d9c416259 1 std/heap/sbrk_allocator.zig +1681 30872860 1755651176000000000 720fc81adedeb4b35463081496f20d4a 1 std/heap/ThreadSafeAllocator.zig +10472 30872861 1755651176000000000 21ee044c07f5991f129755da06deea5a 1 std/heap/WasmAllocator.zig +59918 30872863 1755651176000000000 552ab3f08dc9b1a495663dc5b84ab562 1 std/heap/debug_allocator.zig +8049 30872864 1755651176000000000 cd6c38f86fa0a1bd7ddaa85a0e7f94f7 1 std/heap/memory_pool.zig +70675 30872869 1755651176000000000 dbf2b76bc62a45f82da46916ded41556 1 std/http/Client.zig +31360 30872872 1755651176000000000 abd6ae4080522f73e4745e5efce346dc 1 std/http/Server.zig +13015 30872870 1755651176000000000 4c7e2ad894ad12f141066550c9bb326a 1 std/http/HeadParser.zig +3791 30872868 1755651176000000000 61420280e3c9986a74a687031fdcf831 1 std/http/ChunkParser.zig +3108 30872871 1755651176000000000 149ac2b5413f4e7bdf793b3740a63558 1 std/http/HeaderIterator.zig +0 30872873 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/http/test.zig +7996 30872879 1755651176000000000 8b3aa35651f2969c3a859a3fab94f443 1 std/json/dynamic.zig +3272 30872881 1755651176000000000 39fdbe23f321a0cb11a35e428810a09e 1 std/json/hashmap.zig +72868 30872877 1755651176000000000 ae7b2e59c7744ce34ba98c07df5ef06b 1 std/json/Scanner.zig +33828 30872884 1755651176000000000 bb79d803b31bd0bc320ba90aa1d2b0dd 1 std/json/static.zig +37319 30872878 1755651176000000000 48c6d66b659b03b4e105add369592eda 1 std/json/Stringify.zig +0 30872886 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/json/test.zig +0 30872876 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/json/JSONTestSuite_test.zig +12048 30872931 1755651176000000000 423025cbe9a3339e236aaf0fc007496c 1 std/math/float.zig +1681 30872939 1755651176000000000 23aba00e34aa5a807ee8d4bddf2738c5 1 std/math/isnan.zig +7877 30872932 1755651176000000000 21099ae36d31e459824cfc3757a834f2 1 std/math/frexp.zig +4458 30872949 1755651176000000000 78dbab36632b04ee9c8bc0e72a713100 1 std/math/modf.zig +1136 30872927 1755651176000000000 9f0946a16071ec7d7cb9f45c227c22f1 1 std/math/copysign.zig +1083 30872937 1755651176000000000 eb357e7577b828d5fc2ce3b4118459f2 1 std/math/isfinite.zig +1775 30872938 1755651176000000000 44fb86a5536455ca3877bb415347c6ac 1 std/math/isinf.zig +1456 30872941 1755651176000000000 a37461dca6f9345d8f8a2729c13b9ff6 1 std/math/iszero.zig +1837 30872940 1755651176000000000 cb4e66e7b3adbf190150294715c788b0 1 std/math/isnormal.zig +19209 30872950 1755651176000000000 000ec81e9c79a332fb482883ab800777 1 std/math/nextafter.zig +1557 30872954 1755651176000000000 3157574850d20851e8580a398e6895a9 1 std/math/signbit.zig +503 30872953 1755651176000000000 66d1263715127908b281862dba5dc24b 1 std/math/scalbn.zig +6839 30872943 1755651176000000000 65cf74d2abee4d99cea2993060dc9cc0 1 std/math/ldexp.zig +9113 30872951 1755651176000000000 2a24fb6143c914862a5d74c95a9f8b13 1 std/math/pow.zig +7643 30872952 1755651176000000000 5c50833e1a201a5be1f48de7ea538f0d 1 std/math/powi.zig +2837 30872956 1755651176000000000 50e9a695059ca6bb04cd979304e4c09b 1 std/math/sqrt.zig +4812 30872903 1755651176000000000 6f62d1f1ae7bff93c034f6f664aeaa12 1 std/math/cbrt.zig +5378 30872892 1755651176000000000 25b4039f6f32ddc437baa4061a3f8c3d 1 std/math/acos.zig +5337 30872894 1755651176000000000 eb35acdb17b747cc2f790e4ff8666d54 1 std/math/asin.zig +7275 30872896 1755651176000000000 5d8af88aea5f35ce7e37d0f0af8a4baf 1 std/math/atan.zig +10553 30872897 1755651176000000000 0cafcb907ba579b6b64631165a647329 1 std/math/atan2.zig +4748 30872935 1755651176000000000 910e3c3ba1e7626618c73be7f12f9319 1 std/math/hypot.zig +11499 30872929 1755651176000000000 1ddb2b66fbdf7acb2a4ad484203ae340 1 std/math/expm1.zig +5519 30872936 1755651176000000000 eacf48263508740f77738f675caef7a6 1 std/math/ilogb.zig +2531 30872944 1755651176000000000 b3b40fd4682f372913e09bc18ca3fcd6 1 std/math/log.zig +1919 30872947 1755651176000000000 a350e2bd40b9fc740607c3d658668abb 1 std/math/log2.zig +5553 30872945 1755651176000000000 e10fe90c6d01abfe27b7f2ee6e929a68 1 std/math/log10.zig +4219 30872948 1755651176000000000 88ffa0f96518ccc1715935c0618e543e 1 std/math/log_int.zig +8872 30872946 1755651176000000000 754de08c8dc06a6115beb96e5a991ad7 1 std/math/log1p.zig +4299 30872895 1755651176000000000 9d6c681faf8421823919e5bf347bf740 1 std/math/asinh.zig +2756 30872893 1755651176000000000 349667a0bb1e62bdc0383bce5747190c 1 std/math/acosh.zig +3399 30872898 1755651176000000000 7b22337c4a4df112f2c4be431b076007 1 std/math/atanh.zig +4294 30872955 1755651176000000000 42ef534228feb279b81e6fa2a5d79333 1 std/math/sinh.zig +4157 30872928 1755651176000000000 1dcc281bf0ca8a9782e5ae845f7b1fa5 1 std/math/cosh.zig +4581 30872957 1755651176000000000 2b64632014a58c73e7052420b356fcaa 1 std/math/tanh.zig +2024 30872934 1755651176000000000 28fd0ee50d92f0c08fd6aab95d6f15ee 1 std/math/gcd.zig +1194 30872942 1755651176000000000 40b3836f0a2277cb76754547dd483869 1 std/math/lcm.zig +11487 30872933 1755651176000000000 c0bf0098a075fd684bcbeff41e5abbc4 1 std/math/gamma.zig +6563 30872926 1755651176000000000 dccdf309b3630a59978e204ea0cbde99 1 std/math/complex.zig +746 30872902 1755651176000000000 cd57ee7b96c9ee1b66a3e7fc3ef16da9 1 std/math/big.zig +17718 30872960 1755651176000000000 aeefc50be34a4361ff7a2aa85861ab23 1 std/mem/Allocator.zig +6027 30872963 1755651176000000000 a9b245c6e260e2a4606e53d2d51f65c6 1 std/meta/trailer_flags.zig +0 30872967 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/net/test.zig +283817 30873004 1755651176000000000 e22376b03b7f60e971b4376ee895d68b 1 std/os/linux.zig +10460 30873007 1755651176000000000 488b62d22bbe9301ab373d2949f7d23b 1 std/os/plan9.zig +7746 30873045 1755651176000000000 931017d063b5a98aee21c888aac3dc3d 1 std/os/uefi.zig +16108 30873046 1755651176000000000 3cfe5b8a9735273d6782d1c456b08f15 1 std/os/wasi.zig +34093 30872971 1755651176000000000 d0e8187f608f5706844bd3662b1ea1ad 1 std/os/emscripten.zig +207257 30873060 1755651176000000000 773327deeb78ed0db89c9fa256583be1 1 std/os/windows.zig +2097 30872972 1755651176000000000 6b77b7f42ffec7eedf37dfecdfdd7014 1 std/os/freebsd.zig +0 30873065 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/posix/test.zig +72290 30873070 1755651176000000000 e37f5a4f9f40fbfad5a97b8ac9aacaae 1 std/process/Child.zig +51714 30873075 1755651176000000000 eb8790d984ce4a6ddd6376d877c85ff1 1 std/sort/block.zig +10719 30873076 1755651176000000000 112b7c1a501cf9a872fe6b59ffa7df08 1 std/sort/pdq.zig +17117 30873082 1755651176000000000 5e6a75c2975430f5d46623d1537855a5 1 std/tar/Writer.zig +0 30873083 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/tar/test.zig +5694 30873087 1755651176000000000 cd71b2d90772c02d65444191f9fd7d5d 1 std/testing/FailingAllocator.zig +6764 30873090 1755651176000000000 c674a37722ac57c1bfc929140e058755 1 std/time/epoch.zig +7574 30873101 1755651176000000000 d017fea857f95f2c01199efab8dbf965 1 std/valgrind/memcheck.zig +2493 30873100 1755651176000000000 30a771b8491dd283a50c6166babded38 1 std/valgrind/callgrind.zig +1249 30873099 1755651176000000000 6781a2e56089a14f4f2a391169bf7c05 1 std/valgrind/cachegrind.zig +62827 30873145 1755651176000000000 d1f5a0dbf135b754ed6a703e23df50e6 1 std/zig/tokenizer.zig +32614 30873112 1755651176000000000 198542319824c4a3f109c64260324d68 1 std/zig/ErrorBundle.zig +7166 30873116 1755651176000000000 860d7dc4b9813278374fb24397bb0a4d 1 std/zig/Server.zig +1605 30873111 1755651176000000000 7cfa1ea3449449667ebf6c5201f6dbaf 1 std/zig/Client.zig +14323 30873133 1755651176000000000 7e26c1a770304af7ccd5f605ada0a2e5 1 std/zig/string_literal.zig +6720 30873129 1755651176000000000 07baee4aa2d7c097b1307a2cdec422cf 1 std/zig/number_literal.zig +1666 30873132 1755651176000000000 87e0eb501395d68ddce525f8555f960c 1 std/zig/primitives.zig +148759 30873107 1755651176000000000 5f6f4c60784f8ab4107f3383e980dfca 1 std/zig/Ast.zig +568292 30873108 1755651176000000000 cd6d40183f2ae21282fd3d5fbbfc8238 1 std/zig/AstGen.zig +204779 30873118 1755651176000000000 4104285d49190afffd58ec1c3544ed4a 1 std/zig/Zir.zig +9166 30873119 1755651176000000000 6e1c16d90de3a0ffaeaf1d478014a072 1 std/zig/Zoir.zig +36096 30873120 1755651176000000000 a625edc6603167137dcd761c6dc77e82 1 std/zig/ZonGen.zig +58141 30873143 1755651176000000000 816fe631c09ee2b8359e520acee70d8b 1 std/zig/system.zig +21416 30873110 1755651176000000000 d1b3749b34a2551f94643e698928aae0 1 std/zig/BuiltinFn.zig +41574 30873109 1755651176000000000 a042f3e8774e8bd3822b35117bbc3d78 1 std/zig/AstRlAnnotate.zig +36100 30873114 1755651176000000000 62fa4ce130060129db4288d3749f2488 1 std/zig/LibCInstallation.zig +45848 30873117 1755651176000000000 e70747937d94d1333d148947c57547da 1 std/zig/WindowsSdk.zig +9786 30873113 1755651176000000000 280d2bdf0f1a8f96ecaa4af86ba0a60e 1 std/zig/LibCDirs.zig +25071 30873144 1755651176000000000 959e2ad518bd8b10bbd16a31cfe2cf7a 1 std/zig/target.zig +247 30873128 1755651176000000000 4fee6920e55c663811dd32d69b7f2937 1 std/zig/llvm.zig +8713 30873121 1755651176000000000 53cfae8a8276d7204622550f50243f6b 1 std/zig/c_builtins.zig +28363 30873122 1755651176000000000 e2c60f43c6ae6eb4e168dc7fabd2138a 1 std/zig/c_translation.zig +117354 30873150 1755651176000000000 ab567b993b2504504e04ae0815a40fed 1 std/zon/parse.zig +46916 30873151 1755651176000000000 7bf4408cdd1c84975a793e5daefb12a8 1 std/zon/stringify.zig +32288 30873149 1755651176000000000 5eeb9845ed3d086fe03083e2f7b9e446 1 std/zon/Serializer.zig +2159 30873057 1755651176000000000 e912d0164349d3c86eb8b1226a86388f 1 std/os/windows/tls.zig +10957 30453592 1755651171000000000 86adef0c76818174cbce959185f8aa9c 1 compiler_rt/common.zig +7394 30453597 1755651171000000000 4d63e8360c0ca220253582124186fb27 1 compiler_rt/count0bits.zig +1385 30453782 1755651171000000000 929736d7c0636ec88ef908c0b4c15a65 1 compiler_rt/parity.zig +1916 30453786 1755651171000000000 9e893175f43f5d42fd541260ca5386e7 1 compiler_rt/popcount.zig +2762 30453570 1755651171000000000 972f20e5339815a5e21e7b0bc6202353 1 compiler_rt/bitreverse.zig +3260 30453574 1755651171000000000 0ec938dfe8c0a2d466838df303eef58d 1 compiler_rt/bswap.zig +1971 30453583 1755651171000000000 f4b500a005ae4486ff3df7110a9e2523 1 compiler_rt/cmp.zig +4845 30453796 1755651171000000000 8761326b4fa02822928e9a2bf1845ea7 1 compiler_rt/shift.zig +1171 30453768 1755651171000000000 b64a4252e2958ab85e11cf3e72046c01 1 compiler_rt/negXi2.zig +27737 30453735 1755651171000000000 0dc9529debd21eeb1908af208d1f2e9e 1 compiler_rt/int.zig +3064 30453747 1755651171000000000 c4a4e1485c87b5438551c701951d1b90 1 compiler_rt/mulXi3.zig +1113 30453615 1755651171000000000 8a9686a30bb60ded94cfbc7b0c188192 1 compiler_rt/divti3.zig +770 30453838 1755651171000000000 6c53a5d81aa4786ec59e8bd320265f7d 1 compiler_rt/udivti3.zig +1380 30453745 1755651171000000000 e03900eae21e2b320a2e62fc03e5074f 1 compiler_rt/modti3.zig +846 30453839 1755651171000000000 afc9b4b801628d3040423cf318155f2f 1 compiler_rt/umodti3.zig +671 30453546 1755651171000000000 a6cfe83f9d8eb6e22dee6dc0ccee3367 1 compiler_rt/absv.zig +311 30453549 1755651171000000000 9a044dbb5695c2eea3bda231bfeda676 1 compiler_rt/absvsi2.zig +311 30453547 1755651171000000000 0c0607d153f93dee28f63beeb116cbc1 1 compiler_rt/absvdi2.zig +314 30453551 1755651171000000000 d826815938d3df68320935b9968c29db 1 compiler_rt/absvti2.zig +1303 30453776 1755651171000000000 50df1f7234ac1a8d4f2093362c90b93e 1 compiler_rt/negv.zig +874 30453563 1755651171000000000 02f065d511a9d47115363632c4dbdeda 1 compiler_rt/addvsi3.zig +860 30453812 1755651171000000000 28391dec7d271786c0a340a5d698d3ba 1 compiler_rt/subvsi3.zig +932 30453811 1755651171000000000 c20c4bc9d2bbfbdf0b900e7d7218879e 1 compiler_rt/subvdi3.zig +902 30453765 1755651171000000000 45f09fd05e65513dfd810114991820f4 1 compiler_rt/mulvsi3.zig +1752 30453557 1755651171000000000 1e067dd191e3750e2eebc9a9891bfe8d 1 compiler_rt/addo.zig +1742 30453805 1755651171000000000 a6e4dadcd9f88d3c47b48642ea0242d5 1 compiler_rt/subo.zig +2643 30453757 1755651171000000000 7437cfee5e2a6d47f221d2f163a92242 1 compiler_rt/mulo.zig +6009 30453625 1755651171000000000 013ab2758ced7bbc2fc6988565eeb6c7 1 compiler_rt/extendf.zig +920 30453628 1755651171000000000 f422913a85e1e91ef2039ab58547c0fc 1 compiler_rt/extendhfsf2.zig +373 30453627 1755651171000000000 ed651ccba735e247ddf2016832e06f1c 1 compiler_rt/extendhfdf2.zig +376 30453629 1755651171000000000 0c74a49a05b638424700546195a373ee 1 compiler_rt/extendhftf2.zig +373 30453630 1755651171000000000 23b1c51db225608b57400e8118ffa9ec 1 compiler_rt/extendhfxf2.zig +644 30453631 1755651171000000000 5bd066e81499f866ae53e4e86d5e5c07 1 compiler_rt/extendsfdf2.zig +781 30453632 1755651171000000000 e52fbda9a494609786f8fcb77d847604 1 compiler_rt/extendsftf2.zig +360 30453633 1755651171000000000 e942ea8b9c6b17baaeea42c96e99effa 1 compiler_rt/extendsfxf2.zig +781 30453623 1755651171000000000 87ecde8777ad8ff8ed4dbc9c650f0270 1 compiler_rt/extenddftf2.zig +364 30453624 1755651171000000000 9f715eab9e2e310deef980aead0e7500 1 compiler_rt/extenddfxf2.zig +1604 30453634 1755651171000000000 c4862b4d4cfcee360ed2c56a114cbf4a 1 compiler_rt/extendxftf2.zig +8121 30453819 1755651171000000000 20afe15564559323e44421df48412060 1 compiler_rt/truncf.zig +881 30453821 1755651171000000000 47d13f34934c26c69eb88e81670d8f85 1 compiler_rt/truncsfhf2.zig +616 30453817 1755651171000000000 0641d56997ae4f4b5207adc68dc72f3b 1 compiler_rt/truncdfhf2.zig +600 30453818 1755651171000000000 02da0cc6b32c97637c74cbb10ccb54db 1 compiler_rt/truncdfsf2.zig +356 30453827 1755651171000000000 3bf820f222640094f3a72a66ffe8198e 1 compiler_rt/truncxfhf2.zig +333 30453828 1755651171000000000 66119941d376ee0a437b06bd3072d524 1 compiler_rt/truncxfsf2.zig +333 30453826 1755651171000000000 c13541abc36c28230d412dc5252b693e 1 compiler_rt/truncxfdf2.zig +359 30453823 1755651171000000000 d8f660a94187293e5a911454282b4029 1 compiler_rt/trunctfhf2.zig +731 30453824 1755651171000000000 13584c74605e851e6d831a9e0fce9886 1 compiler_rt/trunctfsf2.zig +731 30453822 1755651171000000000 457c0f6c909aa10450fd884ff88287f9 1 compiler_rt/trunctfdf2.zig +2852 30453825 1755651171000000000 d8494bd8878af1312bf45635b710a4b1 1 compiler_rt/trunctfxf2.zig +4079 30453736 1755651171000000000 5a505058b770b465ce081eb6a57e7a43 1 compiler_rt/int_from_float.zig +341 30453645 1755651171000000000 287cd5239eed800fcc228dfe9a2734d4 1 compiler_rt/fixhfsi.zig +341 30453643 1755651171000000000 8acd6b1ce769a390c40385d65d7fad51 1 compiler_rt/fixhfdi.zig +713 30453646 1755651171000000000 f02a5506718df6aec134d680607bf58f 1 compiler_rt/fixhfti.zig +564 30453644 1755651171000000000 9ae4ea7e25821706c5468c7c2c445448 1 compiler_rt/fixhfei.zig +616 30453650 1755651171000000000 703dfbffebdc9fddd06b6c8d668e5e6a 1 compiler_rt/fixsfsi.zig +701 30453648 1755651171000000000 88e7049e069292d16c1ff8720dff21c5 1 compiler_rt/fixsfdi.zig +713 30453651 1755651171000000000 27665f157ae97b6a905d2c3b3d14b55c 1 compiler_rt/fixsfti.zig +564 30453649 1755651171000000000 9296a734389623faf0ccbbce95248896 1 compiler_rt/fixsfei.zig +616 30453641 1755651171000000000 d6c6cfff39408568470a4ce56f20701b 1 compiler_rt/fixdfsi.zig +701 30453639 1755651171000000000 d37fe214a882924d291912211617b7e0 1 compiler_rt/fixdfdi.zig +713 30453642 1755651171000000000 acf45affbae83f950121a0e78d1d9d43 1 compiler_rt/fixdfti.zig +564 30453640 1755651171000000000 475c0ed3637871aa4bdba39fb7ac07c7 1 compiler_rt/fixdfei.zig +736 30453654 1755651171000000000 9e04b0c9b7e24d0a417e6418967a82bf 1 compiler_rt/fixtfsi.zig +736 30453652 1755651171000000000 54e8e270c03030539e0b628265ebe138 1 compiler_rt/fixtfdi.zig +867 30453655 1755651171000000000 159fff04699a850f0877d0d860fc5c23 1 compiler_rt/fixtfti.zig +565 30453653 1755651171000000000 f3202275d298913c25f0f8dfd3242be8 1 compiler_rt/fixtfei.zig +341 30453678 1755651171000000000 c5d9b1d68c225613e28b45cb4cec11bc 1 compiler_rt/fixxfsi.zig +341 30453676 1755651171000000000 87e625ba575a65977f04b534e5fc766d 1 compiler_rt/fixxfdi.zig +713 30453679 1755651171000000000 66c8929d08870c9d48875898ac51d464 1 compiler_rt/fixxfti.zig +564 30453677 1755651171000000000 4e4a4e4ac45142bc6c99b298914cc0e4 1 compiler_rt/fixxfei.zig +350 30453662 1755651171000000000 ba04537148169a4eda9cc74755e9d2b2 1 compiler_rt/fixunshfsi.zig +350 30453660 1755651171000000000 3f19d12e7ff9198e211b2298b6bd5efc 1 compiler_rt/fixunshfdi.zig +731 30453663 1755651171000000000 3dc5d5bb0159c254a4dc44defc534d08 1 compiler_rt/fixunshfti.zig +575 30453661 1755651171000000000 7747207f7d598d23ace14265322b94f9 1 compiler_rt/fixunshfei.zig +628 30453666 1755651171000000000 57232664ed8c180d0347c1a5b7fb707c 1 compiler_rt/fixunssfsi.zig +713 30453664 1755651171000000000 7ccb1263e66738a414ca7a9521baf546 1 compiler_rt/fixunssfdi.zig +731 30453667 1755651171000000000 46aa3b64c89e9e65d2ce377e2fda821b 1 compiler_rt/fixunssfti.zig +575 30453665 1755651171000000000 38283592b0bac48f035456b4aa28b777 1 compiler_rt/fixunssfei.zig +628 30453658 1755651171000000000 18ae349f0a3aee101c1024994601c18b 1 compiler_rt/fixunsdfsi.zig +713 30453656 1755651171000000000 15697c6d14ff144c8a8fbbbfc25b56ac 1 compiler_rt/fixunsdfdi.zig +731 30453659 1755651171000000000 ccb4ab408cf9f6b931333d2e2281d138 1 compiler_rt/fixunsdfti.zig +575 30453657 1755651171000000000 0a1cb46013571dde4b1bb4448121ba85 1 compiler_rt/fixunsdfei.zig +754 30453670 1755651171000000000 717dbc2cecb0b7f0417ed241602b0235 1 compiler_rt/fixunstfsi.zig +754 30453668 1755651171000000000 e0117ad5626119b0e5de39f22424c41d 1 compiler_rt/fixunstfdi.zig +891 30453671 1755651171000000000 c4d7fd8a337264713824559441d264bf 1 compiler_rt/fixunstfti.zig +576 30453669 1755651171000000000 cf926c64f6225389c139b32f9fce285b 1 compiler_rt/fixunstfei.zig +350 30453674 1755651171000000000 08e70a885b4a61a0e97871cbe7781a36 1 compiler_rt/fixunsxfsi.zig +350 30453672 1755651171000000000 9df747511c3f54bb2bb63cfce791b071 1 compiler_rt/fixunsxfdi.zig +731 30453675 1755651171000000000 89cbbf3a56b9124c65e08a4c565b4754 1 compiler_rt/fixunsxfti.zig +575 30453673 1755651171000000000 9834bffa03e61a47b5f6368b93c2b278 1 compiler_rt/fixunsxfei.zig +4111 30453680 1755651171000000000 0731ddef2609f045793d30b988a64339 1 compiler_rt/float_from_int.zig +347 30453693 1755651171000000000 46437c47ae3550f8dfea8ffe706e5cd5 1 compiler_rt/floatsihf.zig +619 30453694 1755651171000000000 d0709844134d344f649fe5de487e8d43 1 compiler_rt/floatsisf.zig +619 30453692 1755651171000000000 eb5e4bb9bdf0af3d17044dbab1c19f6a 1 compiler_rt/floatsidf.zig +748 30453695 1755651171000000000 6acf05da538e6fe3f7a19cdbf9326f26 1 compiler_rt/floatsitf.zig +347 30453696 1755651171000000000 f364c5d870c6ecf44a5a38ec49aaabe6 1 compiler_rt/floatsixf.zig +347 30453683 1755651171000000000 2b30fc40286f695404a52daa3020e46d 1 compiler_rt/floatdihf.zig +704 30453684 1755651171000000000 be61dfcf3ef7f7cb87fdb442491846aa 1 compiler_rt/floatdisf.zig +704 30453682 1755651171000000000 cf1600427d0617517935eed129801a82 1 compiler_rt/floatdidf.zig +748 30453685 1755651171000000000 8811790f2053d4000e252e7019110198 1 compiler_rt/floatditf.zig +347 30453686 1755651171000000000 eb71124e4f62f32423d28d002b3dc4fa 1 compiler_rt/floatdixf.zig +712 30453698 1755651171000000000 b0cac521d295bf19d575119ed72c24e5 1 compiler_rt/floattihf.zig +712 30453699 1755651171000000000 72a9275278530696bb432b1a92758b42 1 compiler_rt/floattisf.zig +712 30453697 1755651171000000000 5dde3f565fe32da11fe052594ee197ee 1 compiler_rt/floattidf.zig +872 30453700 1755651171000000000 1ae512923174c3e6fa1ba8d65abf6c4f 1 compiler_rt/floattitf.zig +712 30453701 1755651171000000000 e7550374f92dcebdb11cdef092ffb719 1 compiler_rt/floattixf.zig +569 30453688 1755651171000000000 6cacec7f1baf3962451f632af2333d15 1 compiler_rt/floateihf.zig +569 30453689 1755651171000000000 00ff12ec132a6de0ddba566b32f0ce56 1 compiler_rt/floateisf.zig +569 30453687 1755651171000000000 39f48db5b22c07b8e1ede4f6ad7dfeab 1 compiler_rt/floateidf.zig +571 30453690 1755651171000000000 558b7faae150629fc02a56c6f795823a 1 compiler_rt/floateitf.zig +569 30453691 1755651171000000000 3219adecb483c360d12a9f49677362a1 1 compiler_rt/floateixf.zig +357 30453713 1755651171000000000 00a0cc52e80a5d8768c00c875a2c38fb 1 compiler_rt/floatunsihf.zig +628 30453714 1755651171000000000 7758994bb35f2593765f89bd87e8f055 1 compiler_rt/floatunsisf.zig +628 30453712 1755651171000000000 20cada91ea193709f7cdb30fc7e305ed 1 compiler_rt/floatunsidf.zig +761 30453715 1755651171000000000 c3fa8cad530a016146e93e31095198f1 1 compiler_rt/floatunsitf.zig +353 30453716 1755651171000000000 182b577da08432924ceb5ee9bd0f2d88 1 compiler_rt/floatunsixf.zig +353 30453703 1755651171000000000 0e605deb96515a6775375e7e47db3215 1 compiler_rt/floatundihf.zig +713 30453704 1755651171000000000 e063c2d245ac649a28457da928aa6736 1 compiler_rt/floatundisf.zig +713 30453702 1755651171000000000 904d6181c4aecb7405c8e4edc325cc82 1 compiler_rt/floatundidf.zig +761 30453705 1755651171000000000 3e7630bf1c35c7de0a6c3ffd69b2673d 1 compiler_rt/floatunditf.zig +353 30453706 1755651171000000000 1799170b2737a9e2a28a9808dd0e051a 1 compiler_rt/floatundixf.zig +724 30453718 1755651171000000000 2df4b1f0edb48dd79ccda95408b91311 1 compiler_rt/floatuntihf.zig +724 30453719 1755651171000000000 b990cd4c97634e1f3f4261191531b301 1 compiler_rt/floatuntisf.zig +724 30453717 1755651171000000000 f7a4d0e5f29f41cadf67ddd6f68c29df 1 compiler_rt/floatuntidf.zig +888 30453720 1755651171000000000 db22f0e3984446069375f2cae2a9aca7 1 compiler_rt/floatuntitf.zig +724 30453721 1755651171000000000 bc561095bbe802fe90354de9e376c896 1 compiler_rt/floatuntixf.zig +577 30453708 1755651171000000000 588ff37c9a79b9efee8d8ab27866c544 1 compiler_rt/floatuneihf.zig +577 30453709 1755651171000000000 83c4fadef25daa676e2b17560f7b5b9f 1 compiler_rt/floatuneisf.zig +577 30453707 1755651171000000000 9ab7e41efc150cfc29183a68faa98145 1 compiler_rt/floatuneidf.zig +579 30453710 1755651171000000000 c63445cffc5e5f137b97a50c2bb9ef88 1 compiler_rt/floatuneitf.zig +577 30453711 1755651171000000000 36f8e586a4b887c1b1b1537a5a28ae74 1 compiler_rt/floatuneixf.zig +4582 30453594 1755651171000000000 e5686ffdd46c3d4d1c4485eb9eef4475 1 compiler_rt/comparef.zig +2267 30453586 1755651171000000000 f21670514136306b5c179b4ee414d001 1 compiler_rt/cmphf2.zig +3161 30453587 1755651171000000000 2bb653afb77db3d5045cbb9a02ba3d6f 1 compiler_rt/cmpsf2.zig +3161 30453584 1755651171000000000 5ff781811d3f999df43ff5a63d8e0b2f 1 compiler_rt/cmpdf2.zig +4739 30453589 1755651171000000000 13d86b526247d5092d8aacf0b67bdcf1 1 compiler_rt/cmptf2.zig +2248 30453591 1755651171000000000 c47b1b506563f516dd85df37da1ca80d 1 compiler_rt/cmpxf2.zig +341 30453841 1755651171000000000 2ed4e26e2ea3869e810a2840aa44890c 1 compiler_rt/unordhf2.zig +634 30453842 1755651171000000000 ab97f41ff7e85578831672d29873bb7c 1 compiler_rt/unordsf2.zig +634 30453840 1755651171000000000 8fcd7331877db9156a9489d458816d1a 1 compiler_rt/unorddf2.zig +341 30453844 1755651171000000000 c6765ab1f830c13ccdf800de46e1d4c3 1 compiler_rt/unordxf2.zig +656 30453843 1755651171000000000 2a6c721c57e5b4fc4d03f1414d3bfa0c 1 compiler_rt/unordtf2.zig +960 30453730 1755651171000000000 44f070ee85c4299b7b861a8753e20983 1 compiler_rt/gehf2.zig +1567 30453731 1755651171000000000 d83ee65d70e22642ca348d28af9e8b1d 1 compiler_rt/gesf2.zig +1567 30453729 1755651171000000000 f7babfa2824209ae274b4f7f048979ff 1 compiler_rt/gedf2.zig +531 30453733 1755651171000000000 825137d9239fe8820abd067fa358ff6c 1 compiler_rt/gexf2.zig +1375 30453732 1755651171000000000 baf5038daac3654c38c49861c12af8f8 1 compiler_rt/getf2.zig +6348 30453554 1755651171000000000 9d6fb22665d5ae546ff48bce14f4265e 1 compiler_rt/addf3.zig +319 30453556 1755651171000000000 522a47928eb441889cd2d8293ee58f93 1 compiler_rt/addhf3.zig +594 30453561 1755651171000000000 98c81cd3c52b093c912ead4cc50ee463 1 compiler_rt/addsf3.zig +594 30453553 1755651171000000000 2fd1f70cd54ab97c68acda6ccd8698ca 1 compiler_rt/adddf3.zig +725 30453562 1755651171000000000 37b20d2aff3bdc9e0e864c4dd0285ce2 1 compiler_rt/addtf3.zig +323 30453564 1755651171000000000 3de55ee7141ae65ffda2d57872f49058 1 compiler_rt/addxf3.zig +406 30453804 1755651171000000000 974a08d8b377c7154ee50e645c4aa5f1 1 compiler_rt/subhf3.zig +735 30453809 1755651171000000000 c6bad960b48197993e5154abc0dad73e 1 compiler_rt/subsf3.zig +735 30453803 1755651171000000000 932c462bb7a1ebd827a8601a1a673d8f 1 compiler_rt/subdf3.zig +884 30453810 1755651171000000000 68c91ec93f437c6420395ef3a23d922a 1 compiler_rt/subtf3.zig +399 30453813 1755651171000000000 78f78d004278fcfad7128556fb169afb 1 compiler_rt/subxf3.zig +8398 30453753 1755651171000000000 2e26880d97fb35e9bd4cc1993465b0cb 1 compiler_rt/mulf3.zig +323 30453756 1755651171000000000 da7bee33a5dc12783e6265082c6339c5 1 compiler_rt/mulhf3.zig +598 30453762 1755651171000000000 fee4abf27cb742c17acbc579ce4181c9 1 compiler_rt/mulsf3.zig +598 30453752 1755651171000000000 a3c5a4d1d76996c6a8862bc7edee60e9 1 compiler_rt/muldf3.zig +737 30453764 1755651171000000000 05e662af04b7c0553caed681261620bc 1 compiler_rt/multf3.zig +323 30453767 1755651171000000000 20b9631d337fdb552805ef976ffdc51e 1 compiler_rt/mulxf3.zig +344 30453607 1755651171000000000 c658197861ba0fe65f6c4da66921da72 1 compiler_rt/divhf3.zig +8574 30453610 1755651171000000000 57deaddafd7a8db15df6bbeca7d2d850 1 compiler_rt/divsf3.zig +9366 30453604 1755651171000000000 3f0a4a77ece42e5c0a92b591f8219814 1 compiler_rt/divdf3.zig +8669 30453618 1755651171000000000 9c07b341767fa995dedd55167cc3e222 1 compiler_rt/divxf3.zig +9925 30453613 1755651171000000000 28531f064bbb7a862fb99a6dd7127380 1 compiler_rt/divtf3.zig +265 30453771 1755651171000000000 ff779eb9e3281d0f8136f5b61b8e6515 1 compiler_rt/neghf2.zig +530 30453772 1755651171000000000 e570a93d326095aad9dfa0af89f5e12d 1 compiler_rt/negsf2.zig +530 30453769 1755651171000000000 239867284b810ba2b4b7139ff96a22c0 1 compiler_rt/negdf2.zig +409 30453774 1755651171000000000 68cda8c4538ebcdadbb16771ebed9613 1 compiler_rt/negtf2.zig +265 30453780 1755651171000000000 e6f608fbc42d09928e6d353d3e4ae05e 1 compiler_rt/negxf2.zig +2072 30453790 1755651171000000000 73e4d664a217ad2fe999244a64307073 1 compiler_rt/powiXf2.zig +2275 30453749 1755651171000000000 31c049fe940585ddd225b0c4f49de0ab 1 compiler_rt/mulc3.zig +425 30453755 1755651171000000000 9057d1c7c2b8e98f5c09215baab464e3 1 compiler_rt/mulhc3.zig +425 30453761 1755651171000000000 46a186b40dbf8b1a78fd7664e825477d 1 compiler_rt/mulsc3.zig +425 30453751 1755651171000000000 ae9761607983803a875dc03e2bcf93b2 1 compiler_rt/muldc3.zig +425 30453766 1755651171000000000 241de1bd5170ea794fe6a65e3ca1c4b6 1 compiler_rt/mulxc3.zig +581 30453763 1755651171000000000 8ff2e7539ccf94a8ea6a7d0fb870f8ac 1 compiler_rt/multc3.zig +2280 30453601 1755651171000000000 9e6aaeda713b6cd43eca1180606dc9f8 1 compiler_rt/divc3.zig +434 30453606 1755651171000000000 99234ee0594362f25d0034479872a24d 1 compiler_rt/divhc3.zig +434 30453609 1755651171000000000 19324ba1cf08e607b54db47c52783c60 1 compiler_rt/divsc3.zig +434 30453603 1755651171000000000 a5c0557ad47ea2daea69c331226b6bb8 1 compiler_rt/divdc3.zig +434 30453617 1755651171000000000 0ba3ba63c22ba9609413264f8e142986 1 compiler_rt/divxc3.zig +590 30453612 1755651171000000000 b09a8555aa3985adc8de9d9dbbaeaab0 1 compiler_rt/divtc3.zig +5139 30453578 1755651171000000000 3377d5bdbc89549229fcc2bdded00385 1 compiler_rt/ceil.zig +5691 30453596 1755651171000000000 4e53be9b20a311a96eb63bafe37225d8 1 compiler_rt/cos.zig +11677 30453621 1755651171000000000 c4da63d897aa5d3cef3988faddf0733e 1 compiler_rt/exp.zig +20924 30453622 1755651171000000000 8444963967b3c617eebec50d6b319393 1 compiler_rt/exp2.zig +1913 30453635 1755651171000000000 d639f3899db4d8abd8eb6de3c9db692b 1 compiler_rt/fabs.zig +6290 30453722 1755651171000000000 f78026c2945813b1868334b3f8d6b1ea 1 compiler_rt/floor.zig +11575 30453723 1755651171000000000 acbf337ea57443d50122200a70477bd3 1 compiler_rt/fma.zig +2867 30453724 1755651171000000000 53832890224a36ee564f78656fad8acb 1 compiler_rt/fmax.zig +2869 30453725 1755651171000000000 16d3b98ffc9e7622d085e6ec340bef8b 1 compiler_rt/fmin.zig +12218 30453726 1755651171000000000 6096cb43202506289c56b29536a3c88b 1 compiler_rt/fmod.zig +8304 30453738 1755651171000000000 4a2ae209edc8dde5555884addb0c3270 1 compiler_rt/log.zig +9499 30453739 1755651171000000000 192e6cb083dc2203281a462a1129dc3e 1 compiler_rt/log10.zig +8927 30453740 1755651171000000000 788bd8e755b980f4765163024433bbef 1 compiler_rt/log2.zig +5307 30453795 1755651171000000000 64efbcc2e1df4cd325e1f4f05a9b43b6 1 compiler_rt/round.zig +6783 30453798 1755651171000000000 46b58824ce56ea0819341b2de4e4ce88 1 compiler_rt/sin.zig +8779 30453799 1755651171000000000 3372bf45f142a4244845a7d576e8a739 1 compiler_rt/sincos.zig +8445 30453800 1755651171000000000 834a20db0b154a40177782adbf1d021c 1 compiler_rt/sqrt.zig +6175 30453814 1755651171000000000 38bdd1e5397ae3ef6734324ee90f2cd8 1 compiler_rt/tan.zig +4509 30453816 1755651171000000000 452e79786bcf746a89464e0b468a1772 1 compiler_rt/trunc.zig +2047 30453608 1755651171000000000 1b5ba254fdfc08708a375c730450065e 1 compiler_rt/divmodei4.zig +5345 30453834 1755651171000000000 ce988d5b59fa957acec0cc0f5514f027 1 compiler_rt/udivmodei4.zig +886 30453836 1755651171000000000 3884d7d5d17d10b6c390591f14760c21 1 compiler_rt/udivmodti4.zig +2988 30453781 1755651171000000000 727f94ca1d77099453ad061b28f9f45b 1 compiler_rt/os_version_check.zig +12571 30453620 1755651171000000000 f2228bdf0cb635f1b1b962a3db633e85 1 compiler_rt/emutls.zig +11129 30453565 1755651171000000000 48b4362e028a3e1634d5ca553bd4f739 1 compiler_rt/arm.zig +2563 30453567 1755651171000000000 667b1a412a0d66f8b44b2a8e8e4e16e2 1 compiler_rt/aulldiv.zig +2618 30453568 1755651171000000000 420aa19734f8e183daf736d09d96e8e9 1 compiler_rt/aullrem.zig +7746 30453579 1755651171000000000 65f560b740acc191d870c5c89599c99a 1 compiler_rt/clear_cache.zig +45809 30453734 1755651171000000000 8aceb9f3653d891b582dbd9b55b0d02a 1 compiler_rt/hexagon.zig +26388 30453566 1755651171000000000 2dbf62f073b314f8249867dbbbfb5589 1 compiler_rt/atomics.zig +9539 30453802 1755651171000000000 1d35c260060522cd892607322c1b0e17 1 compiler_rt/stack_probe.zig +79084 30453545 1755651171000000000 bda0e04701fa77ae568c29186ee9ccfb 1 compiler_rt/aarch64_outline_atomics.zig +6452 30453742 1755651171000000000 4cf074ce1df0bab8aba60356cc8ab857 1 compiler_rt/memcpy.zig +876 30453744 1755651171000000000 13a474bc83ea39da1548064a0ec84fe6 1 compiler_rt/memset.zig +7246 30453743 1755651171000000000 ab21f482b4ceecf867dcaf6370424fd5 1 compiler_rt/memmove.zig +931 30453741 1755651171000000000 ab9203076a9f7358651a1ac57a2238e6 1 compiler_rt/memcmp.zig +874 30453569 1755651171000000000 964d18da8969575344227310559069cf 1 compiler_rt/bcmp.zig +4524 30453801 1755651171000000000 3e80fe1b407f6f691b38a2b042fb4b64 1 compiler_rt/ssp.zig +8052 30872536 1755651176000000000 bbc3cbd53ca9eaab481a4b2874506c59 1 std/Build/Cache/Path.zig +2142 30872535 1755651176000000000 fe57a392618de045bf46b476d4e9b36f 1 std/Build/Cache/Directory.zig +37958 30872534 1755651176000000000 09f6c6d5c5a3e85759082f1ad46ebffa 1 std/Build/Cache/DepTokenizer.zig +2901 30872541 1755651176000000000 d277c72d570fa923fd437605bbd83e30 1 std/Build/Step/CheckFile.zig +117426 30872542 1755651176000000000 f327f9fe4a8649cc483e714c56bdafff 1 std/Build/Step/CheckObject.zig +41853 30872544 1755651176000000000 b089407ebc9e35a98f96dcfafbea622a 1 std/Build/Step/ConfigHeader.zig +831 30872545 1755651176000000000 0f223ee68995072c4beb7fd3ae600b02 1 std/Build/Step/Fail.zig +2711 30872546 1755651176000000000 72715636b21818d37288de283148c101 1 std/Build/Step/Fmt.zig +7843 30872547 1755651176000000000 b720790bf6e89535660d8996075ceed1 1 std/Build/Step/InstallArtifact.zig +4431 30872548 1755651176000000000 d1f0707c6afc3c9202b9d6dd0c114338 1 std/Build/Step/InstallDir.zig +1460 30872549 1755651176000000000 0040eb5b0836e8fa2056b8e33d66b4dd 1 std/Build/Step/InstallFile.zig +8154 30872550 1755651176000000000 fdd933a4e6d14f259812199ba337c9f2 1 std/Build/Step/ObjCopy.zig +86953 30872543 1755651176000000000 e814ef2854d0025d3c1a64913f7cbbf2 1 std/Build/Step/Compile.zig +23856 30872551 1755651176000000000 04314b9ec6c4719520c8922f20479b10 1 std/Build/Step/Options.zig +1443 30872552 1755651176000000000 ad5ec7793142fc110b85e04588c7be90 1 std/Build/Step/RemoveDir.zig +73144 30872553 1755651176000000000 defa27d5c5918845503abf3bee647924 1 std/Build/Step/Run.zig +7344 30872554 1755651176000000000 1a07c4e3f9436bca621e0ab521e389b5 1 std/Build/Step/TranslateC.zig +13184 30872556 1755651176000000000 d3b8a19eb1eb2d1fa857b99bfea07950 1 std/Build/Step/WriteFile.zig +4247 30872555 1755651176000000000 78c06c4c05a1846f4e7d6ff9c0da4068 1 std/Build/Step/UpdateSourceFiles.zig +22825 30872559 1755651176000000000 e4bcf69644dd1afc10772570851bf6db 1 std/Build/Watch/FsEvents.zig +1731 30872569 1755651176000000000 daa1d02b14c40a08f9a23bf20fa27ab2 1 std/Io/Reader/Limited.zig +0 30872570 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/Io/Reader/test.zig +2533 30872628 1755651176000000000 e0af5510611c7c2688093972c6ace145 1 std/Thread/Mutex/Recursive.zig +11928 30872662 1755651176000000000 7a1e10e0d0e9210d2757e410d8473def 1 std/compress/flate/Compress.zig +47768 30872663 1755651176000000000 d87a77c2d3a950f7fb4503b2e91beb66 1 std/compress/flate/Decompress.zig +18914 30872664 1755651176000000000 c9cb33e59ca13018183045e0a1d980a9 1 std/compress/flate/HuffmanEncoder.zig +11871 30872674 1755651176000000000 1a80b6a0f5b379bcaa6324ad497a62d9 1 std/compress/lzma/decode.zig +0 30872675 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/compress/lzma/test.zig +3774 30872677 1755651176000000000 ba9dc0a0f8124583244e2f0c677410fc 1 std/compress/lzma/vec2d.zig +4704 30872680 1755651176000000000 34dab553e7d44c4c18351939467c745c 1 std/compress/lzma2/decode.zig +7157 30872684 1755651176000000000 a0e5aefb8ceae6798c4b2fe9540cefee 1 std/compress/xz/block.zig +0 30872685 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/compress/xz/test.zig +78531 30872689 1755651176000000000 d44d8434a6ff685d9cec10bd257151c5 1 std/compress/zstd/Decompress.zig +0 30872782 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/crypto/test.zig +22223 30872709 1755651176000000000 7e23bb5bcd64c4725f7c071dd3496b74 1 std/crypto/aes/aesni.zig +22711 30872710 1755651176000000000 8e77a640bfd456ac5363ff36bd93c4ba 1 std/crypto/aes/armcrypto.zig +33347 30872711 1755651176000000000 7de9cecbcab3c869e16f2fbaf7076a48 1 std/crypto/aes/soft.zig +14574 30872697 1755651176000000000 b552b509d9ec611014aa027c881ac91c 1 std/crypto/25519/field.zig +33703 30872699 1755651176000000000 d4b52682012c0195eb1aa7312d067798 1 std/crypto/25519/scalar.zig +338 30872754 1755651176000000000 433b788abb384ec7e4c3641754e6dde9 1 std/crypto/pcurves/p256/field.zig +7421 30872757 1755651176000000000 00494b8811c2d7df07fff5d27198954c 1 std/crypto/pcurves/p256/scalar.zig +5656 30872772 1755651176000000000 05c95744a349b07172e4c400b1e28cc1 1 std/crypto/pcurves/tests/p256.zig +376 30872760 1755651176000000000 69a49ff5f537dcd2044702ac14b6891c 1 std/crypto/pcurves/p384/field.zig +6669 30872763 1755651176000000000 7aee4435d80a972d5bcff185b164ee8e 1 std/crypto/pcurves/p384/scalar.zig +6707 30872773 1755651176000000000 3f1e1e56980e64672ccd1fba3a631951 1 std/crypto/pcurves/tests/p384.zig +343 30872766 1755651176000000000 738b22249e1d3a4c001765286bc82756 1 std/crypto/pcurves/secp256k1/field.zig +7426 30872767 1755651176000000000 1b99358655e3f9a938c25cb631d52e50 1 std/crypto/pcurves/secp256k1/scalar.zig +6029 30872774 1755651176000000000 4a9ce792ab6709c6ebf9e7dbf5e30590 1 std/crypto/pcurves/tests/secp256k1.zig +11649 30872735 1755651176000000000 884bf9edd77ebad5200670e26c236280 1 std/crypto/codecs/asn1.zig +17997 30872736 1755651176000000000 7ea1a954927b43ca5ab7f95c3becd401 1 std/crypto/codecs/base64_hex_ct.zig +80831 30872786 1755651176000000000 f151081149e53c1078be673dc2116ec2 1 std/crypto/tls/Client.zig +12470 30872704 1755651176000000000 9c92810e5147e8de0f25e1658fa23a75 1 std/crypto/Certificate/Bundle.zig +71838 30872794 1755651176000000000 5c3513456ba79222f02ca36a90963776 1 std/debug/Dwarf/expression.zig +17609 30872792 1755651176000000000 f39611d52911878891dbef3fba794ac1 1 std/debug/Dwarf/abi.zig +10007 30872793 1755651176000000000 46471a00c4eea2acab55cc6337899adc 1 std/debug/Dwarf/call_frame.zig +9426 30872827 1755651176000000000 19fe74e26814be7f5083c3d8b5a0983e 1 std/fmt/parse_float/parse.zig +2950 30872824 1755651176000000000 e2f6cedde735fdaf086b7e0efdb66505 1 std/fmt/parse_float/convert_hex.zig +5401 30872823 1755651176000000000 cbeba905313f9b6c917fb231993989fe 1 std/fmt/parse_float/convert_fast.zig +48543 30872822 1755651176000000000 82c419f8469193cf67852d0ac4c65f55 1 std/fmt/parse_float/convert_eisel_lemire.zig +4586 30872825 1755651176000000000 2562e4c50c6403023d508a0c7e1f15f0 1 std/fmt/parse_float/convert_slow.zig +3506 30872846 1755651176000000000 9428b7df45d5b928d9c004b955588fe0 1 std/hash/crc/impl.zig +0 30872847 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/hash/crc/test.zig +2075 30872851 1755651176000000000 5910881f138d791cfa09dd89cc12fc40 1 std/hash/verify.zig +237477 30873054 1755651176000000000 67644436e9162e79563b60f574b36f99 1 std/os/windows/ntstatus.zig +0 30872880 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/json/dynamic_test.zig +0 30872882 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/json/hashmap_test.zig +0 30872883 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/json/scanner_test.zig +0 30872885 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/json/static_test.zig +995 30872930 1755651176000000000 59077bc2784a5df334de08609b4c2a55 1 std/math/expo2.zig +452 30872905 1755651176000000000 ce633e6b665f3caba98995a3f146d7c7 1 std/math/complex/abs.zig +678 30872907 1755651176000000000 9dd2ece0bd4c6366c4a3cb5bf7b3db17 1 std/math/complex/acosh.zig +608 30872906 1755651176000000000 e3a7d70f219edead2e32e66a9476a469 1 std/math/complex/acos.zig +458 30872908 1755651176000000000 2fea305ef49ff29fdd688d2f7342051d 1 std/math/complex/arg.zig +641 30872910 1755651176000000000 59bed4da0e5763cbf2a3e08ec4bc9c6c 1 std/math/complex/asinh.zig +750 30872909 1755651176000000000 26f02f5afc54b9ec7673ddd6d0fcc3a9 1 std/math/complex/asin.zig +645 30872912 1755651176000000000 adf7751d27453fed0d4977a2dc50e85e 1 std/math/complex/atanh.zig +2527 30872911 1755651176000000000 2a909954adb7520e1eb158124c280ca2 1 std/math/complex/atan.zig +484 30872913 1755651176000000000 a9e61e0f7280deab3d077856af6ca8d9 1 std/math/complex/conj.zig +5818 30872915 1755651176000000000 3b53a3d1a1285447f00cc90f422cb7b1 1 std/math/complex/cosh.zig +577 30872914 1755651176000000000 26877517b7d9d620e841272fd8ea3661 1 std/math/complex/cos.zig +4899 30872916 1755651176000000000 4f31c5e9d921097840da690cc0324595 1 std/math/complex/exp.zig +620 30872918 1755651176000000000 4e4bb03cdbb57072938d447952587286 1 std/math/complex/log.zig +608 30872919 1755651176000000000 1258f2af84237de74fd033b6776798f2 1 std/math/complex/pow.zig +628 30872920 1755651176000000000 b5f2e65410101f915fb75fa5712c2fd4 1 std/math/complex/proj.zig +5363 30872922 1755651176000000000 89568cfbf7f8196aafffbd55ea670070 1 std/math/complex/sinh.zig +620 30872921 1755651176000000000 4aade0cdfc8ac82b062412f5566aec6c 1 std/math/complex/sin.zig +4249 30872923 1755651176000000000 0aeb21db75d92940ddcb1491d2f0445e 1 std/math/complex/sqrt.zig +3847 30872925 1755651176000000000 98009ed972f9f5fcb177d10a345456e1 1 std/math/complex/tanh.zig +626 30872924 1755651176000000000 ac4f4ba1ea51c6a8f2101a7bdf3b0d7c 1 std/math/complex/tan.zig +175931 30872900 1755651176000000000 cb0553d36d2eb461b87312f4e15a99e8 1 std/math/big/int.zig +3762 30873001 1755651176000000000 2fd0c246f4a8e9ba6ccef5ff7cf0ccfe 1 std/os/linux/vdso.zig +0 30872998 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/os/linux/test.zig +13117 30873002 1755651176000000000 71b9a59db11f287d3253e001a21a4028 1 std/os/linux/x86.zig +13489 30873003 1755651176000000000 958bec870d653d2a62890b93b463512b 1 std/os/linux/x86_64.zig +6720 30872975 1755651176000000000 186c59f27378f16795ba8c8611b5ed95 1 std/os/linux/aarch64.zig +7970 30872976 1755651176000000000 0f4c26b73e6698859b53f9b715f3d611 1 std/os/linux/arm.zig +6097 30872983 1755651176000000000 a5e8b96435a27d99de81726a3b93e16d 1 std/os/linux/hexagon.zig +6540 30872992 1755651176000000000 9b9c64b903ecbb48c7b6c661455ef036 1 std/os/linux/riscv32.zig +6541 30872993 1755651176000000000 b833f96b582cdd1676bf2bda0ac01e90 1 std/os/linux/riscv64.zig +10847 30872996 1755651176000000000 0c589fb5ebf73b4b5662a31d45d76c75 1 std/os/linux/sparc64.zig +7941 30872986 1755651176000000000 7e1c50fd483adea99b19665fe38b2f72 1 std/os/linux/loongarch64.zig +6634 30872987 1755651176000000000 ad9a26a1c9c2d04c67203fdcf578c9f1 1 std/os/linux/m68k.zig +11254 30872988 1755651176000000000 69fd31ffc9e830951f1293a9ee9cfb72 1 std/os/linux/mips.zig +10635 30872989 1755651176000000000 ff911a8bf83253a4b85221f8a5f72189 1 std/os/linux/mips64.zig +8845 30872990 1755651176000000000 bd51d61d7005f2954e793de4ea335f5c 1 std/os/linux/powerpc.zig +8837 30872991 1755651176000000000 c1b8858b561db0b710d1f0d729e836e5 1 std/os/linux/powerpc64.zig +7186 30872994 1755651176000000000 29692c77734256a2fc877fcec567d9a0 1 std/os/linux/s390x.zig +4390 30872999 1755651176000000000 9e872767168dbe4e563e8ca82d35d42e 1 std/os/linux/thumb.zig +18676 30873000 1755651176000000000 79cbf225d0993e9837e569f3e09e0314 1 std/os/linux/tls.zig +46056 30872982 1755651176000000000 fe2f435321fb0e6eb75eeb3ca30c93b4 1 std/os/linux/bpf.zig +1297 30872985 1755651176000000000 daac8c407161fbb4bb996238aee46635 1 std/os/linux/ioctl.zig +8427 30872995 1755651176000000000 b845f84a2ea6f5532d8ffc78297dafed 1 std/os/linux/seccomp.zig +183126 30872997 1755651176000000000 fd2ae47bc58a4f876d2cb8205d4888ea 1 std/os/linux/syscalls.zig +19909 30872984 1755651176000000000 a1611786e4dda806effaf2301a5cf0ae 1 std/os/linux/io_uring_sqe.zig +173427 30872974 1755651176000000000 46b12a066a5e37b8a275732fa67d5529 1 std/os/linux/IoUring.zig +2126 30873006 1755651176000000000 d6f497f7c3ede56b9dd8eb2cae54c566 1 std/os/plan9/x86_64.zig +2368 30873036 1755651176000000000 ef3b4d934ff0fc89d4b9c013f363e19f 1 std/os/uefi/protocol.zig +37311 30873009 1755651176000000000 a67c5d40f56e40984ce32fba49cfa0bc 1 std/os/uefi/device_path.zig +2078 30873010 1755651176000000000 13b23e26af6b210b16c77d73b956e867 1 std/os/uefi/hii.zig +10107 30873037 1755651176000000000 e4c1fe82be2b68376749dbb625002706 1 std/os/uefi/status.zig +10739 30873044 1755651176000000000 627c77aa253ea0232b674a9a41a09650 1 std/os/uefi/tables.zig +3906 30873011 1755651176000000000 5c4587a7b4f3370e256119bdab607b4a 1 std/os/uefi/pool_allocator.zig +0 30873056 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/os/windows/test.zig +2144 30873048 1755651176000000000 25e202ff708858513ae7203c6f1043cf 1 std/os/windows/advapi32.zig +19302 30873050 1755651176000000000 4166d597fb4bd529b9418c145598c4d4 1 std/os/windows/kernel32.zig +12119 30873053 1755651176000000000 90384510a1298bc4a80542f39d2cc399 1 std/os/windows/ntdll.zig +77480 30873059 1755651176000000000 d85c6950ac08847c1673726e62f4953f 1 std/os/windows/ws2_32.zig +850 30873049 1755651176000000000 058a13f92bf4ee16e52beb60bf057dc9 1 std/os/windows/crypt32.zig +20117 30873052 1755651176000000000 696b67a75a9a665eb00672233edffbb2 1 std/os/windows/nls.zig +130227 30873058 1755651176000000000 a0ee928ca20f189c11667764ca96b243 1 std/os/windows/win32error.zig +3697 30873051 1755651176000000000 f5f54b1cf522ff663148d3c96268d459 1 std/os/windows/lang.zig +8449 30873055 1755651176000000000 3c42a760ba486f9b9455bd95d20d2e0b 1 std/os/windows/sublang.zig +135650 30873115 1755651176000000000 a31eb8d48506c25579555c4efd1a9faf 1 std/zig/Parse.zig +142067 30873106 1755651176000000000 c11d0a46b8fb10db9e0b6b86306a47a4 1 std/zig/Ast/Render.zig +8409 30873135 1755651176000000000 05fc398cc2e6071c55b8a2a2fbc73720 1 std/zig/system/NativePaths.zig +12217 30873141 1755651176000000000 431d341ca0da87ee822118293b8def7c 1 std/zig/system/windows.zig +2441 30873139 1755651176000000000 35ecedf1e23a5fca314cc4de0bb8b2f9 1 std/zig/system/darwin.zig +15304 30873140 1755651176000000000 580566ad2ff69b205932568d7672a3e9 1 std/zig/system/linux.zig +26641 30873142 1755651176000000000 1653caac0003b8e8b9474f11b36c5a76 1 std/zig/system/x86.zig +19758 30873124 1755651176000000000 3952091e9a90d59dd1ba998c365bce09 1 std/zig/llvm/BitcodeReader.zig +17956 30873126 1755651176000000000 fc195102d6af02ed5678e5f0aa8b8390 1 std/zig/llvm/bitcode_writer.zig +592181 30873125 1755651176000000000 eb4547393bea04ef1cf32079beef364a 1 std/zig/llvm/Builder.zig +0 30453581 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/clzsi2_test.zig +0 30453580 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/clzdi2_test.zig +0 30453582 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/clzti2_test.zig +0 30453599 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ctzsi2_test.zig +0 30453598 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ctzdi2_test.zig +0 30453600 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ctzti2_test.zig +0 30453637 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ffssi2_test.zig +0 30453636 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ffsdi2_test.zig +0 30453638 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ffsti2_test.zig +0 30453784 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/paritysi2_test.zig +0 30453783 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/paritydi2_test.zig +0 30453785 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/parityti2_test.zig +0 30453788 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/popcountsi2_test.zig +0 30453787 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/popcountdi2_test.zig +0 30453789 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/popcountti2_test.zig +0 30453572 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/bitreversesi2_test.zig +0 30453571 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/bitreversedi2_test.zig +0 30453573 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/bitreverseti2_test.zig +0 30453576 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/bswapsi2_test.zig +0 30453575 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/bswapdi2_test.zig +0 30453577 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/bswapti2_test.zig +0 30453588 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/cmpsi2_test.zig +0 30453585 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/cmpdi2_test.zig +0 30453590 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/cmpti2_test.zig +0 30453830 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ucmpsi2_test.zig +0 30453829 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ucmpdi2_test.zig +0 30453831 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/ucmpti2_test.zig +0 30453797 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/shift_test.zig +0 30453773 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/negsi2_test.zig +0 30453770 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/negdi2_test.zig +0 30453775 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/negti2_test.zig +4285 30453832 1755651171000000000 3a706e00becb790763e2c63d183e345f 1 compiler_rt/udivmod.zig +0 30453833 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/udivmoddi4_test.zig +0 30453748 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/mulXi3_test.zig +0 30453616 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/divti3_test.zig +0 30453746 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/modti3_test.zig +0 30453550 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/absvsi2_test.zig +0 30453548 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/absvdi2_test.zig +0 30453552 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/absvti2_test.zig +0 30453778 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/negvsi2_test.zig +0 30453777 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/negvdi2_test.zig +0 30453779 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/negvti2_test.zig +0 30453559 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/addosi4_test.zig +0 30453558 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/addodi4_test.zig +0 30453560 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/addoti4_test.zig +0 30453807 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/subosi4_test.zig +0 30453806 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/subodi4_test.zig +0 30453808 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/suboti4_test.zig +0 30453759 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/mulosi4_test.zig +0 30453758 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/mulodi4_test.zig +0 30453760 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/muloti4_test.zig +0 30453626 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/extendf_test.zig +0 30453820 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/truncf_test.zig +0 30453737 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/int_from_float_test.zig +0 30453681 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/float_from_int_test.zig +0 30453595 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/comparesf2_test.zig +0 30453593 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/comparedf2_test.zig +0 30453555 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/addf3_test.zig +0 30453754 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/mulf3_test.zig +0 30453611 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/divsf3_test.zig +0 30453605 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/divdf3_test.zig +0 30453619 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/divxf3_test.zig +0 30453614 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/divtf3_test.zig +0 30453791 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/powiXf2_test.zig +11743 30453815 1755651171000000000 20b5273f511a6677b3f49f750fcaf786 1 compiler_rt/trig.zig +6045 30453792 1755651171000000000 18b634df64d66eb7c240db46b32eea60 1 compiler_rt/rem_pio2.zig +2247 30453794 1755651171000000000 2337e183931c970621500018ffe636df 1 compiler_rt/rem_pio2f.zig +0 30453727 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/fmodq_test.zig +0 30453728 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/fmodx_test.zig +0 30453837 1755651171000000000 82547a8dd7f3efb3f077622e34876868 1 compiler_rt/udivmodti4_test.zig +13531 30872666 1755651176000000000 479ed8dfe695d0a2eea06b674b3ed0da 1 std/compress/flate/Token.zig +20508 30872661 1755651176000000000 453a65b5b55858b073099208c4e07ca8 1 std/compress/flate/BlockWriter.zig +3588 30872665 1755651176000000000 5a3d7acaca811bf6b6e62a58645eddae 1 std/compress/flate/Lookup.zig +5945 30872672 1755651176000000000 937d6b84c08ac71922db69ef4603ee39 1 std/compress/lzma/decode/lzbuffer.zig +4994 30872673 1755651176000000000 159872c0de3e30f43567e5ed7666125d 1 std/compress/lzma/decode/rangecoder.zig +12650 30872752 1755651176000000000 56befc361ef070a7bd0a2d3c1dc46994 1 std/crypto/pcurves/common.zig +67958 30872755 1755651176000000000 0f2daafefad01026d6796eec68d65d2e 1 std/crypto/pcurves/p256/p256_64.zig +76136 30872756 1755651176000000000 8ec5f177ef28f7a2a0ec8d103665db00 1 std/crypto/pcurves/p256/p256_scalar_64.zig +134511 30872761 1755651176000000000 2e0dda7c40794e981dd2d2471c4776a5 1 std/crypto/pcurves/p384/p384_64.zig +137291 30872762 1755651176000000000 81eb087d46e6c49907ae0c02d3230828 1 std/crypto/pcurves/p384/p384_scalar_64.zig +73280 30872768 1755651176000000000 c871f98dad15c7a8c29be9ccefa4b181 1 std/crypto/pcurves/secp256k1/secp256k1_64.zig +75859 30872769 1755651176000000000 e29275bdb0eb931fc383e7f2f5ded944 1 std/crypto/pcurves/secp256k1/secp256k1_scalar_64.zig +1807 30872733 1755651176000000000 f47429307ac0920ff18758ce86074549 1 std/crypto/codecs/asn1/der.zig +7178 30872725 1755651176000000000 6d4dab023a981a670d308b0b120c9077 1 std/crypto/codecs/asn1/Oid.zig +0 30872734 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/crypto/codecs/asn1/test.zig +3892 30872703 1755651176000000000 b6e0d691e62b1e9830666c4f8c67fdf4 1 std/crypto/Certificate/Bundle/macos.zig +3081 30872821 1755651176000000000 2aeda0b8b6036bb4d980778abb5a928a 1 std/fmt/parse_float/common.zig +3073 30872820 1755651176000000000 3950e4fa1fdd11d50db0b4abfc254022 1 std/fmt/parse_float/FloatStream.zig +6036 30872819 1755651176000000000 68169ffe43d55f0eb5e26b984ef98670 1 std/fmt/parse_float/FloatInfo.zig +29140 30872826 1755651176000000000 04115d79320f402803a56bd43cc34cf9 1 std/fmt/parse_float/decimal.zig +2726 30872917 1755651176000000000 7f318d60fafbfa10754d5644fd131ffe 1 std/math/complex/ldexp.zig +0 30872901 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/math/big/int_test.zig +4082 30872978 1755651176000000000 11a08913a0ec64b8325b0d29601479a7 1 std/os/linux/bpf/btf.zig +1543 30872981 1755651176000000000 95995c37b42f8d7a12578170850af6ee 1 std/os/linux/bpf/kern.zig +1998 30873027 1755651176000000000 5a705fc01bb083d82cd43ab9ab1c6542 1 std/os/uefi/protocol/service_binding.zig +1743 30873023 1755651176000000000 e4e18b6e0741218763e2f0eefe57c63c 1 std/os/uefi/protocol/loaded_image.zig +4860 30873015 1755651176000000000 db6a8b32ce1366281968b6a3dbffb173 1 std/os/uefi/protocol/device_path.zig +3924 30873025 1755651176000000000 636ee102096b7ee8d15380af87b55c99 1 std/os/uefi/protocol/rng.zig +544 30873028 1755651176000000000 a0f63cfe62d021c13659600cea4aaa1a 1 std/os/uefi/protocol/shell_parameters.zig +1524 30873029 1755651176000000000 7748a7cf094118fb46a4fa8cb0e326fb 1 std/os/uefi/protocol/simple_file_system.zig +13432 30873017 1755651176000000000 995882ac23c2af4019a5dd716a5f09f3 1 std/os/uefi/protocol/file.zig +5171 30873014 1755651176000000000 9136b751bd537d37181af6f96f23bc0d 1 std/os/uefi/protocol/block_io.zig +1827 30873032 1755651176000000000 dc816c9ebf174e0f2191f721ebf627fd 1 std/os/uefi/protocol/simple_text_input.zig +5002 30873033 1755651176000000000 33197652ebd5358fbd566ba1598a738f 1 std/os/uefi/protocol/simple_text_input_ex.zig +9857 30873034 1755651176000000000 ac75efaf87e83f490e1b05ca64f3d221 1 std/os/uefi/protocol/simple_text_output.zig +2028 30873031 1755651176000000000 2b300415efacd2dec40e6f1d67488799 1 std/os/uefi/protocol/simple_pointer.zig +2398 30873013 1755651176000000000 2c87d630cff25fb47ddfd2241990d8f4 1 std/os/uefi/protocol/absolute_pointer.zig +4876 30873026 1755651176000000000 1955a5a309db3628c52bf415af05b0f8 1 std/os/uefi/protocol/serial_io.zig +4296 30873018 1755651176000000000 702a798c1a856afdd0ade5a1ee67b3cd 1 std/os/uefi/protocol/graphics_output.zig +2479 30873016 1755651176000000000 0fab22ebe8c02b50099313679d4e2eb5 1 std/os/uefi/protocol/edid.zig +15978 30873030 1755651176000000000 95a49124c8237f8d2ab01672bf2a69b1 1 std/os/uefi/protocol/simple_network.zig +9851 30873024 1755651176000000000 fc89ee17ffacbefb54626ee378473525 1 std/os/uefi/protocol/managed_network.zig +13201 30873021 1755651176000000000 427b83b08791055f001b217a1bd39a8b 1 std/os/uefi/protocol/ip6.zig +5373 30873022 1755651176000000000 911ecc11b1404b1bef6afcda6cd7868e 1 std/os/uefi/protocol/ip6_config.zig +8567 30873035 1755651176000000000 47adbb9c98a53124032c9ef80ce5889f 1 std/os/uefi/protocol/udp6.zig +4199 30873019 1755651176000000000 b821152f4c9abddf1c1fb114333c66dd 1 std/os/uefi/protocol/hii_database.zig +1712 30873020 1755651176000000000 1a882e3749f4ef9b5c5827cbb346f6a3 1 std/os/uefi/protocol/hii_popup.zig +47589 30873039 1755651176000000000 da7566eb78da06f1636e8eb3a693eb3e 1 std/os/uefi/tables/boot_services.zig +18947 30873041 1755651176000000000 cb1eb30776a43459956ea4c0675dee88 1 std/os/uefi/tables/runtime_services.zig +2796 30873040 1755651176000000000 f0a08fa361dffa5eadb351a471801946 1 std/os/uefi/tables/configuration_table.zig +2295 30873042 1755651176000000000 25bf31dd5f33af51b4b9da897fa1e3d5 1 std/os/uefi/tables/system_table.zig +214 30873043 1755651176000000000 cdb95d6c52cd4654ef26be0bd9f114d4 1 std/os/uefi/tables/table_header.zig +0 30873130 1755651176000000000 82547a8dd7f3efb3f077622e34876868 1 std/zig/parser_test.zig +15091 30873136 1755651176000000000 e1ff2fae360a9d1df9777ae4f90bda6a 1 std/zig/system/arm.zig +16495 30873138 1755651176000000000 753462fa54f971ae23b566336ad73030 1 std/zig/system/darwin/macos.zig +50924 30873127 1755651176000000000 5c60970433f1092302f7ef4ff90d3f62 1 std/zig/llvm/ir.zig +20581 30453793 1755651171000000000 e8eaf68a4ffa3364b8f352326a575189 1 compiler_rt/rem_pio2_large.zig +5806 30872728 1755651176000000000 92f1dd53520d8191f93c177825b7845c 1 std/crypto/codecs/asn1/der/Decoder.zig +5861 30872729 1755651176000000000 650695830257d32d9ea72d767d918703 1 std/crypto/codecs/asn1/der/Encoder.zig +419 30872979 1755651176000000000 ed7dfc04a5d0c4f0853edb5414ce981e 1 std/os/linux/bpf/btf_ext.zig +24293 30872980 1755651176000000000 0c7d3ee9ea8e698a843ee6039fd161c4 1 std/os/linux/bpf/helpers.zig +3221 30872727 1755651176000000000 fda67b74062c7f535bb0a6d0f1fe74fb 1 std/crypto/codecs/asn1/der/ArrayListReverse.zig +618 29955575 1775105374121686966 899e416056a0f857fa22c2329070e710 0 /home/nathan/a4/registry/native/zig/codedb/build.zig diff --git a/registry/native/zig/codedb/.zig-cache/h/timestamp b/registry/native/zig/codedb/.zig-cache/h/timestamp new file mode 100644 index 000000000..e69de29bb diff --git a/registry/native/zig/codedb/.zig-cache/o/100899d046e7d320b061fb076209d448/codedb.wasm b/registry/native/zig/codedb/.zig-cache/o/100899d046e7d320b061fb076209d448/codedb.wasm new file mode 100755 index 000000000..60dbee674 Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/o/100899d046e7d320b061fb076209d448/codedb.wasm differ diff --git a/registry/native/zig/codedb/.zig-cache/o/100899d046e7d320b061fb076209d448/codedb_zcu.o b/registry/native/zig/codedb/.zig-cache/o/100899d046e7d320b061fb076209d448/codedb_zcu.o new file mode 100644 index 000000000..1d8f28a66 Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/o/100899d046e7d320b061fb076209d448/codedb_zcu.o differ diff --git a/registry/native/zig/codedb/.zig-cache/o/4ccdea753663363a4012f2bf83ac05c8/codedb.wasm b/registry/native/zig/codedb/.zig-cache/o/4ccdea753663363a4012f2bf83ac05c8/codedb.wasm new file mode 100755 index 000000000..3edf65f7c Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/o/4ccdea753663363a4012f2bf83ac05c8/codedb.wasm differ diff --git a/registry/native/zig/codedb/.zig-cache/o/4ccdea753663363a4012f2bf83ac05c8/codedb_zcu.o b/registry/native/zig/codedb/.zig-cache/o/4ccdea753663363a4012f2bf83ac05c8/codedb_zcu.o new file mode 100644 index 000000000..ad48a22fb Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/o/4ccdea753663363a4012f2bf83ac05c8/codedb_zcu.o differ diff --git a/registry/native/zig/codedb/.zig-cache/o/5c84a6039e1986aa3cdd04bdda982c2e/codedb.wasm b/registry/native/zig/codedb/.zig-cache/o/5c84a6039e1986aa3cdd04bdda982c2e/codedb.wasm new file mode 100755 index 000000000..60dbee674 Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/o/5c84a6039e1986aa3cdd04bdda982c2e/codedb.wasm differ diff --git a/registry/native/zig/codedb/.zig-cache/o/5c84a6039e1986aa3cdd04bdda982c2e/codedb_zcu.o b/registry/native/zig/codedb/.zig-cache/o/5c84a6039e1986aa3cdd04bdda982c2e/codedb_zcu.o new file mode 100644 index 000000000..1d8f28a66 Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/o/5c84a6039e1986aa3cdd04bdda982c2e/codedb_zcu.o differ diff --git a/registry/native/zig/codedb/.zig-cache/o/5f71a06a405abc688ac51d2dafb39399/codedb.wasm b/registry/native/zig/codedb/.zig-cache/o/5f71a06a405abc688ac51d2dafb39399/codedb.wasm new file mode 100755 index 000000000..9bc028977 Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/o/5f71a06a405abc688ac51d2dafb39399/codedb.wasm differ diff --git a/registry/native/zig/codedb/.zig-cache/o/5f71a06a405abc688ac51d2dafb39399/codedb_zcu.o b/registry/native/zig/codedb/.zig-cache/o/5f71a06a405abc688ac51d2dafb39399/codedb_zcu.o new file mode 100644 index 000000000..9c5fa1d7b Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/o/5f71a06a405abc688ac51d2dafb39399/codedb_zcu.o differ diff --git a/registry/native/zig/codedb/.zig-cache/o/87517b065242b5d5ff904e78527643b6/codedb.wasm b/registry/native/zig/codedb/.zig-cache/o/87517b065242b5d5ff904e78527643b6/codedb.wasm new file mode 100755 index 000000000..afe57f46d Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/o/87517b065242b5d5ff904e78527643b6/codedb.wasm differ diff --git a/registry/native/zig/codedb/.zig-cache/o/87517b065242b5d5ff904e78527643b6/codedb_zcu.o b/registry/native/zig/codedb/.zig-cache/o/87517b065242b5d5ff904e78527643b6/codedb_zcu.o new file mode 100644 index 000000000..0da91401a Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/o/87517b065242b5d5ff904e78527643b6/codedb_zcu.o differ diff --git a/registry/native/zig/codedb/.zig-cache/o/8b7d33b94c631c1627c2431049b3dca2/codedb.wasm b/registry/native/zig/codedb/.zig-cache/o/8b7d33b94c631c1627c2431049b3dca2/codedb.wasm new file mode 100755 index 000000000..70b4741a3 Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/o/8b7d33b94c631c1627c2431049b3dca2/codedb.wasm differ diff --git a/registry/native/zig/codedb/.zig-cache/o/8b7d33b94c631c1627c2431049b3dca2/codedb_zcu.o b/registry/native/zig/codedb/.zig-cache/o/8b7d33b94c631c1627c2431049b3dca2/codedb_zcu.o new file mode 100644 index 000000000..823e787d6 Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/o/8b7d33b94c631c1627c2431049b3dca2/codedb_zcu.o differ diff --git a/registry/native/zig/codedb/.zig-cache/o/9a342a5d6b44ed02c4f087e9933e4642/build b/registry/native/zig/codedb/.zig-cache/o/9a342a5d6b44ed02c4f087e9933e4642/build new file mode 100755 index 000000000..408ae8453 Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/o/9a342a5d6b44ed02c4f087e9933e4642/build differ diff --git a/registry/native/zig/codedb/.zig-cache/o/cfaf7a24095f5d89fc7e30798eca24da/dependencies.zig b/registry/native/zig/codedb/.zig-cache/o/cfaf7a24095f5d89fc7e30798eca24da/dependencies.zig new file mode 100644 index 000000000..72e4e833b --- /dev/null +++ b/registry/native/zig/codedb/.zig-cache/o/cfaf7a24095f5d89fc7e30798eca24da/dependencies.zig @@ -0,0 +1,2 @@ +pub const packages = struct {}; +pub const root_deps: []const struct { []const u8, []const u8 } = &.{}; diff --git a/registry/native/zig/codedb/.zig-cache/z/1c3ca0fd66a1160697661c534450c799 b/registry/native/zig/codedb/.zig-cache/z/1c3ca0fd66a1160697661c534450c799 new file mode 100644 index 000000000..a71fa32f2 Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/1c3ca0fd66a1160697661c534450c799 differ diff --git a/registry/native/zig/codedb/.zig-cache/z/362ea66b84cbd12b699d9a6a9072a8b4 b/registry/native/zig/codedb/.zig-cache/z/362ea66b84cbd12b699d9a6a9072a8b4 new file mode 100644 index 000000000..5f0ec6bee Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/362ea66b84cbd12b699d9a6a9072a8b4 differ diff --git a/registry/native/zig/codedb/.zig-cache/z/44206127fa2423c81910da0d6510a624 b/registry/native/zig/codedb/.zig-cache/z/44206127fa2423c81910da0d6510a624 new file mode 100644 index 000000000..77a89d54f Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/44206127fa2423c81910da0d6510a624 differ diff --git a/registry/native/zig/codedb/.zig-cache/z/4cbfcf23e781eacc3d2e6446b6aa8886 b/registry/native/zig/codedb/.zig-cache/z/4cbfcf23e781eacc3d2e6446b6aa8886 new file mode 100644 index 000000000..0831605ed Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/4cbfcf23e781eacc3d2e6446b6aa8886 differ diff --git a/registry/native/zig/codedb/.zig-cache/z/4d63565306b712e78570e48c48e0be87 b/registry/native/zig/codedb/.zig-cache/z/4d63565306b712e78570e48c48e0be87 new file mode 100644 index 000000000..9d2f5f656 Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/4d63565306b712e78570e48c48e0be87 differ diff --git a/registry/native/zig/codedb/.zig-cache/z/63858923d7e650930a84d9e81ac7a6b8 b/registry/native/zig/codedb/.zig-cache/z/63858923d7e650930a84d9e81ac7a6b8 new file mode 100644 index 000000000..78d4f8d0d Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/63858923d7e650930a84d9e81ac7a6b8 differ diff --git a/registry/native/zig/codedb/.zig-cache/z/7ad0825718554fb55af79947be2b8eb2 b/registry/native/zig/codedb/.zig-cache/z/7ad0825718554fb55af79947be2b8eb2 new file mode 100644 index 000000000..2c9f6603d Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/7ad0825718554fb55af79947be2b8eb2 differ diff --git a/registry/native/zig/codedb/.zig-cache/z/80a326154fd7c7e2381b434a24e2f0ce b/registry/native/zig/codedb/.zig-cache/z/80a326154fd7c7e2381b434a24e2f0ce new file mode 100644 index 000000000..dd272eb80 Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/80a326154fd7c7e2381b434a24e2f0ce differ diff --git a/registry/native/zig/codedb/.zig-cache/z/92ede1886d4d8be7420e8fc84cca48bc b/registry/native/zig/codedb/.zig-cache/z/92ede1886d4d8be7420e8fc84cca48bc new file mode 100644 index 000000000..77a89d54f Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/92ede1886d4d8be7420e8fc84cca48bc differ diff --git a/registry/native/zig/codedb/.zig-cache/z/960fcbb46c7ab426ef6bd2704b350e50 b/registry/native/zig/codedb/.zig-cache/z/960fcbb46c7ab426ef6bd2704b350e50 new file mode 100644 index 000000000..b6dba64d7 Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/960fcbb46c7ab426ef6bd2704b350e50 differ diff --git a/registry/native/zig/codedb/.zig-cache/z/bacd9ea0da6783a595585b0309ec7040 b/registry/native/zig/codedb/.zig-cache/z/bacd9ea0da6783a595585b0309ec7040 new file mode 100644 index 000000000..9a3732ee6 Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/bacd9ea0da6783a595585b0309ec7040 differ diff --git a/registry/native/zig/codedb/.zig-cache/z/bbc10b6a1ebc1b96b2a444bc538e9ac7 b/registry/native/zig/codedb/.zig-cache/z/bbc10b6a1ebc1b96b2a444bc538e9ac7 new file mode 100644 index 000000000..07285fbc2 Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/bbc10b6a1ebc1b96b2a444bc538e9ac7 differ diff --git a/registry/native/zig/codedb/.zig-cache/z/d639c07a155a9d075f1497c5cf841a9b b/registry/native/zig/codedb/.zig-cache/z/d639c07a155a9d075f1497c5cf841a9b new file mode 100644 index 000000000..0636f318f Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/d639c07a155a9d075f1497c5cf841a9b differ diff --git a/registry/native/zig/codedb/.zig-cache/z/df40cd6c172c2c734c911c21077a5a66 b/registry/native/zig/codedb/.zig-cache/z/df40cd6c172c2c734c911c21077a5a66 new file mode 100644 index 000000000..dd272eb80 Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/df40cd6c172c2c734c911c21077a5a66 differ diff --git a/registry/native/zig/codedb/.zig-cache/z/f44d2c2eaa2a02a3851034f4c1141f0e b/registry/native/zig/codedb/.zig-cache/z/f44d2c2eaa2a02a3851034f4c1141f0e new file mode 100644 index 000000000..3498813e6 Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/f44d2c2eaa2a02a3851034f4c1141f0e differ diff --git a/registry/native/zig/codedb/.zig-cache/z/f5af1fc678a8291a7bb268c623c9c066 b/registry/native/zig/codedb/.zig-cache/z/f5af1fc678a8291a7bb268c623c9c066 new file mode 100644 index 000000000..34d8cc7fb Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/f5af1fc678a8291a7bb268c623c9c066 differ diff --git a/registry/native/zig/codedb/.zig-cache/z/f5eedc7c703346bd8013f7ef82f01f21 b/registry/native/zig/codedb/.zig-cache/z/f5eedc7c703346bd8013f7ef82f01f21 new file mode 100644 index 000000000..a36b02fcb Binary files /dev/null and b/registry/native/zig/codedb/.zig-cache/z/f5eedc7c703346bd8013f7ef82f01f21 differ diff --git a/registry/native/zig/codedb/LICENSE.upstream b/registry/native/zig/codedb/LICENSE.upstream new file mode 100644 index 000000000..e340a1da7 --- /dev/null +++ b/registry/native/zig/codedb/LICENSE.upstream @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2024-2026, Rach Pradhan (justrach) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/registry/native/zig/codedb/README.md b/registry/native/zig/codedb/README.md new file mode 100644 index 000000000..a9b23c39b --- /dev/null +++ b/registry/native/zig/codedb/README.md @@ -0,0 +1,41 @@ +# codedb WASI fork + +Repo-side WASI wrapper for [`justrach/codedb`](https://github.com/justrach/codedb). + +- Upstream snapshot: `04a21fb` +- Upstream license: BSD-3-Clause +- Local license file: `LICENSE.upstream` + +What this fork keeps: + +- `explore.zig` indexing and outline logic +- `index.zig` word and trigram search +- `style.zig` tree formatting + +What this fork intentionally drops: + +- daemon startup +- HTTP server +- MCP server +- watcher thread +- child-process spawning +- POSIX file locking + +Supported CLI shape today: + +- `codedb tree ` +- `codedb outline ` +- `codedb find ` +- `codedb search [max]` +- `codedb word ` +- `codedb deps ` +- `codedb read ` + +Build: + +```bash +zig build -Dtarget=wasm32-wasi -Doptimize=ReleaseSmall +cp -f zig-out/bin/codedb.wasm zig-out/bin/codedb +``` + +The extra copy step matches the registry command-dir convention, which expects a file named `codedb` without the `.wasm` suffix. diff --git a/registry/native/zig/codedb/build.zig b/registry/native/zig/codedb/build.zig new file mode 100644 index 000000000..ef4e92d3c --- /dev/null +++ b/registry/native/zig/codedb/build.zig @@ -0,0 +1,23 @@ +const std = @import("std"); + +pub fn build(b: *std.Build) void { + const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + + const exe = b.addExecutable(.{ + .name = "codedb", + .root_module = b.createModule(.{ + .root_source_file = b.path("src/main.zig"), + .target = target, + .optimize = optimize, + }), + }); + + b.installArtifact(exe); + + const run_cmd = b.addRunArtifact(exe); + if (b.args) |args| run_cmd.addArgs(args); + + const run_step = b.step("run", "Run codedb"); + run_step.dependOn(&run_cmd.step); +} diff --git a/registry/native/zig/codedb/src/main.zig b/registry/native/zig/codedb/src/main.zig new file mode 100644 index 000000000..c524bb7c2 --- /dev/null +++ b/registry/native/zig/codedb/src/main.zig @@ -0,0 +1,325 @@ +const std = @import("std"); +const Explorer = @import("vendor/explore.zig").Explorer; + +const skip_dirs = [_][]const u8{ + ".git", + ".claude", + ".codedb", + "node_modules", + ".zig-cache", + "zig-out", + ".next", + ".nuxt", + ".svelte-kit", + "dist", + "build", + ".build", + ".output", + "out", + "__pycache__", + ".venv", + "venv", + ".env", + ".tox", + ".mypy_cache", + ".pytest_cache", + ".ruff_cache", + "target", + ".gradle", + ".idea", + ".vs", + "vendor", + "Pods", + ".dart_tool", + ".pub-cache", + "coverage", + ".nyc_output", + ".turbo", + ".parcel-cache", + ".cache", + ".tmp", + ".temp", + ".DS_Store", +}; + +const skip_extensions = [_][]const u8{ + ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".ico", ".icns", ".webp", + ".svg", ".ttf", ".otf", ".woff", ".woff2", ".eot", + ".zip", ".tar", ".gz", ".bz2", ".xz", ".7z", ".rar", + ".pdf", ".doc", ".docx", ".xls", ".xlsx", ".pptx", + ".mp3", ".mp4", ".wav", ".avi", ".mov", ".flv", ".ogg", ".webm", + ".exe", ".dll", ".so", ".dylib", ".o", ".a", ".lib", + ".wasm", ".pyc", ".pyo", ".class", + ".db", ".sqlite", ".sqlite3", + ".lock", ".sum", +}; + +fn shouldSkipDir(name: []const u8) bool { + for (skip_dirs) |skip| { + if (std.mem.eql(u8, name, skip)) return true; + } + return false; +} + +fn shouldSkipFile(path: []const u8) bool { + for (skip_extensions) |ext| { + if (std.mem.endsWith(u8, path, ext)) return true; + } + return false; +} + +fn indexFile(explorer: *Explorer, full_path: []const u8, rel_path: []const u8, allocator: std.mem.Allocator) !void { + if (shouldSkipFile(rel_path)) return; + + const file = std.fs.cwd().openFile(full_path, .{ .mode = .read_only }) catch |err| { + std.debug.print("openFile failed {s}: {s}\n", .{ rel_path, @errorName(err) }); + return err; + }; + defer file.close(); + + const stat = file.stat() catch |err| { + std.debug.print("stat failed {s}: {s}\n", .{ rel_path, @errorName(err) }); + return err; + }; + if (stat.size > 512 * 1024) return; + + const content = file.readToEndAlloc(allocator, 512 * 1024) catch |err| { + std.debug.print("read failed {s}: {s}\n", .{ rel_path, @errorName(err) }); + return err; + }; + defer allocator.free(content); + + const check_len = @min(content.len, 512); + for (content[0..check_len]) |c| { + if (c == 0) return; + } + + try explorer.indexFile(rel_path, content); +} + +fn scanDir(explorer: *Explorer, dir_path: []const u8, prefix: []const u8, allocator: std.mem.Allocator) !void { + var dir = try std.fs.cwd().openDir(dir_path, .{ .iterate = true }); + defer dir.close(); + + var iter = dir.iterate(); + while (try iter.next()) |entry| { + switch (entry.kind) { + .directory => { + if (shouldSkipDir(entry.name)) continue; + + const next_prefix = if (prefix.len == 0) + try allocator.dupe(u8, entry.name) + else + try std.fmt.allocPrint(allocator, "{s}/{s}", .{ prefix, entry.name }); + defer allocator.free(next_prefix); + + const next_dir_path = try std.fmt.allocPrint(allocator, "{s}/{s}", .{ dir_path, entry.name }); + defer allocator.free(next_dir_path); + + try scanDir(explorer, next_dir_path, next_prefix, allocator); + }, + .file => { + const rel_path = if (prefix.len == 0) + try allocator.dupe(u8, entry.name) + else + try std.fmt.allocPrint(allocator, "{s}/{s}", .{ prefix, entry.name }); + defer allocator.free(rel_path); + + const full_path = try std.fmt.allocPrint(allocator, "{s}/{s}", .{ dir_path, entry.name }); + defer allocator.free(full_path); + + try indexFile(explorer, full_path, rel_path, allocator); + }, + else => {}, + } + } +} + +fn scanProject(explorer: *Explorer, root: []const u8, allocator: std.mem.Allocator) !void { + var dir = std.fs.cwd().openDir(root, .{ .iterate = true }) catch |err| { + std.debug.print("openDir failed {s}: {s}\n", .{ root, @errorName(err) }); + return err; + }; + dir.close(); + try scanDir(explorer, root, "", allocator); +} + +fn usage() !void { + const stderr = std.fs.File.stderr(); + try stderr.writeAll( + \\usage: + \\ codedb tree + \\ codedb outline + \\ codedb find + \\ codedb search [max] + \\ codedb word + \\ codedb deps + \\ codedb read + \\ + ); +} + +fn parseMax(arg: []const u8) usize { + return std.fmt.parseInt(usize, arg, 10) catch 20; +} + +pub fn main() !void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + const allocator = gpa.allocator(); + + const args = try std.process.argsAlloc(allocator); + defer std.process.argsFree(allocator, args); + + if (args.len < 3) { + try usage(); + std.process.exit(1); + } + + const cmd = args[1]; + const root = args[2]; + + var explorer = Explorer.init(allocator); + defer explorer.deinit(); + + try scanProject(&explorer, root, allocator); + + if (std.mem.eql(u8, cmd, "tree")) { + const tree = try explorer.getTree(allocator, false); + defer allocator.free(tree); + try std.fs.File.stdout().writeAll(tree); + return; + } + + if (std.mem.eql(u8, cmd, "outline")) { + if (args.len < 4) { + try usage(); + std.process.exit(1); + } + var outline = (try explorer.getOutline(args[3], allocator)) orelse { + std.process.exit(2); + }; + defer outline.deinit(); + + var stdout_writer = std.fs.File.stdout().writer(&.{}); + const stdout = &stdout_writer.interface; + try stdout.print("{s} {s} {d}L {d} sym\n", .{ + outline.path, + @tagName(outline.language), + outline.line_count, + outline.symbols.items.len, + }); + for (outline.symbols.items) |sym| { + try stdout.print("{d}:{d} {s} {s}\n", .{ + sym.line_start, + sym.line_end, + @tagName(sym.kind), + sym.name, + }); + } + return; + } + + if (std.mem.eql(u8, cmd, "find")) { + if (args.len < 4) { + try usage(); + std.process.exit(1); + } + const hits = try explorer.findAllSymbols(args[3], allocator); + defer { + for (hits) |hit| { + allocator.free(hit.path); + allocator.free(hit.symbol.name); + if (hit.symbol.detail) |detail| allocator.free(detail); + } + allocator.free(hits); + } + + var stdout_writer = std.fs.File.stdout().writer(&.{}); + const stdout = &stdout_writer.interface; + for (hits) |hit| { + try stdout.print("{s}:{d}:{d} {s} {s}\n", .{ + hit.path, + hit.symbol.line_start, + hit.symbol.line_end, + @tagName(hit.symbol.kind), + hit.symbol.name, + }); + } + return; + } + + if (std.mem.eql(u8, cmd, "search")) { + if (args.len < 4) { + try usage(); + std.process.exit(1); + } + const max_results = if (args.len >= 5) parseMax(args[4]) else 20; + const hits = try explorer.searchContent(args[3], allocator, max_results); + defer { + for (hits) |hit| { + allocator.free(hit.path); + allocator.free(hit.line_text); + } + allocator.free(hits); + } + + var stdout_writer = std.fs.File.stdout().writer(&.{}); + const stdout = &stdout_writer.interface; + for (hits) |hit| { + try stdout.print("{s}:{d}: {s}\n", .{ hit.path, hit.line_num, hit.line_text }); + } + return; + } + + if (std.mem.eql(u8, cmd, "word")) { + if (args.len < 4) { + try usage(); + std.process.exit(1); + } + const hits = try explorer.searchWord(args[3], allocator); + defer allocator.free(hits); + + var stdout_writer = std.fs.File.stdout().writer(&.{}); + const stdout = &stdout_writer.interface; + for (hits) |hit| { + try stdout.print("{s}:{d}\n", .{ hit.path, hit.line_num }); + } + return; + } + + if (std.mem.eql(u8, cmd, "deps")) { + if (args.len < 4) { + try usage(); + std.process.exit(1); + } + const deps = try explorer.getImportedBy(args[3], allocator); + defer { + for (deps) |dep| allocator.free(dep); + allocator.free(deps); + } + + var stdout_writer = std.fs.File.stdout().writer(&.{}); + const stdout = &stdout_writer.interface; + for (deps) |dep| { + try stdout.print("{s}\n", .{dep}); + } + return; + } + + if (std.mem.eql(u8, cmd, "read")) { + if (args.len < 4) { + try usage(); + std.process.exit(1); + } + const content = (try explorer.getContent(args[3], allocator)) orelse { + std.process.exit(2); + }; + defer allocator.free(content); + try std.fs.File.stdout().writeAll(content); + return; + } + + try usage(); + std.process.exit(1); +} diff --git a/registry/native/zig/codedb/src/vendor/agent.zig b/registry/native/zig/codedb/src/vendor/agent.zig new file mode 100644 index 000000000..4f930e40b --- /dev/null +++ b/registry/native/zig/codedb/src/vendor/agent.zig @@ -0,0 +1,157 @@ +const std = @import("std"); + +/// An Agent is a first-class citizen — not a string column, but a live entity +/// with its own identity, write log, cursor position, and capabilities. +pub const AgentId = u64; + +pub const AgentState = enum(u8) { + active = 0, + idle = 1, + crashed = 2, // missed heartbeat + gone = 3, // explicitly disconnected +}; + +pub const Agent = struct { + id: AgentId, + name: []const u8, + state: AgentState, + /// The version number this agent has seen up to. + /// Anything after this cursor is "new" to this agent. + cursor: u64, + /// Timestamp of last heartbeat (ms since epoch). + last_seen: i64, + /// How many edits this agent has made total. + edit_count: u64, + /// Which files this agent currently holds advisory locks on. + locked_paths: std.StringHashMap(i64), // path → expiry timestamp +}; + +/// Registry of all known agents. The source of truth for "who's alive". +pub const AgentRegistry = struct { + agents: std.AutoHashMap(AgentId, Agent), + next_id: AgentId, + allocator: std.mem.Allocator, + mu: std.Thread.Mutex = .{}, + + pub fn init(allocator: std.mem.Allocator) AgentRegistry { + return .{ + .agents = std.AutoHashMap(AgentId, Agent).init(allocator), + .next_id = 1, + .allocator = allocator, + }; + } + + pub fn deinit(self: *AgentRegistry) void { + var iter = self.agents.iterator(); + while (iter.next()) |entry| { + var lp_iter = entry.value_ptr.locked_paths.keyIterator(); + while (lp_iter.next()) |key| { + self.allocator.free(key.*); + } + self.allocator.free(entry.value_ptr.name); + entry.value_ptr.locked_paths.deinit(); + } + self.agents.deinit(); + } + + /// Register a new agent. Returns its unique ID. + pub fn register(self: *AgentRegistry, name: []const u8) !AgentId { + self.mu.lock(); + defer self.mu.unlock(); + + const id = self.next_id; + self.next_id += 1; + + const duped_name = try self.allocator.dupe(u8, name); + errdefer self.allocator.free(duped_name); + + try self.agents.put(id, .{ + .id = id, + .name = duped_name, + .state = .active, + .cursor = 0, + .last_seen = std.time.milliTimestamp(), + .edit_count = 0, + .locked_paths = std.StringHashMap(i64).init(self.allocator), + }); + + return id; + } + + /// Agent heartbeat — proves it's still alive. + pub fn heartbeat(self: *AgentRegistry, id: AgentId) void { + self.mu.lock(); + defer self.mu.unlock(); + + if (self.agents.getPtr(id)) |a| { + a.last_seen = std.time.milliTimestamp(); + if (a.state == .crashed) a.state = .active; + } + } + + /// Mark agents as crashed if they haven't heartbeated in `timeout_ms`. + pub fn reapStale(self: *AgentRegistry, timeout_ms: i64) void { + self.mu.lock(); + defer self.mu.unlock(); + + const now = std.time.milliTimestamp(); + var iter = self.agents.iterator(); + while (iter.next()) |entry| { + const a = entry.value_ptr; + if (a.state == .active and (now - a.last_seen) > timeout_ms) { + a.state = .crashed; + // Release all locks held by crashed agent. + var key_iter = a.locked_paths.keyIterator(); + while (key_iter.next()) |key| { + self.allocator.free(key.*); + } + a.locked_paths.clearAndFree(); + } + } + } + + /// Try to acquire an advisory lock on a file path for an agent. + pub fn tryLock(self: *AgentRegistry, agent_id: AgentId, path: []const u8, ttl_ms: i64) !bool { + self.mu.lock(); + defer self.mu.unlock(); + + const now = std.time.milliTimestamp(); + + // Check if any other active agent holds this lock. + var iter = self.agents.iterator(); + while (iter.next()) |entry| { + const a = entry.value_ptr; + if (a.id == agent_id) continue; + if (a.locked_paths.get(path)) |expiry| { + if (now < expiry) return false; // someone else holds it + // Expired: remove it and free the duped key. + if (a.locked_paths.fetchRemove(path)) |kv| { + self.allocator.free(kv.key); + } + } + } + + // Grant the lock. + if (self.agents.getPtr(agent_id)) |a| { + if (a.locked_paths.getPtr(path)) |expiry| { + expiry.* = now + ttl_ms; + return true; + } + + const duped = try self.allocator.dupe(u8, path); + errdefer self.allocator.free(duped); + try a.locked_paths.put(duped, now + ttl_ms); + return true; + } + return false; + } + pub fn releaseLock(self: *AgentRegistry, agent_id: AgentId, path: []const u8) void { + self.mu.lock(); + defer self.mu.unlock(); + if (self.agents.getPtr(agent_id)) |a| { + if (a.locked_paths.fetchRemove(path)) |kv| { + self.allocator.free(kv.key); + } + } + } +}; diff --git a/registry/native/zig/codedb/src/vendor/edit.zig b/registry/native/zig/codedb/src/vendor/edit.zig new file mode 100644 index 000000000..900d7eb21 --- /dev/null +++ b/registry/native/zig/codedb/src/vendor/edit.zig @@ -0,0 +1,124 @@ +const std = @import("std"); +const Store = @import("store.zig").Store; +const AgentRegistry = @import("agent.zig").AgentRegistry; +const AgentId = @import("agent.zig").AgentId; +const Explorer = @import("explore.zig").Explorer; +const Op = @import("version.zig").Op; + +pub const EditRequest = struct { + path: []const u8, + agent_id: AgentId, + op: Op, + range: ?[2]usize = null, + after: ?usize = null, + content: ?[]const u8 = null, +}; + +pub const EditResult = struct { + seq: u64, + new_hash: u64, + new_size: u64, +}; + +pub fn applyEdit( + allocator: std.mem.Allocator, + store: *Store, + agents: *AgentRegistry, + explorer: ?*Explorer, + req: EditRequest, +) !EditResult { + const has_lock = try agents.tryLock(req.agent_id, req.path, 30_000); + if (!has_lock) return error.FileLocked; + errdefer agents.releaseLock(req.agent_id, req.path); + + const file = try std.fs.cwd().openFile(req.path, .{}); + defer file.close(); + const source = try file.readToEndAlloc(allocator, 10 * 1024 * 1024); + defer allocator.free(source); + + var lines: std.ArrayList([]const u8) = .{}; + defer lines.deinit(allocator); + var iter = std.mem.splitScalar(u8, source, '\n'); + while (iter.next()) |line| try lines.append(allocator, line); + + // A trailing newline produces an empty final element; don't count it as a line + const had_trailing_newline = lines.items.len > 0 and lines.items[lines.items.len - 1].len == 0; + if (had_trailing_newline) { + _ = lines.pop(); + } + + switch (req.op) { + .replace => { + if (req.range) |range| { + if (range[0] == 0 or range[1] < range[0] or range[0] > lines.items.len) return error.InvalidRange; + const start = range[0] - 1; + const end = @min(range[1], lines.items.len); + const new_content = req.content orelse return error.MissingContent; + var new_lines: std.ArrayList([]const u8) = .{}; + defer new_lines.deinit(allocator); + var ni = std.mem.splitScalar(u8, new_content, '\n'); + while (ni.next()) |nl| try new_lines.append(allocator, nl); + try lines.replaceRange(allocator, start, end - start, new_lines.items); + } + }, + .insert => { + if (req.after) |after_line| { + const pos = @min(after_line, lines.items.len); + const content = req.content orelse return error.MissingContent; + try lines.insert(allocator, pos, content); + } + }, + .delete => { + if (req.range) |range| { + if (range[0] == 0 or range[1] < range[0] or range[0] > lines.items.len) return error.InvalidRange; + const start = range[0] - 1; + const end = @min(range[1], lines.items.len); + // Remove lines [start..end) by replacing with nothing + try lines.replaceRange(allocator, start, end - start, &.{}); + } + }, + else => {}, + } + + // Restore trailing newline if the original file had one + if (had_trailing_newline) { + try lines.append(allocator, ""); + } + + const result = try std.mem.join(allocator, "\n", lines.items); + defer allocator.free(result); + + // Atomic write: write to temp file then rename to prevent corruption on crash + const dir = std.fs.cwd(); + const tmp_path = try std.fmt.allocPrint(allocator, "{s}.codedb_tmp", .{req.path}); + defer allocator.free(tmp_path); + + { + const tmp_file = try dir.createFile(tmp_path, .{}); + defer tmp_file.close(); + try tmp_file.writeAll(result); + } + + dir.rename(tmp_path, req.path) catch |err| { + // Clean up temp file on rename failure + dir.deleteFile(tmp_path) catch {}; + return err; + }; + + const hash: u64 = std.hash.Wyhash.hash(0, result); + // KNOWN LIMITATION: if recordEdit fails here, the file is already on disk but not + // in the store. This leaves the disk and store inconsistent. Recovery would require + // re-reading the file and re-recording, or a crash-recovery scan at startup. + const seq = try store.recordEdit(req.path, req.agent_id, req.op, hash, result.len, req.content); + if (explorer) |exp| { + try exp.indexFile(req.path, result); + } + + agents.releaseLock(req.agent_id, req.path); + + return .{ + .seq = seq, + .new_hash = hash, + .new_size = result.len, + }; +} diff --git a/registry/native/zig/codedb/src/vendor/explore.zig b/registry/native/zig/codedb/src/vendor/explore.zig new file mode 100644 index 000000000..0fa0607ed --- /dev/null +++ b/registry/native/zig/codedb/src/vendor/explore.zig @@ -0,0 +1,1587 @@ +const std = @import("std"); +const Store = @import("store.zig").Store; +const idx = @import("index.zig"); +const WordIndex = idx.WordIndex; +const TrigramIndex = idx.TrigramIndex; +const SparseNgramIndex = idx.SparseNgramIndex; + + +pub const SymbolKind = enum(u8) { + function, + struct_def, + enum_def, + union_def, + constant, + variable, + import, + test_decl, + comment_block, + trait_def, + impl_block, + type_alias, + macro_def, + method, +}; + +pub const Symbol = struct { + name: []const u8, + kind: SymbolKind, + line_start: u32, + line_end: u32, + detail: ?[]const u8 = null, +}; + +pub const FileOutline = struct { + path: []const u8, + language: Language, + line_count: u32, + byte_size: u64, + symbols: std.ArrayList(Symbol) = .{}, + imports: std.ArrayList([]const u8) = .{}, + allocator: std.mem.Allocator, + owns_path: bool = false, + + pub fn init(allocator: std.mem.Allocator, path: []const u8) FileOutline { + return .{ + .path = path, + .language = detectLanguage(path), + .line_count = 0, + .byte_size = 0, + .allocator = allocator, + }; + } + pub fn deinit(self: *FileOutline) void { + if (self.owns_path) self.allocator.free(self.path); + for (self.symbols.items) |sym| { + self.allocator.free(sym.name); + if (sym.detail) |d| self.allocator.free(d); + } + self.symbols.deinit(self.allocator); + for (self.imports.items) |imp| self.allocator.free(imp); + self.imports.deinit(self.allocator); + } +}; + +pub const Language = enum(u8) { + zig, + c, + cpp, + python, + javascript, + typescript, + rust, + go_lang, + markdown, + json, + yaml, + unknown, +}; + +pub fn detectLanguage(path: []const u8) Language { + if (std.mem.endsWith(u8, path, ".zig")) return .zig; + if (std.mem.endsWith(u8, path, ".c") or std.mem.endsWith(u8, path, ".h")) return .c; + if (std.mem.endsWith(u8, path, ".cpp") or std.mem.endsWith(u8, path, ".hpp")) return .cpp; + if (std.mem.endsWith(u8, path, ".py")) return .python; + if (std.mem.endsWith(u8, path, ".js") or std.mem.endsWith(u8, path, ".jsx")) return .javascript; + if (std.mem.endsWith(u8, path, ".ts") or std.mem.endsWith(u8, path, ".tsx")) return .typescript; + if (std.mem.endsWith(u8, path, ".rs")) return .rust; + if (std.mem.endsWith(u8, path, ".go")) return .go_lang; + if (std.mem.endsWith(u8, path, ".md")) return .markdown; + if (std.mem.endsWith(u8, path, ".json")) return .json; + if (std.mem.endsWith(u8, path, ".yaml") or std.mem.endsWith(u8, path, ".yml")) return .yaml; + return .unknown; +} + +pub const SymbolResult = struct { + path: []const u8, + symbol: Symbol, +}; + +pub const SearchResult = struct { + path: []const u8, + line_num: u32, + line_text: []const u8, +}; + +pub const Explorer = struct { + outlines: std.StringHashMap(FileOutline), + dep_graph: std.StringHashMap(std.ArrayList([]const u8)), + contents: std.StringHashMap([]const u8), + word_index: WordIndex, + trigram_index: TrigramIndex, + sparse_ngram_index: SparseNgramIndex, + allocator: std.mem.Allocator, + mu: std.Thread.RwLock = .{}, + + pub fn init(allocator: std.mem.Allocator) Explorer { + return .{ + .outlines = std.StringHashMap(FileOutline).init(allocator), + .dep_graph = std.StringHashMap(std.ArrayList([]const u8)).init(allocator), + .contents = std.StringHashMap([]const u8).init(allocator), + .word_index = WordIndex.init(allocator), + .trigram_index = TrigramIndex.init(allocator), + .sparse_ngram_index = SparseNgramIndex.init(allocator), + .allocator = allocator, + }; + } + + + pub fn deinit(self: *Explorer) void { + var iter = self.outlines.iterator(); + while (iter.next()) |entry| { + self.allocator.free(entry.key_ptr.*); + entry.value_ptr.deinit(); + } + self.outlines.deinit(); + + var dep_iter = self.dep_graph.iterator(); + while (dep_iter.next()) |entry| { + entry.value_ptr.deinit(self.allocator); + } + self.dep_graph.deinit(); + + var content_iter = self.contents.iterator(); + while (content_iter.next()) |entry| { + self.allocator.free(entry.value_ptr.*); + } + self.contents.deinit(); + + self.word_index.deinit(); + self.trigram_index.deinit(); + self.sparse_ngram_index.deinit(); + } + + pub fn indexFile(self: *Explorer, path: []const u8, content: []const u8) !void { + return self.indexFileInner(path, content, true, false); + } + + /// Fast path: index outline + content storage only, skip word/trigram indexes. + pub fn indexFileOutlineOnly(self: *Explorer, path: []const u8, content: []const u8) !void { + return self.indexFileInner(path, content, false, false); + } + + /// Index outline + word index but skip trigram construction (used when trigram is loaded from disk cache). + pub fn indexFileSkipTrigram(self: *Explorer, path: []const u8, content: []const u8) !void { + return self.indexFileInner(path, content, true, true); + } + + +fn indexFileInner(self: *Explorer, path: []const u8, content: []const u8, full_index: bool, skip_trigram: bool) !void { + // Parse outline outside the global explorer write lock. + // This keeps HTTP/MCP readers from being blocked on line-by-line parsing. + var outline = FileOutline.init(self.allocator, path); + errdefer outline.deinit(); + outline.byte_size = content.len; + + var line_num: u32 = 0; + var prev_line_trimmed: []const u8 = ""; + var lines = std.mem.splitScalar(u8, content, '\n'); + while (lines.next()) |line| { + line_num += 1; + const trimmed = std.mem.trim(u8, line, " \t"); + + if (outline.language == .zig) { + try self.parseZigLine(trimmed, line_num, &outline); + } else if (outline.language == .python) { + try self.parsePythonLine(trimmed, line_num, &outline); + } else if (outline.language == .typescript or outline.language == .javascript) { + try self.parseTsLine(trimmed, line_num, &outline); + } else if (outline.language == .rust) { + try self.parseRustLine(trimmed, line_num, &outline, prev_line_trimmed); + } + + prev_line_trimmed = trimmed; + } + outline.line_count = line_num; + + self.mu.lock(); + defer self.mu.unlock(); + + // Reuse existing key if file was already indexed, else dupe. + const outline_gop = try self.outlines.getOrPut(path); + const is_new = !outline_gop.found_existing; + var prior_outline: ?FileOutline = if (outline_gop.found_existing) + outline_gop.value_ptr.* + else + null; + const stable_path = if (outline_gop.found_existing) blk: { + break :blk outline_gop.key_ptr.*; + } else blk: { + const duped = try self.allocator.dupe(u8, path); + outline_gop.key_ptr.* = duped; + break :blk duped; + }; + // If we added a new entry but later fail, remove it so the map stays consistent. + errdefer if (is_new) { + _ = self.outlines.remove(stable_path); + self.allocator.free(stable_path); + }; + + // Ensure outline path uses the stable map key. + outline.path = stable_path; + + const duped_content = try self.allocator.dupe(u8, content); + errdefer self.allocator.free(duped_content); + const content_gop = try self.contents.getOrPut(stable_path); + var prior_content: ?[]const u8 = null; + if (content_gop.found_existing) { + prior_content = content_gop.value_ptr.*; + } else { + content_gop.key_ptr.* = stable_path; + } + content_gop.value_ptr.* = duped_content; + errdefer { + if (content_gop.found_existing) { + content_gop.value_ptr.* = prior_content.?; + } else { + _ = self.contents.remove(stable_path); + } + } + + // Build search indexes. + if (full_index) { + try self.word_index.indexFile(stable_path, content); + if (!skip_trigram) { + try self.trigram_index.indexFile(stable_path, content); + try self.sparse_ngram_index.indexFile(stable_path, content); + } + } + + + try self.rebuildDepsFor(stable_path, &outline); + + outline_gop.value_ptr.* = outline; + if (prior_content) |old_content| { + self.allocator.free(old_content); + } + if (prior_outline) |*old_outline| { + old_outline.deinit(); + } +} + /// Rebuild trigram index from the stored file contents. + /// Used after a cache hit to populate trigrams when they were skipped during the fast scan. + pub fn rebuildTrigrams(self: *Explorer) !void { + self.mu.lock(); + defer self.mu.unlock(); + var iter = self.contents.iterator(); + while (iter.next()) |entry| { + try self.trigram_index.indexFile(entry.key_ptr.*, entry.value_ptr.*); + try self.sparse_ngram_index.indexFile(entry.key_ptr.*, entry.value_ptr.*); + } + } + + + pub fn removeFile(self: *Explorer, path: []const u8) void { + self.mu.lock(); + defer self.mu.unlock(); + if (self.dep_graph.getPtr(path)) |deps| { + deps.deinit(self.allocator); + _ = self.dep_graph.remove(path); + } + if (self.contents.getPtr(path)) |content| { + self.allocator.free(content.*); + _ = self.contents.remove(path); + } + self.word_index.removeFile(path); + self.trigram_index.removeFile(path); + self.sparse_ngram_index.removeFile(path); + + if (self.outlines.fetchRemove(path)) |kv| { + var outline = kv.value; + outline.deinit(); + self.allocator.free(kv.key); + } + } + + pub fn getOutline(self: *Explorer, path: []const u8, allocator: std.mem.Allocator) !?FileOutline { + self.mu.lockShared(); + defer self.mu.unlockShared(); + + const outline = self.outlines.getPtr(path) orelse return null; + return try cloneOutline(outline, allocator); + } + + /// Return a caller-owned copy of cached file content. +pub fn getContent(self: *Explorer, path: []const u8, allocator: std.mem.Allocator) !?[]u8 { + self.mu.lockShared(); + defer self.mu.unlockShared(); + + const content = self.contents.get(path) orelse return null; + return try allocator.dupe(u8, content); +} + +fn cloneOutline(src: *const FileOutline, allocator: std.mem.Allocator) !FileOutline { + const copied_path = try allocator.dupe(u8, src.path); + // No errdefer here: dst.deinit() below handles freeing copied_path via owns_path. + + var dst = FileOutline.init(allocator, copied_path); + dst.owns_path = true; + errdefer dst.deinit(); + dst.line_count = src.line_count; + dst.byte_size = src.byte_size; + for (src.symbols.items) |sym| { + const copied_name = try allocator.dupe(u8, sym.name); + errdefer allocator.free(copied_name); + + const copied_detail = if (sym.detail) |d| blk: { + const detail = try allocator.dupe(u8, d); + break :blk detail; + } else null; + errdefer if (copied_detail) |d| allocator.free(d); + + try dst.symbols.append(allocator, .{ + .name = copied_name, + .kind = sym.kind, + .line_start = sym.line_start, + .line_end = sym.line_end, + .detail = copied_detail, + }); + } + for (src.imports.items) |imp| { + const copied_import = try allocator.dupe(u8, imp); + errdefer allocator.free(copied_import); + try dst.imports.append(allocator, copied_import); + } + + return dst; +} + +pub fn getTree(self: *Explorer, allocator: std.mem.Allocator, use_color: bool) ![]u8 { + const s = @import("style.zig").style(use_color); + + self.mu.lockShared(); + defer self.mu.unlockShared(); + + var buf: std.ArrayList(u8) = .{}; + errdefer buf.deinit(allocator); + const writer = buf.writer(allocator); + + var paths: std.ArrayList([]const u8) = .{}; + defer paths.deinit(allocator); + + var iter = self.outlines.iterator(); + while (iter.next()) |entry| { + try paths.append(allocator, entry.key_ptr.*); + } + + std.mem.sort([]const u8, paths.items, {}, struct { + fn lessThan(_: void, a: []const u8, b: []const u8) bool { + return std.mem.order(u8, a, b) == .lt; + } + }.lessThan); + + var seen_dirs = std.StringHashMap(void).init(allocator); + defer seen_dirs.deinit(); + + for (paths.items) |path| { + const outline = self.outlines.get(path) orelse continue; + + // Emit directory nodes we haven't seen yet + var prefix_end: usize = 0; + while (std.mem.indexOfScalarPos(u8, path, prefix_end, '/')) |sep| { + const dir = path[0 .. sep + 1]; + if (!seen_dirs.contains(dir)) { + try seen_dirs.put(dir, {}); + const depth = std.mem.count(u8, dir[0..sep], "/"); + for (0..depth) |_| try writer.writeAll(" "); + const dir_name = path[if (depth > 0) std.mem.lastIndexOfScalar(u8, dir[0..sep], '/').? + 1 else 0 .. sep]; + try writer.print("{s}{s}/{s}\n", .{ s.bold, dir_name, s.reset }); + } + prefix_end = sep + 1; + } + + // Emit file leaf + const depth = std.mem.count(u8, path, "/"); + for (0..depth) |_| try writer.writeAll(" "); + const basename = if (std.mem.lastIndexOfScalar(u8, path, '/')) |pos| path[pos + 1 ..] else path; + const lang = @tagName(outline.language); + try writer.print("{s} {s}{s}{s} {s}{d}L {d} sym{s}\n", .{ + basename, + s.langColor(lang), lang, s.reset, + s.dim, outline.line_count, outline.symbols.items.len, s.reset, + }); + } + + return buf.toOwnedSlice(allocator); +} + + pub fn findSymbol(self: *Explorer, name: []const u8, allocator: std.mem.Allocator) !?struct { path: []const u8, symbol: Symbol } { + self.mu.lockShared(); + defer self.mu.unlockShared(); + + var iter = self.outlines.iterator(); + while (iter.next()) |entry| { + for (entry.value_ptr.symbols.items) |sym| { + if (std.mem.eql(u8, sym.name, name)) { + return .{ + .path = try allocator.dupe(u8, entry.key_ptr.*), + .symbol = .{ + .name = try allocator.dupe(u8, sym.name), + .kind = sym.kind, + .line_start = sym.line_start, + .line_end = sym.line_end, + .detail = if (sym.detail) |d| try allocator.dupe(u8, d) else null, + }, + }; + } + } + } + return null; + } + + pub fn findAllSymbols(self: *Explorer, name: []const u8, allocator: std.mem.Allocator) ![]const SymbolResult { + self.mu.lockShared(); + defer self.mu.unlockShared(); + + var result_list: std.ArrayList(SymbolResult) = .{}; + errdefer result_list.deinit(allocator); + var iter = self.outlines.iterator(); + while (iter.next()) |entry| { + for (entry.value_ptr.symbols.items) |sym| { + if (std.mem.eql(u8, sym.name, name)) { + try result_list.append(allocator, .{ + .path = try allocator.dupe(u8, entry.key_ptr.*), + .symbol = .{ + .name = try allocator.dupe(u8, sym.name), + .kind = sym.kind, + .line_start = sym.line_start, + .line_end = sym.line_end, + .detail = if (sym.detail) |d| try allocator.dupe(u8, d) else null, + }, + }); + } + } + } + return result_list.toOwnedSlice(allocator); + } + + pub fn searchContent(self: *Explorer, query: []const u8, allocator: std.mem.Allocator, max_results: usize) ![]const SearchResult { + self.mu.lockShared(); + defer self.mu.unlockShared(); + + var result_list: std.ArrayList(SearchResult) = .{}; + errdefer result_list.deinit(allocator); + + // Sparse n-gram candidates (sliding-window, union semantics). + const sparse_paths = self.sparse_ngram_index.candidates(query, allocator); + defer if (sparse_paths) |sp| allocator.free(sp); + + // Trigram candidates — always computed so we can intersect or fall back. + const candidate_paths = self.trigram_index.candidates(query, allocator); + defer if (candidate_paths) |cp| allocator.free(cp); + + if (sparse_paths != null and sparse_paths.?.len > 0) { + // Sparse has candidates: intersect with trigram to narrow results. + if (candidate_paths != null and candidate_paths.?.len > 0) { + var sparse_set = std.StringHashMap(void).init(allocator); + defer sparse_set.deinit(); + for (sparse_paths.?) |p| try sparse_set.put(p, {}); + for (candidate_paths.?) |path| { + if (!sparse_set.contains(path)) continue; + const content = self.contents.get(path) orelse continue; + try searchInContent(path, content, query, allocator, max_results, &result_list); + if (result_list.items.len >= max_results) break; + } + } else { + // No trigram candidates; search sparse candidates directly. + for (sparse_paths.?) |path| { + const content = self.contents.get(path) orelse continue; + try searchInContent(path, content, query, allocator, max_results, &result_list); + if (result_list.items.len >= max_results) break; + } + } + return result_list.toOwnedSlice(allocator); + } + + // Sparse returned empty — fall through to trigram or brute force. + const use_trigram = candidate_paths != null and candidate_paths.?.len > 0; + if (use_trigram) { + for (candidate_paths.?) |path| { + const content = self.contents.get(path) orelse continue; + try searchInContent(path, content, query, allocator, max_results, &result_list); + if (result_list.items.len >= max_results) break; + } + } else { + // Brute force (short query or no index hits). + var iter = self.contents.iterator(); + while (iter.next()) |entry| { + try searchInContent(entry.key_ptr.*, entry.value_ptr.*, query, allocator, max_results, &result_list); + if (result_list.items.len >= max_results) break; + } + } + + return result_list.toOwnedSlice(allocator); + } + + + /// Search file contents using a regex pattern with trigram acceleration. + /// Decomposes the regex to extract literal trigrams for candidate filtering, + /// then does actual regex matching on candidates. + pub fn searchContentRegex(self: *Explorer, pattern: []const u8, allocator: std.mem.Allocator, max_results: usize) ![]const SearchResult { + self.mu.lockShared(); + defer self.mu.unlockShared(); + + var result_list: std.ArrayList(SearchResult) = .{}; + errdefer result_list.deinit(allocator); + + // Decompose regex into trigram query + var query = idx.decomposeRegex(pattern, self.allocator) catch { + // If decomposition fails, fall back to brute force + var iter = self.contents.iterator(); + while (iter.next()) |entry| { + try searchInContentRegex(entry.key_ptr.*, entry.value_ptr.*, pattern, allocator, max_results, &result_list); + if (result_list.items.len >= max_results) break; + } + return result_list.toOwnedSlice(allocator); + }; + defer query.deinit(); + + const candidate_paths = self.trigram_index.candidatesRegex(&query, allocator); + defer if (candidate_paths) |cp| allocator.free(cp); + const use_trigram = candidate_paths != null and candidate_paths.?.len > 0; + + if (use_trigram) { + for (candidate_paths.?) |path| { + const content = self.contents.get(path) orelse continue; + try searchInContentRegex(path, content, pattern, allocator, max_results, &result_list); + if (result_list.items.len >= max_results) break; + } + } else { + // Brute force — no useful trigrams extracted + var iter = self.contents.iterator(); + while (iter.next()) |entry| { + try searchInContentRegex(entry.key_ptr.*, entry.value_ptr.*, pattern, allocator, max_results, &result_list); + if (result_list.items.len >= max_results) break; + } + } + + return result_list.toOwnedSlice(allocator); + } + + + /// Search for a word using the inverted word index. O(1) lookup. + pub fn searchWord(self: *Explorer, word: []const u8, allocator: std.mem.Allocator) ![]const idx.WordHit { + self.mu.lockShared(); + defer self.mu.unlockShared(); + return self.word_index.searchDeduped(word, allocator); + } + +pub fn getImportedBy(self: *Explorer, path: []const u8, allocator: std.mem.Allocator) ![]const []const u8 { + self.mu.lockShared(); + defer self.mu.unlockShared(); + + // Extract basename for matching against raw import strings + // e.g., "src/store.zig" -> "store.zig" + const basename = if (std.mem.lastIndexOfScalar(u8, path, '/')) |pos| path[pos + 1 ..] else path; + + var result: std.ArrayList([]const u8) = .{}; + errdefer { + for (result.items) |p| allocator.free(p); + result.deinit(allocator); + } + + var iter = self.dep_graph.iterator(); + while (iter.next()) |entry| { + for (entry.value_ptr.items) |dep| { + const normalized_dep = if (std.mem.startsWith(u8, dep, "./")) dep[2..] else dep; + if (std.mem.eql(u8, dep, path) or + std.mem.eql(u8, dep, basename) or + std.mem.eql(u8, normalized_dep, path) or + std.mem.eql(u8, normalized_dep, basename)) + { + const dep_path = try allocator.dupe(u8, entry.key_ptr.*); + try result.append(allocator, dep_path); + break; + } + } + } + return result.toOwnedSlice(allocator); +} + +pub fn getHotFiles(self: *Explorer, store: *Store, allocator: std.mem.Allocator, limit: usize) ![]const []const u8 { + // Collect stable path copies under explorer lock. + var path_list: std.ArrayList([]u8) = .{}; + errdefer { + for (path_list.items) |path| allocator.free(path); + path_list.deinit(allocator); + } + defer path_list.deinit(allocator); + { + self.mu.lockShared(); + defer self.mu.unlockShared(); + var iter = self.outlines.iterator(); + while (iter.next()) |kv| { + const path_copy = try allocator.dupe(u8, kv.key_ptr.*); + try path_list.append(allocator, path_copy); + } + } + + // Query store seqs without holding explorer lock. + const Entry = struct { path: []u8, seq: u64 }; + var entries: std.ArrayList(Entry) = .{}; + defer entries.deinit(allocator); + { + store.mu.lock(); + defer store.mu.unlock(); + for (path_list.items) |path| { + const seq = store.getLatestSeqUnlocked(path); + try entries.append(allocator, .{ .path = path, .seq = seq }); + } + } + + std.mem.sort(Entry, entries.items, {}, struct { + fn cmp(_: void, a: Entry, b: Entry) bool { + return a.seq > b.seq; + } + }.cmp); + + const count = @min(limit, entries.items.len); + const paths = try allocator.alloc([]const u8, count); + for (entries.items[0..count], 0..) |e, i| { + paths[i] = e.path; + } + for (entries.items[count..]) |e| { + allocator.free(e.path); + } + return paths; +} + // ── Language parsers ────────────────────────────────────── + + fn parseZigLine(self: *Explorer, line: []const u8, line_num: u32, outline: *FileOutline) !void { + const a = self.allocator; + if (startsWith(line, "pub fn ") or startsWith(line, "fn ")) { + const start: usize = if (startsWith(line, "pub fn ")) 7 else 3; + if (extractIdent(line[start..])) |name| { + const name_copy = try a.dupe(u8, name); + errdefer a.free(name_copy); + const detail_copy = try a.dupe(u8, line); + errdefer a.free(detail_copy); + try outline.symbols.append(a, .{ + .name = name_copy, + .kind = .function, + .line_start = line_num, + .line_end = line_num, + .detail = detail_copy, + }); + } + } else if (startsWith(line, "pub const ") or startsWith(line, "const ")) { + const start: usize = if (startsWith(line, "pub const ")) 10 else 6; + if (extractIdent(line[start..])) |name| { + const kind: SymbolKind = if (std.mem.indexOf(u8, line, "struct {") != null) + .struct_def + else if (std.mem.indexOf(u8, line, "enum {") != null) + .enum_def + else if (std.mem.indexOf(u8, line, "union {") != null or + std.mem.indexOf(u8, line, "union(enum) {") != null) + .union_def + else if (std.mem.indexOf(u8, line, "@import") != null) + .import + else + .constant; + + const name_copy = try a.dupe(u8, name); + errdefer a.free(name_copy); + const detail_copy = try a.dupe(u8, line); + errdefer a.free(detail_copy); + try outline.symbols.append(a, .{ + .name = name_copy, + .kind = kind, + .line_start = line_num, + .line_end = line_num, + .detail = detail_copy, + }); + + if (kind == .import) { + if (extractStringLiteral(line)) |import_path| { + const import_copy = try a.dupe(u8, import_path); + errdefer a.free(import_copy); + try outline.imports.append(a, import_copy); + } + } + } + } else if (startsWith(line, "test ")) { + const name_copy = try a.dupe(u8, line); + errdefer a.free(name_copy); + try outline.symbols.append(a, .{ + .name = name_copy, + .kind = .test_decl, + .line_start = line_num, + .line_end = line_num, + }); + } + } + + fn parsePythonLine(self: *Explorer, line: []const u8, line_num: u32, outline: *FileOutline) !void { + const a = self.allocator; + if (startsWith(line, "def ")) { + if (extractIdent(line[4..])) |name| { + const name_copy = try a.dupe(u8, name); + errdefer a.free(name_copy); + const detail_copy = try a.dupe(u8, line); + errdefer a.free(detail_copy); + try outline.symbols.append(a, .{ + .name = name_copy, + .kind = .function, + .line_start = line_num, + .line_end = line_num, + .detail = detail_copy, + }); + } + } else if (startsWith(line, "class ")) { + if (extractIdent(line[6..])) |name| { + const name_copy = try a.dupe(u8, name); + errdefer a.free(name_copy); + const detail_copy = try a.dupe(u8, line); + errdefer a.free(detail_copy); + try outline.symbols.append(a, .{ + .name = name_copy, + .kind = .struct_def, + .line_start = line_num, + .line_end = line_num, + .detail = detail_copy, + }); + } + } else if (startsWith(line, "import ") or startsWith(line, "from ")) { + const symbol_copy = try a.dupe(u8, line); + errdefer a.free(symbol_copy); + try outline.symbols.append(a, .{ + .name = symbol_copy, + .kind = .import, + .line_start = line_num, + .line_end = line_num, + }); + const import_copy = try a.dupe(u8, line); + errdefer a.free(import_copy); + try outline.imports.append(a, import_copy); + } + } + fn parseTsLine(self: *Explorer, line: []const u8, line_num: u32, outline: *FileOutline) !void { + const a = self.allocator; + if (containsAny(line, &.{ "function ", "const ", "export function ", "export const " })) { + const kind: SymbolKind = if (std.mem.indexOf(u8, line, "function") != null) .function else .constant; + const trimmed = skipKeywords(line); + if (extractIdent(trimmed)) |name| { + const name_copy = try a.dupe(u8, name); + errdefer a.free(name_copy); + const detail_copy = try a.dupe(u8, line); + errdefer a.free(detail_copy); + try outline.symbols.append(a, .{ + .name = name_copy, + .kind = kind, + .line_start = line_num, + .line_end = line_num, + .detail = detail_copy, + }); + } + } + if (containsAny(line, &.{ "import ", "require(" })) { + const symbol_copy = try a.dupe(u8, line); + errdefer a.free(symbol_copy); + try outline.symbols.append(a, .{ + .name = symbol_copy, + .kind = .import, + .line_start = line_num, + .line_end = line_num, + }); + if (extractStringLiteral(line)) |path| { + const import_copy = try a.dupe(u8, path); + errdefer a.free(import_copy); + try outline.imports.append(a, import_copy); + } + } + } + + fn parseRustLine(self: *Explorer, line: []const u8, line_num: u32, outline: *FileOutline, prev_line: []const u8) !void { + const a = self.allocator; + + // fn / pub fn / pub(crate) fn / async fn / pub async fn / unsafe fn + if (containsAny(line, &.{"fn "})) { + const is_decl = startsWith(line, "fn ") or + startsWith(line, "pub fn ") or + startsWith(line, "pub(crate) fn ") or + startsWith(line, "pub(super) fn ") or + startsWith(line, "async fn ") or + startsWith(line, "pub async fn ") or + startsWith(line, "unsafe fn ") or + startsWith(line, "pub unsafe fn ") or + startsWith(line, "pub(crate) async fn ") or + startsWith(line, "pub(crate) unsafe fn ") or + startsWith(line, "pub unsafe extern "); + if (is_decl) { + if (std.mem.indexOf(u8, line, "fn ")) |fn_pos| { + if (extractIdent(line[fn_pos + 3 ..])) |name| { + const is_test = std.mem.eql(u8, prev_line, "#[test]") or + startsWith(prev_line, "#[tokio::test"); + const kind: SymbolKind = if (is_test) .test_decl else .function; + const name_copy = try a.dupe(u8, name); + errdefer a.free(name_copy); + const detail_copy = try a.dupe(u8, line); + errdefer a.free(detail_copy); + try outline.symbols.append(a, .{ + .name = name_copy, + .kind = kind, + .line_start = line_num, + .line_end = line_num, + .detail = detail_copy, + }); + } + } + } + } + + // struct + if (startsWith(line, "struct ") or startsWith(line, "pub struct ") or startsWith(line, "pub(crate) struct ")) { + if (std.mem.indexOf(u8, line, "struct ")) |pos| { + if (extractIdent(line[pos + 7 ..])) |name| { + const name_copy = try a.dupe(u8, name); + errdefer a.free(name_copy); + const detail_copy = try a.dupe(u8, line); + errdefer a.free(detail_copy); + try outline.symbols.append(a, .{ + .name = name_copy, + .kind = .struct_def, + .line_start = line_num, + .line_end = line_num, + .detail = detail_copy, + }); + } + } + } + + // enum + if (startsWith(line, "enum ") or startsWith(line, "pub enum ") or startsWith(line, "pub(crate) enum ")) { + if (std.mem.indexOf(u8, line, "enum ")) |pos| { + if (extractIdent(line[pos + 5 ..])) |name| { + const name_copy = try a.dupe(u8, name); + errdefer a.free(name_copy); + const detail_copy = try a.dupe(u8, line); + errdefer a.free(detail_copy); + try outline.symbols.append(a, .{ + .name = name_copy, + .kind = .enum_def, + .line_start = line_num, + .line_end = line_num, + .detail = detail_copy, + }); + } + } + } + + // trait + if (startsWith(line, "trait ") or startsWith(line, "pub trait ") or startsWith(line, "pub(crate) trait ") or startsWith(line, "unsafe trait ") or startsWith(line, "pub unsafe trait ")) { + if (std.mem.indexOf(u8, line, "trait ")) |pos| { + if (extractIdent(line[pos + 6 ..])) |name| { + const name_copy = try a.dupe(u8, name); + errdefer a.free(name_copy); + const detail_copy = try a.dupe(u8, line); + errdefer a.free(detail_copy); + try outline.symbols.append(a, .{ + .name = name_copy, + .kind = .trait_def, + .line_start = line_num, + .line_end = line_num, + .detail = detail_copy, + }); + } + } + } + + // impl + if (startsWith(line, "impl ") or startsWith(line, "impl<") or startsWith(line, "unsafe impl ")) { + const impl_start: usize = if (startsWith(line, "unsafe impl ")) 12 else if (startsWith(line, "impl<")) blk: { + if (std.mem.indexOf(u8, line, "> ")) |gt| { + break :blk gt + 2; + } else break :blk 5; + } else 5; + if (extractIdent(line[impl_start..])) |name| { + const name_copy = try a.dupe(u8, name); + errdefer a.free(name_copy); + const detail_copy = try a.dupe(u8, line); + errdefer a.free(detail_copy); + try outline.symbols.append(a, .{ + .name = name_copy, + .kind = .impl_block, + .line_start = line_num, + .line_end = line_num, + .detail = detail_copy, + }); + } + } + + // type alias + if (startsWith(line, "type ") or startsWith(line, "pub type ") or startsWith(line, "pub(crate) type ")) { + if (std.mem.indexOf(u8, line, "type ")) |pos| { + if (extractIdent(line[pos + 5 ..])) |name| { + const name_copy = try a.dupe(u8, name); + errdefer a.free(name_copy); + const detail_copy = try a.dupe(u8, line); + errdefer a.free(detail_copy); + try outline.symbols.append(a, .{ + .name = name_copy, + .kind = .type_alias, + .line_start = line_num, + .line_end = line_num, + .detail = detail_copy, + }); + } + } + } + + // const / static + if (startsWith(line, "const ") or startsWith(line, "pub const ") or startsWith(line, "pub(crate) const ") or + startsWith(line, "static ") or startsWith(line, "pub static ") or startsWith(line, "pub(crate) static ")) + { + const keyword = if (std.mem.indexOf(u8, line, "static ")) |_| "static " else "const "; + if (std.mem.indexOf(u8, line, keyword)) |pos| { + if (extractIdent(line[pos + keyword.len ..])) |name| { + const name_copy = try a.dupe(u8, name); + errdefer a.free(name_copy); + const detail_copy = try a.dupe(u8, line); + errdefer a.free(detail_copy); + try outline.symbols.append(a, .{ + .name = name_copy, + .kind = .constant, + .line_start = line_num, + .line_end = line_num, + .detail = detail_copy, + }); + } + } + } + + // macro_rules! + if (startsWith(line, "macro_rules!")) { + if (extractIdent(line[13..])) |name| { + const name_copy = try a.dupe(u8, name); + errdefer a.free(name_copy); + const detail_copy = try a.dupe(u8, line); + errdefer a.free(detail_copy); + try outline.symbols.append(a, .{ + .name = name_copy, + .kind = .macro_def, + .line_start = line_num, + .line_end = line_num, + .detail = detail_copy, + }); + } + } + + // use / mod + if (startsWith(line, "use ") or startsWith(line, "pub use ") or startsWith(line, "pub(crate) use ")) { + const symbol_copy = try a.dupe(u8, line); + errdefer a.free(symbol_copy); + try outline.symbols.append(a, .{ + .name = symbol_copy, + .kind = .import, + .line_start = line_num, + .line_end = line_num, + }); + const import_copy = try a.dupe(u8, line); + errdefer a.free(import_copy); + try outline.imports.append(a, import_copy); + } else if (startsWith(line, "mod ") or startsWith(line, "pub mod ") or startsWith(line, "pub(crate) mod ")) { + if (std.mem.indexOf(u8, line, "mod ")) |pos| { + if (extractIdent(line[pos + 4 ..])) |name| { + const name_copy = try a.dupe(u8, name); + errdefer a.free(name_copy); + try outline.symbols.append(a, .{ + .name = name_copy, + .kind = .import, + .line_start = line_num, + .line_end = line_num, + }); + const import_copy = try a.dupe(u8, name); + errdefer a.free(import_copy); + try outline.imports.append(a, import_copy); + } + } + } + } + +fn rebuildDepsFor(self: *Explorer, path: []const u8, outline: *FileOutline) !void { + var deps: std.ArrayList([]const u8) = .{}; + errdefer deps.deinit(self.allocator); + + for (outline.imports.items) |imp| { + try deps.append(self.allocator, imp); + } + + const gop = try self.dep_graph.getOrPut(path); + if (gop.found_existing) { + var old = gop.value_ptr.*; + gop.value_ptr.* = deps; + old.deinit(self.allocator); + } else { + gop.key_ptr.* = path; + gop.value_ptr.* = deps; + } +} + + /// Return the source body for a symbol given its file path and line range. + /// Caller owns the returned slice. + pub fn getSymbolBody(self: *Explorer, path: []const u8, line_start: u32, line_end: u32, allocator: std.mem.Allocator) !?[]u8 { + self.mu.lockShared(); + defer self.mu.unlockShared(); + const content = self.contents.get(path) orelse return null; + const result = try extractLines(content, line_start, line_end, true, false, .unknown, allocator); + return result; + } + + /// Find the smallest enclosing symbol for a given line in a file. + /// Must be called while holding at least a shared lock. + fn findEnclosingSymbolLocked(self: *Explorer, path: []const u8, line_num: u32) ?Symbol { + const outline = self.outlines.getPtr(path) orelse return null; + var best: ?Symbol = null; + var best_span: u32 = std.math.maxInt(u32); + for (outline.symbols.items) |sym| { + if (sym.line_start <= line_num and sym.line_end >= line_num) { + const span = sym.line_end - sym.line_start; + if (span < best_span) { + best = sym; + best_span = span; + } + } + } + if (best != null) return best; + // Fallback: nearest preceding symbol + var nearest: ?Symbol = null; + var nearest_dist: u32 = std.math.maxInt(u32); + for (outline.symbols.items) |sym| { + if (sym.line_start <= line_num) { + const dist = line_num - sym.line_start; + if (dist < nearest_dist) { + nearest = sym; + nearest_dist = dist; + } + } + } + return nearest; + } + + pub const ScopedSearchResult = struct { + path: []const u8, + line_num: u32, + line_text: []const u8, + scope_name: ?[]const u8 = null, + scope_kind: ?SymbolKind = null, + scope_start: u32 = 0, + scope_end: u32 = 0, + }; + + /// Search content and annotate results with the enclosing symbol scope. + pub fn searchContentWithScope(self: *Explorer, query: []const u8, allocator: std.mem.Allocator, max_results: usize) ![]const ScopedSearchResult { + self.mu.lockShared(); + defer self.mu.unlockShared(); + + var result_list: std.ArrayList(ScopedSearchResult) = .{}; + errdefer { + for (result_list.items) |r| { + allocator.free(r.line_text); + allocator.free(r.path); + if (r.scope_name) |n| allocator.free(n); + } + result_list.deinit(allocator); + } + + // Sparse n-gram candidates (sliding-window, union semantics). + const sparse_paths = self.sparse_ngram_index.candidates(query, allocator); + defer if (sparse_paths) |sp| allocator.free(sp); + + // Trigram candidates — always computed so we can intersect or fall back. + const candidate_paths = self.trigram_index.candidates(query, allocator); + defer if (candidate_paths) |cp| allocator.free(cp); + + if (sparse_paths != null and sparse_paths.?.len > 0) { + // Sparse has candidates: intersect with trigram to narrow results. + if (candidate_paths != null and candidate_paths.?.len > 0) { + var sparse_set = std.StringHashMap(void).init(allocator); + defer sparse_set.deinit(); + for (sparse_paths.?) |p| try sparse_set.put(p, {}); + for (candidate_paths.?) |path| { + if (!sparse_set.contains(path)) continue; + const content = self.contents.get(path) orelse continue; + try self.searchInContentWithScope(path, content, query, allocator, max_results, &result_list); + if (result_list.items.len >= max_results) break; + } + } else { + // No trigram candidates; search sparse candidates directly. + for (sparse_paths.?) |path| { + const content = self.contents.get(path) orelse continue; + try self.searchInContentWithScope(path, content, query, allocator, max_results, &result_list); + if (result_list.items.len >= max_results) break; + } + } + return result_list.toOwnedSlice(allocator); + } + + // Sparse returned empty — fall through to trigram or brute force. + const use_trigram = candidate_paths != null and candidate_paths.?.len > 0; + if (use_trigram) { + for (candidate_paths.?) |path| { + const content = self.contents.get(path) orelse continue; + try self.searchInContentWithScope(path, content, query, allocator, max_results, &result_list); + if (result_list.items.len >= max_results) break; + } + } else { + var iter = self.contents.iterator(); + while (iter.next()) |entry| { + try self.searchInContentWithScope(entry.key_ptr.*, entry.value_ptr.*, query, allocator, max_results, &result_list); + if (result_list.items.len >= max_results) break; + } + } + + return result_list.toOwnedSlice(allocator); + + } + + fn searchInContentWithScope(self: *Explorer, path: []const u8, content: []const u8, query: []const u8, allocator: std.mem.Allocator, max_results: usize, result_list: *std.ArrayList(ScopedSearchResult)) !void { + var line_num: u32 = 0; + var lines = std.mem.splitScalar(u8, content, '\n'); + while (lines.next()) |line| { + line_num += 1; + if (indexOfCaseInsensitive(line, query) != null) { + const line_text = try allocator.dupe(u8, line); + errdefer allocator.free(line_text); + const path_copy = try allocator.dupe(u8, path); + errdefer allocator.free(path_copy); + + const scope = self.findEnclosingSymbolLocked(path, line_num); + const scope_name = if (scope) |s| try allocator.dupe(u8, s.name) else null; + errdefer if (scope_name) |n| allocator.free(n); + + try result_list.append(allocator, .{ + .path = path_copy, + .line_num = line_num, + .line_text = line_text, + .scope_name = scope_name, + .scope_kind = if (scope) |s| s.kind else null, + .scope_start = if (scope) |s| s.line_start else 0, + .scope_end = if (scope) |s| s.line_end else 0, + }); + if (result_list.items.len >= max_results) return; + } + } + } +}; + +/// Extract lines from content string as a range [start..end] (1-indexed, inclusive). +/// When line_numbers is true, prepends "{d:>5} | " prefix. When compact is true, +/// skips comment/blank lines based on language. +pub fn extractLines(content: []const u8, start: u32, end: u32, line_numbers: bool, compact: bool, language: Language, allocator: std.mem.Allocator) ![]u8 { + var buf: std.ArrayList(u8) = .{}; + errdefer buf.deinit(allocator); + const w = buf.writer(allocator); + + var line_num: u32 = 0; + var lines = std.mem.splitScalar(u8, content, '\n'); + while (lines.next()) |line| { + line_num += 1; + if (line_num < start) continue; + if (line_num > end) break; + if (compact and isCommentOrBlank(line, language)) continue; + if (line_numbers) { + try w.print("{d:>5} | {s}\n", .{ line_num, line }); + } else { + try w.print("{s}\n", .{line}); + } + } + return buf.toOwnedSlice(allocator); +} + +/// Returns true if a line is blank or a single-line comment for the given language. +pub fn isCommentOrBlank(line: []const u8, language: Language) bool { + const trimmed = std.mem.trim(u8, line, " \t"); + if (trimmed.len == 0) return true; + return switch (language) { + .zig, .rust, .go_lang => std.mem.startsWith(u8, trimmed, "//"), + .python => std.mem.startsWith(u8, trimmed, "#"), + .javascript, .typescript, .c, .cpp => std.mem.startsWith(u8, trimmed, "//") or std.mem.startsWith(u8, trimmed, "/*") or std.mem.startsWith(u8, trimmed, "*"), + else => false, + }; +} + +fn searchInContent(path: []const u8, content: []const u8, query: []const u8, allocator: std.mem.Allocator, max_results: usize, result_list: *std.ArrayList(SearchResult)) !void { + var line_num: u32 = 0; + var lines = std.mem.splitScalar(u8, content, '\n'); + while (lines.next()) |line| { + line_num += 1; + if (indexOfCaseInsensitive(line, query) != null) { + const line_text = try allocator.dupe(u8, line); + errdefer allocator.free(line_text); + const path_copy = try allocator.dupe(u8, path); + errdefer allocator.free(path_copy); + try result_list.append(allocator, .{ + .path = path_copy, + .line_num = line_num, + .line_text = line_text, + }); + if (result_list.items.len >= max_results) return; + } + } +} + +fn searchInContentRegex(path: []const u8, content: []const u8, pattern: []const u8, allocator: std.mem.Allocator, max_results: usize, result_list: *std.ArrayList(SearchResult)) !void { + var line_num: u32 = 0; + var lines = std.mem.splitScalar(u8, content, '\n'); + while (lines.next()) |line| { + line_num += 1; + if (regexMatch(line, pattern)) { + const line_text = try allocator.dupe(u8, line); + errdefer allocator.free(line_text); + const path_copy = try allocator.dupe(u8, path); + errdefer allocator.free(path_copy); + try result_list.append(allocator, .{ + .path = path_copy, + .line_num = line_num, + .line_text = line_text, + }); + if (result_list.items.len >= max_results) return; + } + } +} + +/// Simple regex matcher — supports: . \s \w \d \S \W \D [chars] [^chars] +/// * + ? ^ $ | () and escaped literals. +/// Uses backtracking. Searches for a match anywhere in the string (unanchored). +pub fn regexMatch(haystack: []const u8, pattern: []const u8) bool { + // Iterate through top-level | separators to prevent stack overflow with + // many alternation branches. No recursion; no fixed-size buffer needed. + var prev: usize = 0; + var i: usize = 0; + var depth: usize = 0; + var in_bracket = false; + while (i < pattern.len) { + const c = pattern[i]; + if (c == '\\' and i + 1 < pattern.len) { i += 2; continue; } + if (c == '[') { in_bracket = true; i += 1; continue; } + if (c == ']') { in_bracket = false; i += 1; continue; } + if (in_bracket) { i += 1; continue; } + if (c == '(') { depth += 1; i += 1; continue; } + if (c == ')') { if (depth > 0) depth -= 1; i += 1; continue; } + if (c == '|' and depth == 0) { + if (regexMatchSingle(haystack, pattern[prev..i])) return true; + prev = i + 1; + } + i += 1; + } + return regexMatchSingle(haystack, pattern[prev..]); +} + +fn regexMatchSingle(haystack: []const u8, pattern: []const u8) bool { + if (pattern.len > 0 and pattern[0] == '^') { + return matchHere(haystack, pattern[1..], 0); + } + // Try match at every position (unanchored search) + for (0..haystack.len + 1) |start| { + if (matchHere(haystack, pattern, start)) return true; + } + return false; +} + +fn matchHere(haystack: []const u8, pattern: []const u8, pos: usize) bool { + var p: usize = 0; + var h: usize = pos; + + while (p < pattern.len) { + // End anchor + if (pattern[p] == '$' and p + 1 == pattern.len) { + return h == haystack.len; + } + + // Alternation handled at top level in regexMatch + if (pattern[p] == '|') return false; + + // Grouping with parens — handle alternation inside groups + if (pattern[p] == '(') { + // Find matching closing paren + var depth: usize = 1; + var end = p + 1; + while (end < pattern.len and depth > 0) { + if (pattern[end] == '\\' and end + 1 < pattern.len) { + end += 2; + continue; + } + if (pattern[end] == '(') depth += 1; + if (pattern[end] == ')') depth -= 1; + if (depth > 0) end += 1; + } + // end now points at ')' (or pattern.len if unmatched) + const group_end = if (end < pattern.len) end else pattern.len; + const group_content = pattern[p + 1 .. group_end]; + const after_group = if (group_end + 1 <= pattern.len) pattern[group_end + 1 ..] else ""; + + // Split group content on top-level | within this group + var branch_start: usize = 0; + var d: usize = 0; + var i: usize = 0; + while (i < group_content.len) { + if (group_content[i] == '\\' and i + 1 < group_content.len) { + i += 2; + continue; + } + if (group_content[i] == '(') d += 1; + if (group_content[i] == ')') { if (d > 0) d -= 1; } + if (group_content[i] == '|' and d == 0) { + // Try this branch + if (matchGroupBranch(haystack, group_content[branch_start..i], after_group, h)) return true; + branch_start = i + 1; + } + i += 1; + } + // Try last branch + return matchGroupBranch(haystack, group_content[branch_start..], after_group, h); + } + + if (pattern[p] == ')') { + p += 1; + continue; + } + + // Check for quantifier following current element + const elem_end = elementEnd(pattern, p); + if (elem_end < pattern.len) { + const qc = pattern[elem_end]; + if (qc == '*') { + return matchQuantified(haystack, pattern, p, elem_end, elem_end + 1, 0, h); + } + if (qc == '+') { + return matchQuantified(haystack, pattern, p, elem_end, elem_end + 1, 1, h); + } + if (qc == '?') { + // Try with one match + if (h < haystack.len and matchElement(haystack[h], pattern, p, elem_end)) { + if (matchHere(haystack, pattern[elem_end + 1 ..], h + 1)) return true; + } + // Try without + return matchHere(haystack, pattern[elem_end + 1 ..], h); + } + if (qc == '{') { + // Parse {n}, {n,}, {n,m} + var qi = elem_end + 1; + var min_rep: usize = 0; + while (qi < pattern.len and pattern[qi] >= '0' and pattern[qi] <= '9') { + min_rep = min_rep * 10 + (pattern[qi] - '0'); + qi += 1; + } + var max_rep: usize = min_rep; // default {n} = exactly n + if (qi < pattern.len and pattern[qi] == ',') { + qi += 1; + if (qi < pattern.len and pattern[qi] >= '0' and pattern[qi] <= '9') { + max_rep = 0; + while (qi < pattern.len and pattern[qi] >= '0' and pattern[qi] <= '9') { + max_rep = max_rep * 10 + (pattern[qi] - '0'); + qi += 1; + } + } else { + max_rep = 256; // {n,} = at least n, cap at 256 + } + } + if (qi < pattern.len and pattern[qi] == '}') { + qi += 1; // skip '}' + return matchQuantifiedRange(haystack, pattern, p, elem_end, qi, min_rep, max_rep, h); + } + // Malformed {…} — treat as literal + } + } + + // No quantifier — must match exactly one char + if (h >= haystack.len) return false; + if (!matchElement(haystack[h], pattern, p, elem_end)) return false; + h += 1; + p = elem_end; + } + + return true; // pattern exhausted — match +} + +/// Try matching a group branch followed by the rest of the pattern. +fn matchGroupBranch(haystack: []const u8, branch: []const u8, after: []const u8, pos: usize) bool { + // Concatenate branch + after conceptually by matching branch first, + // then continuing with after at the new position. + // matchHere on branch tells us how far it consumes. + // We need to try every possible consumption length of the branch. + return matchBranchThenRest(haystack, branch, after, pos); +} + +fn matchBranchThenRest(haystack: []const u8, branch: []const u8, rest: []const u8, pos: usize) bool { + // If branch is empty, just try matching the rest + if (branch.len == 0) return matchHere(haystack, rest, pos); + + // We need to find how many chars the branch consumes, then match rest. + // Build a temporary combined pattern: branch + rest + // This is safe because both are slices of the same original pattern string, + // but they may not be adjacent. Use a simple approach: match branch, track position. + var buf: [4096]u8 = undefined; + if (branch.len + rest.len > buf.len) return false; + @memcpy(buf[0..branch.len], branch); + @memcpy(buf[branch.len..branch.len + rest.len], rest); + return matchHere(haystack, buf[0..branch.len + rest.len], pos); +} + +/// Match a quantified element (greedy). +fn matchQuantified(haystack: []const u8, pattern: []const u8, elem_start: usize, elem_end: usize, rest_start: usize, min_count: usize, start_pos: usize) bool { + // Count max matches + var count: usize = 0; + var h = start_pos; + while (h < haystack.len and matchElement(haystack[h], pattern, elem_start, elem_end)) { + count += 1; + h += 1; + } + // Greedy: try from max matches down to min + var c: usize = count + 1; + while (c > min_count) { + c -= 1; + if (matchHere(haystack, pattern[rest_start..], start_pos + c)) return true; + } + return false; +} + +/// Match a {n,m} quantified element (greedy). +fn matchQuantifiedRange(haystack: []const u8, pattern: []const u8, elem_start: usize, elem_end: usize, rest_start: usize, min_count: usize, max_count: usize, start_pos: usize) bool { + // Count max matches up to max_count + var count: usize = 0; + var h = start_pos; + while (h < haystack.len and count < max_count and matchElement(haystack[h], pattern, elem_start, elem_end)) { + count += 1; + h += 1; + } + if (count < min_count) return false; + // Greedy: try from max matches down to min + var c: usize = count + 1; + while (c > min_count) { + c -= 1; + if (matchHere(haystack, pattern[rest_start..], start_pos + c)) return true; + } + return false; +} + +/// Return the index past the current element in the pattern. +fn elementEnd(pattern: []const u8, p: usize) usize { + if (p >= pattern.len) return p; + if (pattern[p] == '\\' and p + 1 < pattern.len) return p + 2; + if (pattern[p] == '[') { + var i = p + 1; + if (i < pattern.len and pattern[i] == '^') i += 1; + if (i < pattern.len and pattern[i] == ']') i += 1; + while (i < pattern.len and pattern[i] != ']') : (i += 1) {} + if (i < pattern.len) i += 1; + return i; + } + if (pattern[p] == '.') return p + 1; + return p + 1; +} + +/// Match a single character against a pattern element. +fn matchElement(c: u8, pattern: []const u8, start: usize, end: usize) bool { + if (start >= end) return false; + + // Dot matches any char + if (pattern[start] == '.' and end == start + 1) return true; + + // Escape sequences + if (pattern[start] == '\\' and end == start + 2) { + return switch (pattern[start + 1]) { + 'd' => std.ascii.isDigit(c), + 'D' => !std.ascii.isDigit(c), + 'w' => std.ascii.isAlphanumeric(c) or c == '_', + 'W' => !(std.ascii.isAlphanumeric(c) or c == '_'), + 's' => c == ' ' or c == '\t' or c == '\n' or c == '\r', + 'S' => !(c == ' ' or c == '\t' or c == '\n' or c == '\r'), + 'b', 'B' => false, // word boundary — not a char match + else => c == pattern[start + 1], + }; + } + + // Character class [...] + if (pattern[start] == '[') { + var i = start + 1; + var negate = false; + if (i < end and pattern[i] == '^') { + negate = true; + i += 1; + } + var matched = false; + // Handle literal ] at start of class (e.g. []] or [^]]) + if (i < end and pattern[i] == ']') { + if (c == ']') matched = true; + i += 1; + } + while (i < end and pattern[i] != ']') { + // Range: a-z, but only if '-' is not at end of class + if (i + 2 < end and pattern[i + 1] == '-' and pattern[i + 2] != ']') { + if (c >= pattern[i] and c <= pattern[i + 2]) matched = true; + i += 3; + } else { + if (c == pattern[i]) matched = true; + i += 1; + } + } + return if (negate) !matched else matched; + } + + // Literal + return c == pattern[start]; +} + + +fn indexOfCaseInsensitive(haystack: []const u8, needle: []const u8) ?usize { + if (needle.len == 0) return 0; + if (needle.len > haystack.len) return null; + for (0..haystack.len - needle.len + 1) |i| { + var match = true; + for (0..needle.len) |j| { + const hc = if (haystack[i + j] >= 'A' and haystack[i + j] <= 'Z') haystack[i + j] + 32 else haystack[i + j]; + const nc = if (needle[j] >= 'A' and needle[j] <= 'Z') needle[j] + 32 else needle[j]; + if (hc != nc) { + match = false; + break; + } + } + if (match) return i; + } + return null; +} + +fn startsWith(haystack: []const u8, needle: []const u8) bool { + return std.mem.startsWith(u8, haystack, needle); +} + +fn extractIdent(s: []const u8) ?[]const u8 { + var end: usize = 0; + for (s) |ch| { + if (std.ascii.isAlphanumeric(ch) or ch == '_') { + end += 1; + } else break; + } + return if (end > 0) s[0..end] else null; +} + +fn extractStringLiteral(s: []const u8) ?[]const u8 { + const quote_chars = [_]u8{ '"', '\'' }; + for (quote_chars) |q| { + if (std.mem.indexOfScalar(u8, s, q)) |start_pos| { + if (std.mem.indexOfScalarPos(u8, s, start_pos + 1, q)) |end_pos| { + return s[start_pos + 1 .. end_pos]; + } + } + } + return null; +} + +fn containsAny(s: []const u8, needles: []const []const u8) bool { + for (needles) |needle| { + if (std.mem.indexOf(u8, s, needle) != null) return true; + } + return false; +} + +fn skipKeywords(s: []const u8) []const u8 { + const keywords = [_][]const u8{ "export ", "async ", "function ", "const ", "let ", "var " }; + var result = s; + for (keywords) |kw| { + if (std.mem.startsWith(u8, result, kw)) { + result = result[kw.len..]; + } + } + return result; +} diff --git a/registry/native/zig/codedb/src/vendor/index.zig b/registry/native/zig/codedb/src/vendor/index.zig new file mode 100644 index 000000000..02f68169e --- /dev/null +++ b/registry/native/zig/codedb/src/vendor/index.zig @@ -0,0 +1,1516 @@ +const std = @import("std"); + +// ── Inverted word index ───────────────────────────────────── +// Maps word → list of (path, line) hits. O(1) word lookup. + +pub const WordHit = struct { + path: []const u8, + line_num: u32, +}; + +pub const WordIndex = struct { + /// word → hits + index: std.StringHashMap(std.ArrayList(WordHit)), + /// path → set of words contributed (for efficient re-index cleanup) + file_words: std.StringHashMap(std.StringHashMap(void)), + allocator: std.mem.Allocator, + + pub fn init(allocator: std.mem.Allocator) WordIndex { + return .{ + .index = std.StringHashMap(std.ArrayList(WordHit)).init(allocator), + .file_words = std.StringHashMap(std.StringHashMap(void)).init(allocator), + .allocator = allocator, + }; + } + + pub fn deinit(self: *WordIndex) void { + // Free hit lists and duped word keys + var iter = self.index.iterator(); + while (iter.next()) |entry| { + self.allocator.free(entry.key_ptr.*); + entry.value_ptr.deinit(self.allocator); + } + self.index.deinit(); + + // Free per-file word sets + var fw_iter = self.file_words.iterator(); + while (fw_iter.next()) |entry| { + entry.value_ptr.deinit(); + } + self.file_words.deinit(); + } + + /// Remove all index entries for a file (call before re-indexing). + pub fn removeFile(self: *WordIndex, path: []const u8) void { + const words_set = self.file_words.getPtr(path) orelse return; + + // For each word this file contributed, remove hits with this path. + // Prune empty buckets so churn does not leak key/list entries. + var word_iter = words_set.keyIterator(); + while (word_iter.next()) |word_ptr| { + if (self.index.getEntry(word_ptr.*)) |entry| { + const hits = entry.value_ptr; + var i: usize = 0; + while (i < hits.items.len) { + if (std.mem.eql(u8, hits.items[i].path, path)) { + _ = hits.swapRemove(i); + } else { + i += 1; + } + } + if (hits.items.len == 0) { + const owned_word = entry.key_ptr.*; + hits.deinit(self.allocator); + _ = self.index.remove(word_ptr.*); + self.allocator.free(owned_word); + } + } + } + + words_set.deinit(); + _ = self.file_words.remove(path); + } + + + /// Index a file's content — tokenizes into words and records hits. + pub fn indexFile(self: *WordIndex, path: []const u8, content: []const u8) !void { + // Clean up old entries first + self.removeFile(path); + + var words_set = std.StringHashMap(void).init(self.allocator); + errdefer words_set.deinit(); + var line_num: u32 = 0; + var lines = std.mem.splitScalar(u8, content, '\n'); + + while (lines.next()) |line| { + line_num += 1; + var tok = WordTokenizer{ .buf = line }; + while (tok.next()) |word| { + if (word.len < 2) continue; // skip single chars + + // Ensure word is in the global index + const gop = try self.index.getOrPut(word); + if (!gop.found_existing) { + const duped_word = try self.allocator.dupe(u8, word); + gop.key_ptr.* = duped_word; + gop.value_ptr.* = .{}; + } + + if (gop.value_ptr.items.len > 0) { + const last = gop.value_ptr.items[gop.value_ptr.items.len - 1]; + if (std.mem.eql(u8, last.path, path) and last.line_num == line_num) { + // Avoid duplicate hits for repeated words on the same line. + const wgop = try words_set.getOrPut(word); + if (!wgop.found_existing) wgop.key_ptr.* = gop.key_ptr.*; + continue; + } + } + + try gop.value_ptr.append(self.allocator, .{ + .path = path, + .line_num = line_num, + }); + + // Track that this file contributed this word + const wgop = try words_set.getOrPut(word); + if (!wgop.found_existing) { + // Point to the same key in the index (no extra alloc) + wgop.key_ptr.* = gop.key_ptr.*; + } + } + } + + try self.file_words.put(path, words_set); + } + + /// Look up all hits for a word. O(1) lookup + O(hits) iteration. + pub fn search(self: *WordIndex, word: []const u8) []const WordHit { + if (self.index.get(word)) |hits| { + return hits.items; + } + return &.{}; + } + + /// Look up hits, returning results allocated by the caller. + /// Deduplicates by (path, line_num). +pub fn searchDeduped(self: *WordIndex, word: []const u8, allocator: std.mem.Allocator) ![]const WordHit { + const hits = self.search(word); + if (hits.len == 0) return try allocator.alloc(WordHit, 0); + if (hits.len == 1) { + var out = try allocator.alloc(WordHit, 1); + out[0] = hits[0]; + return out; + } + + const DedupKey = struct { path_ptr: usize, line_num: u32 }; + var seen = std.AutoHashMap(DedupKey, void).init(allocator); + defer seen.deinit(); + try seen.ensureTotalCapacity(@intCast(hits.len)); + + var result: std.ArrayList(WordHit) = .{}; + errdefer result.deinit(allocator); + try result.ensureTotalCapacity(allocator, hits.len); + + for (hits) |hit| { + const key = DedupKey{ .path_ptr = @intFromPtr(hit.path.ptr), .line_num = hit.line_num }; + const gop = try seen.getOrPut(key); + if (!gop.found_existing) { + result.appendAssumeCapacity(hit); + } + } + return result.toOwnedSlice(allocator); +} +}; + +// ── Trigram index ─────────────────────────────────────────── +// Maps 3-byte sequences → set of file paths. +// Enables fast substring search: extract trigrams from query, +// intersect candidate file sets, then verify with actual match. + +pub const Trigram = u24; + +pub fn packTrigram(a: u8, b: u8, c: u8) Trigram { + return @as(Trigram, a) << 16 | @as(Trigram, b) << 8 | @as(Trigram, c); +} + + +pub const PostingMask = struct { + next_mask: u8 = 0, // bloom filter of chars following this trigram + loc_mask: u8 = 0, // bit mask of (position % 8) where trigram appears +}; + + +pub const TrigramIndex = struct { + /// trigram → set of file paths + index: std.AutoHashMap(Trigram, std.StringHashMap(PostingMask)), + /// path → list of trigrams contributed (for cleanup) + file_trigrams: std.StringHashMap(std.ArrayList(Trigram)), + allocator: std.mem.Allocator, + /// When true, deinit frees the path keys in file_trigrams (set by readFromDisk). + owns_paths: bool = false, + + pub fn init(allocator: std.mem.Allocator) TrigramIndex { + return .{ + .index = std.AutoHashMap(Trigram, std.StringHashMap(PostingMask)).init(allocator), + .file_trigrams = std.StringHashMap(std.ArrayList(Trigram)).init(allocator), + .allocator = allocator, + }; + } + + pub fn deinit(self: *TrigramIndex) void { + var iter = self.index.iterator(); + while (iter.next()) |entry| { + entry.value_ptr.deinit(); + } + self.index.deinit(); + + var ft_iter = self.file_trigrams.iterator(); + while (ft_iter.next()) |entry| { + if (self.owns_paths) self.allocator.free(entry.key_ptr.*); + entry.value_ptr.deinit(self.allocator); + } + self.file_trigrams.deinit(); + } + + pub fn removeFile(self: *TrigramIndex, path: []const u8) void { + const trigrams = self.file_trigrams.getPtr(path) orelse return; + for (trigrams.items) |tri| { + if (self.index.getPtr(tri)) |file_set| { + _ = file_set.remove(path); + if (file_set.count() == 0) { + file_set.deinit(); + _ = self.index.remove(tri); + } + } + } + trigrams.deinit(self.allocator); + _ = self.file_trigrams.remove(path); + } + + pub fn indexFile(self: *TrigramIndex, path: []const u8, content: []const u8) !void { + self.removeFile(path); + + var seen_trigrams = std.AutoHashMap(Trigram, void).init(self.allocator); + defer seen_trigrams.deinit(); + + // Extract trigrams from content, recording PostingMask per (trigram, file) + if (content.len >= 3) { + for (0..content.len - 2) |i| { + const tri = packTrigram( + normalizeChar(content[i]), + normalizeChar(content[i + 1]), + normalizeChar(content[i + 2]), + ); + // Ensure the trigram → file_set entry exists + const idx_gop = try self.index.getOrPut(tri); + if (!idx_gop.found_existing) { + idx_gop.value_ptr.* = std.StringHashMap(PostingMask).init(self.allocator); + } + // Get or create the posting for this file + const file_gop = try idx_gop.value_ptr.getOrPut(path); + if (!file_gop.found_existing) { + file_gop.value_ptr.* = PostingMask{}; + // Track this trigram for cleanup (only once per file) + try seen_trigrams.put(tri, {}); + } + // OR in position masks + file_gop.value_ptr.loc_mask |= @as(u8, 1) << @intCast(i % 8); + if (i + 3 < content.len) { + file_gop.value_ptr.next_mask |= @as(u8, 1) << @intCast(normalizeChar(content[i + 3]) % 8); + } + } + } + + // Store which trigrams this file contributed + var tri_list: std.ArrayList(Trigram) = .{}; + errdefer tri_list.deinit(self.allocator); + var tri_iter = seen_trigrams.keyIterator(); + while (tri_iter.next()) |tri_ptr| { + try tri_list.append(self.allocator, tri_ptr.*); + } + try self.file_trigrams.put(path, tri_list); + } + + + /// Find candidate files that contain ALL trigrams from the query. +pub fn candidates(self: *TrigramIndex, query: []const u8, allocator: std.mem.Allocator) ?[]const []const u8 { + if (query.len < 3) return null; // can't use trigrams for short queries + + const tri_count = query.len - 2; + + // Deduplicate query trigrams first so repeated trigrams don't do repeated work. + var unique = std.AutoHashMap(Trigram, void).init(allocator); + defer unique.deinit(); + unique.ensureTotalCapacity(@intCast(tri_count)) catch return null; + for (0..tri_count) |i| { + const tri = packTrigram( + normalizeChar(query[i]), + normalizeChar(query[i + 1]), + normalizeChar(query[i + 2]), + ); + _ = unique.getOrPut(tri) catch return null; + } + + var sets: std.ArrayList(*std.StringHashMap(PostingMask)) = .{}; + defer sets.deinit(allocator); + sets.ensureTotalCapacity(allocator, unique.count()) catch return null; + + var tri_iter = unique.keyIterator(); + while (tri_iter.next()) |tri_ptr| { + const file_set = self.index.getPtr(tri_ptr.*) orelse { + return allocator.alloc([]const u8, 0) catch null; + }; + sets.appendAssumeCapacity(file_set); + } + + if (sets.items.len == 0) { + return allocator.alloc([]const u8, 0) catch null; + } + + // Iterate the smallest set and check membership in all others. + var min_idx: usize = 0; + var min_count = sets.items[0].count(); + for (sets.items[1..], 1..) |set, i| { + const count = set.count(); + if (count < min_count) { + min_count = count; + min_idx = i; + } + } + + var result: std.ArrayList([]const u8) = .{}; + errdefer result.deinit(allocator); + result.ensureTotalCapacity(allocator, min_count) catch return null; + + var it = sets.items[min_idx].keyIterator(); + next_cand: while (it.next()) |path_ptr| { + + // Intersection check: candidate must be in all sets + for (sets.items, 0..) |set, i| { + if (i == min_idx) continue; + if (!set.contains(path_ptr.*)) continue :next_cand; + } + + // Bloom-filter check for consecutive trigram pairs + if (tri_count >= 2) { + for (0..tri_count - 1) |j| { + const tri_a = packTrigram( + normalizeChar(query[j]), + normalizeChar(query[j + 1]), + normalizeChar(query[j + 2]), + ); + const tri_b = packTrigram( + normalizeChar(query[j + 1]), + normalizeChar(query[j + 2]), + normalizeChar(query[j + 3]), + ); + const set_a = self.index.getPtr(tri_a) orelse continue; + const set_b = self.index.getPtr(tri_b) orelse continue; + const mask_a = set_a.get(path_ptr.*) orelse continue; + const mask_b = set_b.get(path_ptr.*) orelse continue; + + // next_mask: bit for query[j+3] must be set in tri_a's next_mask + const next_bit: u8 = @as(u8, 1) << @intCast(normalizeChar(query[j + 3]) % 8); + if ((mask_a.next_mask & next_bit) == 0) continue :next_cand; + + // loc_mask adjacency: use circular shift to handle position wrap-around + const rotated = (mask_a.loc_mask << 1) | (mask_a.loc_mask >> 7); + if ((rotated & mask_b.loc_mask) == 0) continue :next_cand; + } + } + + result.appendAssumeCapacity(path_ptr.*); + } + + return result.toOwnedSlice(allocator) catch { + result.deinit(allocator); + return null; + }; +} + + + /// Find candidate files matching a RegexQuery. + /// Intersects AND trigrams, then for each OR group unions posting lists + /// and intersects with the running result. + pub fn candidatesRegex(self: *TrigramIndex, query: *const RegexQuery, allocator: std.mem.Allocator) ?[]const []const u8 { + if (query.and_trigrams.len == 0 and query.or_groups.len == 0) return null; + + // Start with AND trigrams + var result_set: ?std.StringHashMap(void) = null; + defer if (result_set) |*rs| rs.deinit(); + + if (query.and_trigrams.len > 0) { + // Intersect all AND trigram posting lists + for (query.and_trigrams) |tri| { + const file_set = self.index.getPtr(tri) orelse { + // Trigram not in index → no files can match + var empty = allocator.alloc([]const u8, 0) catch return null; + _ = ∅ + return allocator.alloc([]const u8, 0) catch null; + }; + if (result_set == null) { + // Initialize with all files from first trigram + result_set = std.StringHashMap(void).init(allocator); + var it = file_set.keyIterator(); + while (it.next()) |key| { + result_set.?.put(key.*, {}) catch return null; + } + } else { + // Intersect: remove files not in this posting list + var to_remove: std.ArrayList([]const u8) = .{}; + defer to_remove.deinit(allocator); + var it = result_set.?.keyIterator(); + while (it.next()) |key| { + if (!file_set.contains(key.*)) { + to_remove.append(allocator, key.*) catch return null; + } + } + for (to_remove.items) |key| { + _ = result_set.?.remove(key); + } + } + } + } + + // Process OR groups: for each group, union posting lists of its trigrams, + // then intersect with result_set + for (query.or_groups) |group| { + if (group.len == 0) continue; + + // Union all posting lists in this OR group + var union_set = std.StringHashMap(void).init(allocator); + defer union_set.deinit(); + for (group) |tri| { + const file_set = self.index.getPtr(tri) orelse continue; + var it = file_set.keyIterator(); + while (it.next()) |key| { + union_set.put(key.*, {}) catch return null; + } + } + + if (result_set == null) { + // First constraint — adopt the union + result_set = std.StringHashMap(void).init(allocator); + var it = union_set.keyIterator(); + while (it.next()) |key| { + result_set.?.put(key.*, {}) catch return null; + } + } else { + // Intersect result_set with union_set + var to_remove: std.ArrayList([]const u8) = .{}; + defer to_remove.deinit(allocator); + var it = result_set.?.keyIterator(); + while (it.next()) |key| { + if (!union_set.contains(key.*)) { + to_remove.append(allocator, key.*) catch return null; + } + } + for (to_remove.items) |key| { + _ = result_set.?.remove(key); + } + } + } + + if (result_set == null) return null; + + // Convert to slice + var result: std.ArrayList([]const u8) = .{}; + errdefer result.deinit(allocator); + result.ensureTotalCapacity(allocator, result_set.?.count()) catch return null; + var it = result_set.?.keyIterator(); + while (it.next()) |key| { + result.appendAssumeCapacity(key.*); + } + return result.toOwnedSlice(allocator) catch { + result.deinit(allocator); + return null; + }; + } + + // ── Disk persistence ──────────────────────────────────── + + const POSTINGS_MAGIC = [4]u8{ 'C', 'D', 'B', 'T' }; + const LOOKUP_MAGIC = [4]u8{ 'C', 'D', 'B', 'L' }; + const FORMAT_VERSION: u16 = 3; + + /// Posting entry for v3+: file_id (u32) + next_mask (u8) + loc_mask (u8) + pad (2 bytes) = 8 bytes + const DiskPosting = extern struct { + file_id: u32, + next_mask: u8, + loc_mask: u8, + _pad: [2]u8 = .{ 0, 0 }, + }; + + /// Posting entry for v1/v2 files: file_id (u16) + next_mask (u8) + loc_mask (u8) = 4 bytes + const OldDiskPosting = extern struct { + file_id: u16, + next_mask: u8, + loc_mask: u8, + }; + + /// Lookup entry: trigram (u32 low 24 bits) + offset (u32) + count (u32) = 12 bytes + const LookupEntry = extern struct { + trigram: u32, + offset: u32, + count: u32, + }; + + /// Write the current in-memory index to disk in a two-file format. + /// Files are written atomically (write to tmp, then rename). + pub fn writeToDisk(self: *TrigramIndex, dir_path: []const u8, git_head: ?[40]u8) !void { + // Step 1: Build file table (assign u16 IDs to all unique paths) + var file_table: std.ArrayList([]const u8) = .{}; + defer file_table.deinit(self.allocator); + var path_to_id = std.StringHashMap(u32).init(self.allocator); + defer path_to_id.deinit(); + + var ft_iter = self.file_trigrams.keyIterator(); + while (ft_iter.next()) |path_ptr| { + const id: u32 = @intCast(file_table.items.len); + try file_table.append(self.allocator, path_ptr.*); + try path_to_id.put(path_ptr.*, id); + } + + const file_count: u32 = @intCast(file_table.items.len); + + // Step 2: Collect all trigrams, sort them, serialize postings contiguously + var trigrams_sorted: std.ArrayList(Trigram) = .{}; + defer trigrams_sorted.deinit(self.allocator); + { + var tri_iter = self.index.keyIterator(); + while (tri_iter.next()) |tri_ptr| { + try trigrams_sorted.append(self.allocator, tri_ptr.*); + } + } + std.mem.sort(Trigram, trigrams_sorted.items, {}, struct { + fn lt(_: void, a: Trigram, b: Trigram) bool { + return a < b; + } + }.lt); + + // Step 3: Build postings blob and lookup entries + var postings_buf: std.ArrayList(DiskPosting) = .{}; + defer postings_buf.deinit(self.allocator); + var lookup_entries: std.ArrayList(LookupEntry) = .{}; + defer lookup_entries.deinit(self.allocator); + + for (trigrams_sorted.items) |tri| { + const file_set = self.index.getPtr(tri) orelse continue; + const offset: u32 = @intCast(postings_buf.items.len); + var count: u32 = 0; + var fs_iter = file_set.iterator(); + while (fs_iter.next()) |entry| { + const fid = path_to_id.get(entry.key_ptr.*) orelse continue; + try postings_buf.append(self.allocator, .{ + .file_id = fid, + .next_mask = entry.value_ptr.next_mask, + .loc_mask = entry.value_ptr.loc_mask, + }); + count += 1; + } + try lookup_entries.append(self.allocator, .{ + .trigram = @as(u32, tri), + .offset = offset, + .count = count, + }); + } + + // Step 4: Write postings file atomically (random suffix prevents collisions) + const post_rand = std.crypto.random.int(u64); + const postings_tmp = try std.fmt.allocPrint(self.allocator, "{s}/trigram.postings.{x}.tmp", .{ dir_path, post_rand }); + defer self.allocator.free(postings_tmp); + const postings_final = try std.fmt.allocPrint(self.allocator, "{s}/trigram.postings", .{dir_path}); + defer self.allocator.free(postings_final); + + { + const file = try std.fs.cwd().createFile(postings_tmp, .{}); + defer file.close(); + + // Header v3: magic(4) + version(2) + file_count(4) + head_len(1) + head(40) = 51 bytes + try file.writeAll(&POSTINGS_MAGIC); + var ver_buf: [2]u8 = undefined; + std.mem.writeInt(u16, &ver_buf, FORMAT_VERSION, .little); + try file.writeAll(&ver_buf); + var fc_buf: [4]u8 = undefined; + std.mem.writeInt(u32, &fc_buf, file_count, .little); + try file.writeAll(&fc_buf); + // Git HEAD: head_len (1 byte) + head (40 bytes) + if (git_head) |head| { + try file.writeAll(&.{40}); + try file.writeAll(&head); + } else { + try file.writeAll(&.{0}); + try file.writeAll(&([_]u8{0} ** 40)); + } + + // File table: for each file, path_len(u16) + path bytes + for (file_table.items) |path| { + var pl_buf: [2]u8 = undefined; + std.mem.writeInt(u16, &pl_buf, @intCast(path.len), .little); + try file.writeAll(&pl_buf); + try file.writeAll(path); + } + + // Postings data + const postings_bytes = std.mem.sliceAsBytes(postings_buf.items); + try file.writeAll(postings_bytes); + } + try std.fs.cwd().rename(postings_tmp, postings_final); + + // Step 5: Write lookup file atomically (random suffix prevents collisions) + const lk_rand = std.crypto.random.int(u64); + const lookup_tmp = try std.fmt.allocPrint(self.allocator, "{s}/trigram.lookup.{x}.tmp", .{ dir_path, lk_rand }); + defer self.allocator.free(lookup_tmp); + const lookup_final = try std.fmt.allocPrint(self.allocator, "{s}/trigram.lookup", .{dir_path}); + defer self.allocator.free(lookup_final); + + { + const file = try std.fs.cwd().createFile(lookup_tmp, .{}); + defer file.close(); + + // Header: magic(4) + version(2) + pad(2) + entry_count(4) = 12 bytes + try file.writeAll(&LOOKUP_MAGIC); + var ver_buf2: [2]u8 = undefined; + std.mem.writeInt(u16, &ver_buf2, FORMAT_VERSION, .little); + try file.writeAll(&ver_buf2); + var pad_buf: [2]u8 = .{ 0, 0 }; + try file.writeAll(&pad_buf); + var ec_buf: [4]u8 = undefined; + std.mem.writeInt(u32, &ec_buf, @intCast(lookup_entries.items.len), .little); + try file.writeAll(&ec_buf); + + // Entries (already aligned at 12 bytes each) + const entry_bytes = std.mem.sliceAsBytes(lookup_entries.items); + try file.writeAll(entry_bytes); + } + try std.fs.cwd().rename(lookup_tmp, lookup_final); + } + + /// Load index from disk files into a fresh TrigramIndex. + /// Returns null if files don't exist or are corrupt/stale. + pub fn readFromDisk(dir_path: []const u8, allocator: std.mem.Allocator) ?TrigramIndex { + return readFromDiskInner(dir_path, allocator) catch null; + } + + fn readFromDiskInner(dir_path: []const u8, allocator: std.mem.Allocator) !?TrigramIndex { + const postings_path = try std.fmt.allocPrint(allocator, "{s}/trigram.postings", .{dir_path}); + defer allocator.free(postings_path); + const lookup_path = try std.fmt.allocPrint(allocator, "{s}/trigram.lookup", .{dir_path}); + defer allocator.free(lookup_path); + + // Read both files + const postings_data = std.fs.cwd().readFileAlloc(allocator, postings_path, 64 * 1024 * 1024) catch return null; + defer allocator.free(postings_data); + const lookup_data = std.fs.cwd().readFileAlloc(allocator, lookup_path, 64 * 1024 * 1024) catch return null; + defer allocator.free(lookup_data); + + // Validate postings header (v1: 8 bytes, v2: 49 bytes, v3: 51 bytes) + if (postings_data.len < 8) return null; + if (!std.mem.eql(u8, postings_data[0..4], &POSTINGS_MAGIC)) return null; + const post_version = std.mem.readInt(u16, postings_data[4..6], .little); + if (post_version < 1 or post_version > FORMAT_VERSION) return null; + const file_count: u32 = if (post_version >= 3) + std.mem.readInt(u32, postings_data[6..10], .little) + else + std.mem.readInt(u16, postings_data[6..8], .little); + + const file_table_start: usize = if (post_version >= 3) blk: { + if (postings_data.len < 51) return null; + break :blk 51; + } else if (post_version >= 2) blk: { + if (postings_data.len < 49) return null; + break :blk 49; + } else 8; + + // Parse file table + var file_paths = try allocator.alloc([]u8, file_count); + var parsed_files: u32 = 0; + defer { + for (0..parsed_files) |i| allocator.free(file_paths[i]); + allocator.free(file_paths); + } + var pos: usize = file_table_start; + for (0..file_count) |i| { + if (pos + 2 > postings_data.len) return null; + const path_len = std.mem.readInt(u16, postings_data[pos..][0..2], .little); + pos += 2; + if (pos + path_len > postings_data.len) return null; + file_paths[i] = try allocator.dupe(u8, postings_data[pos .. pos + path_len]); + parsed_files += 1; + pos += path_len; + } + + // Remaining bytes are DiskPosting entries + const postings_start = pos; + const postings_byte_len = postings_data.len - postings_start; + const posting_size: usize = if (post_version >= 3) @sizeOf(DiskPosting) else @sizeOf(OldDiskPosting); + if (postings_byte_len % posting_size != 0) return null; + const total_postings = postings_byte_len / posting_size; + + // Validate lookup header + if (lookup_data.len < 12) return null; + if (!std.mem.eql(u8, lookup_data[0..4], &LOOKUP_MAGIC)) return null; + const lk_version = std.mem.readInt(u16, lookup_data[4..6], .little); + if (lk_version < 1 or lk_version > FORMAT_VERSION) return null; + const entry_count = std.mem.readInt(u32, lookup_data[8..12], .little); + if (lookup_data.len < 12 + entry_count * @sizeOf(LookupEntry)) return null; + + // Build in-memory index + var result = TrigramIndex.init(allocator); + result.owns_paths = true; + errdefer result.deinit(); + + // Allocate stable path strings owned by the index + var stable_paths = try allocator.alloc([]const u8, file_count); + defer allocator.free(stable_paths); + for (0..file_count) |i| { + const duped = try allocator.dupe(u8, file_paths[i]); + errdefer allocator.free(duped); + stable_paths[i] = duped; + try result.file_trigrams.put(duped, .{}); + } + + // Parse lookup entries and populate index + file_trigrams + for (0..entry_count) |e| { + const entry_off = 12 + e * @sizeOf(LookupEntry); + const raw = lookup_data[entry_off..][0..@sizeOf(LookupEntry)]; + const entry: *align(1) const LookupEntry = @ptrCast(raw.ptr); + + const tri: Trigram = @intCast(entry.trigram); + const p_off = entry.offset; + const p_count = entry.count; + + if (@as(u64, p_off) + @as(u64, p_count) > @as(u64, total_postings)) return error.InvalidData; + + var file_set = std.StringHashMap(PostingMask).init(allocator); + errdefer file_set.deinit(); + + for (0..p_count) |pi| { + const pb_off = postings_start + (p_off + pi) * posting_size; + const raw_posting = postings_data[pb_off..][0..posting_size]; + const file_id: u32 = if (post_version >= 3) + std.mem.readInt(u32, raw_posting[0..4], .little) + else + std.mem.readInt(u16, raw_posting[0..2], .little); + const next_mask = raw_posting[if (post_version >= 3) 4 else 2]; + const loc_mask = raw_posting[if (post_version >= 3) 5 else 3]; + + if (file_id >= file_count) return error.InvalidData; + const path = stable_paths[file_id]; + + const gop = try file_set.getOrPut(path); + if (!gop.found_existing) { + gop.value_ptr.* = PostingMask{}; + } + gop.value_ptr.next_mask |= next_mask; + gop.value_ptr.loc_mask |= loc_mask; + + // Track trigram in file_trigrams + if (result.file_trigrams.getPtr(path)) |tri_list| { + var found = false; + for (tri_list.items) |existing| { + if (existing == tri) { found = true; break; } + } + if (!found) try tri_list.append(allocator, tri); + } + } + + try result.index.put(tri, file_set); + } + + return result; + } + + /// Returns the number of indexed files (for staleness checks). + pub fn fileCount(self: *TrigramIndex) u32 { + return @intCast(self.file_trigrams.count()); + } + + /// Header info that can be read without loading the full index. + pub const DiskHeader = struct { + file_count: u32, + git_head: ?[40]u8, + }; + + /// Read just the postings file header — fast, no full file load. + /// Returns null if the file doesn't exist or has an unrecognised format. + pub fn readDiskHeader(dir_path: []const u8, allocator: std.mem.Allocator) !?DiskHeader { + const postings_path = try std.fmt.allocPrint(allocator, "{s}/trigram.postings", .{dir_path}); + defer allocator.free(postings_path); + + const file = std.fs.cwd().openFile(postings_path, .{}) catch return null; + defer file.close(); + + var buf: [51]u8 = undefined; + const n = file.readAll(&buf) catch return null; + if (n < 8) return null; + if (!std.mem.eql(u8, buf[0..4], &POSTINGS_MAGIC)) return null; + const version = std.mem.readInt(u16, buf[4..6], .little); + if (version < 1 or version > FORMAT_VERSION) return null; + const file_count: u32 = if (version >= 3) + std.mem.readInt(u32, buf[6..10], .little) + else + std.mem.readInt(u16, buf[6..8], .little); + + var git_head: ?[40]u8 = null; + if (version >= 3 and n >= 51) { + const head_len = buf[10]; + if (head_len == 40) { + var head: [40]u8 = undefined; + @memcpy(&head, buf[11..51]); + git_head = head; + } + } else if (version >= 2 and n >= 49) { + const head_len = buf[8]; + if (head_len == 40) { + var head: [40]u8 = undefined; + @memcpy(&head, buf[9..49]); + git_head = head; + } + } + return DiskHeader{ .file_count = file_count, .git_head = git_head }; + } + + /// Read the git HEAD stored in the disk index header. + /// Returns null if no git HEAD is stored or the file doesn't exist. + pub fn readGitHead(dir_path: []const u8, allocator: std.mem.Allocator) !?[40]u8 { + const header = try readDiskHeader(dir_path, allocator) orelse return null; + return header.git_head; + } + +}; + + +// ── Regex decomposition ───────────────────────────────────── + +pub const RegexQuery = struct { + and_trigrams: []Trigram, + or_groups: [][]Trigram, + allocator: std.mem.Allocator, + + pub fn deinit(self: *RegexQuery) void { + self.allocator.free(self.and_trigrams); + for (self.or_groups) |group| { + self.allocator.free(group); + } + self.allocator.free(self.or_groups); + } +}; + +/// Parse a regex pattern and extract literal segments that yield trigrams. +/// Handles: . \s \w \d * + ? | [...] \ (escapes) +/// Literal runs >= 3 chars produce AND trigrams. +/// Alternations (foo|bar) produce OR groups. +pub fn decomposeRegex(pattern: []const u8, allocator: std.mem.Allocator) !RegexQuery { + // First check if this is an alternation at the top level + // We need to respect grouping: only split on | outside of [...] and (...) + var top_pipes: std.ArrayList(usize) = .{}; + defer top_pipes.deinit(allocator); + + { + var depth: usize = 0; + var in_bracket = false; + var i: usize = 0; + while (i < pattern.len) { + const c = pattern[i]; + if (c == '\\' and i + 1 < pattern.len) { + i += 2; + continue; + } + if (c == '[') { in_bracket = true; i += 1; continue; } + if (c == ']') { in_bracket = false; i += 1; continue; } + if (in_bracket) { i += 1; continue; } + if (c == '(') { depth += 1; i += 1; continue; } + if (c == ')') { if (depth > 0) depth -= 1; i += 1; continue; } + if (c == '|' and depth == 0) { + try top_pipes.append(allocator, i); + } + i += 1; + } + } + + if (top_pipes.items.len > 0) { + // Top-level alternation: merge all branch trigrams into a single OR group. + // A file matching ANY branch's trigrams is a valid candidate. + var all_tris: std.ArrayList(Trigram) = .{}; + errdefer all_tris.deinit(allocator); + + var start: usize = 0; + for (top_pipes.items) |pipe_pos| { + const branch = pattern[start..pipe_pos]; + const branch_tris = try extractLiteralTrigrams(branch, allocator); + defer allocator.free(branch_tris); + for (branch_tris) |tri| { + try all_tris.append(allocator, tri); + } + start = pipe_pos + 1; + } + // Last branch + const last_branch = pattern[start..]; + const last_tris = try extractLiteralTrigrams(last_branch, allocator); + defer allocator.free(last_tris); + for (last_tris) |tri| { + try all_tris.append(allocator, tri); + } + + const empty_and = try allocator.alloc(Trigram, 0); + var or_groups: std.ArrayList([]Trigram) = .{}; + errdefer or_groups.deinit(allocator); + if (all_tris.items.len > 0) { + try or_groups.append(allocator, try all_tris.toOwnedSlice(allocator)); + } + return RegexQuery{ + .and_trigrams = empty_and, + .or_groups = try or_groups.toOwnedSlice(allocator), + .allocator = allocator, + }; + } + + // No top-level alternation: extract trigrams from literal segments + const and_tris = try extractLiteralTrigrams(pattern, allocator); + const empty_or = try allocator.alloc([]Trigram, 0); + return RegexQuery{ + .and_trigrams = and_tris, + .or_groups = empty_or, + .allocator = allocator, + }; +} + +/// Extract trigrams from literal runs in a regex fragment (no top-level |). +fn extractLiteralTrigrams(pattern: []const u8, allocator: std.mem.Allocator) ![]Trigram { + var literals: std.ArrayList(u8) = .{}; + defer literals.deinit(allocator); + + var trigrams_list: std.ArrayList(Trigram) = .{}; + errdefer trigrams_list.deinit(allocator); + + // Deduplicate trigrams + var seen = std.AutoHashMap(Trigram, void).init(allocator); + defer seen.deinit(); + + var i: usize = 0; + while (i < pattern.len) { + const c = pattern[i]; + + // Escape sequences + if (c == '\\' and i + 1 < pattern.len) { + const next = pattern[i + 1]; + switch (next) { + 's', 'S', 'w', 'W', 'd', 'D', 'b', 'B' => { + // Character class — breaks literal chain + try flushLiterals(allocator, &literals, &trigrams_list, &seen); + i += 2; + // If followed by quantifier, skip it too + if (i < pattern.len and isQuantifier(pattern[i])) i += 1; + continue; + }, + else => { + // Escaped literal char (e.g. \. \( \) \\ etc.) + try literals.append(allocator, next); + i += 2; + // Check for quantifier after escaped char + if (i < pattern.len and isQuantifier(pattern[i])) { + // Quantifier on single char — pop it and flush + if (literals.items.len > 0) { + _ = literals.pop(); + } + try flushLiterals(allocator, &literals, &trigrams_list, &seen); + i += 1; + } + continue; + }, + } + } + + // Character class [...] + if (c == '[') { + try flushLiterals(allocator, &literals, &trigrams_list, &seen); + // Skip to closing ] + i += 1; + if (i < pattern.len and pattern[i] == '^') i += 1; + if (i < pattern.len and pattern[i] == ']') i += 1; // literal ] at start + while (i < pattern.len and pattern[i] != ']') : (i += 1) {} + if (i < pattern.len) i += 1; // skip ] + // Skip quantifier after class + if (i < pattern.len and isQuantifier(pattern[i])) i += 1; + continue; + } + + // Grouping parens — just skip them, process contents + if (c == '(' or c == ')') { + try flushLiterals(allocator, &literals, &trigrams_list, &seen); + i += 1; + continue; + } + + // Anchors + if (c == '^' or c == '$') { + try flushLiterals(allocator, &literals, &trigrams_list, &seen); + i += 1; + continue; + } + + // Dot — any char, breaks chain + if (c == '.') { + try flushLiterals(allocator, &literals, &trigrams_list, &seen); + i += 1; + if (i < pattern.len and isQuantifier(pattern[i])) i += 1; + continue; + } + + // Quantifiers on previous char + if (isQuantifier(c)) { + // Remove last literal (it's now optional/repeated) + if (literals.items.len > 0) { + _ = literals.pop(); + } + try flushLiterals(allocator, &literals, &trigrams_list, &seen); + // If it's a brace quantifier {n}, {n,m}, {n,}, skip to closing } + if (c == '{') { + i += 1; + while (i < pattern.len and pattern[i] != '}') : (i += 1) {} + if (i < pattern.len) i += 1; // skip '}' + } else { + i += 1; + } + continue; + } + + // Plain literal character + try literals.append(allocator, c); + i += 1; + } + + // Flush remaining literals + try flushLiterals(allocator, &literals, &trigrams_list, &seen); + + return trigrams_list.toOwnedSlice(allocator); +} + +fn isQuantifier(c: u8) bool { + return c == '*' or c == '+' or c == '?' or c == '{'; +} + +/// Flush a run of literal characters into trigrams (if >= 3 chars). +fn flushLiterals( + allocator: std.mem.Allocator, + literals: *std.ArrayList(u8), + trigrams_list: *std.ArrayList(Trigram), + seen: *std.AutoHashMap(Trigram, void), +) !void { + if (literals.items.len >= 3) { + for (0..literals.items.len - 2) |j| { + const tri = packTrigram( + normalizeChar(literals.items[j]), + normalizeChar(literals.items[j + 1]), + normalizeChar(literals.items[j + 2]), + ); + const gop = try seen.getOrPut(tri); + if (!gop.found_existing) { + try trigrams_list.append(allocator, tri); + } + } + } + literals.clearRetainingCapacity(); +} + + +// ── Tokenizer ─────────────────────────────────────────────── + +pub const WordTokenizer = struct { + buf: []const u8, + pos: usize = 0, + + pub fn next(self: *WordTokenizer) ?[]const u8 { + // Skip non-word chars + while (self.pos < self.buf.len and !isWordChar(self.buf[self.pos])) { + self.pos += 1; + } + if (self.pos >= self.buf.len) return null; + + const start = self.pos; + while (self.pos < self.buf.len and isWordChar(self.buf[self.pos])) { + self.pos += 1; + } + return self.buf[start..self.pos]; + } +}; + +fn isWordChar(c: u8) bool { + return std.ascii.isAlphanumeric(c) or c == '_'; +} + +pub fn normalizeChar(c: u8) u8 { + // Lowercase for case-insensitive trigram matching + return if (c >= 'A' and c <= 'Z') c + 32 else c; +} + +// ── Sparse N-gram index ─────────────────────────────────────────────────────── + +pub const MAX_NGRAM_LEN: usize = 16; + +/// Comptime character-pair frequency table for source code. +/// Common pairs → LOW weight (they stay interior to n-grams). +/// Rare pairs → HIGH weight (they become n-gram boundaries). +/// All unspecified pairs default to 0xFE00 (rare = high weight). +pub const default_pair_freq: [256][256]u16 = blk: { + + var table: [256][256]u16 = .{.{0xFE00} ** 256} ** 256; + // English bigrams (lowercase) — common in identifiers and prose + table['t']['h'] = 0x1000; table['h']['e'] = 0x1000; + table['i']['n'] = 0x1000; table['e']['r'] = 0x1000; + table['a']['n'] = 0x1000; table['r']['e'] = 0x1000; + table['o']['n'] = 0x1000; table['e']['n'] = 0x1000; + table['s']['t'] = 0x1000; table['e']['s'] = 0x1000; + table['a']['t'] = 0x1000; table['i']['o'] = 0x1000; + table['t']['e'] = 0x1000; table['o']['r'] = 0x1000; + table['t']['i'] = 0x1000; table['a']['r'] = 0x1000; + table['a']['l'] = 0x1000; table['l']['e'] = 0x1000; + table['n']['t'] = 0x1000; table['e']['d'] = 0x1000; + table['n']['d'] = 0x1000; table['o']['u'] = 0x1000; + table['e']['a'] = 0x1000; table['f']['o'] = 0x1000; + // Common code keyword fragments + table['f']['n'] = 0x1000; table['i']['f'] = 0x1000; + table['r']['n'] = 0x1000; table['t']['u'] = 0x1000; + table['p']['u'] = 0x1000; table['b']['l'] = 0x1000; + table['c']['o'] = 0x1000; table['n']['s'] = 0x1000; + table['t']['r'] = 0x1000; table['u']['e'] = 0x1000; + // Common operator / punctuation pairs + table['('][')'] = 0x0800; table['{']['}'] = 0x0800; + table['['][']'] = 0x0800; table['/']['/'] = 0x0800; + table['-']['>'] = 0x0800; table['=']['>'] = 0x0800; + table[':'][':'] = 0x0800; table['!']['='] = 0x0800; + table['=']['='] = 0x0800; table['<']['='] = 0x0800; + table['>']['='] = 0x0800; table['&']['&'] = 0x0800; + table['|']['|'] = 0x0800; + // Whitespace / structural pairs + table[' '][' '] = 0x0800; table['\t'][' '] = 0x0800; + table[' ']['('] = 0x0800; table[' ']['{'] = 0x0800; + table[';'][' '] = 0x0800; table[':'][' '] = 0x0800; + table['='][' '] = 0x0800; table[' ']['='] = 0x0800; + table[','][' '] = 0x0800; table['.']['.'] = 0x0800; + table['\n'][' '] = 0x0800; table['\n']['\t'] = 0x0800; + break :blk table; +}; + +/// Active frequency table — points to the comptime default or a runtime +/// per-project table. Swap only before indexing starts (not thread-safe). +pub var active_pair_freq: *const [256][256]u16 = &default_pair_freq; +var loaded_freq_table: [256][256]u16 = undefined; + + +/// Deterministic weight for a character pair, used to place content-defined +/// boundaries between n-grams. Frequency-weighted: common source-code pairs +/// get LOW weight (they stay interior to n-grams); rare pairs get HIGH weight +/// (they become boundaries). A small hash jitter (0-255) breaks ties +/// deterministically between pairs in the same frequency tier. +pub fn pairWeight(a: u8, b: u8) u16 { + const freq_weight = active_pair_freq[a][b]; + const pair = [2]u8{ a, b }; + const jitter: u16 = @truncate(std.hash.Wyhash.hash(0, &pair) & 0xFF); + return freq_weight +| jitter; +} + +/// Swap in a custom frequency table. Call before indexing; not thread-safe. +pub fn setFrequencyTable(table: *const [256][256]u16) void { + loaded_freq_table = table.*; + active_pair_freq = &loaded_freq_table; +} + +/// Revert to the built-in comptime frequency table. +pub fn resetFrequencyTable() void { + active_pair_freq = &default_pair_freq; +} + +/// Build a per-project frequency table by counting byte-pair occurrences in +/// `content`, then inverting counts to weights (common → low, rare → high). +pub fn buildFrequencyTable(content: []const u8) [256][256]u16 { + var counts: [256][256]u64 = .{.{0} ** 256} ** 256; + if (content.len >= 2) { + for (0..content.len - 1) |i| { + counts[content[i]][content[i + 1]] += 1; + } + } + return finishFrequencyTable(&counts); +} + +/// Build a frequency table by streaming over multiple content slices. +/// Zero extra memory — counts pairs within each slice, skipping cross-slice +/// boundaries (negligible loss for large corpora). +pub fn buildFrequencyTableFromSlices(slices: []const []const u8) [256][256]u16 { + var counts: [256][256]u64 = .{.{0} ** 256} ** 256; + for (slices) |content| { + if (content.len < 2) continue; + for (0..content.len - 1) |i| { + counts[content[i]][content[i + 1]] += 1; + } + } + return finishFrequencyTable(&counts); +} + +/// Build a frequency table by streaming over a StringHashMap of content. +/// Iterates file-by-file — no concatenation, zero extra memory. +pub fn buildFrequencyTableFromMap(contents: *const std.StringHashMap([]const u8)) [256][256]u16 { + var counts: [256][256]u64 = .{.{0} ** 256} ** 256; + var iter = contents.valueIterator(); + while (iter.next()) |content_ptr| { + const content = content_ptr.*; + if (content.len < 2) continue; + for (0..content.len - 1) |i| { + counts[content[i]][content[i + 1]] += 1; + } + } + return finishFrequencyTable(&counts); +} + +fn finishFrequencyTable(counts: *const [256][256]u64) [256][256]u16 { + var max_count: u64 = 1; + for (counts) |row| { + for (row) |c| { + if (c > max_count) max_count = c; + } + } + // Invert: count 0 → 0xFE00 (rare, high); max_count → 0x1000 (common, low). + var table: [256][256]u16 = .{.{0xFE00} ** 256} ** 256; + for (0..256) |a| { + for (0..256) |b| { + const c = counts[a][b]; + if (c == 0) continue; + const span: u64 = 0xFE00 - 0x1000; + const w: u64 = 0xFE00 - (c * span / max_count); + table[a][b] = @intCast(@min(w, 0xFE00)); + } + } + return table; +} + +/// Persist a frequency table as a raw binary blob to `/pair_freq.bin`. +/// Uses tmp+rename for atomic writes. +pub fn writeFrequencyTable(table: *const [256][256]u16, dir_path: []const u8) !void { + var dir = try std.fs.cwd().openDir(dir_path, .{}); + defer dir.close(); + { + const tmp = try dir.createFile("pair_freq.bin.tmp", .{}); + defer tmp.close(); + var row_buf: [256 * 2]u8 = undefined; + for (table) |row| { + for (row, 0..) |val, j| { + std.mem.writeInt(u16, row_buf[j * 2 ..][0..2], val, .little); + } + try tmp.writeAll(&row_buf); + } + } + try dir.rename("pair_freq.bin.tmp", "pair_freq.bin"); +} + +/// Load a frequency table from `/pair_freq.bin`. +/// Returns null if the file does not exist or has the wrong size. +/// Caller owns the returned allocation. +pub fn readFrequencyTable(dir_path: []const u8, allocator: std.mem.Allocator) !?*[256][256]u16 { + const path = try std.fmt.allocPrint(allocator, "{s}/pair_freq.bin", .{dir_path}); + defer allocator.free(path); + const file = std.fs.cwd().openFile(path, .{}) catch |err| switch (err) { + error.FileNotFound => return null, + else => return err, + }; + defer file.close(); + const expected_size = 256 * 256 * @sizeOf(u16); + const stat = try file.stat(); + if (stat.size != expected_size) return null; + const result = try allocator.create([256][256]u16); + errdefer allocator.destroy(result); + var row_buf: [256 * 2]u8 = undefined; + for (result) |*row| { + const n = try file.readAll(&row_buf); + if (n != row_buf.len) { + allocator.destroy(result); + return null; + } + for (row, 0..) |*val, j| { + val.* = std.mem.readInt(u16, row_buf[j * 2 ..][0..2], .little); + } + } + return result; +} + +/// A single sparse n-gram extracted from a string. +pub const SparseNgram = struct { + hash: u64, // Wyhash of the normalized (lowercased) n-gram bytes + pos: usize, // byte offset in the source string + len: usize, // byte length of the n-gram +}; + +fn makeNgram(content: []const u8, pos: usize, len: usize) SparseNgram { + var buf: [MAX_NGRAM_LEN]u8 = undefined; + for (0..len) |k| buf[k] = normalizeChar(content[pos + k]); + return .{ + .hash = std.hash.Wyhash.hash(0, buf[0..len]), + .pos = pos, + .len = len, + }; +} + +/// Extract sparse n-grams from `content` using content-defined boundaries. +/// +/// Boundaries are placed at strict local maxima of pairWeight over the +/// normalized character pairs. N-grams span consecutive boundaries; spans +/// wider than MAX_NGRAM_LEN are force-split into MAX_NGRAM_LEN chunks. +/// Minimum n-gram length is 3 (same as a trigram). +/// +/// Caller owns the returned slice. +pub fn extractSparseNgrams(content: []const u8, allocator: std.mem.Allocator) ![]SparseNgram { + const MIN_LEN = 3; + if (content.len < MIN_LEN) return try allocator.alloc(SparseNgram, 0); + + const pair_count = content.len - 1; + + // Compute pair weights. + const weights = try allocator.alloc(u16, pair_count); + defer allocator.free(weights); + for (0..pair_count) |i| { + weights[i] = pairWeight(normalizeChar(content[i]), normalizeChar(content[i + 1])); + } + + // Collect boundary pair-positions: always include 0 and pair_count-1, + // plus any interior strict local maximum. + var bounds: std.ArrayList(usize) = .{}; + defer bounds.deinit(allocator); + + try bounds.append(allocator, 0); + if (pair_count >= 3) { + for (1..pair_count - 1) |i| { + if (weights[i] > weights[i - 1] and weights[i] > weights[i + 1]) { + try bounds.append(allocator, i); + } + } + } + try bounds.append(allocator, pair_count - 1); + + // Emit n-grams spanning consecutive boundary positions. + // N-gram for boundary pair at position p covers content[p .. p+2]. + var result: std.ArrayList(SparseNgram) = .{}; + errdefer result.deinit(allocator); + + var b: usize = 0; + while (b + 1 < bounds.items.len) : (b += 1) { + const start = bounds.items[b]; + const end_pair = bounds.items[b + 1]; + // The right-hand boundary pair covers content[end_pair .. end_pair+2]. + const ngram_end = end_pair + 2; + const ngram_len = ngram_end - start; + + if (ngram_len < MIN_LEN) continue; + + if (ngram_len <= MAX_NGRAM_LEN) { + try result.append(allocator, makeNgram(content, start, ngram_len)); + } else { + // Force-split into MAX_NGRAM_LEN-sized chunks. + var off = start; + while (off + MAX_NGRAM_LEN <= ngram_end) { + try result.append(allocator, makeNgram(content, off, MAX_NGRAM_LEN)); + off += MAX_NGRAM_LEN; + } + const rem = ngram_end - off; + if (rem >= MIN_LEN) { + try result.append(allocator, makeNgram(content, off, rem)); + } else if (rem > 0) { + // Tail is too short for its own ngram. Overlap with the + // previous chunk by backing up to ngram_end - MIN_LEN so + // every byte in the span is covered. + try result.append(allocator, makeNgram(content, ngram_end - MIN_LEN, MIN_LEN)); + } + + } + } + + return result.toOwnedSlice(allocator); +} + +/// Build the covering set of n-gram hashes for a query using a sliding window. +/// Extracts every substring of the query with length in [3, MAX_NGRAM_LEN] so +/// that file boundary-based n-grams overlapping the query are matched regardless +/// of where content-defined boundaries fall in the indexed file. +/// Caller owns the returned slice. +pub fn buildCoveringSet(query: []const u8, allocator: std.mem.Allocator) ![]SparseNgram { + const MIN_LEN = 3; + if (query.len < MIN_LEN) return try allocator.alloc(SparseNgram, 0); + + var result: std.ArrayList(SparseNgram) = .{}; + errdefer result.deinit(allocator); + + // Slide a window of every length [MIN_LEN, MAX_NGRAM_LEN] across the query. + // This avoids boundary-misalignment false negatives when a query substring + // appears in the indexed file as a content-defined boundary n-gram. + var len: usize = MIN_LEN; + while (len <= @min(MAX_NGRAM_LEN, query.len)) : (len += 1) { + var pos: usize = 0; + while (pos + len <= query.len) : (pos += 1) { + try result.append(allocator, makeNgram(query, pos, len)); + } + } + + return result.toOwnedSlice(allocator); +} + +/// In-memory sparse n-gram index. Mirrors the TrigramIndex API so it can +/// be used as a drop-in acceleration layer alongside the trigram index. +pub const SparseNgramIndex = struct { + /// ngram hash → set of file paths that contain the n-gram + index: std.AutoHashMap(u64, std.StringHashMap(void)), + /// path → list of ngram hashes contributed (for cleanup on re-index) + file_ngrams: std.StringHashMap(std.ArrayList(u64)), + allocator: std.mem.Allocator, + + pub fn init(allocator: std.mem.Allocator) SparseNgramIndex { + return .{ + .index = std.AutoHashMap(u64, std.StringHashMap(void)).init(allocator), + .file_ngrams = std.StringHashMap(std.ArrayList(u64)).init(allocator), + .allocator = allocator, + }; + } + + pub fn deinit(self: *SparseNgramIndex) void { + var iter = self.index.iterator(); + while (iter.next()) |entry| { + entry.value_ptr.deinit(); + } + self.index.deinit(); + + var fn_iter = self.file_ngrams.iterator(); + while (fn_iter.next()) |entry| { + entry.value_ptr.deinit(self.allocator); + } + self.file_ngrams.deinit(); + } + + pub fn removeFile(self: *SparseNgramIndex, path: []const u8) void { + const ngrams = self.file_ngrams.getPtr(path) orelse return; + for (ngrams.items) |hash| { + if (self.index.getPtr(hash)) |file_set| { + _ = file_set.remove(path); + if (file_set.count() == 0) { + file_set.deinit(); + _ = self.index.remove(hash); + } + } + } + ngrams.deinit(self.allocator); + _ = self.file_ngrams.remove(path); + } + + pub fn indexFile(self: *SparseNgramIndex, path: []const u8, content: []const u8) !void { + self.removeFile(path); + + const ngrams = try extractSparseNgrams(content, self.allocator); + defer self.allocator.free(ngrams); + + // Deduplicate hashes so the cleanup list stays compact. + var seen = std.AutoHashMap(u64, void).init(self.allocator); + defer seen.deinit(); + + for (ngrams) |ng| { + const gop = try self.index.getOrPut(ng.hash); + if (!gop.found_existing) { + gop.value_ptr.* = std.StringHashMap(void).init(self.allocator); + } + _ = try gop.value_ptr.getOrPut(path); + _ = try seen.getOrPut(ng.hash); + } + + var hash_list: std.ArrayList(u64) = .{}; + errdefer hash_list.deinit(self.allocator); + var seen_iter = seen.keyIterator(); + while (seen_iter.next()) |h| { + try hash_list.append(self.allocator, h.*); + } + try self.file_ngrams.put(path, hash_list); + } + + /// Find candidate files that may contain the query string. + /// Uses the sliding-window covering set from buildCoveringSet and returns + /// the UNION of all matching posting lists — a superset of true matches, + /// to be verified by content search. Returns null when the query is too + /// short. Caller must free the returned slice. + pub fn candidates(self: *SparseNgramIndex, query: []const u8, allocator: std.mem.Allocator) ?[]const []const u8 { + const ngrams = buildCoveringSet(query, allocator) catch return null; + defer allocator.free(ngrams); + + if (ngrams.len == 0) return null; + + // Union posting sets for all sliding-window n-gram hashes. + // A file is a candidate if it shares any substring with the query. + var seen_files = std.StringHashMap(void).init(allocator); + defer seen_files.deinit(); + + for (ngrams) |ng| { + const file_set = self.index.getPtr(ng.hash) orelse continue; + var it = file_set.keyIterator(); + while (it.next()) |path_ptr| { + seen_files.put(path_ptr.*, {}) catch return null; + } + } + + if (seen_files.count() == 0) { + return allocator.alloc([]const u8, 0) catch null; + } + + var result: std.ArrayList([]const u8) = .{}; + errdefer result.deinit(allocator); + result.ensureTotalCapacity(allocator, seen_files.count()) catch return null; + + var file_it = seen_files.keyIterator(); + while (file_it.next()) |path_ptr| { + result.appendAssumeCapacity(path_ptr.*); + } + + return result.toOwnedSlice(allocator) catch { + result.deinit(allocator); + return null; + }; + } + + pub fn fileCount(self: *SparseNgramIndex) u32 { + return @intCast(self.file_ngrams.count()); + } +}; + diff --git a/registry/native/zig/codedb/src/vendor/store.zig b/registry/native/zig/codedb/src/vendor/store.zig new file mode 100644 index 000000000..81e7f491d --- /dev/null +++ b/registry/native/zig/codedb/src/vendor/store.zig @@ -0,0 +1,205 @@ +const std = @import("std"); +const builtin = @import("builtin"); +const AgentId = @import("agent.zig").AgentId; +const version = @import("version.zig"); +const Version = version.Version; +const FileVersions = version.FileVersions; +const Op = version.Op; + +pub const ChangeEntry = struct { + path: []const u8, + seq: u64, + op: Op, + size: u64, + timestamp: i64, +}; + +pub const Store = struct { + files: std.StringHashMap(FileVersions), + seq: u64, + allocator: std.mem.Allocator, + mu: std.Thread.Mutex = .{}, + data_log: ?std.fs.File = null, + data_log_pos: u64 = 0, + + pub fn init(allocator: std.mem.Allocator) Store { + return .{ + .files = std.StringHashMap(FileVersions).init(allocator), + .seq = 0, + .allocator = allocator, + }; + } + + pub fn deinit(self: *Store) void { + var iter = self.files.iterator(); + while (iter.next()) |entry| { + self.allocator.free(entry.value_ptr.path); + entry.value_ptr.deinit(); + } + self.files.deinit(); + if (self.data_log) |f| f.close(); + } + + pub fn openDataLog(self: *Store, path: []const u8) !void { + // Extract parent dir and ensure it exists + if (std.mem.lastIndexOfScalar(u8, path, '/')) |sep| { + std.fs.cwd().makePath(path[0..sep]) catch {}; + } + self.data_log = try std.fs.cwd().createFile(path, .{ .truncate = false }); + const stat = try self.data_log.?.stat(); + self.data_log_pos = stat.size; + } + + pub fn recordSnapshot(self: *Store, path: []const u8, size: u64, hash: u64) !u64 { + return self.appendVersion(path, 0, .snapshot, hash, size, null); + } + + pub fn recordEdit(self: *Store, path: []const u8, agent: AgentId, op: Op, hash: u64, size: u64, diff: ?[]const u8) !u64 { + return self.appendVersion(path, agent, op, hash, size, diff); + } + + pub fn recordDelete(self: *Store, path: []const u8, agent: AgentId) !u64 { + return self.appendVersion(path, agent, .tombstone, 0, 0, null); + } + + fn appendVersion(self: *Store, path: []const u8, agent: AgentId, op: Op, hash: u64, size: u64, diff: ?[]const u8) !u64 { + self.mu.lock(); + defer self.mu.unlock(); + + self.seq += 1; + const next_seq = self.seq; + + const entry = try self.files.getOrPut(path); + if (!entry.found_existing) { + const duped = try self.allocator.dupe(u8, path); + entry.key_ptr.* = duped; + entry.value_ptr.* = FileVersions.init(self.allocator, duped); + } + + var data_offset: ?u64 = null; + var data_len: u32 = 0; + if (diff) |d| { + if (self.data_log) |log| { + if (builtin.os.tag != .wasi) { + // Advisory locking is only needed for the multi-process native daemon. + const fd = log.handle; + _ = std.posix.flock(fd, std.posix.LOCK.EX) catch {}; + defer _ = std.posix.flock(fd, std.posix.LOCK.UN) catch {}; + } + + // Re-stat to get current end position (another process may have appended) + const stat = log.stat() catch return error.Unexpected; + self.data_log_pos = stat.size; + + data_offset = self.data_log_pos; + data_len = @intCast(d.len); + try log.seekTo(self.data_log_pos); + try log.writeAll(d); + self.data_log_pos += d.len; + } + } + + try entry.value_ptr.versions.append(self.allocator, .{ + .seq = next_seq, + .agent = agent, + .timestamp = std.time.milliTimestamp(), + .op = op, + .hash = hash, + .size = size, + .data_offset = data_offset, + .data_len = data_len, + }); + + // Cap version history to prevent unbounded growth + const max_versions = 100; + if (entry.value_ptr.versions.items.len > max_versions) { + const excess = entry.value_ptr.versions.items.len - max_versions; + // Single-pass O(n) shift: avoids replaceRange allocator overhead + std.mem.copyForwards(Version, entry.value_ptr.versions.items[0..max_versions], entry.value_ptr.versions.items[excess..]); + entry.value_ptr.versions.items.len = max_versions; + } + + return next_seq; + } + + pub fn getLatest(self: *Store, path: []const u8) ?Version { + self.mu.lock(); + defer self.mu.unlock(); + const fv = self.files.get(path) orelse return null; + return fv.latest(); + } + + /// Get latest version seq for a path. Caller must hold self.mu. + pub fn getLatestSeqUnlocked(self: *Store, path: []const u8) u64 { + const fv = self.files.get(path) orelse return 0; + const v = fv.latest() orelse return 0; + return v.seq; + } + + pub fn getAtCursor(self: *Store, path: []const u8, cursor: u64) ?Version { + self.mu.lock(); + defer self.mu.unlock(); + const fv = self.files.get(path) orelse return null; + return fv.atCursor(cursor); + } + + pub fn changesSince(self: *Store, since: u64) u64 { + self.mu.lock(); + defer self.mu.unlock(); + var count: u64 = 0; + var iter = self.files.iterator(); + while (iter.next()) |entry| { + count += entry.value_ptr.countSince(since); + } + return count; + } + + /// Returns all files changed since `since` seq with one entry per file (latest change). + /// NOTE: returned `path` fields borrow into the store's internal hash map memory. + /// Do not use them after any write operation (recordSnapshot/recordEdit/recordDelete) + /// that may rehash the map and invalidate the pointers. + pub fn changesSinceDetailed(self: *Store, since: u64, allocator: std.mem.Allocator) ![]const ChangeEntry { + self.mu.lock(); + defer self.mu.unlock(); + var result: std.ArrayList(ChangeEntry) = .{}; + errdefer result.deinit(allocator); + var iter = self.files.iterator(); + while (iter.next()) |entry| { + const fv = entry.value_ptr; + var latest_change: ?*const Version = null; + for (fv.versions.items) |*v| { + if (v.seq > since) { + if (latest_change == null or v.seq > latest_change.?.seq) { + latest_change = v; + } + } + } + if (latest_change) |v| { + try result.append(allocator, .{ + .path = entry.key_ptr.*, + .seq = v.seq, + .op = v.op, + .size = v.size, + .timestamp = v.timestamp, + }); + } + } + return result.toOwnedSlice(allocator); + } + + pub fn currentSeq(self: *Store) u64 { + return self.seq; + } + + pub fn listFiles(self: *Store) ![][]const u8 { + self.mu.lock(); + defer self.mu.unlock(); + + var paths: std.ArrayList([]const u8) = .{}; + var iter = self.files.iterator(); + while (iter.next()) |entry| { + try paths.append(self.allocator, entry.key_ptr.*); + } + return paths.toOwnedSlice(self.allocator); + } +}; diff --git a/registry/native/zig/codedb/src/vendor/style.zig b/registry/native/zig/codedb/src/vendor/style.zig new file mode 100644 index 000000000..35b963750 --- /dev/null +++ b/registry/native/zig/codedb/src/vendor/style.zig @@ -0,0 +1,110 @@ +const std = @import("std"); + +/// ANSI style constants. Obtain an instance via `style(use_color)`. +pub const Style = struct { + reset: []const u8, + bold: []const u8, + dim: []const u8, + red: []const u8, + green: []const u8, + yellow: []const u8, + blue: []const u8, + magenta: []const u8, + cyan: []const u8, + bright_green: []const u8, + orange: []const u8, + + /// ANSI color for a Language @tagName (e.g. "zig", "go_lang", "typescript"). + pub fn langColor(self: Style, lang: []const u8) []const u8 { + if (std.mem.eql(u8, lang, "zig")) return self.yellow; + if (std.mem.eql(u8, lang, "typescript")) return self.blue; + if (std.mem.eql(u8, lang, "javascript")) return self.yellow; + if (std.mem.eql(u8, lang, "go_lang")) return self.cyan; + if (std.mem.eql(u8, lang, "rust")) return self.orange; + if (std.mem.eql(u8, lang, "python")) return self.blue; + if (std.mem.eql(u8, lang, "c") or std.mem.eql(u8, lang, "cpp")) return self.blue; + if (std.mem.eql(u8, lang, "markdown")) return self.dim; + if (std.mem.eql(u8, lang, "json") or std.mem.eql(u8, lang, "yaml")) return self.dim; + return self.dim; // unknown + } + + /// ANSI color for a SymbolKind @tagName (e.g. "function", "struct_def"). + pub fn kindColor(self: Style, kind: []const u8) []const u8 { + if (std.mem.eql(u8, kind, "function")) return self.blue; + if (std.mem.eql(u8, kind, "method")) return self.blue; + if (std.mem.eql(u8, kind, "struct_def")) return self.yellow; + if (std.mem.eql(u8, kind, "enum_def")) return self.yellow; + if (std.mem.eql(u8, kind, "union_def")) return self.yellow; + if (std.mem.eql(u8, kind, "trait_def")) return self.magenta; + if (std.mem.eql(u8, kind, "impl_block")) return self.cyan; + if (std.mem.eql(u8, kind, "type_alias")) return self.yellow; + if (std.mem.eql(u8, kind, "macro_def")) return self.orange; + if (std.mem.eql(u8, kind, "test_decl")) return self.green; + if (std.mem.eql(u8, kind, "import")) return self.dim; + if (std.mem.eql(u8, kind, "comment_block")) return self.dim; + return self.cyan; // constant, variable + } +}; + +pub const on = Style{ + .reset = "\x1b[0m", + .bold = "\x1b[1m", + .dim = "\x1b[2m", + .red = "\x1b[31m", + .green = "\x1b[32m", + .yellow = "\x1b[33m", + .blue = "\x1b[34m", + .magenta = "\x1b[35m", + .cyan = "\x1b[36m", + .bright_green = "\x1b[92m", + .orange = "\x1b[38;5;208m", +}; + +pub const off = Style{ + .reset = "", + .bold = "", + .dim = "", + .red = "", + .green = "", + .yellow = "", + .blue = "", + .magenta = "", + .cyan = "", + .bright_green = "", + .orange = "", +}; + +/// Return `on` or `off` depending on `color`. +pub fn style(color: bool) Style { + return if (color) on else off; +} + +/// Format nanoseconds as a human-readable duration. +/// Fast ops (<10ms) get an ⚡ prefix. +pub fn formatDuration(buf: []u8, ns: i128) []const u8 { + const abs_ns: u128 = if (ns < 0) @intCast(-ns) else @intCast(ns); + if (abs_ns < 1_000) { + return std.fmt.bufPrint(buf, "\xe2\x9a\xa1 {d}ns", .{abs_ns}) catch ""; + } else if (abs_ns < 1_000_000) { + const us = @as(f64, @floatFromInt(abs_ns)) / 1_000.0; + return std.fmt.bufPrint(buf, "\xe2\x9a\xa1 {d:.1}\xc2\xb5s", .{us}) catch ""; + } else if (abs_ns < 10_000_000) { + const ms = @as(f64, @floatFromInt(abs_ns)) / 1_000_000.0; + return std.fmt.bufPrint(buf, "\xe2\x9a\xa1 {d:.1}ms", .{ms}) catch ""; + } else if (abs_ns < 1_000_000_000) { + const ms = @as(f64, @floatFromInt(abs_ns)) / 1_000_000.0; + return std.fmt.bufPrint(buf, "{d:.1}ms", .{ms}) catch ""; + } else { + const sc = @as(f64, @floatFromInt(abs_ns)) / 1_000_000_000.0; + return std.fmt.bufPrint(buf, "{d:.1}s", .{sc}) catch ""; + } +} + +/// Return a color scaled to elapsed duration. +pub fn durationColor(s: Style, ns: i128) []const u8 { + const abs_ns: u128 = if (ns < 0) @intCast(-ns) else @intCast(ns); + if (abs_ns < 10_000_000) return s.cyan; // <10ms → cyan ⚡ + if (abs_ns < 100_000_000) return s.green; // <100ms → green + if (abs_ns < 1_000_000_000) return s.blue; // <1s → blue + return s.yellow; // 1s+ → yellow +} diff --git a/registry/native/zig/codedb/src/vendor/version.zig b/registry/native/zig/codedb/src/vendor/version.zig new file mode 100644 index 000000000..a603cd2bd --- /dev/null +++ b/registry/native/zig/codedb/src/vendor/version.zig @@ -0,0 +1,71 @@ +const std = @import("std"); +const AgentId = @import("agent.zig").AgentId; + +pub const Version = struct { + seq: u64, + agent: AgentId, + timestamp: i64, + op: Op, + hash: u64, + size: u64, + data_offset: ?u64 = null, + data_len: u32 = 0, +}; + +pub const Op = enum(u8) { + snapshot = 0, + replace = 1, + insert = 2, + delete = 3, + tombstone = 4, +}; + +pub const FileVersions = struct { + path: []const u8, + versions: std.ArrayList(Version) = .{}, + allocator: std.mem.Allocator, + + pub fn init(allocator: std.mem.Allocator, path: []const u8) FileVersions { + return .{ + .path = path, + .allocator = allocator, + }; + } + + pub fn deinit(self: *FileVersions) void { + self.versions.deinit(self.allocator); + } + + pub fn append(self: *FileVersions, seq: u64, agent: AgentId, op: Op, hash: u64, size: u64) !u64 { + try self.versions.append(self.allocator, .{ + .seq = seq, + .agent = agent, + .timestamp = std.time.milliTimestamp(), + .op = op, + .hash = hash, + .size = size, + }); + return seq; + } + + pub fn latest(self: *const FileVersions) ?Version { + if (self.versions.items.len == 0) return null; + return self.versions.items[self.versions.items.len - 1]; + } + + pub fn atCursor(self: *const FileVersions, cursor: u64) ?Version { + var result: ?Version = null; + for (self.versions.items) |v| { + if (v.seq <= cursor) result = v; + } + return result; + } + + pub fn countSince(self: *const FileVersions, since_seq: u64) usize { + var count: usize = 0; + for (self.versions.items) |v| { + if (v.seq > since_seq) count += 1; + } + return count; + } +}; diff --git a/registry/native/zig/codedb/src/vendor/watcher.zig b/registry/native/zig/codedb/src/vendor/watcher.zig new file mode 100644 index 000000000..c534d9dda --- /dev/null +++ b/registry/native/zig/codedb/src/vendor/watcher.zig @@ -0,0 +1,562 @@ +const std = @import("std"); +const Store = @import("store.zig").Store; +const Explorer = @import("explore.zig").Explorer; + +pub const EventKind = enum(u8) { + created, + modified, + deleted, +}; + +pub const FsEvent = struct { + path_buf: [std.fs.max_path_bytes]u8 = undefined, + path_len: usize, + kind: EventKind, + seq: u64, + + pub fn init(src_path: []const u8, kind: EventKind, seq: u64) ?FsEvent { + // Gracefully skip paths exceeding the max instead of panicking. + if (src_path.len > std.fs.max_path_bytes) return null; + var event = FsEvent{ + .path_len = src_path.len, + .kind = kind, + .seq = seq, + }; + @memcpy(event.path_buf[0..src_path.len], src_path); + return event; + } + + pub fn path(self: *const FsEvent) []const u8 { + return self.path_buf[0..self.path_len]; + } +}; + +pub const EventQueue = struct { + const CAPACITY = 4096; + + events: [CAPACITY]?FsEvent = [_]?FsEvent{null} ** CAPACITY, + head: std.atomic.Value(usize) = std.atomic.Value(usize).init(0), + tail: std.atomic.Value(usize) = std.atomic.Value(usize).init(0), + mu: std.Thread.Mutex = .{}, + + pub fn push(self: *EventQueue, event: FsEvent) bool { + self.mu.lock(); + defer self.mu.unlock(); + + // Mutex provides the memory ordering guarantee; .monotonic is sufficient here. + const cur_tail = self.tail.load(.monotonic); + const next_tail = (cur_tail + 1) % CAPACITY; + if (next_tail == self.head.load(.monotonic)) return false; + self.events[cur_tail] = event; + self.tail.store(next_tail, .monotonic); + return true; + } + + pub fn pop(self: *EventQueue) ?FsEvent { + self.mu.lock(); + defer self.mu.unlock(); + + // Mutex provides the memory ordering guarantee; .monotonic is sufficient here. + const cur_head = self.head.load(.monotonic); + if (cur_head == self.tail.load(.monotonic)) return null; + const event = self.events[cur_head]; + self.head.store((cur_head + 1) % CAPACITY, .monotonic); + return event; + } +}; + +const FileState = struct { + mtime: i64, // milliseconds since epoch — cheap stat check + size: u64, // cheap change discriminator before hashing + hash: u64, // wyhash of content — confirms actual change + seen: bool, // set during current poll cycle for deletion detection +}; + +const FileMap = std.StringHashMap(FileState); + +const skip_dirs = [_][]const u8{ + ".git", + ".claude", + ".codedb", + "node_modules", + ".zig-cache", + "zig-out", + ".next", + ".nuxt", + ".svelte-kit", + "dist", + "build", + ".build", + ".output", + "out", + "__pycache__", + ".venv", + "venv", + ".env", + ".tox", + ".mypy_cache", + ".pytest_cache", + ".ruff_cache", + "target", // rust, java/maven + ".gradle", + ".idea", + ".vs", + "vendor", // go, php + "Pods", // cocoapods + ".dart_tool", + ".pub-cache", + "coverage", + ".nyc_output", + ".turbo", + ".parcel-cache", + ".cache", + ".tmp", + ".temp", + ".DS_Store", +}; + +fn shouldSkip(path: []const u8) bool { + // Check each path component against skip list + var rest = path; + while (true) { + for (skip_dirs) |skip| { + if (rest.len >= skip.len and + std.mem.eql(u8, rest[0..skip.len], skip) and + (rest.len == skip.len or rest[skip.len] == '/')) + return true; + } + // Advance to next component + if (std.mem.indexOfScalar(u8, rest, '/')) |sep| { + rest = rest[sep + 1 ..]; + } else break; + } + return false; +} + +fn shouldSkipDir(name: []const u8) bool { + for (skip_dirs) |skip| { + if (std.mem.eql(u8, name, skip)) return true; + } + return false; +} + +/// Recursive directory walker that prunes skip_dirs before descending. +/// Unlike std.fs.Dir.walk(), this never enters .git, node_modules, etc., +/// avoiding the CPU cost of traversing potentially huge directory trees. +const FilteredWalker = struct { + const StackItem = struct { + dir_handle: std.fs.Dir, + iter: std.fs.Dir.Iterator, + }; + + stack: std.ArrayList(StackItem), + name_buffer: std.ArrayList(u8), + allocator: std.mem.Allocator, + dir_prefix_len: usize = 0, + + pub const Entry = struct { + path: []const u8, // relative path — valid until next call to next() + }; + + pub fn init(root: std.fs.Dir, allocator: std.mem.Allocator) !FilteredWalker { + var self = FilteredWalker{ + .stack = .{}, + .name_buffer = .{}, + .allocator = allocator, + }; + try self.stack.append(allocator, .{ + .dir_handle = root, + .iter = root.iterate(), + }); + return self; + } + + pub fn deinit(self: *FilteredWalker) void { + for (self.stack.items, 0..) |*item, i| { + if (i > 0) item.dir_handle.close(); + } + self.stack.deinit(self.allocator); + self.name_buffer.deinit(self.allocator); + } + + pub fn next(self: *FilteredWalker) !?Entry { + // Trim any filename appended by the previous yield + self.name_buffer.shrinkRetainingCapacity(self.dir_prefix_len); + + while (self.stack.items.len > 0) { + const top = &self.stack.items[self.stack.items.len - 1]; + if (try top.iter.next()) |entry| { + if (entry.kind == .directory) { + if (shouldSkipDir(entry.name)) continue; + + const sub = top.dir_handle.openDir(entry.name, .{ .iterate = true }) catch continue; + + // Extend the directory prefix in name_buffer + if (self.name_buffer.items.len > 0) + try self.name_buffer.append(self.allocator, '/'); + try self.name_buffer.appendSlice(self.allocator, entry.name); + self.dir_prefix_len = self.name_buffer.items.len; + + try self.stack.append(self.allocator, .{ + .dir_handle = sub, + .iter = sub.iterate(), + }); + continue; + } + + if (entry.kind != .file) continue; + + // Build full relative path by appending filename + if (self.dir_prefix_len > 0) + try self.name_buffer.append(self.allocator, '/'); + try self.name_buffer.appendSlice(self.allocator, entry.name); + + return .{ .path = self.name_buffer.items }; + } else { + // Directory exhausted — pop and restore parent prefix + if (self.stack.items.len > 1) { + var item = self.stack.pop().?; + item.dir_handle.close(); + } else { + _ = self.stack.pop(); + } + if (std.mem.lastIndexOfScalar(u8, self.name_buffer.items[0..self.dir_prefix_len], '/')) |pos| { + self.dir_prefix_len = pos; + } else { + self.dir_prefix_len = 0; + } + self.name_buffer.shrinkRetainingCapacity(self.dir_prefix_len); + } + } + return null; + } +}; + +/// Called from main thread to do the initial scan before listening. +pub fn initialScan(store: *Store, explorer: *Explorer, root: []const u8, allocator: std.mem.Allocator, skip_trigram: bool) !void { + var dir = try std.fs.cwd().openDir(root, .{ .iterate = true }); + defer dir.close(); + + var walker = try FilteredWalker.init(dir, allocator); + defer walker.deinit(); + + while (try walker.next()) |entry| { + const stat = dir.statFile(entry.path) catch continue; + _ = try store.recordSnapshot(entry.path, stat.size, 0); + // Index outline + content + word/trigram for full search support + indexFileContent(explorer, dir, entry.path, allocator, skip_trigram) catch {}; + } +} + +/// Fast index: parse symbols/outline only, skip expensive word+trigram indexes. +fn indexFileOutline(explorer: *Explorer, dir: std.fs.Dir, path: []const u8, allocator: std.mem.Allocator) !void { + if (shouldSkipFile(path)) return; + const file = try dir.openFile(path, .{}); + defer file.close(); + const stat = try file.stat(); + if (stat.size > 512 * 1024) return; + const content = try file.readToEndAlloc(allocator, 512 * 1024); + defer allocator.free(content); + const check_len = @min(content.len, 512); + for (content[0..check_len]) |c| { + if (c == 0) return; + } + try explorer.indexFileOutlineOnly(path, content); +} + +/// Background thread: polls for incremental FS changes. +pub fn incrementalLoop(store: *Store, explorer: *Explorer, queue: *EventQueue, root: []const u8, shutdown: *std.atomic.Value(bool), scan_done: *std.atomic.Value(bool)) void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + const backing = gpa.allocator(); + + // Wait for initial scan to finish before building our known-file snapshot. + // This prevents double-indexing: initialScan does full indexing, then we + // only pick up changes that happen after. + while (!scan_done.load(.acquire)) { + if (shutdown.load(.acquire)) return; + std.Thread.sleep(100 * std.time.ns_per_ms); + } + + var known = FileMap.init(backing); + defer { + var iter = known.iterator(); + while (iter.next()) |kv| { + backing.free(kv.key_ptr.*); + } + known.deinit(); + } + // Build initial snapshot: stat every file, defer expensive hashing until mtime changes. + { + var snap_arena = std.heap.ArenaAllocator.init(backing); + defer snap_arena.deinit(); + const tmp = snap_arena.allocator(); + var dir = std.fs.cwd().openDir(root, .{ .iterate = true }) catch return; + defer dir.close(); + var walker = FilteredWalker.init(dir, tmp) catch return; + defer walker.deinit(); + while (walker.next() catch null) |entry| { + const stat = dir.statFile(entry.path) catch continue; + const mtime: i64 = @intCast(@divTrunc(stat.mtime, std.time.ns_per_ms)); + const duped = backing.dupe(u8, entry.path) catch continue; + known.put(duped, .{ .mtime = mtime, .size = stat.size, .hash = 0, .seen = false }) catch backing.free(duped); + } + } + + while (!shutdown.load(.acquire)) { + // Check for muonry edit notifications (instant re-index, no 2s delay) + drainNotifyFile(store, explorer, queue, &known, root, backing); + + // Poll every 2s — gentle on CPU, fast enough to catch saves + std.Thread.sleep(2 * std.time.ns_per_s); + + // Each diff cycle gets its own arena so temporaries are freed + var cycle_arena = std.heap.ArenaAllocator.init(backing); + defer cycle_arena.deinit(); + + incrementalDiff(store, explorer, queue, &known, root, backing, cycle_arena.allocator()) catch |err| { + std.log.err("watcher: diff failed: {}", .{err}); + }; + } +} + +fn hashFile(dir: std.fs.Dir, path: []const u8, size: u64) !u64 { + // Returns 0 for intentional skip (large files, filtered extensions). + // Returns maxInt(u64) on IO error so the value always differs from a valid + // previously stored hash of 0, preventing a false "content unchanged" conclusion. + if (shouldSkipFile(path)) return 0; + const file = dir.openFile(path, .{}) catch return std.math.maxInt(u64); + defer file.close(); + if (size > 512 * 1024) return 0; + + var hasher = std.hash.Wyhash.init(0); + var buf: [16 * 1024]u8 = undefined; + while (true) { + const n = file.read(&buf) catch return std.math.maxInt(u64); + if (n == 0) break; + hasher.update(buf[0..n]); + } + return hasher.final(); +} + +fn pushEventOrWait(queue: *EventQueue, event: FsEvent) void { + // Preserve prior drop-on-full behavior so producer never stalls permanently. + _ = queue.push(event); +} + + +fn incrementalDiff(store: *Store, explorer: *Explorer, queue: *EventQueue, known: *FileMap, root: []const u8, persistent: std.mem.Allocator, tmp: std.mem.Allocator) !void { + var dir = try std.fs.cwd().openDir(root, .{ .iterate = true }); + defer dir.close(); + + // Mark all known files unseen for this cycle. + var known_iter = known.iterator(); + while (known_iter.next()) |kv| { + kv.value_ptr.seen = false; + } + + var walker = try FilteredWalker.init(dir, tmp); + defer walker.deinit(); + + while (try walker.next()) |entry| { + const stat = dir.statFile(entry.path) catch continue; + const mtime: i64 = @intCast(@divTrunc(stat.mtime, std.time.ns_per_ms)); + + if (known.getEntry(entry.path)) |known_entry| { + const old = known_entry.value_ptr; + old.seen = true; + + // Mtime unchanged -> skip (cheap path, no IO) + if (old.mtime == mtime) continue; + + // Size changed -> definitely changed, skip expensive hash. + var hash: u64 = 0; + if (old.size == stat.size) { + // Same size + changed mtime -> hash to confirm content actually differs. + hash = hashFile(dir, entry.path, stat.size) catch 0; + } + if (old.size == stat.size and hash != 0 and old.hash != 0 and hash == old.hash) { + // Content identical (e.g. touch, git checkout) -> update metadata only. + old.mtime = mtime; + old.size = stat.size; + continue; + } + + const seq = try store.recordSnapshot(entry.path, stat.size, hash); + old.mtime = mtime; + old.size = stat.size; + old.hash = hash; + const stable_path = known_entry.key_ptr.*; + if (FsEvent.init(stable_path, .modified, seq)) |ev| pushEventOrWait(queue, ev); + indexFileContent(explorer, dir, stable_path, tmp, false) catch {}; + } else { + // New files always generate an event, so skip the extra full-file hash pass. + const duped = try persistent.dupe(u8, entry.path); + errdefer persistent.free(duped); + const seq = try store.recordSnapshot(duped, stat.size, 0); + try known.put(duped, .{ .mtime = mtime, .size = stat.size, .hash = 0, .seen = true }); + if (FsEvent.init(duped, .created, seq)) |ev| pushEventOrWait(queue, ev); + indexFileContent(explorer, dir, duped, tmp, false) catch {}; + } + } + + // Detect deleted files + var to_remove: std.ArrayList([]const u8) = .{}; + defer to_remove.deinit(tmp); + + var iter = known.iterator(); + while (iter.next()) |kv| { + if (!kv.value_ptr.seen) { + try to_remove.append(tmp, kv.key_ptr.*); + } + } + for (to_remove.items) |path| { + const seq = store.recordDelete(path, 0) catch continue; + explorer.removeFile(path); + if (known.fetchRemove(path)) |kv| { + if (FsEvent.init(kv.key, .deleted, seq)) |ev| pushEventOrWait(queue, ev); + persistent.free(kv.key); + } + } +} + +const skip_extensions = [_][]const u8{ + ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".ico", ".icns", ".webp", + ".svg", ".ttf", ".otf", ".woff", ".woff2", ".eot", + ".zip", ".tar", ".gz", ".bz2", ".xz", ".7z", ".rar", + ".pdf", ".doc", ".docx", ".xls", ".xlsx", ".pptx", + ".mp3", ".mp4", ".wav", ".avi", ".mov", ".flv", ".ogg", ".webm", + ".exe", ".dll", ".so", ".dylib", ".o", ".a", ".lib", + ".wasm", ".pyc", ".pyo", ".class", + ".db", ".sqlite", ".sqlite3", + ".lock", ".sum", +}; + +fn shouldSkipFile(path: []const u8) bool { + for (skip_extensions) |ext| { + if (std.mem.endsWith(u8, path, ext)) return true; + } + // Skip dotfiles like .DS_Store, .gitignore etc at any depth + if (std.mem.endsWith(u8, path, ".DS_Store")) return true; + // Skip sensitive files (.env, credentials, keys) — same rules as snapshot filtering + if (isSensitivePath(path)) return true; + return false; +} + +/// Check if a path refers to a sensitive file (secrets, keys, credentials). +/// Replicates the filter from snapshot.zig so live indexing and snapshots +/// apply the same exclusion rules. Optimized: basename check + early exit. +fn isSensitivePath(path: []const u8) bool { + const basename = if (std.mem.lastIndexOfScalar(u8, path, '/')) |sep| path[sep + 1 ..] else path; + // Fast path: most source files have extensions like .zig, .ts, .py — none start with '.' + // or match sensitive patterns. Skip the full check for common cases. + if (basename.len == 0) return false; + const first = basename[0]; + // Only check sensitive names if basename starts with '.', 'c', 's', 'i' or has key/cert extension + if (first != '.' and first != 'c' and first != 's' and first != 'i') { + // Still need to check extensions and directory patterns + if (std.mem.endsWith(u8, basename, ".pem") or + std.mem.endsWith(u8, basename, ".key") or + std.mem.endsWith(u8, basename, ".p12") or + std.mem.endsWith(u8, basename, ".pfx") or + std.mem.endsWith(u8, basename, ".jks")) return true; + if (std.mem.indexOf(u8, path, ".ssh/") != null or + std.mem.indexOf(u8, path, ".gnupg/") != null or + std.mem.indexOf(u8, path, ".aws/") != null) return true; + return false; + } + // .env* wildcard (catches .env, .env.local, .env.production, etc.) + if (basename.len >= 4 and std.mem.eql(u8, basename[0..4], ".env")) return true; + // Exact matches + const sensitive_names = [_][]const u8{ + ".dev.vars", ".npmrc", ".pypirc", ".netrc", + "credentials.json", "service-account.json", + "secrets.json", "secrets.yaml", "secrets.yml", + "id_rsa", "id_ed25519", + }; + for (sensitive_names) |name| { + if (std.mem.eql(u8, basename, name)) return true; + } + if (std.mem.endsWith(u8, basename, ".pem") or + std.mem.endsWith(u8, basename, ".key") or + std.mem.endsWith(u8, basename, ".p12")) return true; + if (std.mem.indexOf(u8, path, ".ssh/") != null or + std.mem.indexOf(u8, path, ".gnupg/") != null or + std.mem.indexOf(u8, path, ".aws/") != null) return true; + return false; +} + +fn indexFileContent(explorer: *Explorer, dir: std.fs.Dir, path: []const u8, allocator: std.mem.Allocator, skip_trigram: bool) !void { + if (shouldSkipFile(path)) return; + const file = try dir.openFile(path, .{}); + defer file.close(); + const stat = try file.stat(); + // Skip files over 512KB (likely minified bundles or generated) + if (stat.size > 512 * 1024) return; + const content = try file.readToEndAlloc(allocator, 512 * 1024); + defer allocator.free(content); + // Skip binary content (check first 512 bytes for null bytes) + const check_len = @min(content.len, 512); + for (content[0..check_len]) |c| { + if (c == 0) return; + } + if (skip_trigram) { + try explorer.indexFileSkipTrigram(path, content); + } else { + try explorer.indexFile(path, content); + } +} + +// ── muonry interop ─────────────────────────────────────────────────────────── +// +// muonry appends changed file paths to /tmp/codedb-notify after each edit. +// We drain this file on every poll cycle and re-index the listed files +// immediately, eliminating the 2s polling delay for muonry-sourced edits. + +fn drainNotifyFile(store: *Store, explorer: *Explorer, queue: *EventQueue, known: *FileMap, root: []const u8, alloc: std.mem.Allocator) void { + // Atomically read + truncate + const notify_path = "/tmp/codedb-notify"; + const file = std.fs.cwd().openFile(notify_path, .{ .mode = .read_write }) catch return; + defer file.close(); + + const data = file.readToEndAlloc(alloc, 64 * 1024) catch return; + defer alloc.free(data); + if (data.len == 0) return; + + // Truncate after reading + file.seekTo(0) catch return; + std.posix.ftruncate(file.handle, 0) catch return; + + // Re-index each notified path + var dir = std.fs.cwd().openDir(root, .{}) catch return; + defer dir.close(); + + var lines = std.mem.splitScalar(u8, data, '\n'); + while (lines.next()) |line| { + const path = std.mem.trim(u8, line, " \t\r"); + if (path.len == 0) continue; + + // Make path relative to root if it's absolute + const rel = if (std.mem.startsWith(u8, path, root)) + std.mem.trimLeft(u8, path[root.len..], "/") + else + path; + + indexFileContent(explorer, dir, rel, alloc, false) catch continue; + + // Update known-file state so incrementalDiff doesn't double-process + const stat = dir.statFile(rel) catch continue; + const mtime: i64 = @intCast(@divTrunc(stat.mtime, std.time.ns_per_ms)); + const hash = hashFile(dir, rel, stat.size) catch continue; + if (known.getPtr(rel)) |existing| { + existing.mtime = mtime; + existing.size = stat.size; + existing.hash = hash; + } + + // Push event to queue + if (FsEvent.init(rel, .modified, store.currentSeq())) |ev| { + _ = queue.push(ev); + } + } +} diff --git a/registry/native/zig/codedb/zig-out/bin/codedb b/registry/native/zig/codedb/zig-out/bin/codedb new file mode 100755 index 000000000..70b4741a3 Binary files /dev/null and b/registry/native/zig/codedb/zig-out/bin/codedb differ diff --git a/registry/native/zig/codedb/zig-out/bin/codedb.wasm b/registry/native/zig/codedb/zig-out/bin/codedb.wasm new file mode 100755 index 000000000..70b4741a3 Binary files /dev/null and b/registry/native/zig/codedb/zig-out/bin/codedb.wasm differ diff --git a/registry/software/codedb/LICENSE.upstream b/registry/software/codedb/LICENSE.upstream new file mode 100644 index 000000000..e340a1da7 --- /dev/null +++ b/registry/software/codedb/LICENSE.upstream @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2024-2026, Rach Pradhan (justrach) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/registry/software/codedb/agent-os-package.json b/registry/software/codedb/agent-os-package.json new file mode 100644 index 000000000..1dcb81986 --- /dev/null +++ b/registry/software/codedb/agent-os-package.json @@ -0,0 +1,7 @@ +{ + "name": "@rivet-dev/agent-os-codedb", + "type": "wasm", + "description": "codedb code intelligence CLI (reduced WASI fork)", + "aptName": "codedb", + "source": "zig" +} diff --git a/registry/software/codedb/package.json b/registry/software/codedb/package.json new file mode 100644 index 000000000..c5763579a --- /dev/null +++ b/registry/software/codedb/package.json @@ -0,0 +1,29 @@ +{ + "name": "@rivet-dev/agent-os-codedb", + "version": "0.0.0", + "type": "module", + "license": "Apache-2.0 AND BSD-3-Clause", + "description": "codedb code intelligence CLI for agentOS", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist", + "wasm", + "LICENSE.upstream" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "scripts": { + "build": "tsc", + "check-types": "tsc --noEmit" + }, + "devDependencies": { + "@rivet-dev/agent-os-registry-types": "link:../../../packages/registry-types", + "@types/node": "^22.10.2", + "typescript": "^5.9.2" + } +} diff --git a/registry/software/codedb/src/index.ts b/registry/software/codedb/src/index.ts new file mode 100644 index 000000000..d6b530968 --- /dev/null +++ b/registry/software/codedb/src/index.ts @@ -0,0 +1,18 @@ +import type { WasmCommandPackage } from "@rivet-dev/agent-os-registry-types"; +import { resolve, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +const pkg = { + name: "codedb", + aptName: "codedb", + description: "codedb code intelligence CLI (reduced WASI fork)", + source: "zig" as const, + commands: [{ name: "codedb", permissionTier: "full" as const }], + get commandDir() { + return resolve(__dirname, "..", "wasm"); + }, +} satisfies WasmCommandPackage; + +export default pkg; diff --git a/registry/software/codedb/tsconfig.json b/registry/software/codedb/tsconfig.json new file mode 100644 index 000000000..8f24167af --- /dev/null +++ b/registry/software/codedb/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"] +} diff --git a/registry/tests/wasmvm/codedb.test.ts b/registry/tests/wasmvm/codedb.test.ts new file mode 100644 index 000000000..a5bed2254 --- /dev/null +++ b/registry/tests/wasmvm/codedb.test.ts @@ -0,0 +1,151 @@ +import { describe, it, expect, afterEach } from 'vitest'; +import { existsSync } from 'node:fs'; +import { resolve } from 'node:path'; +import { createWasmVmRuntime } from '@rivet-dev/agent-os-posix'; +import { createKernel } from '@secure-exec/core'; +import { COMMANDS_DIR, hasWasmBinaries } from '../helpers.js'; +import type { Kernel } from '@secure-exec/core'; + +const CODEDB_DIR = resolve(process.cwd(), 'software/codedb/wasm'); +const hasCodedbBinary = existsSync(resolve(CODEDB_DIR, 'codedb')); + +class SimpleVFS { + private files = new Map(); + private dirs = new Set(['/']); + + async readFile(path: string): Promise { + const data = this.files.get(path); + if (!data) throw new Error(`ENOENT: ${path}`); + return data; + } + + async readTextFile(path: string): Promise { + return new TextDecoder().decode(await this.readFile(path)); + } + + async readDir(path: string): Promise { + const prefix = path === '/' ? '/' : path + '/'; + const entries: string[] = []; + for (const p of [...this.files.keys(), ...this.dirs]) { + if (p !== path && p.startsWith(prefix)) { + const rest = p.slice(prefix.length); + if (!rest.includes('/')) entries.push(rest); + } + } + return entries; + } + + async readDirWithTypes(path: string) { + return (await this.readDir(path)).map(name => ({ + name, + isDirectory: this.dirs.has(path === '/' ? `/${name}` : `${path}/${name}`), + })); + } + + async writeFile(path: string, content: string | Uint8Array): Promise { + const data = typeof content === 'string' ? new TextEncoder().encode(content) : content; + this.files.set(path, new Uint8Array(data)); + const parts = path.split('/').filter(Boolean); + for (let i = 1; i < parts.length; i++) { + this.dirs.add('/' + parts.slice(0, i).join('/')); + } + } + + async mkdir(path: string, _options?: { recursive?: boolean }) { + this.dirs.add(path); + const parts = path.split('/').filter(Boolean); + for (let i = 1; i < parts.length; i++) { + this.dirs.add('/' + parts.slice(0, i).join('/')); + } + } + + async exists(path: string): Promise { + return this.files.has(path) || this.dirs.has(path); + } + + async stat(path: string) { + const isDir = this.dirs.has(path); + const data = this.files.get(path); + if (!isDir && !data) throw new Error(`ENOENT: ${path}`); + return { + mode: isDir ? 0o40755 : 0o100644, + size: data?.length ?? 0, + isDirectory: isDir, + isSymbolicLink: false, + atimeMs: Date.now(), + mtimeMs: Date.now(), + ctimeMs: Date.now(), + birthtimeMs: Date.now(), + ino: 0, + nlink: 1, + uid: 1000, + gid: 1000, + }; + } + + async lstat(path: string) { return this.stat(path); } + async removeFile(path: string) { this.files.delete(path); } + async removeDir(path: string) { this.dirs.delete(path); } + + async rename(oldPath: string, newPath: string) { + const data = this.files.get(oldPath); + if (data) { + this.files.set(newPath, data); + this.files.delete(oldPath); + } + } + + async pread(path: string, buffer: Uint8Array, offset: number, length: number, position: number): Promise { + const data = this.files.get(path); + if (!data) throw new Error(`ENOENT: ${path}`); + const available = Math.min(length, data.length - position); + if (available <= 0) return 0; + buffer.set(data.subarray(position, position + available), offset); + return available; + } +} + +async function createTestKernel(): Promise<{ kernel: Kernel; vfs: SimpleVFS }> { + const vfs = new SimpleVFS(); + const kernel = createKernel({ filesystem: vfs as any }); + await kernel.mount(createWasmVmRuntime({ commandDirs: [CODEDB_DIR, COMMANDS_DIR] })); + return { kernel, vfs }; +} + +describe.skipIf(!hasWasmBinaries || !hasCodedbBinary)('codedb reduced WASI fork', () => { + let kernel: Kernel; + + afterEach(async () => { + await kernel?.dispose(); + }); + + it('indexes a small project and answers tree, outline, search, deps, and read queries', async () => { + let vfs: SimpleVFS; + ({ kernel, vfs } = await createTestKernel()); + + await vfs.writeFile('/proj/src/main.zig', 'const util = @import("util.zig");\npub fn main() void {\n _ = util.value;\n}\n'); + await vfs.writeFile('/proj/src/util.zig', 'pub const value = 42;\npub fn helper() void {}\n'); + await vfs.writeFile('/proj/src/util.ts', 'export function AgentOs() {\n return 42;\n}\n'); + await vfs.writeFile('/proj/src/consumer.ts', 'import { AgentOs } from "./util.ts";\nexport const value = AgentOs();\n'); + await vfs.writeFile('/proj/src/mod.py', 'import os\n\ndef handle_auth():\n return os.getcwd()\n'); + + const tree = await kernel.exec('codedb tree /proj'); + expect(tree.stdout).toContain('src/'); + expect(tree.stdout).toContain('main.zig zig'); + expect(tree.stdout).toContain('util.ts typescript'); + + const outline = await kernel.exec('codedb outline /proj src/util.ts'); + expect(outline.stdout).toContain('src/util.ts typescript'); + expect(outline.stdout).toContain('function AgentOs'); + + const search = await kernel.exec('codedb search /proj AgentOs 5'); + expect(search.stdout).toContain('src/util.ts:1'); + expect(search.stdout).toContain('src/consumer.ts:1'); + + const deps = await kernel.exec('codedb deps /proj src/util.ts'); + expect(deps.stdout).toContain('src/consumer.ts'); + + const read = await kernel.exec('codedb read /proj src/mod.py'); + expect(read.stdout).toContain('def handle_auth():'); + }); +}); diff --git a/registry/tests/wasmvm/duckdb.test.ts b/registry/tests/wasmvm/duckdb.test.ts index e5d1bf2c0..6ba11b3c6 100644 --- a/registry/tests/wasmvm/duckdb.test.ts +++ b/registry/tests/wasmvm/duckdb.test.ts @@ -239,14 +239,14 @@ describe.skipIf(!hasWasmDuckDB)('duckdb command', { timeout: 120_000 }, () => { } let result; - if (hasWasmCurl) { + if (hasWasmHttpGet) { result = await kernel.exec( - `curl -fsS -o /tmp/remote.csv http://127.0.0.1:${address.port}/remote.csv` + `http_get ${address.port} /remote.csv /tmp/remote.csv` ); expect(result.exitCode).toBe(0); } else { result = await kernel.exec( - `http_get ${address.port} /remote.csv /tmp/remote.csv` + `curl -fsS -o /tmp/remote.csv http://127.0.0.1:${address.port}/remote.csv` ); expect(result.exitCode).toBe(0); }