extract_keys.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #!/usr/bin/env python3
  2. """Extract specific keys from Local Storage with full values and JSON pretty-print.
  3. Usage:
  4. python extract_keys.py <leveldb-dir> <key1> [key2] [key3] ...
  5. Latest-wins per key. JSON-decodes values when possible.
  6. """
  7. import argparse
  8. import json
  9. import pathlib
  10. import sys
  11. from ccl_chromium_reader import ccl_chromium_localstorage
  12. def main() -> int:
  13. ap = argparse.ArgumentParser(description=__doc__)
  14. ap.add_argument("path", type=pathlib.Path)
  15. ap.add_argument("keys", nargs="+", help="script_keys to extract (exact match)")
  16. ap.add_argument("--origin", default="https://claude.ai", help="Origin to scan")
  17. args = ap.parse_args()
  18. ls = ccl_chromium_localstorage.LocalStoreDb(args.path)
  19. latest: dict = {}
  20. for rec in ls.iter_records_for_storage_key(args.origin):
  21. if rec.script_key in args.keys:
  22. latest[rec.script_key] = rec.value
  23. for k in args.keys:
  24. v = latest.get(k)
  25. print(f"\n=== {k} ===")
  26. if v is None:
  27. print(" (not found)")
  28. continue
  29. size = len(v) if isinstance(v, str) else 0
  30. print(f" size: {size} bytes")
  31. try:
  32. parsed = json.loads(v)
  33. print(json.dumps(parsed, indent=2))
  34. except (json.JSONDecodeError, TypeError):
  35. print(repr(v))
  36. return 0
  37. if __name__ == "__main__":
  38. sys.exit(main())