fix(task-9): address review findings for JetstreamConsumer
Fix 1 (Important): Test 13 now actually exercises the reconnect path by
adding a `reconnectDelay` seam to JetstreamConsumerDeps (defaults to a
real setTimeout-based delay, overridable in tests with instant resolve).
The test drives a full reconnect cycle and asserts URL[1] uses
`lastFlushedCursor` (200), not `pendingCursor` (300).
Fix 2 (Minor): Extract cursor read/write into `jetstream_cursor_io.ts`
so they're testable without importing from a commands/ file. `readCursor`
uses `knexRawQuery(...).options({ safeIntegers: true })` so better-sqlite3
returns INTEGER as BigInt. `writeCursor` passes the BigInt binding directly
(not `.toString()`). Adds a round-trip test verifying 2^60+42 survives
the write/read cycle without precision loss.
Fix 3 (Minor): Rename `cursorRefreshTimer` → `didRefreshTimer` — it has
nothing to do with cursors; it refreshes the tracked-DID set.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>