Repository navigation
Releases: WireCatLabs/drive-cli
Releases · WireCatLabs/drive-cli
Release list
0.52.1
Fixed
session startfalls back to a private file when the keyring fails, and never asks (WC-SECR-4). It used to
stop withsign-in.not-saved. Now it signs in, says once on stderr that it used the private file, records
storage: "file"for the profile and answers it.--credential-storage filestill chooses the file outright;
the keyring is still the default and the safer choice.sign-in.not-savednow means the file cannot be read.
0.52.0
Added
searchsays how many documents match in all:total. The answer carriestotal: { value, relation }, shaped
as Elasticsearch'shits.total:eqis the exact count,gtea lower bound (counting stops at 10,000). It counts
the documents the words find and those found by meaning, every page together.
Fixed
- Search by meaning inside a filter finds the filter's own documents. With a filter of at most 2,000 documents,
every one of them is ranked by meaning, instead of the 50 nearest overall cut to the filter:budget date>=30d
went from 7 hits to a full page on the owner's store (cli-core 0.501.0). drive requires cli-base 0.67.0.
0.51.0
Fixed
searchkeeps the query's fields for documents found by meaning.tag:workordate>=30dwithout--exact
returned about 20 documents that matched neither; now every field and every excluded word holds for every hit, and
a query of fields alone lists the matching documents, newest first.date:reads a document's last edit on Google
Drive, the time its hit shows asupdated_at, where it read when drive last imported it (cli-core 0.496.0).
0.50.0
Security
- A run with moved folders never removes the owner's Google sign-in. A run with a different
HOMEor XDG folder
now counts as moved, as one withDRIVE_*_DIRoverrides already did (cli-base 0.65.5, WC-SECR-24): it reads the
owner's keyring entry, saves a new sign-in only to a temporary entry, and keeps a refreshed token in memory instead
of writing it (cli-core 0.494.0). drive requires cli-base 0.65.5 and cli-core 0.494.0.
Changed — may break callers
session endin a run with moved folders says when it kept the owner's sign-in. It removes only the run's
temporary entry; when the owner's sign-in is still there it answerssigned_out: falseand
kept: "owners-sign-in", where it saidsigned_out: true.
0.49.0
Changed — may break callers
- The first screen (
drive --help) listsgcalunder "Works with", andsetupoffers to install
@wirecat/gcal-cli. This comes with cli-core 0.481.0. - Searching a document's notes (
notes list <document> text:review) finds part of a word, in any letter case, and
looks in the title too. A mixed-case Cyrillic word is no longer missed, and the answer comes in milliseconds. A
search of one or two characters is refused with "search needs at least three characters"; an empty one still
filters nothing. This comes with cli-core 0.491.0 (store version 40). Notes already saved are indexed in batches,
and matched as before until then. Every WireCat CLI that shares the store must run cli-core 0.490.0 or later, or it
does not index the notes it writes: update them together. A caller that searched notes by one or two characters
must send three or more.
Added
drive <profile> documents check <document>asks Google whether one stored document changed. It makes one
live read of the document'smodifiedTimeand compares it with the modified time the store kept when the document
was synced. The answer haschanged,remote_modified_atandlocal_modified_at(nullwhen the copy kept none,
which counts as changed). Whenchangedistrueit also hasmissing(modified_at),next
(drive <profile> sync) andmeta.complete: false; exit code stays 0. Unlikesynced_atondocuments show, this
is per document, not the profile's last sync. It needs the network, so--offlinerefuses it, and a document that
is not imported fails withdocument.not-imported.
Fixed
- Every
next[].linestarts with the profile the command ran with.drive personal documents list --limit 1
gavedrive documents list --page 2 --limit 1anddrive sync, and running such a line failed with
profile.required. Now the lines readdrive personal documents list --page 2 --limit 1anddrive personal sync,
for every step, in answers and in errors.
0.47.0
Changed — may break callers
documents show,listandexportsay when the local copy was made, and warn when it is old. Each answer
now carriessynced_at(the profile's last sync,nullif it has none) andage_days: onshowandexport
insideitem, onliston every row. When the copy is older than a day, or has no sync time, the answer also has
missing(synced_at, with the age),next(drive <profile> sync) andmeta.complete: false; exit code stays 0.
A caller that treatedmeta.completeas alwaystruehere must readmissingandnext. Drive still reads only
the local store; it does not ask Google whether the document changed.
Fixed
drive mcp revoke,mcp server stopandmcp server statuswith no profile say what the profile is for. They
refused with "name the profiles to serve", the words ofmcp serve. Now: "name the profiles whose browser logins
to forget", "… whose server to stop", "… whose server to check". Same exit 2 anddetails.profiles.
0.46.0
Changed — may break callers
- The agent skill is listed on ClawHub as
wirecat-drive. Install it with
openclaw skills install @wirecat/wirecat-drive. Thedrive-clilisting is no longer updated.
drive skill installstill writesskills/drive-cli/.
0.45.1
Fixed
- An error about a server of several profiles repeats its
--profiles. Whenmcp server startorstoptells
you to runmcp server statusorstartagain, the command it shows now keeps--profiles all(or the list),
so it runs as written. This comes with cli-core 0.473.0 (cli-base stays 0.65.0), which now provides--profiles
formcp server start|stop|status; its help reads "the server of several profiles thatmcp serve --profiles
serves". Answers are unchanged, and a server of several profiles that drive 0.45.0 started is still stopped by
mcp server stop --profiles.drive --helplistsmailunder "Works with".
0.45.0
Changed — may break callers
drive mcp serveno longer serves every profile by default. A server serves one named
profile (drive personal mcp serve), a list (drive mcp serve --profiles work,personal) or every profile
(--profiles all). With neither it exits 2 (validation_error) and lists the profiles; a profile word together
with--profiles, an unknown name, orallinside a list is refused the same way, and underDRIVE_PROFILE_LOCK
--profilesmay name only the locked profile (exit 5).mcp revokeandmcp server start|stop|statustake the
same--profiles. Update a client set up with plaindrive mcp serveto add--profiles all; the MCP registry
entry (server.json) now passes it.--profiles allkeeps the browser login it had, so connected apps stay logged
in; a list gets a login of its own. The startup line names the profiles served. The Glama image runs
drive glama mcp serveagain, not the help-onlymcp.- cli-core 0.469.0 and cli-base 0.65.0. cli-core 0.469 accepts only cli-base 0.65, so both pins move together.
cli-base 0.65 knows the verbsserveandrevoke, so their lint baseline entries are gone, and itscli-dev bundle
finds a server started with a flag beforemcp serve. From cli-core 0.468, an MCP server offers a command that only
fetches into the store through its read tool.
Fixed
drivestarts in about half the time: the package runs from a bundle. A command loaded about a thousand module
files before doing any work; it now loads a few dozen that hold the same code, built by cli-base's
cli-dev bundle. Warmdrive search --helpwent from 453 to 219 ms,drive --versionfrom 44 to 20 ms. Output is
unchanged; the Google client libraries still load from the package's own dependencies. A runningdrive mcp serve
loads all of its code soon after it starts, so upgradingdrivein place does not break it. The package is larger:
3.3 MB to download instead of 0.57 MB.
0.44.0
Changed — may break callers
- cli-core 0.467.0 and cli-base 0.64.0. cli-core accepts only cli-base 0.64, so both pins move together.
- A
drive searchhit marks the text someone else wrote (cli-core 0.464.0). A document's title and excerpt come
from a shared drive, so each hit carriesuntrusted: ["title", "excerpt"]and an agent reads them as data. A caller
that checks hits against an older, strict copy of their shape refuses the new field. - The MCP server is
drive <profile> mcp serve;drive mcponly shows help (cli-core 0.463.0).mcpis now a
group, likesessionandskill:mcp servestarts the server (stdio, or--http),mcp serve --toolslists
the commands it offers, andmcp revokereplacesmcp --revoke. With no profile,drive mcp serveand
drive mcp revokestill act on the server of every profile. No old spelling is kept: update a client set up with
claude mcp add drive -- drive personal mcpto end inmcp serve.mcp server startrunsmcp serve --http,
and the MCP registry entry (server.json) passesmcp serve.mcp revokeis refused under--read-only. - The shared store moves to schema 35 (cli-core 0.463.0). The first run upgrades it and says so; every other
WireCat CLI that uses the same store then needs a version that speaks schema 35 — run<cli> upgradefor each. - Every run is now kept, successes too (cli-core record-every-run). Before, only failed runs were kept unless
--recordorrecord: true. A successful run stays 7 days (keep_successful_runs_for_days), a failed one 30
(keep_runs_for_days), and the run log stays underruns_size_limit_mb(200 MB; the oldest successes go first).
Privacy: a kept run holds the command as typed (secrets and phone numbers hidden), so a successfulsearchnow
leaves its words in a local, 0600 file for 7 days.record_input: "failed"keeps them only in a failed run,
record_input: falseeverywhere masks them;record: falsenow keeps failed runs (before: nothing);--no-record
keeps nothing.mcp servekeeps a success only under--record. - Re-run
drive <profile> mcp addordrive <profile> mcp configafter this upgrade, so your AI app starts
mcp serve. drive skill show,skill statusandskill installanswer--jsonas{ item, meta }(cli-core
0.462.0). What was the whole answer is now underitem, like every other single-thing answer.- A run says who asked for it (cli-core).
run.jsongainsvia(cli,mcp-stdio,mcp-http,desktop),
mcp(tool, request and connection ids) andagent.client(the AI app's name and version). Over HTTP the agent
is the browser app's MCP session, no longer whichever agent startedmcp serve --http. A reader that checks a run
against an older copy of its shape refuses the new fields.
Security
- The secret scan catches Google OAuth tokens. gitleaks' own rules know Google API keys only, so an access token
(ya29.…) or a refresh token (1//…) with no keyword beside it reached a commit unnoticed..gitleaks.tomlnow
has a rule for each; the pre-commit hook and CI use it.
Added
- Each Google request in a run is one line per attempt. A request line now carries the method, the path with
every id as:id,transport: "http",attempt(2 and up when the Google client retried) andwait_ms, the time
waited before the retry; a refused answer names Google's reason (rateLimitExceeded). A 429 shows as an error
answer, then the retry. Never the URL as sent, its query, or a body. config set keep_successful_runs_for_days,runs_size_limit_mbandrecord_input "failed"(--defaults).drive upgraderestarts the HTTP MCP server and names the stdio MCP sessions still on the old version
(cli-core). After an install it restarts eachmcp serve --httpthatmcp server startlaunched, with the same
port, address and limits, and lists this install's stdiomcp serveprocesses asstale_sessionsto restart from
your AI app. It works from the next upgrade on.- A Drive file attached to a calendar event is linked to that event (cli-core 0.453.0). When gcal and drive keep
one local store, the event's attachment points to the document drive saved for that file. The two can sync in either
order: the link is made when the second one stores its side.