Skip to content

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 23:05
8edffa7

@agent-wechat/cli 1.4.0

Minor Changes

  • #352 498bd4e Thanks @thisnick! - Add disabled-by-default direct voice calling: authenticated control/media WebSockets, single-call ownership, PCM SDK connections, CLI monitor/dial/answer controls, and an optional OpenClaw OpenAI audio bridge with separate calling allowlists. Add the opt-in native worker and internal call-media/audio libraries. Expose direct/conference kind and voice/video call type in call metadata, including same-account observer snapshots without ownership or audio access. Select call type when dialing and accept offers by identity/revision; remove redundant media flags and the unimplemented resume command. Advertise available calling capabilities only; missing flags mean unavailable. Use one calls API token scope for call state, control and owner-bound audio; messaging grants do not permit calls. Isolated live tests cover personal voice negotiation, duplex PCM and terminal handling. An accepted owner hangup completes known cleanup when it fences an unsent poll before the queued backend stop runs. Media security lifetime and physical device validation remain incomplete; the native worker is restricted to expiring isolated tests. Video and conference calling remain unavailable.

    Exchange raw PCM samples on media sockets with JSON stream setup; buffer, frame and pace client audio in the daemon instead of requiring CLI or OpenClaw clients to construct custom binary headers.

    Keep active direct voice calls connected across peer microphone mute and unmute updates without replacing their admitted media context.

    Report verified peer microphone mute/unmute as typed control events and current-call snapshots. Use WebSocket liveness for owner cleanup, attempt graceful call shutdown, and locally end abandoned sessions on restart while preserving uncertain network receipts.

    Configure voice and video permissions separately in OpenClaw. Group realtime speech settings, OpenAI SecretRef credentials and independent consultation model/timeouts under the voice configuration; keep unavailable video calls unclaimed.

  • #366 76c3ac5 Thanks @thisnick! - Show readable CLI results by default, including tables for chats and message history. The message table shows the sender, a preview, the timestamp and a shortened ID. Use --json for full results, event streams and daemon startup records in scripts.

Patch Changes

  • #363 476a041 Thanks @thisnick! - Include local microphone/speaker support in released executables, add local audio-device discovery, and show live signal-level meters during interactive calls. Keep passive/JSON output free of terminal meters and retain separate daemon calling permissions and native transmission guards. Linux executables now require libpulse0; daemon operation does not require audio devices or a sound server.

    Include the call API, native worker, codec and device adapters in normal Cargo builds. Use the same complete default features for development, CI and release artifacts, without feature-selection flags. Verify calling routes and a passive control connection in the packaged executable and image; runtime calling authorization remains separate.

  • #382 13000ed Thanks @thisnick! - Reduce the time message sync holds the account lock on profiles with many conversations by checking the target conversation table's schema directly.

  • #368 8c93201 Thanks @thisnick! - Install the CLI audio runtime dependency before verifying executables during Linux image publication.

  • #374 bbb5f92 Thanks @thisnick! - Show incoming calls after the ringing acknowledgment and let an accepted answer interrupt a pending pre-answer poll. Reduce account lock contention by starting read workers before taking the lock and releasing it during plain-text message exchanges.

  • #379 443f3bd Thanks @thisnick! - Keep direct voice calls connected when the legacy WeChat relay audio path reuses a nonce across senders. Derive each sender's starting sequence from room media material and sender identity to reduce early overlap. Continue to reject replay and conflicting packets from the same sender, and stop before the local counter wraps.

  • #380 3077cf7 Thanks @thisnick! - Show a phone confirmation prompt while wx auth login waits for approval. With --json, report the waiting state on stderr and return the final result as JSON on stdout.

  • #370 998830d Thanks @thisnick! - Register the native call backend during normal daemon startup for authenticated accounts. Remove the separate test-startup flag and optional daemon/CLI calling/audio branches, retaining call ownership, credential, cleanup and media safety checks.

  • #364 821eeb6 Thanks @thisnick! - Fix group creation, member additions, and pin/mute preferences for contacts whose saved deletion flag is NULL. New contacts created by sparse updates default to a zero deletion flag while existing deletion state is preserved.

  • #366 76c3ac5 Thanks @thisnick! - Use accounts, profiles and config servers as the canonical CLI groups and select to save account, profile and server choices. Keep previous singular names and selection verbs as hidden compatibility aliases. Alphabetize subcommands at every help level and add command descriptions, selection guidance and examples. Update bundled instructions and repository callers to use the canonical names.

    Use wx auth logout --local to sign out on the daemon and keep saved credentials without contacting WeChat. The old logout-local command remains available as a hidden alias.

    Use wx chats list to list chats. The previous wx threads command remains available as a hidden compatibility command.

    Use wx contacts lookup and wx groups lookup for lookups by ID. The previous top-level lookup commands remain available as hidden compatibility commands.

    Contact lookup skips blank remarks and nicknames when choosing a display name.

  • #362 b82cf37 Thanks @thisnick! - Keep an incoming call's actor available when an accepted reject fences an unsent poll before the reject command reaches the backend. Send the reject once, without resending the poll, and retain uncertain rejection receipts.

  • #382 13000ed Thanks @thisnick! - Skip repeated message database schema scans when inserting a message into a conversation table already validated in the same transaction.

  • #366 76c3ac5 Thanks @thisnick! - Shorten the interactive call prompts by removing the audio device startup message and the microphone status from the waiting prompt. Show which call controls require Enter and let users redisplay the keys with ?.

    Set WX_CALL_DEBUG=1 to trace call events, audio frame writes and WebSocket closure details on stderr.

