Skip to content

Releases

0.128.0

Choose a tag to compare

@github-actions github-actions released this 14 Nov 07:21
aff2f6d

Changed — may break callers

  • A readonly level no longer stops a sync (cli-core 0.662.0, was 0.659.0). Commands that only fetch from
    Telegram into the local store (sync, messages sync, contacts sync, metadata sync, store gaps repair,
    --sync-first) run at readonly; deny still refuses them. Commands that write the owner's files or call another
    service stay blocked by readonly. A profile that used readonly to stop syncing sets the key to deny.
  • Dates in list queries read the computer's zone (cli-core 0.661.0). today and a bare date in tasks list,
    chats list and the other list queries started in UTC and now start at local midnight, as search does.
  • The MCP tool messages_photo takes attachment, from 1 (cli-core 0.661.0), as attachments_show does. It
    took index from 0.
  • A server search no longer sends a to: or cc: person to Telegram as the sender (cli-core 0.660.0); the store
    still filters them.

0.127.0

Choose a tag to compare

@github-actions github-actions released this 14 Nov 02:56
43de159

Changed — may break callers

  • Deleting messages no longer asks, and enabled reply rules send (cli-core 0.659.0, was 0.656.0). messages delete
    and bot messages delete go ahead without a question or --allow-dangerous; a profile that wants the question
    sets messages.delete: ask. replies.send is now allow, so serve sends the replies of the rules you turned on;
    a new rule still starts off, and replies.send: deny stops every automatic reply. See the
    cli-core changelog.

Fixed

  • A shared config with a small slip is mended when it is read. ~/.config/WireCat/config.json with 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 as config.json.bak-<time>. Other damage names its line, column and the likely fix.

0.126.0

Choose a tag to compare

@github-actions github-actions released this 13 Nov 17:41
08896c6

Added

  • The first screen and first run list pbx (cli-core 0.651.0), WireCat's Asterisk tool, under "Works with" and
    among the tools first run offers to install.
  • doctor reports create gives a pre-filled issue link (cli-core 0.651.0) in issue_url and in its note. The
    title and body hold only the version, the platform and the failed run's error code; the report file stays on the
    computer until you attach it.

Changed — may break callers

Fixed

  • A mistyped profile in TG_PROFILE lists the profiles here (cli-core 0.651.0), as a mistyped first word does.
  • session start and setup keep Telegram's refusal (cli-core 0.651.0). A failed sign-in for a new profile was
    reported as "no profile named …", which hid the reason.
  • schedule command saves PATH without its relative folders (cli-core 0.651.0). Under pnpm, schedule exec
    refused such a schedule; save it again and it runs.
  • A model at an IPv6 address such as https://[fd00::1] is reached again (cli-core 0.651.0).
  • A shared config that cannot be read no longer makes this tool read-only. A WireCat config
    (~/.config/WireCat/config.json) with a byte-order mark, broken JSON, a folder in its place or an older setup
    shape capped every profile at read-only, and an MCP server hid messages sync. Now only the owner's own "read only"
    answer limits a tool, and even then messages sync is offered over MCP: it only reads the messenger into the local
    store (cli-core 0.656.0).

Security

  • account remove with only the config folder moved no longer signs the owner's session out (cli-core 0.651.0).
    The state folder there is the owner's, so the sign-in is now listed under kept.

0.125.0

Choose a tag to compare

@github-actions github-actions released this 13 Nov 04:09
e958796

Changed — may break callers

  • contacts context and contacts prepare answer meetings[] (cli-core 0.650.0): the recorded calls of that
    person, from a meetings CLI that shares the store. A caller that checks the answer against a pinned schema updates
    it.

