✨ feat(device): add @lobechat/device-identity (stable machine-derived deviceId)
New shared package: `deriveDeviceId` hashes the OS machine id with the userId
(+ salt) so one machine + one user → one stable, user-scoped deviceId that
survives LobeHub reinstalls. Falls back to a caller-supplied random UUID (flagged
via `identitySource: 'fallback'`) when the machine id is unavailable.
Foundational layer — no consumers yet; desktop/CLI wire it up in a later PR.
Part of LOBE-9572. Closes LOBE-9574.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>