git: 5a631398ecdd - main - misc/opencode: New port: AI coding agent for the terminal
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 19 Oct 2026 21:35:42 UTC
The branch main has been updated by samm:
URL: https://cgit.FreeBSD.org/ports/commit/?id=5a631398ecdd18a1dc814afac38833a1b8d9f346
commit 5a631398ecdd18a1dc814afac38833a1b8d9f346
Author: Oleksii Samorukov <samm@FreeBSD.org>
AuthorDate: 2026-10-19 21:33:54 +0000
Commit: Oleksii Samorukov <samm@FreeBSD.org>
CommitDate: 2026-10-19 21:33:54 +0000
misc/opencode: New port: AI coding agent for the terminal
OpenCode is an open-source, model-agnostic AI coding agent that runs in
the terminal. It combines a full-screen TUI and a scriptable CLI with
a client/server architecture, LSP awareness and multi-session support.
Tested on arm64 and amd64.
---
misc/Makefile | 1 +
misc/opencode/Makefile | 235 +++++++
misc/opencode/Makefile.crates | 375 ++++++++++
misc/opencode/distinfo | 753 +++++++++++++++++++++
misc/opencode/files/ghostty-zig-0.16-std.patch | 28 +
misc/opencode/files/opencode-pty-build.rs.patch | 69 ++
misc/opencode/files/opentui-build.zig.patch | 14 +
.../files/opentui-ghostty-vt-freebsd.patch | 18 +
.../files/patch-packages_cli_script_build.ts | 51 ++
.../patch-packages_cli_script_opencode-pty.ts | 19 +
misc/opencode/files/setup-fff-freebsd.py | 113 ++++
misc/opencode/files/setup-opentui-freebsd.py | 156 +++++
misc/opencode/files/webui-wasm-package.json | 10 +
misc/opencode/pkg-descr | 4 +
14 files changed, 1846 insertions(+)
diff --git a/misc/Makefile b/misc/Makefile
index ed18e23ee2a5..2a88a2dfda80 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -338,6 +338,7 @@
SUBDIR += onnxruntime
SUBDIR += ooo
SUBDIR += openclaw
+ SUBDIR += opencode
SUBDIR += opencyc
SUBDIR += openhab
SUBDIR += openhab-addons
diff --git a/misc/opencode/Makefile b/misc/opencode/Makefile
new file mode 100644
index 000000000000..8cb98c6f3287
--- /dev/null
+++ b/misc/opencode/Makefile
@@ -0,0 +1,235 @@
+PORTNAME= opencode
+DISTVERSION= 2.0.32
+CATEGORIES= misc
+
+# Upstream ships no FreeBSD builds of OpenTUI's Zig core, fff's Rust cdylib, the
+# opencode-pty terminal daemon or the web UI's native Vite 8 bindings, so the
+# port builds them from source (extra source trees plus a WASM fallback) and
+# embeds everything into a single `bun --compile` executable. See
+# files/setup-*-freebsd.py, files/*.patch and files/webui-wasm-package.json.
+#
+# OPENTUI_VERSION and FFF_VERSION must match the pinned @opentui/core and
+# @ff-labs/fff-bun releases (packages/cli/package.json, packages/core/package.json)
+# or the native FFI ABI breaks.
+OPENTUI_VERSION= 0.5.17
+FFF_VERSION= 0.10.5
+#
+# opencode-pty is the persistent terminal daemon the client spawns. Its version
+# must match the pinned @opencode-ai/pty release and speak the same wire protocol
+# as the bundled client (packages/cli/package.json, packages/core/package.json),
+# and GHOSTTY_REVISION must match its ghostty-revision file, or the client
+# rejects the daemon as a protocol mismatch.
+OPENCODE_PTY_VERSION= 0.2.0
+GHOSTTY_REVISION= ab0b9da9e88fcb4b0533a1854e84628f663930af
+
+MASTER_SITES= https://github.com/anomalyco/opencode/archive/refs/tags/:opencode \
+ https://github.com/anomalyco/opentui/archive/refs/tags/:opentui \
+ https://github.com/dmtrKovalenko/fff/archive/refs/tags/:fff \
+ https://registry.npmjs.org/@ff-labs/fff-bun/-/:fffbun \
+ https://github.com/anomalyco/opencode-pty/archive/refs/tags/:opencodepty \
+ https://github.com/ghostty-org/ghostty/archive/:ghostty
+DISTFILES= v${DISTVERSION}${EXTRACT_SUFX}:opencode \
+ v${OPENTUI_VERSION}${EXTRACT_SUFX}:opentui \
+ v${FFF_VERSION}${EXTRACT_SUFX}:fff \
+ fff-bun-${FFF_VERSION}.tgz:fffbun \
+ v${OPENCODE_PTY_VERSION}${EXTRACT_SUFX}:opencodepty \
+ ${GHOSTTY_REVISION}${EXTRACT_SUFX}:ghostty
+DIST_SUBDIR= ${PORTNAME}
+
+MAINTAINER= samm@FreeBSD.org
+COMMENT= AI coding agent for the terminal
+WWW= https://opencode.ai/ \
+ https://github.com/anomalyco/opencode
+
+LICENSE= MIT
+
+ONLY_FOR_ARCHS= aarch64 amd64
+ONLY_FOR_ARCHS_REASON= OpenTUI's Zig core is only wired up for FreeBSD/aarch64 and FreeBSD/amd64
+
+USES= python:build cargo
+
+# The port drives the whole build; keep cargo.mk from adding its own
+# do-build/do-install/do-test.
+CARGO_BUILD= no
+CARGO_INSTALL= no
+CARGO_TEST= no
+
+# node (husky `prepare` + Vite 8 web UI). Use node24: on aarch64 Vite 8's
+# rolldown has no native binding and its WASI fallback SIGSEGVs under node26.
+BUILD_DEPENDS= ${LOCALBASE}/bin/bun:lang/bun \
+ ${LOCALBASE}/bin/zig:lang/zig \
+ ${LOCALBASE}/bin/node:www/node24
+# post-fetch warms the offline bun and Ghostty Zig caches, so both are needed.
+# Zig 0.16 hardcodes /etc/ssl/cert.pem on FreeBSD; ca_root_nss provides it.
+FETCH_DEPENDS= ${LOCALBASE}/bin/bun:lang/bun \
+ ${LOCALBASE}/bin/zig:lang/zig \
+ ${LOCALBASE}/share/certs/ca-root-nss.crt:security/ca_root_nss
+
+# OpenCode's bundled ripgrep bootstrap has no FreeBSD build and only falls back
+# to a system `rg`, so make sure one exists: it backs the non-VCS file search
+# and the grep/glob tools.
+RUN_DEPENDS= rg:textproc/ripgrep
+
+WRKSRC= ${WRKDIR}/opencode-${DISTVERSION}
+OPENTUI_WRKSRC= ${WRKDIR}/opentui-${OPENTUI_VERSION}
+FFF_WRKSRC= ${WRKDIR}/fff-${FFF_VERSION}
+OPENCODE_PTY_WRKSRC= ${WRKDIR}/opencode-pty-${OPENCODE_PTY_VERSION}
+GHOSTTY_WRKSRC= ${WRKDIR}/ghostty-${GHOSTTY_REVISION}
+
+# Build only the fff C-ABI cdylib (not the nvim/python/mcp crates).
+CARGO_BUILD_ARGS= --package fff-c
+FFF_SO= ${CARGO_TARGET_DIR}/release/libfff_c.so
+
+BUN= ${LOCALBASE}/bin/bun
+ZIG= ${LOCALBASE}/bin/zig
+BUN_INSTALL_CACHE_DIR= ${WRKDIR}/bun-cache
+WEBUI_WASM_DIR= ${WRKDIR}/gen-webui
+WEBUI_WASM_CACHE= ${DISTDIR}/${DIST_SUBDIR}/opencode-webui-wasm-${DISTVERSION}.tar.gz
+BUN_CACHE_TARBALL= ${DISTDIR}/${DIST_SUBDIR}/opencode-bun-cache-${DISTVERSION}.tar.gz
+ZIG_PTY_CACHE_DIR= ${WRKDIR}/zig-pty-cache
+ZIG_PTY_CACHE= ${DISTDIR}/${DIST_SUBDIR}/opencode-pty-zig-cache-${DISTVERSION}.tar.gz
+
+PLIST_FILES= bin/${PORTNAME}
+
+.include <bsd.port.pre.mk>
+
+# cargo.mk hard-assigns CARGO_WRKSRC from WRKSRC, so point it at the fff tree.
+CARGO_WRKSRC= ${FFF_WRKSRC}
+
+# OpenTUI/Bun arch names differ from ARCH: x64/arm64 for the JS side, and
+# x86_64-freebsd/aarch64-freebsd for the Zig artifact directory.
+.if ${ARCH} == amd64
+OPENTUI_ARCH= x64
+OPENTUI_ZIGDIR= x86_64-freebsd
+.elif ${ARCH} == aarch64
+OPENTUI_ARCH= arm64
+OPENTUI_ZIGDIR= aarch64-freebsd
+.endif
+
+OPENTUI_SO= ${OPENTUI_WRKSRC}/packages/native/lib/${OPENTUI_ZIGDIR}/libopentui.so
+OPENCODE_BIN= ${WRKSRC}/packages/cli/dist/cli-freebsd-${OPENTUI_ARCH}/bin/opencode
+# Built from source by this port and embedded into the executable (see do-build).
+OPENCODE_PTY_BIN= ${CARGO_TARGET_DIR}/release/opencode-pty
+
+# Build the offline caches at fetch time. The generated archives live in
+# DISTDIR but are deliberately not listed in DISTFILES, so `make checksum` does
+# not try to verify the generated files.
+post-fetch:
+ @${ECHO_MSG} "===> Warming bun install cache"
+ @${RM} -rf ${WRKDIR}/gen && ${MKDIR} ${WRKDIR}/gen
+ @${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/v${DISTVERSION}${EXTRACT_SUFX} -C ${WRKDIR}/gen
+ @if [ ! -f ${BUN_CACHE_TARBALL} ]; then \
+ cd ${WRKDIR}/gen/opencode-${DISTVERSION} && \
+ ${SETENV} BUN_INSTALL_CACHE_DIR=${BUN_INSTALL_CACHE_DIR} \
+ ${BUN} install --frozen-lockfile && \
+ ${TAR} czf ${BUN_CACHE_TARBALL} -C ${BUN_INSTALL_CACHE_DIR} . ; \
+ fi
+ @if [ ! -f ${WEBUI_WASM_CACHE} ]; then \
+ ${ECHO_MSG} "===> Staging Web UI WASM fallbacks"; \
+ ${RM} -rf ${WEBUI_WASM_DIR} && ${MKDIR} ${WEBUI_WASM_DIR} && \
+ ${CP} ${FILESDIR}/webui-wasm-package.json ${WEBUI_WASM_DIR}/package.json && \
+ cd ${WEBUI_WASM_DIR} && \
+ ${SETENV} BUN_INSTALL_CACHE_DIR=${BUN_INSTALL_CACHE_DIR} ${BUN} install && \
+ ${TAR} czf ${WEBUI_WASM_CACHE} -C ${WEBUI_WASM_DIR} node_modules ; \
+ fi
+ @if [ ! -f ${ZIG_PTY_CACHE} ]; then \
+ ${ECHO_MSG} "===> Warming the Ghostty Zig dependency cache"; \
+ ${RM} -rf ${WRKDIR}/gen-ghostty && ${MKDIR} ${WRKDIR}/gen-ghostty && \
+ ${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/${GHOSTTY_REVISION}${EXTRACT_SUFX} \
+ -C ${WRKDIR}/gen-ghostty && \
+ cd ${WRKDIR}/gen-ghostty/ghostty-${GHOSTTY_REVISION} && \
+ ${SETENV} ZIG_GLOBAL_CACHE_DIR=${ZIG_PTY_CACHE_DIR} \
+ ${ZIG} build --fetch=all && \
+ ${TAR} czf ${ZIG_PTY_CACHE} -C ${ZIG_PTY_CACHE_DIR} . ; \
+ fi
+
+post-extract:
+ @${MKDIR} ${BUN_INSTALL_CACHE_DIR}
+ @${TAR} xf ${BUN_CACHE_TARBALL} -C ${BUN_INSTALL_CACHE_DIR}
+ @${MKDIR} ${ZIG_PTY_CACHE_DIR}
+ @${TAR} xf ${ZIG_PTY_CACHE} -C ${ZIG_PTY_CACHE_DIR}
+
+# OpenTUI, opencode-pty and Ghostty are extra source trees, so their patches are
+# applied by hand.
+post-patch:
+ @${PATCH} -d ${OPENTUI_WRKSRC} -p0 --batch < ${FILESDIR}/opentui-build.zig.patch
+ @${PATCH} -d ${OPENTUI_WRKSRC} -p0 --batch < ${FILESDIR}/opentui-ghostty-vt-freebsd.patch
+ @${PATCH} -d ${OPENCODE_PTY_WRKSRC} -p1 --batch < ${FILESDIR}/opencode-pty-build.rs.patch
+ @${PATCH} -d ${GHOSTTY_WRKSRC} -p1 --batch < ${FILESDIR}/ghostty-zig-0.16-std.patch
+
+do-build:
+ @${ECHO_MSG} "===> Installing OpenCode dependencies (offline)"
+ @cd ${WRKSRC} && ${SETENV} BUN_INSTALL_CACHE_DIR=${BUN_INSTALL_CACHE_DIR} \
+ ${BUN} install --frozen-lockfile
+ @${ECHO_MSG} "===> Installing @ff-labs/fff-bun (upstream ships no FreeBSD package)"
+ @${MKDIR} ${WRKSRC}/node_modules/@ff-labs
+ @${RM} -rf ${WRKSRC}/node_modules/@ff-labs/fff-bun
+ @${MKDIR} ${WRKSRC}/node_modules/@ff-labs/fff-bun
+ @${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/fff-bun-${FFF_VERSION}.tgz \
+ -C ${WRKSRC}/node_modules/@ff-labs/fff-bun --strip-components=1
+ @${ECHO_MSG} "===> Adding Web UI WASM fallbacks"
+ @${TAR} xf ${WEBUI_WASM_CACHE} -C ${WRKSRC}
+ @${MKDIR} ${WRKSRC}/node_modules/lightningcss-freebsd-arm64
+ @${ECHO_CMD} '{"name":"lightningcss-freebsd-arm64","version":"1.32.0","main":"index.js"}' \
+ > ${WRKSRC}/node_modules/lightningcss-freebsd-arm64/package.json
+ @${ECHO_CMD} 'module.exports = require("lightningcss-wasm")' \
+ > ${WRKSRC}/node_modules/lightningcss-freebsd-arm64/index.js
+ @${ECHO_MSG} "===> Building OpenTUI native core"
+ @cd ${OPENTUI_WRKSRC}/packages/native && \
+ ${SETENV} HOME=${WRKDIR} \
+ ZIG_GLOBAL_CACHE_DIR=${WRKDIR}/zig-cache \
+ ZIG_LOCAL_CACHE_DIR=${WRKDIR}/zig-cache-local \
+ ${SH} scripts/prepare-zig-deps.sh && \
+ ${SETENV} HOME=${WRKDIR} \
+ ZIG_GLOBAL_CACHE_DIR=${WRKDIR}/zig-cache \
+ ZIG_LOCAL_CACHE_DIR=${WRKDIR}/zig-cache-local \
+ ${ZIG} build -Doptimize=ReleaseFast
+ @${ECHO_MSG} "===> Wiring OpenTUI for FreeBSD"
+ @cd ${WRKSRC} && ${PYTHON_CMD} ${FILESDIR}/setup-opentui-freebsd.py \
+ "${WRKSRC}" "${OPENTUI_SO}" "${OPENTUI_VERSION}" "${OPENTUI_ARCH}"
+ @${ECHO_MSG} "===> Building the fff native library"
+ @${CARGO_CARGO_RUN} build --manifest-path ${CARGO_CARGOTOML} ${CARGO_BUILD_ARGS}
+ @${ECHO_MSG} "===> Wiring fff for FreeBSD"
+ @cd ${WRKSRC} && ${PYTHON_CMD} ${FILESDIR}/setup-fff-freebsd.py \
+ "${WRKSRC}" "${FFF_SO}" "${FFF_VERSION}" "${OPENTUI_ARCH}"
+ @${ECHO_MSG} "===> Building the opencode-pty terminal daemon"
+ @cd ${OPENCODE_PTY_WRKSRC} && ${SETENV} ${CARGO_ENV} \
+ HOME=${WRKDIR} \
+ ZIG_GLOBAL_CACHE_DIR=${ZIG_PTY_CACHE_DIR} \
+ GHOSTTY_SOURCE_DIR=${GHOSTTY_WRKSRC} \
+ OPENCODE_ZIG_CPU=baseline \
+ ${CARGO} build --release --locked
+ @test -x ${OPENCODE_PTY_BIN} || (${ECHO_MSG} "Missing ${OPENCODE_PTY_BIN}"; ${FALSE})
+ @${ECHO_MSG} "===> Building the web UI and compiling the OpenCode binary"
+ @cd ${WRKSRC}/packages/cli && ${SETENV} \
+ HOME=${WRKDIR} \
+ OPENCODE_VERSION=${DISTVERSION} \
+ BUN_INSTALL_CACHE_DIR=${BUN_INSTALL_CACHE_DIR} \
+ OPENCODE_PTY_BIN=${OPENCODE_PTY_BIN} \
+ ${BUN} run script/build.ts \
+ --target=opencode-freebsd-${OPENTUI_ARCH} \
+ --skip-install \
+ --outdir=dist
+ @test -x ${OPENCODE_BIN} || (${ECHO_MSG} "Missing ${OPENCODE_BIN}"; ${FALSE})
+
+do-install:
+ # bun --compile appends the standalone payload to the executable. Stripping
+ # it (the default ${INSTALL_PROGRAM}) discards that payload, leaving a binary
+ # that runs as plain bun, so install it unstripped.
+ ${INSTALL} -m 555 ${OPENCODE_BIN} ${STAGEDIR}${PREFIX}/bin/opencode
+
+do-test:
+ @${ECHO_MSG} "==> Running OpenCode smoke test..."
+ ${STAGEDIR}${PREFIX}/bin/opencode --version
+ @${ECHO_MSG} "==> Checking the fff native library is embedded..."
+ @if ! ${GREP} -aq "crates/fff-c/src" ${STAGEDIR}${PREFIX}/bin/opencode; then \
+ ${ECHO_MSG} "ERROR: the fff native library is not embedded in the binary"; \
+ ${FALSE}; \
+ fi
+ @${ECHO_MSG} "==> Checking the opencode-pty terminal daemon is embedded..."
+ @if ! ${GREP} -aq "libghostty" ${STAGEDIR}${PREFIX}/bin/opencode; then \
+ ${ECHO_MSG} "ERROR: the opencode-pty terminal daemon is not embedded in the binary"; \
+ ${FALSE}; \
+ fi
+
+.include <bsd.port.post.mk>
diff --git a/misc/opencode/Makefile.crates b/misc/opencode/Makefile.crates
new file mode 100644
index 000000000000..0055b2040d21
--- /dev/null
+++ b/misc/opencode/Makefile.crates
@@ -0,0 +1,375 @@
+# Crates.io dependencies of the fff and opencode-pty Cargo.locks (see Makefile).
+# Re-create after bumping FFF_VERSION or OPENCODE_PTY_VERSION with:
+# make cargo-crates-merge # needs ports-mgmt/portfmt
+# or:
+# make cargo-crates > Makefile.crates && make makesum
+CARGO_CRATES=ahash-0.8.12 \
+ aho-corasick-1.1.4 \
+ android_system_properties-0.1.5 \
+ anes-0.1.6 \
+ anstream-1.0.0 \
+ anstyle-1.0.14 \
+ anstyle-parse-1.0.0 \
+ anstyle-query-1.1.5 \
+ anstyle-wincon-3.0.11 \
+ anyhow-1.0.103 \
+ anyhow-1.0.104 \
+ arrayref-0.3.9 \
+ arrayvec-0.7.6 \
+ async-trait-0.1.89 \
+ autocfg-1.5.0 \
+ base64-0.22.1 \
+ bincode-1.3.3 \
+ bindgen-0.72.1 \
+ bitflags-1.3.2 \
+ bitflags-2.11.0 \
+ bitflags-2.13.1 \
+ blake3-1.8.3 \
+ block-buffer-0.10.4 \
+ block2-0.6.2 \
+ bstr-1.12.1 \
+ bumpalo-3.20.2 \
+ byteorder-1.5.0 \
+ bytes-1.11.1 \
+ cast-0.3.0 \
+ cc-1.2.57 \
+ cexpr-0.6.0 \
+ cfg-if-1.0.4 \
+ cfg_aliases-0.1.1 \
+ cfg_aliases-0.2.1 \
+ chrono-0.4.44 \
+ ciborium-0.2.2 \
+ ciborium-io-0.2.2 \
+ ciborium-ll-0.2.2 \
+ clang-sys-1.8.1 \
+ clap-4.6.0 \
+ clap_builder-4.6.0 \
+ clap_derive-4.6.0 \
+ clap_lex-1.1.0 \
+ colorchoice-1.0.5 \
+ constant_time_eq-0.4.2 \
+ core-foundation-sys-0.8.7 \
+ cpufeatures-0.2.17 \
+ criterion-0.5.1 \
+ criterion-plot-0.5.0 \
+ crossbeam-channel-0.5.15 \
+ crossbeam-channel-0.5.16 \
+ crossbeam-deque-0.8.6 \
+ crossbeam-epoch-0.9.20 \
+ crossbeam-queue-0.3.12 \
+ crossbeam-utils-0.8.21 \
+ crossbeam-utils-0.8.22 \
+ crunchy-0.2.4 \
+ crypto-common-0.1.7 \
+ ctor-0.2.9 \
+ ctrlc-3.5.2 \
+ cty-0.2.2 \
+ darling-0.23.0 \
+ darling_core-0.23.0 \
+ darling_macro-0.23.0 \
+ deranged-0.5.8 \
+ digest-0.10.7 \
+ dirs-5.0.1 \
+ dirs-sys-0.4.1 \
+ dispatch2-0.3.1 \
+ displaydoc-0.2.5 \
+ downcast-rs-1.2.1 \
+ doxygen-rs-0.4.2 \
+ dunce-1.0.5 \
+ dyn-clone-1.0.20 \
+ either-1.15.0 \
+ equivalent-1.0.2 \
+ errno-0.3.14 \
+ fastrand-2.3.0 \
+ fff-notify-debouncer-full-0.9.4 \
+ file-id-0.2.3 \
+ filedescriptor-0.8.3 \
+ find-msvc-tools-0.1.9 \
+ fnv-1.0.7 \
+ foldhash-0.1.5 \
+ form_urlencoded-1.2.2 \
+ fs2-0.4.3 \
+ futures-0.3.32 \
+ futures-channel-0.3.32 \
+ futures-core-0.3.32 \
+ futures-executor-0.3.32 \
+ futures-io-0.3.32 \
+ futures-macro-0.3.32 \
+ futures-sink-0.3.32 \
+ futures-task-0.3.32 \
+ futures-util-0.3.32 \
+ generic-array-0.14.7 \
+ getrandom-0.2.17 \
+ getrandom-0.3.4 \
+ getrandom-0.4.2 \
+ git2-0.21.0 \
+ glidesort-0.1.2 \
+ glob-0.3.3 \
+ globset-0.4.18 \
+ half-2.7.1 \
+ hashbrown-0.15.5 \
+ hashbrown-0.16.1 \
+ heck-0.5.0 \
+ heed-0.22.0 \
+ heed-traits-0.20.0 \
+ heed-types-0.21.0 \
+ hermit-abi-0.5.2 \
+ iana-time-zone-0.1.65 \
+ iana-time-zone-haiku-0.1.2 \
+ icu_collections-2.1.1 \
+ icu_locale_core-2.1.1 \
+ icu_normalizer-2.1.1 \
+ icu_normalizer_data-2.1.1 \
+ icu_properties-2.1.2 \
+ icu_properties_data-2.1.2 \
+ icu_provider-2.1.1 \
+ id-arena-2.3.0 \
+ ident_case-1.0.1 \
+ idna-1.1.0 \
+ idna_adapter-1.2.1 \
+ ignore-0.4.25 \
+ indexmap-2.13.0 \
+ indoc-2.0.7 \
+ inotify-0.11.1 \
+ inotify-sys-0.1.5 \
+ is-terminal-0.4.17 \
+ is_terminal_polyfill-1.70.2 \
+ itertools-0.10.5 \
+ itertools-0.13.0 \
+ itoa-1.0.17 \
+ itoa-1.0.18 \
+ jobserver-0.1.34 \
+ js-sys-0.3.91 \
+ kqueue-1.1.1 \
+ kqueue-sys-1.0.4 \
+ lazy_static-1.5.0 \
+ leb128fmt-0.1.0 \
+ libc-0.2.183 \
+ libc-0.2.189 \
+ libgit2-sys-0.18.7+1.9.6 \
+ libloading-0.8.9 \
+ libmimalloc-sys-0.1.44 \
+ libredox-0.1.14 \
+ libz-sys-1.1.25 \
+ linux-raw-sys-0.12.1 \
+ litemap-0.8.1 \
+ lmdb-master-sys-0.2.5 \
+ lock_api-0.4.14 \
+ log-0.4.29 \
+ log-0.4.33 \
+ matchers-0.2.0 \
+ memchr-2.8.0 \
+ memchr-2.8.3 \
+ memmap2-0.9.11 \
+ memoffset-0.9.1 \
+ mimalloc-0.1.48 \
+ minimal-lexical-0.2.1 \
+ mio-1.1.1 \
+ mlua-0.11.6 \
+ mlua-sys-0.10.0 \
+ mlua_derive-0.11.0 \
+ neo_frizbee-0.11.0 \
+ nix-0.28.0 \
+ nix-0.31.2 \
+ nom-7.1.3 \
+ notify-9.0.0-rc.4 \
+ notify-types-2.1.0 \
+ nu-ansi-term-0.50.3 \
+ num-conv-0.2.0 \
+ num-traits-0.2.19 \
+ objc2-0.6.4 \
+ objc2-core-foundation-0.3.2 \
+ objc2-core-services-0.3.2 \
+ objc2-encode-4.1.0 \
+ once_cell-1.21.4 \
+ once_cell_polyfill-1.70.2 \
+ oorandom-11.1.5 \
+ option-ext-0.2.0 \
+ page_size-0.6.0 \
+ parking_lot-0.12.5 \
+ parking_lot_core-0.9.12 \
+ pastey-0.2.1 \
+ pathdiff-0.2.3 \
+ percent-encoding-2.3.2 \
+ phf-0.11.3 \
+ phf_generator-0.11.3 \
+ phf_macros-0.11.3 \
+ phf_shared-0.11.3 \
+ pin-project-lite-0.2.17 \
+ pkg-config-0.3.32 \
+ plotters-0.3.7 \
+ plotters-backend-0.3.7 \
+ plotters-svg-0.3.7 \
+ portable-atomic-1.13.1 \
+ portable-pty-0.9.0 \
+ potential_utf-0.1.4 \
+ powerfmt-0.2.0 \
+ ppv-lite86-0.2.21 \
+ prettyplease-0.2.37 \
+ proc-macro2-1.0.106 \
+ proc-macro2-1.0.107 \
+ proptest-1.11.0 \
+ pyo3-0.24.2 \
+ pyo3-build-config-0.24.2 \
+ pyo3-ffi-0.24.2 \
+ pyo3-macros-0.24.2 \
+ pyo3-macros-backend-0.24.2 \
+ quick-error-1.2.3 \
+ quote-1.0.45 \
+ quote-1.0.47 \
+ r-efi-5.3.0 \
+ r-efi-6.0.0 \
+ rand-0.8.5 \
+ rand-0.9.4 \
+ rand-0.9.5 \
+ rand_chacha-0.3.1 \
+ rand_chacha-0.9.0 \
+ rand_core-0.6.4 \
+ rand_core-0.9.5 \
+ rand_xorshift-0.4.0 \
+ rayon-1.11.0 \
+ rayon-core-1.13.0 \
+ redox_syscall-0.5.18 \
+ redox_users-0.4.6 \
+ ref-cast-1.0.25 \
+ ref-cast-impl-1.0.25 \
+ regex-1.12.3 \
+ regex-automata-0.4.14 \
+ regex-syntax-0.8.10 \
+ rmcp-1.7.0 \
+ rmcp-macros-1.7.0 \
+ rustc-hash-2.1.2 \
+ rustix-1.1.4 \
+ rustversion-1.0.22 \
+ rusty-fork-0.3.1 \
+ same-file-1.0.6 \
+ schemars-1.2.1 \
+ schemars_derive-1.2.1 \
+ scopeguard-1.2.0 \
+ semver-1.0.27 \
+ serde-1.0.228 \
+ serde-1.0.229 \
+ serde_core-1.0.228 \
+ serde_core-1.0.229 \
+ serde_derive-1.0.228 \
+ serde_derive-1.0.229 \
+ serde_derive_internals-0.29.1 \
+ serde_json-1.0.149 \
+ serde_json-1.0.151 \
+ serial2-0.2.38 \
+ sha2-0.10.9 \
+ sharded-slab-0.1.7 \
+ shared_library-0.1.9 \
+ shell-words-1.1.1 \
+ shlex-1.3.0 \
+ signal-hook-registry-1.4.8 \
+ siphasher-1.0.2 \
+ slab-0.4.12 \
+ smallvec-1.15.1 \
+ socket2-0.6.3 \
+ stable_deref_trait-1.2.1 \
+ strsim-0.11.1 \
+ syn-2.0.117 \
+ syn-2.0.119 \
+ syn-3.0.3 \
+ synchronoise-1.0.1 \
+ synstructure-0.13.2 \
+ target-lexicon-0.13.5 \
+ tempfile-3.27.0 \
+ thiserror-1.0.69 \
+ thiserror-2.0.18 \
+ thiserror-impl-1.0.69 \
+ thiserror-impl-2.0.18 \
+ thread_local-1.1.9 \
+ time-0.3.47 \
+ time-core-0.1.8 \
+ time-macros-0.2.27 \
+ tinystr-0.8.2 \
+ tinytemplate-1.2.1 \
+ tokio-1.50.0 \
+ tokio-macros-2.6.1 \
+ tokio-util-0.7.18 \
+ tracing-0.1.44 \
+ tracing-appender-0.2.4 \
+ tracing-attributes-0.1.31 \
+ tracing-core-0.1.36 \
+ tracing-log-0.2.0 \
+ tracing-subscriber-0.3.23 \
+ typenum-1.20.1 \
+ unarray-0.1.4 \
+ unicode-ident-1.0.24 \
+ unicode-xid-0.2.6 \
+ unindent-0.2.4 \
+ url-2.5.8 \
+ utf8_iter-1.0.4 \
+ utf8parse-0.2.2 \
+ valuable-0.1.1 \
+ vcpkg-0.2.15 \
+ version_check-0.9.5 \
+ walkdir-2.5.0 \
+ wasi-0.11.1+wasi-snapshot-preview1 \
+ wasip2-1.0.2+wasi-0.2.9 \
+ wasip2-1.0.4+wasi-0.2.12 \
+ wasip3-0.4.0+wasi-0.3.0-rc-2026-01-06 \
+ wasm-bindgen-0.2.114 \
+ wasm-bindgen-macro-0.2.114 \
+ wasm-bindgen-macro-support-0.2.114 \
+ wasm-bindgen-shared-0.2.114 \
+ wasm-encoder-0.244.0 \
+ wasm-metadata-0.244.0 \
+ wasmparser-0.244.0 \
+ web-sys-0.3.91 \
+ winapi-0.3.9 \
+ winapi-i686-pc-windows-gnu-0.4.0 \
+ winapi-util-0.1.11 \
+ winapi-x86_64-pc-windows-gnu-0.4.0 \
+ windows-core-0.62.2 \
+ windows-implement-0.60.2 \
+ windows-interface-0.59.3 \
+ windows-link-0.2.1 \
+ windows-result-0.4.1 \
+ windows-strings-0.5.1 \
+ windows-sys-0.48.0 \
+ windows-sys-0.60.2 \
+ windows-sys-0.61.2 \
+ windows-targets-0.48.5 \
+ windows-targets-0.53.5 \
+ windows_aarch64_gnullvm-0.48.5 \
+ windows_aarch64_gnullvm-0.53.1 \
+ windows_aarch64_msvc-0.48.5 \
+ windows_aarch64_msvc-0.53.1 \
+ windows_i686_gnu-0.48.5 \
+ windows_i686_gnu-0.53.1 \
+ windows_i686_gnullvm-0.53.1 \
+ windows_i686_msvc-0.48.5 \
+ windows_i686_msvc-0.53.1 \
+ windows_x86_64_gnu-0.48.5 \
+ windows_x86_64_gnu-0.53.1 \
+ windows_x86_64_gnullvm-0.48.5 \
+ windows_x86_64_gnullvm-0.53.1 \
+ windows_x86_64_msvc-0.48.5 \
+ windows_x86_64_msvc-0.53.1 \
+ winreg-0.10.1 \
+ wit-bindgen-0.51.0 \
+ wit-bindgen-0.57.1 \
+ wit-bindgen-core-0.51.0 \
+ wit-bindgen-rust-0.51.0 \
+ wit-bindgen-rust-macro-0.51.0 \
+ wit-component-0.244.0 \
+ wit-parser-0.244.0 \
+ writeable-0.6.2 \
+ xxhash-rust-0.8.15 \
+ yoke-0.8.1 \
+ yoke-derive-0.8.1 \
+ zerocopy-0.8.47 \
+ zerocopy-0.8.56 \
+ zerocopy-derive-0.8.47 \
+ zerocopy-derive-0.8.56 \
+ zerofrom-0.1.6 \
+ zerofrom-derive-0.1.6 \
+ zerotrie-0.2.3 \
+ zerovec-0.11.5 \
+ zerovec-derive-0.11.2 \
+ zlob-1.6.3 \
+ zmij-1.0.21 \
+ zmij-1.0.23
diff --git a/misc/opencode/distinfo b/misc/opencode/distinfo
new file mode 100644
index 000000000000..6be6395e1f58
--- /dev/null
+++ b/misc/opencode/distinfo
@@ -0,0 +1,753 @@
+TIMESTAMP = 1791718697
+SHA256 (opencode/v2.0.32.tar.gz) = d9e080eae0965104dfe3857aabbc8ce976e9aeaa62110ce101bc1a107d243d97
+SIZE (opencode/v2.0.32.tar.gz) = 79782481
+SHA256 (opencode/v0.5.17.tar.gz) = f272f54f96ff230a188c9cf9f593105c6e784f0a14fdbcb7169e523d9c9b7a96
+SIZE (opencode/v0.5.17.tar.gz) = 30017526
+SHA256 (opencode/v0.10.5.tar.gz) = db50fa8aaabb77211f8dbeb4d77dc8852e0ee52070e40bfd9ef5af44ac50accc
+SIZE (opencode/v0.10.5.tar.gz) = 2798793
+SHA256 (opencode/fff-bun-0.10.5.tgz) = 16afa70bcb078c9b28378545396298f73a67fc10e7ff7bba4f9ff1d0462c27f0
+SIZE (opencode/fff-bun-0.10.5.tgz) = 83121
+SHA256 (opencode/v0.2.0.tar.gz) = 7fc1d1ebf4b74cd1b2a83f059afa29a899990b85cf078e73b703004370a52754
+SIZE (opencode/v0.2.0.tar.gz) = 72121
+SHA256 (opencode/ab0b9da9e88fcb4b0533a1854e84628f663930af.tar.gz) = 651ffa67e98060bc41aac04fcab45f71fb9998eb265957d85a89218ecf94d50b
+SIZE (opencode/ab0b9da9e88fcb4b0533a1854e84628f663930af.tar.gz) = 38024504
+SHA256 (opencode/rust/crates/ahash-0.8.12.crate) = 5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75
+SIZE (opencode/rust/crates/ahash-0.8.12.crate) = 43413
+SHA256 (opencode/rust/crates/aho-corasick-1.1.4.crate) = ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301
+SIZE (opencode/rust/crates/aho-corasick-1.1.4.crate) = 184015
+SHA256 (opencode/rust/crates/android_system_properties-0.1.5.crate) = 819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311
+SIZE (opencode/rust/crates/android_system_properties-0.1.5.crate) = 5243
+SHA256 (opencode/rust/crates/anes-0.1.6.crate) = 4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299
+SIZE (opencode/rust/crates/anes-0.1.6.crate) = 23857
+SHA256 (opencode/rust/crates/anstream-1.0.0.crate) = 824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d
+SIZE (opencode/rust/crates/anstream-1.0.0.crate) = 28916
+SHA256 (opencode/rust/crates/anstyle-1.0.14.crate) = 940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000
+SIZE (opencode/rust/crates/anstyle-1.0.14.crate) = 17787
+SHA256 (opencode/rust/crates/anstyle-parse-1.0.0.crate) = 52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e
+SIZE (opencode/rust/crates/anstyle-parse-1.0.0.crate) = 22042
+SHA256 (opencode/rust/crates/anstyle-query-1.1.5.crate) = 40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc
+SIZE (opencode/rust/crates/anstyle-query-1.1.5.crate) = 10264
+SHA256 (opencode/rust/crates/anstyle-wincon-3.0.11.crate) = 291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d
+SIZE (opencode/rust/crates/anstyle-wincon-3.0.11.crate) = 12638
+SHA256 (opencode/rust/crates/anyhow-1.0.103.crate) = 2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3
+SIZE (opencode/rust/crates/anyhow-1.0.103.crate) = 48746
+SHA256 (opencode/rust/crates/anyhow-1.0.104.crate) = 330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470
+SIZE (opencode/rust/crates/anyhow-1.0.104.crate) = 48819
+SHA256 (opencode/rust/crates/arrayref-0.3.9.crate) = 76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb
+SIZE (opencode/rust/crates/arrayref-0.3.9.crate) = 9186
+SHA256 (opencode/rust/crates/arrayvec-0.7.6.crate) = 7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50
+SIZE (opencode/rust/crates/arrayvec-0.7.6.crate) = 31237
+SHA256 (opencode/rust/crates/async-trait-0.1.89.crate) = 9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb
+SIZE (opencode/rust/crates/async-trait-0.1.89.crate) = 32171
+SHA256 (opencode/rust/crates/autocfg-1.5.0.crate) = c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8
+SIZE (opencode/rust/crates/autocfg-1.5.0.crate) = 18729
+SHA256 (opencode/rust/crates/base64-0.22.1.crate) = 72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6
+SIZE (opencode/rust/crates/base64-0.22.1.crate) = 81597
+SHA256 (opencode/rust/crates/bincode-1.3.3.crate) = b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad
+SIZE (opencode/rust/crates/bincode-1.3.3.crate) = 28958
+SHA256 (opencode/rust/crates/bindgen-0.72.1.crate) = 993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895
+SIZE (opencode/rust/crates/bindgen-0.72.1.crate) = 246071
+SHA256 (opencode/rust/crates/bitflags-1.3.2.crate) = bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a
+SIZE (opencode/rust/crates/bitflags-1.3.2.crate) = 23021
+SHA256 (opencode/rust/crates/bitflags-2.11.0.crate) = 843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af
+SIZE (opencode/rust/crates/bitflags-2.11.0.crate) = 48906
+SHA256 (opencode/rust/crates/bitflags-2.13.1.crate) = b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da
+SIZE (opencode/rust/crates/bitflags-2.13.1.crate) = 51395
+SHA256 (opencode/rust/crates/blake3-1.8.3.crate) = 2468ef7d57b3fb7e16b576e8377cdbde2320c60e1491e961d11da40fc4f02a2d
+SIZE (opencode/rust/crates/blake3-1.8.3.crate) = 207224
+SHA256 (opencode/rust/crates/block-buffer-0.10.4.crate) = 3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71
+SIZE (opencode/rust/crates/block-buffer-0.10.4.crate) = 10538
+SHA256 (opencode/rust/crates/block2-0.6.2.crate) = cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5
+SIZE (opencode/rust/crates/block2-0.6.2.crate) = 34505
+SHA256 (opencode/rust/crates/bstr-1.12.1.crate) = 63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab
+SIZE (opencode/rust/crates/bstr-1.12.1.crate) = 354916
+SHA256 (opencode/rust/crates/bumpalo-3.20.2.crate) = 5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb
+SIZE (opencode/rust/crates/bumpalo-3.20.2.crate) = 97696
+SHA256 (opencode/rust/crates/byteorder-1.5.0.crate) = 1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b
+SIZE (opencode/rust/crates/byteorder-1.5.0.crate) = 23288
+SHA256 (opencode/rust/crates/bytes-1.11.1.crate) = 1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33
+SIZE (opencode/rust/crates/bytes-1.11.1.crate) = 78584
+SHA256 (opencode/rust/crates/cast-0.3.0.crate) = 37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5
+SIZE (opencode/rust/crates/cast-0.3.0.crate) = 11452
+SHA256 (opencode/rust/crates/cc-1.2.57.crate) = 7a0dd1ca384932ff3641c8718a02769f1698e7563dc6974ffd03346116310423
+SIZE (opencode/rust/crates/cc-1.2.57.crate) = 96188
+SHA256 (opencode/rust/crates/cexpr-0.6.0.crate) = 6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766
+SIZE (opencode/rust/crates/cexpr-0.6.0.crate) = 17966
+SHA256 (opencode/rust/crates/cfg-if-1.0.4.crate) = 9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801
+SIZE (opencode/rust/crates/cfg-if-1.0.4.crate) = 9360
+SHA256 (opencode/rust/crates/cfg_aliases-0.1.1.crate) = fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e
+SIZE (opencode/rust/crates/cfg_aliases-0.1.1.crate) = 6009
+SHA256 (opencode/rust/crates/cfg_aliases-0.2.1.crate) = 613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724
+SIZE (opencode/rust/crates/cfg_aliases-0.2.1.crate) = 6355
+SHA256 (opencode/rust/crates/chrono-0.4.44.crate) = c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0
+SIZE (opencode/rust/crates/chrono-0.4.44.crate) = 240549
+SHA256 (opencode/rust/crates/ciborium-0.2.2.crate) = 42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e
+SIZE (opencode/rust/crates/ciborium-0.2.2.crate) = 35611
+SHA256 (opencode/rust/crates/ciborium-io-0.2.2.crate) = 05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757
+SIZE (opencode/rust/crates/ciborium-io-0.2.2.crate) = 6697
+SHA256 (opencode/rust/crates/ciborium-ll-0.2.2.crate) = 57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9
+SIZE (opencode/rust/crates/ciborium-ll-0.2.2.crate) = 14695
+SHA256 (opencode/rust/crates/clang-sys-1.8.1.crate) = 0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4
+SIZE (opencode/rust/crates/clang-sys-1.8.1.crate) = 44009
+SHA256 (opencode/rust/crates/clap-4.6.0.crate) = b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351
+SIZE (opencode/rust/crates/clap-4.6.0.crate) = 62930
+SHA256 (opencode/rust/crates/clap_builder-4.6.0.crate) = 714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f
+SIZE (opencode/rust/crates/clap_builder-4.6.0.crate) = 171122
+SHA256 (opencode/rust/crates/clap_derive-4.6.0.crate) = 1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a
+SIZE (opencode/rust/crates/clap_derive-4.6.0.crate) = 33435
+SHA256 (opencode/rust/crates/clap_lex-1.1.0.crate) = c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9
+SIZE (opencode/rust/crates/clap_lex-1.1.0.crate) = 13470
+SHA256 (opencode/rust/crates/colorchoice-1.0.5.crate) = 1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570
+SIZE (opencode/rust/crates/colorchoice-1.0.5.crate) = 8187
+SHA256 (opencode/rust/crates/constant_time_eq-0.4.2.crate) = 3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b
+SIZE (opencode/rust/crates/constant_time_eq-0.4.2.crate) = 25831
+SHA256 (opencode/rust/crates/core-foundation-sys-0.8.7.crate) = 773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b
+SIZE (opencode/rust/crates/core-foundation-sys-0.8.7.crate) = 37712
+SHA256 (opencode/rust/crates/cpufeatures-0.2.17.crate) = 59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280
+SIZE (opencode/rust/crates/cpufeatures-0.2.17.crate) = 13466
+SHA256 (opencode/rust/crates/criterion-0.5.1.crate) = f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f
+SIZE (opencode/rust/crates/criterion-0.5.1.crate) = 110088
+SHA256 (opencode/rust/crates/criterion-plot-0.5.0.crate) = 6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1
+SIZE (opencode/rust/crates/criterion-plot-0.5.0.crate) = 22706
+SHA256 (opencode/rust/crates/crossbeam-channel-0.5.15.crate) = 82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2
+SIZE (opencode/rust/crates/crossbeam-channel-0.5.15.crate) = 92716
+SHA256 (opencode/rust/crates/crossbeam-channel-0.5.16.crate) = d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e
+SIZE (opencode/rust/crates/crossbeam-channel-0.5.16.crate) = 93189
+SHA256 (opencode/rust/crates/crossbeam-deque-0.8.6.crate) = 9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51
+SIZE (opencode/rust/crates/crossbeam-deque-0.8.6.crate) = 22471
+SHA256 (opencode/rust/crates/crossbeam-epoch-0.9.20.crate) = 2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f
+SIZE (opencode/rust/crates/crossbeam-epoch-0.9.20.crate) = 47545
+SHA256 (opencode/rust/crates/crossbeam-queue-0.3.12.crate) = 0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115
+SIZE (opencode/rust/crates/crossbeam-queue-0.3.12.crate) = 16270
+SHA256 (opencode/rust/crates/crossbeam-utils-0.8.21.crate) = d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28
+SIZE (opencode/rust/crates/crossbeam-utils-0.8.21.crate) = 42691
+SHA256 (opencode/rust/crates/crossbeam-utils-0.8.22.crate) = 61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17
+SIZE (opencode/rust/crates/crossbeam-utils-0.8.22.crate) = 46874
+SHA256 (opencode/rust/crates/crunchy-0.2.4.crate) = 460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5
+SIZE (opencode/rust/crates/crunchy-0.2.4.crate) = 3887
+SHA256 (opencode/rust/crates/crypto-common-0.1.7.crate) = 78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a
+SIZE (opencode/rust/crates/crypto-common-0.1.7.crate) = 9619
+SHA256 (opencode/rust/crates/ctor-0.2.9.crate) = 32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501
+SIZE (opencode/rust/crates/ctor-0.2.9.crate) = 11032
+SHA256 (opencode/rust/crates/ctrlc-3.5.2.crate) = e0b1fab2ae45819af2d0731d60f2afe17227ebb1a1538a236da84c93e9a60162
+SIZE (opencode/rust/crates/ctrlc-3.5.2.crate) = 14194
+SHA256 (opencode/rust/crates/cty-0.2.2.crate) = b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35
+SIZE (opencode/rust/crates/cty-0.2.2.crate) = 7230
+SHA256 (opencode/rust/crates/darling-0.23.0.crate) = 25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d
+SIZE (opencode/rust/crates/darling-0.23.0.crate) = 43298
+SHA256 (opencode/rust/crates/darling_core-0.23.0.crate) = 9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0
+SIZE (opencode/rust/crates/darling_core-0.23.0.crate) = 74564
+SHA256 (opencode/rust/crates/darling_macro-0.23.0.crate) = ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d
+SIZE (opencode/rust/crates/darling_macro-0.23.0.crate) = 2480
+SHA256 (opencode/rust/crates/deranged-0.5.8.crate) = 7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c
+SIZE (opencode/rust/crates/deranged-0.5.8.crate) = 26885
+SHA256 (opencode/rust/crates/digest-0.10.7.crate) = 9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292
+SIZE (opencode/rust/crates/digest-0.10.7.crate) = 19557
+SHA256 (opencode/rust/crates/dirs-5.0.1.crate) = 44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225
+SIZE (opencode/rust/crates/dirs-5.0.1.crate) = 12255
+SHA256 (opencode/rust/crates/dirs-sys-0.4.1.crate) = 520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c
+SIZE (opencode/rust/crates/dirs-sys-0.4.1.crate) = 10719
+SHA256 (opencode/rust/crates/dispatch2-0.3.1.crate) = 1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38
+SIZE (opencode/rust/crates/dispatch2-0.3.1.crate) = 55299
+SHA256 (opencode/rust/crates/displaydoc-0.2.5.crate) = 97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0
+SIZE (opencode/rust/crates/displaydoc-0.2.5.crate) = 24219
+SHA256 (opencode/rust/crates/downcast-rs-1.2.1.crate) = 75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2
+SIZE (opencode/rust/crates/downcast-rs-1.2.1.crate) = 11821
+SHA256 (opencode/rust/crates/doxygen-rs-0.4.2.crate) = 415b6ec780d34dcf624666747194393603d0373b7141eef01d12ee58881507d9
+SIZE (opencode/rust/crates/doxygen-rs-0.4.2.crate) = 15907
+SHA256 (opencode/rust/crates/dunce-1.0.5.crate) = 92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813
+SIZE (opencode/rust/crates/dunce-1.0.5.crate) = 8244
+SHA256 (opencode/rust/crates/dyn-clone-1.0.20.crate) = d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555
+SIZE (opencode/rust/crates/dyn-clone-1.0.20.crate) = 13134
+SHA256 (opencode/rust/crates/either-1.15.0.crate) = 48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719
+SIZE (opencode/rust/crates/either-1.15.0.crate) = 20114
+SHA256 (opencode/rust/crates/equivalent-1.0.2.crate) = 877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f
+SIZE (opencode/rust/crates/equivalent-1.0.2.crate) = 7419
+SHA256 (opencode/rust/crates/errno-0.3.14.crate) = 39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb
+SIZE (opencode/rust/crates/errno-0.3.14.crate) = 12002
+SHA256 (opencode/rust/crates/fastrand-2.3.0.crate) = 37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be
+SIZE (opencode/rust/crates/fastrand-2.3.0.crate) = 15076
+SHA256 (opencode/rust/crates/fff-notify-debouncer-full-0.9.4.crate) = 29a4ebea7b8a2840cd59358bbf396f6f04313ce8eae84ac79703ce80298b8731
+SIZE (opencode/rust/crates/fff-notify-debouncer-full-0.9.4.crate) = 34298
+SHA256 (opencode/rust/crates/file-id-0.2.3.crate) = e1fc6a637b6dc58414714eddd9170ff187ecb0933d4c7024d1abbd23a3cc26e9
+SIZE (opencode/rust/crates/file-id-0.2.3.crate) = 10148
+SHA256 (opencode/rust/crates/filedescriptor-0.8.3.crate) = e40758ed24c9b2eeb76c35fb0aebc66c626084edd827e07e1552279814c6682d
+SIZE (opencode/rust/crates/filedescriptor-0.8.3.crate) = 12635
+SHA256 (opencode/rust/crates/find-msvc-tools-0.1.9.crate) = 5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582
+SIZE (opencode/rust/crates/find-msvc-tools-0.1.9.crate) = 31493
+SHA256 (opencode/rust/crates/fnv-1.0.7.crate) = 3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1
+SIZE (opencode/rust/crates/fnv-1.0.7.crate) = 11266
+SHA256 (opencode/rust/crates/foldhash-0.1.5.crate) = d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2
+SIZE (opencode/rust/crates/foldhash-0.1.5.crate) = 21901
+SHA256 (opencode/rust/crates/form_urlencoded-1.2.2.crate) = cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf
+SIZE (opencode/rust/crates/form_urlencoded-1.2.2.crate) = 9347
+SHA256 (opencode/rust/crates/fs2-0.4.3.crate) = 9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213
+SIZE (opencode/rust/crates/fs2-0.4.3.crate) = 13138
+SHA256 (opencode/rust/crates/futures-0.3.32.crate) = 8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d
+SIZE (opencode/rust/crates/futures-0.3.32.crate) = 61234
+SHA256 (opencode/rust/crates/futures-channel-0.3.32.crate) = 07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d
+SIZE (opencode/rust/crates/futures-channel-0.3.32.crate) = 33213
+SHA256 (opencode/rust/crates/futures-core-0.3.32.crate) = 7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d
+SIZE (opencode/rust/crates/futures-core-0.3.32.crate) = 14684
+SHA256 (opencode/rust/crates/futures-executor-0.3.32.crate) = baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d
+SIZE (opencode/rust/crates/futures-executor-0.3.32.crate) = 18581
+SHA256 (opencode/rust/crates/futures-io-0.3.32.crate) = cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718
+SIZE (opencode/rust/crates/futures-io-0.3.32.crate) = 9191
+SHA256 (opencode/rust/crates/futures-macro-0.3.32.crate) = e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b
+SIZE (opencode/rust/crates/futures-macro-0.3.32.crate) = 11929
+SHA256 (opencode/rust/crates/futures-sink-0.3.32.crate) = c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893
+SIZE (opencode/rust/crates/futures-sink-0.3.32.crate) = 8106
+SHA256 (opencode/rust/crates/futures-task-0.3.32.crate) = 037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393
+SIZE (opencode/rust/crates/futures-task-0.3.32.crate) = 11377
+SHA256 (opencode/rust/crates/futures-util-0.3.32.crate) = 389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6
+SIZE (opencode/rust/crates/futures-util-0.3.32.crate) = 168797
+SHA256 (opencode/rust/crates/generic-array-0.14.7.crate) = 85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a
+SIZE (opencode/rust/crates/generic-array-0.14.7.crate) = 15950
+SHA256 (opencode/rust/crates/getrandom-0.2.17.crate) = ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0
+SIZE (opencode/rust/crates/getrandom-0.2.17.crate) = 40780
+SHA256 (opencode/rust/crates/getrandom-0.3.4.crate) = 899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd
+SIZE (opencode/rust/crates/getrandom-0.3.4.crate) = 50932
+SHA256 (opencode/rust/crates/getrandom-0.4.2.crate) = 0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555
+SIZE (opencode/rust/crates/getrandom-0.4.2.crate) = 53905
+SHA256 (opencode/rust/crates/git2-0.21.0.crate) = ddddbf932745a6be37109b6112d3ee09696106f848449069d3a57bba937ab82e
+SIZE (opencode/rust/crates/git2-0.21.0.crate) = 242222
+SHA256 (opencode/rust/crates/glidesort-0.1.2.crate) = f2e102e6eb644d3e0b186fc161e4460417880a0a0b87d235f2e5b8fb30f2e9e0
+SIZE (opencode/rust/crates/glidesort-0.1.2.crate) = 33672
+SHA256 (opencode/rust/crates/glob-0.3.3.crate) = 0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280
+SIZE (opencode/rust/crates/glob-0.3.3.crate) = 22861
+SHA256 (opencode/rust/crates/globset-0.4.18.crate) = 52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3
+SIZE (opencode/rust/crates/globset-0.4.18.crate) = 28970
+SHA256 (opencode/rust/crates/half-2.7.1.crate) = 6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b
+SIZE (opencode/rust/crates/half-2.7.1.crate) = 61040
+SHA256 (opencode/rust/crates/hashbrown-0.15.5.crate) = 9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1
+SIZE (opencode/rust/crates/hashbrown-0.15.5.crate) = 140908
+SHA256 (opencode/rust/crates/hashbrown-0.16.1.crate) = 841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100
+SIZE (opencode/rust/crates/hashbrown-0.16.1.crate) = 147785
+SHA256 (opencode/rust/crates/heck-0.5.0.crate) = 2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea
+SIZE (opencode/rust/crates/heck-0.5.0.crate) = 11517
+SHA256 (opencode/rust/crates/heed-0.22.0.crate) = 6a56c94661ddfb51aa9cdfbf102cfcc340aa69267f95ebccc4af08d7c530d393
+SIZE (opencode/rust/crates/heed-0.22.0.crate) = 75150
+SHA256 (opencode/rust/crates/heed-traits-0.20.0.crate) = eb3130048d404c57ce5a1ac61a903696e8fcde7e8c2991e9fcfc1f27c3ef74ff
+SIZE (opencode/rust/crates/heed-traits-0.20.0.crate) = 3108
+SHA256 (opencode/rust/crates/heed-types-0.21.0.crate) = 13c255bdf46e07fb840d120a36dcc81f385140d7191c76a7391672675c01a55d
+SIZE (opencode/rust/crates/heed-types-0.21.0.crate) = 4898
+SHA256 (opencode/rust/crates/hermit-abi-0.5.2.crate) = fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c
+SIZE (opencode/rust/crates/hermit-abi-0.5.2.crate) = 17435
+SHA256 (opencode/rust/crates/iana-time-zone-0.1.65.crate) = e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470
+SIZE (opencode/rust/crates/iana-time-zone-0.1.65.crate) = 34079
+SHA256 (opencode/rust/crates/iana-time-zone-haiku-0.1.2.crate) = f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f
+SIZE (opencode/rust/crates/iana-time-zone-haiku-0.1.2.crate) = 7185
+SHA256 (opencode/rust/crates/icu_collections-2.1.1.crate) = 4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43
+SIZE (opencode/rust/crates/icu_collections-2.1.1.crate) = 87233
+SHA256 (opencode/rust/crates/icu_locale_core-2.1.1.crate) = edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6
+SIZE (opencode/rust/crates/icu_locale_core-2.1.1.crate) = 70876
+SHA256 (opencode/rust/crates/icu_normalizer-2.1.1.crate) = 5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599
+SIZE (opencode/rust/crates/icu_normalizer-2.1.1.crate) = 67132
+SHA256 (opencode/rust/crates/icu_normalizer_data-2.1.1.crate) = 7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a
+SIZE (opencode/rust/crates/icu_normalizer_data-2.1.1.crate) = 68649
+SHA256 (opencode/rust/crates/icu_properties-2.1.2.crate) = 020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec
+SIZE (opencode/rust/crates/icu_properties-2.1.2.crate) = 60136
+SHA256 (opencode/rust/crates/icu_properties_data-2.1.2.crate) = 616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af
+SIZE (opencode/rust/crates/icu_properties_data-2.1.2.crate) = 163057
+SHA256 (opencode/rust/crates/icu_provider-2.1.1.crate) = 85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614
+SIZE (opencode/rust/crates/icu_provider-2.1.1.crate) = 50907
+SHA256 (opencode/rust/crates/id-arena-2.3.0.crate) = 3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954
+SIZE (opencode/rust/crates/id-arena-2.3.0.crate) = 12883
+SHA256 (opencode/rust/crates/ident_case-1.0.1.crate) = b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39
+SIZE (opencode/rust/crates/ident_case-1.0.1.crate) = 3492
+SHA256 (opencode/rust/crates/idna-1.1.0.crate) = 3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de
+SIZE (opencode/rust/crates/idna-1.1.0.crate) = 148747
+SHA256 (opencode/rust/crates/idna_adapter-1.2.1.crate) = 3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344
+SIZE (opencode/rust/crates/idna_adapter-1.2.1.crate) = 10389
+SHA256 (opencode/rust/crates/ignore-0.4.25.crate) = d3d782a365a015e0f5c04902246139249abf769125006fbe7649e2ee88169b4a
+SIZE (opencode/rust/crates/ignore-0.4.25.crate) = 59154
+SHA256 (opencode/rust/crates/indexmap-2.13.0.crate) = 7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017
+SIZE (opencode/rust/crates/indexmap-2.13.0.crate) = 102206
+SHA256 (opencode/rust/crates/indoc-2.0.7.crate) = 79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706
+SIZE (opencode/rust/crates/indoc-2.0.7.crate) = 17184
+SHA256 (opencode/rust/crates/inotify-0.11.1.crate) = bd5b3eaf1a28b758ac0faa5a4254e8ab2705605496f1b1f3fbbc3988ad73d199
+SIZE (opencode/rust/crates/inotify-0.11.1.crate) = 29364
+SHA256 (opencode/rust/crates/inotify-sys-0.1.5.crate) = e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb
+SIZE (opencode/rust/crates/inotify-sys-0.1.5.crate) = 6965
+SHA256 (opencode/rust/crates/is-terminal-0.4.17.crate) = 3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46
+SIZE (opencode/rust/crates/is-terminal-0.4.17.crate) = 7458
+SHA256 (opencode/rust/crates/is_terminal_polyfill-1.70.2.crate) = a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695
+SIZE (opencode/rust/crates/is_terminal_polyfill-1.70.2.crate) = 7548
+SHA256 (opencode/rust/crates/itertools-0.10.5.crate) = b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473
+SIZE (opencode/rust/crates/itertools-0.10.5.crate) = 115354
+SHA256 (opencode/rust/crates/itertools-0.13.0.crate) = 413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186
+SIZE (opencode/rust/crates/itertools-0.13.0.crate) = 146261
+SHA256 (opencode/rust/crates/itoa-1.0.17.crate) = 92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2
+SIZE (opencode/rust/crates/itoa-1.0.17.crate) = 15905
+SHA256 (opencode/rust/crates/itoa-1.0.18.crate) = 8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682
+SIZE (opencode/rust/crates/itoa-1.0.18.crate) = 15935
+SHA256 (opencode/rust/crates/jobserver-0.1.34.crate) = 9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33
+SIZE (opencode/rust/crates/jobserver-0.1.34.crate) = 29013
+SHA256 (opencode/rust/crates/js-sys-0.3.91.crate) = b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c
+SIZE (opencode/rust/crates/js-sys-0.3.91.crate) = 91416
+SHA256 (opencode/rust/crates/kqueue-1.1.1.crate) = eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a
+SIZE (opencode/rust/crates/kqueue-1.1.1.crate) = 21504
+SHA256 (opencode/rust/crates/kqueue-sys-1.0.4.crate) = ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b
+SIZE (opencode/rust/crates/kqueue-sys-1.0.4.crate) = 7160
+SHA256 (opencode/rust/crates/lazy_static-1.5.0.crate) = bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe
+SIZE (opencode/rust/crates/lazy_static-1.5.0.crate) = 14025
+SHA256 (opencode/rust/crates/leb128fmt-0.1.0.crate) = 09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2
+SIZE (opencode/rust/crates/leb128fmt-0.1.0.crate) = 14138
+SHA256 (opencode/rust/crates/libc-0.2.183.crate) = b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d
+SIZE (opencode/rust/crates/libc-0.2.183.crate) = 816918
+SHA256 (opencode/rust/crates/libc-0.2.189.crate) = 3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2
+SIZE (opencode/rust/crates/libc-0.2.189.crate) = 851502
+SHA256 (opencode/rust/crates/libgit2-sys-0.18.7+1.9.6.crate) = 23c7391e4b9f4ffab1a624223cc1d7385ff9a678f490768add717de7ea2f4d89
+SIZE (opencode/rust/crates/libgit2-sys-0.18.7+1.9.6.crate) = 1961742
+SHA256 (opencode/rust/crates/libloading-0.8.9.crate) = d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55
+SIZE (opencode/rust/crates/libloading-0.8.9.crate) = 30222
+SHA256 (opencode/rust/crates/libmimalloc-sys-0.1.44.crate) = 667f4fec20f29dfc6bc7357c582d91796c169ad7e2fce709468aefeb2c099870
+SIZE (opencode/rust/crates/libmimalloc-sys-0.1.44.crate) = 451625
+SHA256 (opencode/rust/crates/libredox-0.1.14.crate) = 1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a
+SIZE (opencode/rust/crates/libredox-0.1.14.crate) = 9536
+SHA256 (opencode/rust/crates/libz-sys-1.1.25.crate) = d52f4c29e2a68ac30c9087e1b772dc9f44a2b66ed44edf2266cf2be9b03dafc1
+SIZE (opencode/rust/crates/libz-sys-1.1.25.crate) = 880435
+SHA256 (opencode/rust/crates/linux-raw-sys-0.12.1.crate) = 32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53
+SIZE (opencode/rust/crates/linux-raw-sys-0.12.1.crate) = 3006116
+SHA256 (opencode/rust/crates/litemap-0.8.1.crate) = 6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77
+SIZE (opencode/rust/crates/litemap-0.8.1.crate) = 34172
+SHA256 (opencode/rust/crates/lmdb-master-sys-0.2.5.crate) = 864808e0b19fb6dd3b70ba94ee671b82fce17554cf80aeb0a155c65bb08027df
*** 981 LINES SKIPPED ***