Skip to content

otaku 0.1.2

Choose a tag to compare

@enclavum enclavum released this 06 Jul 18:46
· 132 commits to main since this release

Hardening release: complete state-dir isolation, never-overwrite key handling, and REPL quality-of-life.

Fixed

  • OTAKU_CONFIG_DIR is now fully isolated. Previously a custom state dir
    wrote a config pointing at the default ~/.otaku/history.db, and — much
    worse — its first run replaced the shared OS-keychain key, making the
    primary setup's history permanently undecryptable. Each dir now gets its own
    default database and its own keychain item; the default ~/.otaku keeps the
    legacy item name, so existing installs keep unlocking.
  • Unlock failures no longer stutter ("Could not unlock encryption key: could
    not unlock…") and a key mismatch is spelled out instead of surfacing as an
    empty error.
  • /remember no longer risks dropping other models' saved defaults when
    model_defaults.json is corrupt — it refuses instead, and writes atomically.

Changed

  • Key setup never overwrites anything. Provisioning reuses an existing
    keychain or retrieve_command key instead of replacing it, keychain writes
    are add-only, and keys.json is created exclusively — so deleting
    keys.json no longer burns the key, and a restored backup keeps working.
    A stray pre-envelope history.key is left in place rather than deleted.
  • Bare otaku unlocks encryption before the model picker, so interactive
    key ceremonies (passphrase, command providers) happen up front.
  • /history rows fall back title → summary → first prompt.
  • Config paths in notices are shown ~-shortened; shorter -nr banner.

Added

  • /model remembers the switched-to model as the last used one (the picker
    preselects it next time).
  • [defaults].verbose — set the stats line globally (a session-wide UI
    preference; deliberately not per-model, so /remember doesn't pin it).