subscription remove/update, collection add/remove, entry mark-read/unread,
feed refresh and list update/delete/remove-feed printed response.data,
which those responses never carry, so they printed no data at all. They
now print the fields the API sends, { lastSyncId } or {}.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The export endpoint answers with raw XML, not the JSON the SDK types, so
`folo opml export` printed an empty object and `--output` failed with an
undefined data error. The CLI now reads the response as text, prints or
saves it, and names it folo.opml when --output is a directory.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The CLI wrote its token with the default permissions, readable by other
users, and wrote the file in place, so a write interrupted or racing the
desktop app's sync left truncated JSON. Every command, login and logout
included, then failed to parse it until the file was deleted by hand.
Write into a directory and file only the user can read, replace the
file in one step, and treat an unreadable config as empty with a hint.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
collection list returned the last entry's publish date as the next
cursor, but the server pages collections by when they were collected,
so following the cursor after an old article skipped or repeated
collected entries. Use the collection time, as the app does.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>