Repository navigation
v1.0.17
Highlights
New Mail product surface (mailbox list, KQL message search, message get, send) brings runtime command count to 163 across 14 products. Plugin command-tree visibility hardening: stdio plugins shipping CLI overlays no longer wait on subprocess discovery to surface their commands, and overlay-registered plugin products are no longer hidden by edition VisibleProducts whitelists. Chat docs clarify that --title is required on dws chat message send.
Added
mailproduct (#167) — new top-level service for DingTalk Mail. Four leaf commands across two subgroups:dws mail mailbox list— list mailbox addresses available to the current user (list_user_mailboxes)dws mail message search— KQL search across folders / sender / date / attachments / read-state (search_emails); supports--cursorpaginationdws mail message get— fetch full message body + headers + attachments by message ID (get_email_by_message_id)dws mail message send— send email to one or more recipients (send_email)- Skill reference at
skills/references/products/mail.mdregistered inskills/SKILL.mdmaster index and intent decision tree
- Stdio plugin overlay-first command registration (#179) — when a stdio plugin's
overlay.jsondeclarestoolOverrides, command trees are built from manifest metadata synchronously at startup, no subprocessInitialize/tools/listhandshake required. Previously, slow or failing subprocesses left plugin commands invisible indws --help. Background discovery still runs to refresh the warm cache for richer flag types on subsequent startups.
Changed
hideNonDirectRuntimeCommands/visibleMCPRootCommands/visibleUtilityRootCommands(#179) — refactored to share a singleresolveVisibleProducts()helper that unions the edition'sVisibleProductshook withDirectRuntimeProductIDs(), so plugins registered viaAppendDynamicServerstay visible indws --helpeven when an edition installs a static product whitelist. Previously the hook fully replaced the dynamic registry, silently hiding plugin commands.dws chat message senddocumentation clarifies--titleis required (#174) — the helper command short text and the chat skill reference now state explicitly that--titleis mandatory for both group and single-chat sends, matching the runtime validation.buildStdioCommandsrefactored to share helpers with the overlay-first path (#179) — overlay parsing (resolveStdioOverlay) and tools→DetailTool conversion (toolsToDetails) extracted as package-level helpers; the legacy discovery-first stdio path now delegates to them, eliminating duplicated overlay JSON / cache-snapshot logic.
Fixed
- Negative-cache poisoning guard for stdio plugin discovery (#179) —
refreshStdioToolsCachenow skipsSaveToolsentirely when discovery returns an empty tool list (transient failure, subprocess not ready, RPC timeout), so a single bad refresh cannot overwrite a previously-good cache and degrade flag enrichment on the next startup.
Tests
- 6 new test cases in
internal/app/plugin_stdio_overlay_test.goandinternal/app/visibility_test.gocover overlay-first registration without discovery, warm-cache flag enrichment fromInputSchema, fallback when overlays lacktoolOverrides, the cache-poisoning guard, and integration cases for plugin visibility under restrictiveVisibleProductswhitelists. - Coverage 49.8% → 52.8%.
Full Changelog: v1.0.16...v1.0.17