Fixed

  • TG_READ_ONLY lets Telegram's search through (cli-core 0.650.0). The lock promises "can read and sync but never
    send", yet search messages --backend server failed with permission_error and the default --backend both
    dropped the server without a word. Reads that only fetch from Telegram or work locally now pass the lock
    (#874); catch-up for local search too
    (#872).
  • An archive-only search over a partly synced chat suggests Telegram's search (cli-core 0.650.0): next leads
    with the same query and --backend server (#873).
  • The skill no longer keeps agents on the local copy. For an agreement or a document it said "search the local
    archive", and agents added --backend archive, so a message older than the synced history came back "not found"
    although Telegram's own search had it. The skill now searches the archive and Telegram together, keeps
    --backend archive for an owner who asked that nothing leaves the machine, and, when a search finds nothing in a
    partly synced chat, tries the server before a sync (#873).

Security

  • The update check and model calls reach only their own host (cli-core 0.650.0). A redirect to another host is
    refused, and each exchange has a deadline.
  • A run with moved folders removes nothing in the owner's folders (cli-core 0.650.0). With only TG_CONFIG_DIR
    moved, account remove deleted files in the owner's real state folder, and --delete-data purged the account from
    the owner's store. Now each is kept, with its reason under kept.

0.124.0

Choose a tag to compare

@github-actions github-actions released this 13 Nov 01:31
1c0ca32

Added

  • From @wirecat/cli-core 0.648.0 (was 0.633.0): images read <ref> has your coding agent read the text of one
    picture and keeps it for search; schedule agent starts gemini, cursor, opencode, openclaw, hermes, grok and kimi
    as well as claude and codex, and schedule agents list says which are on PATH; contacts unlink --from <person>.

Changed — may break callers

  • Local only keeps every model call on this computer (cli-core 0.648.0). With the switch on
    (memo models local-only set on), tg's model calls, remote embeddings and OpenAI transcription refuse any address
    that is not this computer before anything is sent (local-only.refused).
  • Plain http goes only to this computer, for every model call. Enrichment, search harder, linking, reply drafts,
    attachment OCR and remote embeddings refuse an http:// address on another machine (model.address-refused); use
    https, or run the model on this computer.
  • Voice messages are heard by the downloaded model first. auto uses the local speech model when it is downloaded
    and asks Telegram only when it is not, and never under local only.
  • Every agent schedule must be saved again (cli-core 0.648.0). A schedule saved before is refused with
    agent.refused and a hint to save it again; a codex schedule needs --allow-dangerous.
  • stats tasks show has no --chat any more (cli-core 0.648.0): name the chat in the query,
    tg personal stats tasks show 'chat:"Project room"'.
  • A mistyped profile is not_found with reason profile.unknown and the profiles on this computer, where it was
    "not signed in" (cli-core 0.648.0). tg serve under a service unit is not restarted after that exit (6), as after a
    missing login (4); a unit installed before keeps its old setting until server install runs again.
  • store reset is no longer offered over MCP, and store restore and store recover run need mcp.authority
    (cli-core 0.648.0). doctor reports create --output refuses to overwrite a file.

Fixed

  • The archive and search pages say that messages sync --all leaves out muted chats, and show --with-muted.

Security

  • tg session end in a run with moved folders keeps the owner's login. With only TG_CONFIG_DIR or
    TG_CACHE_DIR moved, the state folder is still the owner's, and session end logged that login out on Telegram
    and deleted its file. It now answers ended: false with kept: "owners-sign-in" and changes nothing.
    account remove in such a run keeps the owner's session file and bots folder too. A moved run whose state folder
    is its own forgets its session file but never logs out on Telegram (logged_out: false): a file copied there
    would still be the owner's login.

0.123.0

Choose a tag to compare

@github-actions github-actions released this 10 Nov 14:54
303837b

Added

  • muted: in search and stats, from @wirecat/cli-core 0.633.0. muted:false leaves out the chats you muted, so
    stats messages show -- 'date>=30d muted:false' counts only what the sync still reads. stats messages responses
    and stats messages waiting take it too.
  • store import, from @wirecat/cli-core 0.633.0. Loads made-up chats, people and messages from a file marked synthetic into a test store, such as Desktop's sandbox; it refuses the owner's real store.

0.122.0

Choose a tag to compare

@github-actions github-actions released this 10 Nov 05:00
6982a32

Changed — may break callers

  • Built on cli-core 0.630.0 (was 0.624.0). The store moves to version 63 on first open. Each person's kind is
    kept on the person, and saving a chat's members leaves the rows of members who stayed, so memo's people list
    filters, counts and pages in SQL. People who wrote in a one-to-one chat or a small group now count as the owner's
    people, no rule joins anyone to the owner's person, and a name is matched across Cyrillic and Latin. A tool on an
    older cli-core that saves members clears the kept kinds, so tg, max and memo move together. What changed in between
    is in cli-core's changelog.

0.121.0

Choose a tag to compare

@github-actions github-actions released this 09 Nov 23:04
27d562f

Changed — may break callers

  • Built on cli-core 0.624.0 (was 0.619.0). The store moves to version 61 on first open (people ties, additive).
    What changed in between is in cli-core's changelog.
  • search messages --timeout 30s may search for up to about 29 seconds. It stopped at 2 seconds whatever time the
    run was given, so a valid query over a large store failed in WireCat Desktop. Without --timeout it stays 2 seconds,
    for agents and MCP too.
  • schedule pause <name> and schedule resume <name> take a schedule off its timer and keep it; schedule run
    still runs it. --at repeats: --at 08:30 --at 18:00 runs twice a day.

0.120.0

Choose a tag to compare

@github-actions github-actions released this 09 Nov 14:34
9adbe96

Changed — may break callers

  • tg messages sync --all leaves out the chats you muted. An account with many muted groups no longer downloads
    them all. The answer counts them in limited.muted, and a note says how to read them. Messages already stored stay,
    and a chat you name (tg messages sync <chat>) or keep with --full-history is read as before. To read muted chats
    again, pass --with-muted for one run, or set tg config set history_muted true. From cli-core 0.619.0 (was
    0.618.0).
  • EmbeddingGemma is the default text model for search by meaning, not e5-small. A computer that already has
    e5-small and not EmbeddingGemma keeps e5-small. tg models download no longer asks to accept its terms;
    --accept-terms is ignored.
  • tg contacts link run by an agent proposes the link instead of making it, and needs --reason. Only the
    owner decides; an agent's tg contacts unlink is refused.

Fixed

  • bin/release publishes when main has only changes/ fragments and no ## Unreleased. With the version taken on
    npm it looked for ## Unreleased to put the next version under, found none and stopped before publishing. It now adds
    the new version's heading above the newest one and collects the fragments into it.

0.119.0

Choose a tag to compare

@github-actions github-actions released this 09 Nov 10:48
a7c6e31

Added

  • tg account remove --keep-data|--delete-data logs the profile out on Telegram's side, then forgets it on this
    computer: its session files, its app id and hash and proxy password in the keyring, its bots' history sessions and
    what cli-core keeps for it. --keep-data leaves its messages searchable; --delete-data deletes them. A bot token
    stays, and so does every other profile. A run with moved folders forgets its own copy and never logs out for the owner.
  • tg models set and tg models add from cli-core 0.609.0: choose the local embedding model every WireCat
    CLI uses, and add one of your own from Hugging Face. A question with a time in it (HH:MM, 10:30) is searched by
    its words again.
  • tg ships contracts/wirecat.json, which says which hosts it talks to over HTTP. WireCat Desktop reads it to
    show you, before you install, what tg touches: api.telegram.org (bots) and my.telegram.org (registering your
    app), plus the proxy you set. Your account's own connection to Telegram (MTProto) is not HTTP and is not in that
    list.
  • A pull request adds its changelog entries as a fragment, changes/<branch>.md. Open pull requests no longer
    conflict under ## Unreleased. pnpm docs:check checks each fragment, and bin/release collects them into the
    version's section. An entry under ## Unreleased still works during the move.

Changed — may break callers

  • tg now writes the shared store at version 59, and an older WireCat CLI refuses it until it is upgraded. Run
    <cli> upgrade for each WireCat CLI on the same store. From cli-core 0.615.0, whose message templates live in the
    store.

Fixed

  • tg serve exits when the build it runs is out of date, so its service starts the new one. Every minute it
    checks whether the shared store moved to a format this build can no longer write, or whether a newer tg is
    installed. If so it logs serve.outdated and exits with code 3, and the systemd unit (Restart=on-failure)
    starts the installed version. Before, a serve could run for a day on the old build and store nothing.
  • After tg store recover run, the next ordinary sync fetches again what the damage may have taken. The recovery
    marks what each chat held from a day before the last deep check that passed as not fetched, so a sync no longer
    jumps over a hole inside a chat. From cli-core 0.618.0 (was 0.616.0).

Security

  • The chat with BotFather is kept out of search. It holds every bot token BotFather sent, so search over all chats
    (memo search too), search by meaning and memo context leave it out; tg messages list and a search that names
    the chat still read it. Takes effect with the cli-core release that reads Chat.searchable, at the next sync of the
    chat list; that release also masks bot tokens in every chat.
  • tg's HTTP reaches only the hosts it declares. Every Bot API call and every step of app registration goes
    through cli-base's hostFetch. It refuses any other host before a byte is sent, checks each redirect and drops
    the Authorization header on a redirect to another site. Through a SOCKS5 or HTTP proxy the check still holds.
    It does not cover MTProto, which GramJS sends over its own sockets to Telegram's data centres, or an MTProxy.
    From cli-base 0.87.0 (was 0.80.8) and cli-core 0.615.0 (was 0.609.0).