@agent-wechat/agent-wechat 1.4.0

Minor Changes

  • #352 498bd4e Thanks @thisnick! - Add disabled-by-default direct voice calling: authenticated control/media WebSockets, single-call ownership, PCM SDK connections, CLI monitor/dial/answer controls, and an optional OpenClaw OpenAI audio bridge with separate calling allowlists. Add the opt-in native worker and internal call-media/audio libraries. Expose direct/conference kind and voice/video call type in call metadata, including same-account observer snapshots without ownership or audio access. Select call type when dialing and accept offers by identity/revision; remove redundant media flags and the unimplemented resume command. Advertise available calling capabilities only; missing flags mean unavailable. Use one calls API token scope for call state, control and owner-bound audio; messaging grants do not permit calls. Isolated live tests cover personal voice negotiation, duplex PCM and terminal handling. An accepted owner hangup completes known cleanup when it fences an unsent poll before the queued backend stop runs. Media security lifetime and physical device validation remain incomplete; the native worker is restricted to expiring isolated tests. Video and conference calling remain unavailable.

    Exchange raw PCM samples on media sockets with JSON stream setup; buffer, frame and pace client audio in the daemon instead of requiring CLI or OpenClaw clients to construct custom binary headers.

    Keep active direct voice calls connected across peer microphone mute and unmute updates without replacing their admitted media context.

    Report verified peer microphone mute/unmute as typed control events and current-call snapshots. Use WebSocket liveness for owner cleanup, attempt graceful call shutdown, and locally end abandoned sessions on restart while preserving uncertain network receipts.

    Configure voice and video permissions separately in OpenClaw. Group realtime speech settings, OpenAI SecretRef credentials and independent consultation model/timeouts under the voice configuration; keep unavailable video calls unclaimed.

Patch Changes

  • #359 b32fce8 Thanks @thisnick! - Validate the OpenClaw integration against 2026.10.9. No plugin changes were needed; the pinned Gateway and model-handoff smokes pass unchanged.

@agent-wechat/desktop 1.4.0

Minor Changes

  • #366 76c3ac5 Thanks @thisnick! - Show readable CLI results by default, including tables for chats and message history. The message table shows the sender, a preview, the timestamp and a shortened ID. Use --json for full results, event streams and daemon startup records in scripts.

Patch Changes

  • #363 476a041 Thanks @thisnick! - Include local microphone/speaker support in released executables, add local audio-device discovery, and show live signal-level meters during interactive calls. Keep passive/JSON output free of terminal meters and retain separate daemon calling permissions and native transmission guards. Linux executables now require libpulse0; daemon operation does not require audio devices or a sound server.

    Include the call API, native worker, codec and device adapters in normal Cargo builds. Use the same complete default features for development, CI and release artifacts, without feature-selection flags. Verify calling routes and a passive control connection in the packaged executable and image; runtime calling authorization remains separate.

  • #366 76c3ac5 Thanks @thisnick! - Use accounts, profiles and config servers as the canonical CLI groups and select to save account, profile and server choices. Keep previous singular names and selection verbs as hidden compatibility aliases. Alphabetize subcommands at every help level and add command descriptions, selection guidance and examples. Update bundled instructions and repository callers to use the canonical names.

    Use wx auth logout --local to sign out on the daemon and keep saved credentials without contacting WeChat. The old logout-local command remains available as a hidden alias.

    Use wx chats list to list chats. The previous wx threads command remains available as a hidden compatibility command.

    Use wx contacts lookup and wx groups lookup for lookups by ID. The previous top-level lookup commands remain available as hidden compatibility commands.

    Contact lookup skips blank remarks and nicknames when choosing a display name.

  • #366 76c3ac5 Thanks @thisnick! - Shorten the interactive call prompts by removing the audio device startup message and the microphone status from the waiting prompt. Show which call controls require Enter and let users redisplay the keys with ?.

    Set WX_CALL_DEBUG=1 to trace call events, audio frame writes and WebSocket closure details on stderr.

Native assets and desktop installers are published on GitHub; npm publication and deployment are separate release steps.