Repository navigation
Releases
Releases · WireCatLabs/drive-cli
0.69.0
Changed — may break callers
- A
readonlylevel no longer stopsdrive sync(cli-core 0.662.0, was 0.656.0). A command that only fetches
from Google Drive into the local store runs atreadonly: the profile's own key, a group key or setup's "read
only" answer.denystill refuses it. Commands that write the owner's files or change Google data stay blocked by
readonly. A profile that usedreadonlyto stop syncing sets the key todeny. See the
cli-core changelog.
Fixed
- A shared config with a small slip is mended when it is read.
~/.config/WireCat/config.jsonwith a
byte-order mark, a comment, a trailing comma or a missing comma between two lines is fixed in place, the old file
kept beside it asconfig.json.bak-<time>. Other damage names its line, column and the likely fix.
0.68.0
Changed — may break callers
- Built on cli-core 0.656.0 (was 0.652.0). See the
cli-core changelog.
Fixed
- Sync runs on a fresh install. A shared WireCat config (
~/.config/WireCat/config.json) that could not be
read (a byte-order mark, broken JSON, a folder in its place, an oldersetupshape) made every WireCat tool
read-only and refusedsync. Now only the owner's own "read only" answer limits a tool, and even then a sync runs:
it only reads Google into the local store. drive's own policy check lets it through too (cli-core 0.656.0).
0.67.0
Added
- Google Meet transcripts and Gemini notes, wherever they sit.
drive <profile> transcripts listlists the
Google Docs named like a Meet transcript or Gemini notes in your Drive and among the files shared with you (most
live in the organizer's Drive), and imports nothing. The profile settingtranscriptsdecides what sync does:
includeimports them like a chosen folder and keeps them up to date,excludeleaves them out even inside a
chosen folder, andskipor unset leaves them alone.transcript_wordsreplaces the words that find them.
Changed — may break callers
- Built on cli-core 0.652.0 (was 0.650.0) and cli-base 0.99.0. No store change. A stale meeting project
fingerprint is nowconflict(reasonmeeting-project.stale), notconfiguration_error. A mistyped profile in
DRIVE_PROFILElists the profiles here, andsession startkeeps the provider's refusal for a new profile.
doctor reports creategives a pre-filled issue link. The first screen listspbx, the Asterisk tool. Sync takes a
saved query beside the chosen folders, and a Meet transcript that Drive also imported is one search hit. What
changed is in cli-core's changelog.
Security
contracts/wirecat.jsonlists the hosts the shared packages reach:registry.npmjs.org(the update check),
Hugging Face (huggingface.co,*.huggingface.co,*.hf.co) and GitHub (github.com,
*.githubusercontent.com) for the local models. WireCat Desktop shows them before install.
0.66.0
Changed — may break callers
- Built on cli-core 0.650.0 (was 0.634.0). The store moves to version 66 on first open (a person's kind and
name order are worked out again; additive). Model calls follow memo's "local only" switch (models local-only set on), send to a plainhttpmodel address only on this computer, and reach only their own host. A profile with no
saved sign-in fails withsession.missing(wasoauth.missing), and a profile name that is not on this computer
withnot_found(exit 6,profile.unknown; wasvalidation_error).doctor reportswrites a problem report to
send;store resetis no longer offered to an agent over MCP. What changed is in
cli-core's changelog. meta.run_idnames the run thatdrive runs showfinds (20261112T121302Z-documents-list-7dfb77), as in
every other WireCat CLI. It was a random UUID that matched no saved run.drive completeis the shared WireCat completion command. The same shells (zsh, bash, fish, PowerShell) and
the same Tab answers; its help text is the shared one, and it now reads the configured profile names.
Fixed
doctor --helpshows its Returns and Example again, anddoctor reportssays what it returns.- The docs say where tokens go when the keyring fails. drive saves them in
credentials.json(mode 600) in the
configuration folder and warns once; the configuration and security pages said there was no such fallback.
Security
- drive reaches only the Google hosts it declares. Every request of the Google SDK, the sign-in and the token
refresh goes through cli-base'shostFetch, which refuses any other host before anything is sent and checks each
redirect. The package now shipscontracts/wirecat.json, so WireCat Desktop shows these hosts before install.
0.65.0
Added
drive documents add <url> --profiles <a,b|all>keeps one Drive document's text in the shared store as a
source added by hand, for memo's "Add to memory". It tries the named profiles in order, at most five (the
max_add_profilessetting changes that), and says which one opened the document and what refused the others;
drive <profile> documents add <url>reads with that profile only.--titleand--subjectname it and what it
is about. A file a sync already imported is answered asduplicate_of. Not available over MCP.- Known limit: adding the same file again after it changed keeps a second copy; the first is not replaced yet.
- A pull request adds its changelog entries as a fragment,
changes/<branch>.md. Open pull requests no longer
conflict under## Unreleased.pnpm docs:checkchecks each fragment, andbin/releasecollects them into the
version's section. An entry under## Unreleasedstill works during the move.
Changed — may break callers
- Built on cli-core 0.634.0 (was 0.614.0). The store moves to version 64 on first open (people ties, stored
person kinds, faster deal-link triggers; additive). With it, a document owner's link is filed as Drive's report.
What changed in between is in cli-core's changelog. schedule pause <name>andschedule resume <name>take a schedule off its timer and keep it;schedule run
still runs it.--atrepeats:--at 08:30 --at 18:00runs twice a day.
Fixed
- A document's owner and last editor no longer land in your memory or its review.
synclinks a document to the
owner Drive names as Drive's report (reported, the way a CRM's links are), not as a proposal and not as your own
confirmed memory, with the reason in words ("Google Drive lists this person as the document's owner, version 68,
changed 2026-11-02") instead of the raw Drive record. The last editor gets no link and stays in the document's
metadata. Each import replaces every owner and last-editor link the document had, proposed or confirmed, so the next
sync(ordrive <profile> catalog import --offline) clears the ones already stored.relationships list confirmed:trueno longer lists a document's owner. - A spent Google quota (
dailyLimitExceeded,quotaExceeded) is a rate limit, not a permission refusal.
syncand every other command now answer it asrate_limited, which says to retry, instead of
permission_error.
0.64.0
Added
drive <profile> account remove --keep-data|--delete-dataremoves a profile from this computer: it revokes the
Google sign-in at Google, deletes the saved sign-in, forgets the profile in the settings and, with--delete-data,
deletes its document snapshots and exports.--keep-dataleaves them searchable. Your mirror folders are never
touched, and other profiles stay as they are.session endstill only forgets the local sign-in.
Fixed
- Updated cli-base to 0.82.0, which names
browseas a verb, sofolders browseneeds no naming exception.
0.63.0
Changed — may break callers
- drive now writes the shared store at version 57, and an older WireCat CLI refuses it until it is upgraded.
A memo, mail or other WireCat CLI on the same store reads it again once it is updated too: run<cli> upgrade
for each. The other way round matters more: a memo already on the new store version stopped this drive from
opening it, and this release reads it again. memories add --supersedesretires the old memory only once the owner confirms the correction. drive writes
every memoryproposed, so the old memory stays in effect until then.
Fixed
- Updated cli-core to 0.608.0.
0.62.0
Added
folders browse [--parent <id>]lists your Google Drive folders one level at a time, so you can pick one for
folders addwithout copying its URL. With no--parentit lists My Drive, Shared with me and every shared drive;
with one it lists the folders directly inside. Each folder says where it lives, how many folders it holds and
whether sync already imports it. It only reads Drive, with the read-only sign-in you already have.
Changed — may break callers
- A profile with no saved sign-in now fails with
oauth.missinginstead ofoauth.expired, so a caller can tell
"sign in" from "sign in again". Both still say to runsession start.
Fixed
- Updated cli-core to 0.604.0.
0.61.0
Added
session start --client-id <id>and thegoogle_client_idsetting choose your own Google app (WC-SECR-25):
--client-fileor--client-id, thenDRIVE_GOOGLE_CLIENT_ID, then the profile's or the defaults'
google_client_id, then WireCat's app. The secret comes fromDRIVE_GOOGLE_CLIENT_SECRET, never the settings file,
andsession startwarns before the browser opens when your app has none.doctorreports"source": "config"
for the defaults' setting. An agent over MCP cannot changegoogle_client_id.
Fixed
files downloadandfiles exportstream to disk, so large files download. Files over 50 MB failed with
provider_unavailablebecause the whole file was read into memory. The bytes now go to a temporary file next to
--output, which replaces the target only when the download is complete. There is no size limit; a download stops
only after a minute with no data.- The Google sign-in notes no longer describe WireCat's review status. They say that making a shared Google app
public for Drive is complex, so Google may refuse the sign-in, and point to your own Google app. No behaviour changes. - Signing a profile in again keeps its settings: mirrors,
max_text_chars,picture_searchand the rest stayed
only as the principal, folders and storage before.
Changed — may break callers
doctor'soauth_clientsays where the Google app comes from:{ "client": "wirecat", "source": "constants" },
or"own"with"flag"(--client-file) or"env"(DRIVE_GOOGLE_CLIENT_ID). WireCat's app now comes from
cli-core'sconstants.jsoninstead of drive's source; the order is unchanged.DRIVE_GOOGLE_CLIENT_SECRETwithoutDRIVE_GOOGLE_CLIENT_IDfails with reasonsign-in.secret-without-id.- drive runs on cli-base 0.77.1 and cli-core 0.566.0. A failure can now be
conflict(exit 15); the MCP tools'
error codes list it.
0.60.0
Changed — may break callers
- Error reasons use the names cli-core and gcal share.
sign-in.expiredis nowoauth.expired,
sign-in.scope-missingisoauth.scope-missing,sign-in.declinedisoauth.declined,sign-in.not-savedis
oauth.not-saved,google-api.disabledisapi.disabled,oauth-client.rejectedissign-in.client-rejected,
file.not-fileisfile.not-a-fileandprofile.lock-refusedisprofile.locked. A sign-in that fails keeps the
shared sign-in's own reason (oauth.failed,oauth.unavailable, …) and its code, in place of onesign-in.failed;
the message still names no credential detail. - cli-core 0.565.0. The store stays at schema 48.
Added
drive config migratewrites each setting the file lacks at its default, and every write drive makes to the
file adds them too. You then find and editmax_text_chars,limit,recordand the rest inconfig.json
without the docs. Your values, their order and keys drive does not know stay.config unsetdoes not put back what
it removed; a plain read never rewrites the file (cli-core 0.563.0).drive config showlists each setting undersettingswith its value, its default, whether the file sets it
and what it does.
Fixed
session startopens no browser under--json,--no-inputorCI. It prints the address to open instead.- A config file that is not valid JSON no longer suggests
drive config repair, which drive does not have
(cli-core#2461).