289cc19325
The shared SQLite model cache wrapped every read/write in a blanket catch that swallowed unrecoverable SQLITE_CORRUPT*/SQLITE_NOTADB failures as best-effort misses, and getSharedDb cached the broken handle. A physically corrupt models.db therefore permanently disabled cached catalogs across processes: a successful live discovery could never overwrite the corrupt cache, so a runtime extension with no bundled catalog was stuck with only its bootstrap model. On those unrecoverable codes the cache now self-heals: close the handle, quarantine models.db(+-wal/-shm) to models.db.corrupt-<ts>, recreate a fresh database, and retry the operation once. SQLITE_BUSY, permission, and unrelated errors keep their existing best-effort paths. The SQLITE_BUSY/corruption classifiers moved to @oh-my-pi/pi-utils so the credential store and model cache share one implementation. Fixes #8867
@oh-my-pi/pi-utils
Shared utilities for oh-my-pi packages. Zero ceremony, Bun-first.
Notable modules
| Module | Purpose |
|---|---|
logger |
Centralized logger writing to ~/.omp/logs/ with rotation (TUI-safe — never stdout) |
prompt |
Handlebars-based prompt templating and formatting helpers |
dirs |
Path helpers for omp config directories (~/.omp, XDG-aware on Linux) |
stream |
readStream / readLines helpers over ReadableStream |
ptree / procmgr |
Process trees, ChildProcess wrapper, process lifecycle management |
postmortem |
Cleanup callbacks on exit, signals, and fatal exceptions |
which |
$which() binary lookup with caching |
fetch-retry |
fetch with retry/backoff policies |
fs-error |
Errno guards (isEnoent and friends) |
env / worker-host |
Environment plumbing and side-effect-free worker-host entry contract (workerHostEntry) |
abortable / async |
AbortSignal-aware stream/promise helpers |
peek-file |
Read the first N bytes of a file with pooled buffers |
frontmatter, glob, mime, temp, format, color, snowflake, tab-spacing, path-tree, sanitize-text |
Smaller single-purpose helpers |
Import from the root barrel or per-module subpaths (@oh-my-pi/pi-utils/<module>).
Install
bun add @oh-my-pi/pi-utils
Ships TypeScript source directly (no build step); requires Bun ≥ 1.3.14.