docs: auto-register disk pieces via filesystem scan
docs.js now walks disks/ at cold start and synthesizes entries for
every .mjs / .lisp not already in the curated `pieces` map. Pieces
that export `meta()` are listed (hidden:false); others are registered
hidden but still resolvable at /docs/pieces:<name>. Curated entries
always win over auto-entries. Description is extracted from the piece
header comment. Cache is lifetime-of-process in prod, per-request in
dev. Closes the "new piece appears in list/autocomplete with no manual
docs.js edit" gap — this surfaces ~170 existing pieces that export
meta but lacked curated entries; to suppress, add `hidden: true` to
their curated entry.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>