Skip to content

Releases: WireCatLabs/drive-cli

0.52.1

Choose a tag to compare

@github-actions github-actions released this 31 Oct 14:21
a35fde9

Fixed

  • session start falls back to a private file when the keyring fails, and never asks (WC-SECR-4). It used to
    stop with sign-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 file still chooses the file outright;
    the keyring is still the default and the safer choice. sign-in.not-saved now means the file cannot be read.

0.52.0

Choose a tag to compare

@github-actions github-actions released this 31 Oct 13:57
f071915

Added

  • search says how many documents match in all: total. The answer carries total: { value, relation }, shaped
    as Elasticsearch's hits.total: eq is the exact count, gte a 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

Choose a tag to compare

@github-actions github-actions released this 31 Oct 06:13
6977ee7

Fixed

  • search keeps the query's fields for documents found by meaning. tag:work or date>=30d without --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 as updated_at, where it read when drive last imported it (cli-core 0.496.0).

0.50.0

Choose a tag to compare

@github-actions github-actions released this 31 Oct 05:47
c09c150

Security

  • A run with moved folders never removes the owner's Google sign-in. A run with a different HOME or XDG folder
    now counts as moved, as one with DRIVE_*_DIR overrides 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 end in 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 answers signed_out: false and
    kept: "owners-sign-in", where it said signed_out: true.

0.49.0

Choose a tag to compare

@github-actions github-actions released this 31 Oct 03:34
02b155a

Changed — may break callers

  • The first screen (drive --help) lists gcal under "Works with", and setup offers 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's modifiedTime and compares it with the modified time the store kept when the document
    was synced. The answer has changed, remote_modified_at and local_modified_at (null when the copy kept none,
    which counts as changed). When changed is true it also has missing (modified_at), next
    (drive <profile> sync) and meta.complete: false; exit code stays 0. Unlike synced_at on documents show, this
    is per document, not the profile's last sync. It needs the network, so --offline refuses it, and a document that
    is not imported fails with document.not-imported.

Fixed

  • Every next[].line starts with the profile the command ran with. drive personal documents list --limit 1
    gave drive documents list --page 2 --limit 1 and drive sync, and running such a line failed with
    profile.required. Now the lines read drive personal documents list --page 2 --limit 1 and drive personal sync,
    for every step, in answers and in errors.

0.47.0

Choose a tag to compare

@github-actions github-actions released this 31 Oct 00:42
73d387f

Changed — may break callers

  • documents show, list and export say when the local copy was made, and warn when it is old. Each answer
    now carries synced_at (the profile's last sync, null if it has none) and age_days: on show and export
    inside item, on list on 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) and meta.complete: false; exit code stays 0.
    A caller that treated meta.complete as always true here must read missing and next. Drive still reads only
    the local store; it does not ask Google whether the document changed.

Fixed

  • drive mcp revoke, mcp server stop and mcp server status with no profile say what the profile is for. They
    refused with "name the profiles to serve", the words of mcp serve. Now: "name the profiles whose browser logins
    to forget", "… whose server to stop", "… whose server to check". Same exit 2 and details.profiles.

0.46.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 16:42
45edb05

Changed — may break callers

  • The agent skill is listed on ClawHub as wirecat-drive. Install it with
    openclaw skills install @wirecat/wirecat-drive. The drive-cli listing is no longer updated.
    drive skill install still writes skills/drive-cli/.

0.45.1

Choose a tag to compare

@github-actions github-actions released this 29 Oct 15:06
1b1ab37

Fixed

  • An error about a server of several profiles repeats its --profiles. When mcp server start or stop tells
    you to run mcp server status or start again, 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
    for mcp server start|stop|status; its help reads "the server of several profiles that mcp 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 --help lists mail under "Works with".

0.45.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 14:35
dfb99ac

Changed — may break callers

  • drive mcp serve no 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, or all inside a list is refused the same way, and under DRIVE_PROFILE_LOCK
    --profiles may name only the locked profile (exit 5). mcp revoke and mcp server start|stop|status take the
    same --profiles. Update a client set up with plain drive mcp serve to add --profiles all; the MCP registry
    entry (server.json) now passes it. --profiles all keeps 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 serve again, not the help-only mcp.
  • 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 verbs serve and revoke, so their lint baseline entries are gone, and its cli-dev bundle
    finds a server started with a flag before mcp serve. From cli-core 0.468, an MCP server offers a command that only
    fetches into the store through its read tool.

Fixed

  • drive starts 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. Warm drive search --help went from 453 to 219 ms, drive --version from 44 to 20 ms. Output is
    unchanged; the Google client libraries still load from the package's own dependencies. A running drive mcp serve
    loads all of its code soon after it starts, so upgrading drive in place does not break it. The package is larger:
    3.3 MB to download instead of 0.57 MB.

0.44.0

Choose a tag to compare

@github-actions github-actions released this 27 Oct 20:30
f6efb10

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 search hit 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 carries untrusted: ["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 mcp only shows help (cli-core 0.463.0). mcp is now a
    group, like session and skill: mcp serve starts the server (stdio, or --http), mcp serve --tools lists
    the commands it offers, and mcp revoke replaces mcp --revoke. With no profile, drive mcp serve and
    drive mcp revoke still act on the server of every profile. No old spelling is kept: update a client set up with
    claude mcp add drive -- drive personal mcp to end in mcp serve. mcp server start runs mcp serve --http,
    and the MCP registry entry (server.json) passes mcp serve. mcp revoke is 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> upgrade for each.
  • Every run is now kept, successes too (cli-core record-every-run). Before, only failed runs were kept unless
    --record or record: 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 under runs_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 successful search now
    leaves its words in a local, 0600 file for 7 days. record_input: "failed" keeps them only in a failed run,
    record_input: false everywhere masks them; record: false now keeps failed runs (before: nothing); --no-record
    keeps nothing. mcp serve keeps a success only under --record.
  • Re-run drive <profile> mcp add or drive <profile> mcp config after this upgrade, so your AI app starts
    mcp serve.
  • drive skill show, skill status and skill install answer --json as { item, meta } (cli-core
    0.462.0).
    What was the whole answer is now under item, like every other single-thing answer.
  • A run says who asked for it (cli-core). run.json gains via (cli, mcp-stdio, mcp-http, desktop),
    mcp (tool, request and connection ids) and agent.client (the AI app's name and version). Over HTTP the agent
    is the browser app's MCP session, no longer whichever agent started mcp 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.toml now
    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) and wait_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_mb and record_input "failed" (--defaults).
  • drive upgrade restarts the HTTP MCP server and names the stdio MCP sessions still on the old version
    (cli-core). After an install it restarts each mcp serve --http that mcp server start launched, with the same
    port, address and limits, and lists this install's stdio mcp serve processes as stale_sessions to 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.