Skip to content

0.35.0

Choose a tag to compare

@github-actions github-actions released this 22 Oct 20:22
· 106 commits to main since this release
f499282

Added

  • zm <profile> stats meetings show|top: who talks and how much (cli-core 0.389.0). Talk time, lines and words
    per speaker (the linked person, else the participant, else the transcript's name) and meetings and talk time per
    week, over a date window, a project, a topic or an event. Numbers only; no transcript text is read.
  • Permissions per profile (WC-PERM-1..3, 9, 10): zm <profile> config set permissions '{"recordings": "readonly"}'.
    A key is a command path, dotted; a level is deny, readonly, ask or allow, and the most specific key wins.
    --yes answers ask and never lifts deny or readonly. Settings, login, help and the MCP server are never gated.
  • meetings transcribe takes Zoom's recordings. A file that is not already a 16 or 48 kHz PCM16 WAV — MP4, M4A,
    other audio and video — is decoded by the installed ffmpeg into a private temporary folder first, bit-exact, so
    transcribing it again is a replay. zm does not install ffmpeg.
  • zm models audio list|download. The speech models transcription runs, in the folder every WireCat CLI shares.
    download checks every file's sha256, also the voice-activity model, and fetches again what does not match, so it
    repairs a model left by another version.

Fixed

  • A speech model of the wrong version no longer crashes transcription with "this is a bug". The engine throws a
    bare number when it cannot read a file; zm now says to run zm models audio download <model>, which repairs it.

Changed — may break callers

  • The profile is the first word: zm personal meetings list. ZM_PROFILE names it for a shell session and
    ZM_PROFILE_LOCK pins a process to one (another named profile → permission_error). The account.profile
    setting no longer picks the profile, and zm config set account.profile is refused. A command that uses an
    account and names no profile fails with validation_error, listing the profiles in details.profiles (it was
    configuration_error, exit 3). Login, import and sync record a profile; doctor lists them (profiles, was
    data_profile).
  • Each profile has its own Zoom login, in the keyring as <client id>:<profile>. The login saved before this
    version moves to the profile that account.profile named, the first time that profile is used.
    session status names the profile; the verified Zoom user is now zoom_user.
  • context.sources belongs to the profile named on the command: zm research config set context.sources ….
  • A recording schedule's timer runs zm <profile> recordings schedule run. A timer installed by an earlier
    version names no profile; create the schedule again.
  • Creating, updating or cancelling a Zoom meeting asks first. At a terminal zm asks y/N; without one and without
    --yes the command fails with confirmation_required (exit 7). It printed a preview and exited 0; --dry-run
    still previews. A profile with "remote-meetings": "allow" applies without --yes.
  • zm <profile> mcp replaces zm serve --mcp (WC-MCP-1..10, WC-CMD-5). One server offers zm's commands as the
    shared three tools zm_tools_search, zm_read, zm_write, and runs each call as the command line does. The eight
    fixed tools and the serve flags (--meeting-context, --meeting-preparation, --semantic and the rest) are gone;
    each tool they added is a command the server offers. The profile's permissions decide what it offers; over MCP a
    change at level ask runs without a question, so give an agent's profile {"remote-meetings": "readonly"} to keep
    it from changing Zoom meetings. MCP entries change args to ["<profile>", "mcp"]; zm serve now says so. The
    library exports createMeetingMcpServer and serveMeetingMcp are removed.
  • search meetings --model ranks words and meaning together (cli-core 0.385.0 → 0.388.0). It searched by meaning
    alone, ranked each page on its own and ignored the meeting filters. Now the date, meeting, series, event, person,
    project and tag filters apply, one ranking runs across pages, a line found both ways ranks first and is cited by its
    line, and a question — "what did we decide about pricing?" — is searched by its content words, where the word
    search alone refused the «?» and found nothing without it. The answer is a list of hits with by, score and
    passage; it was one item holding items. A cursor from an earlier version is refused.