github yuzeguitarist/Deck v1.2.7
v1.2.7 | Honed

latest releases: v1.4.5, v1.4.4, v1.4.3...
3 months ago

Deck


Release Notes v1.2.7

TL;DR

  • 连接拒绝与重试:拒绝/超时后立即显示"已拒绝",冷却倒计时"X后重试",冷却结束后需手动点击"重试"才再次连接。
    Connection: immediate "Rejected" on decline/timeout; cooldown countdown; manual retry only after cooldown.

  • 安装体验:DMG 提供 Deck Installer Tools 文件夹,install.command 一键安装并清理隔离属性,help.txt 多语言说明,图标随系统明暗切换。
    Install: single tools folder, one-click install with quarantine cleanup, multi-language help, auto dark/light icon.

  • Orbit 精简:聚焦环形应用切换演示,移除黑洞/拖拽/Caps Lock 等路径,代码瘦身,交互更稳定。
    Orbit: radial app-switching only; removed drag/black-hole paths; code cleanup; more stable.

  • 传输与连接:大内容改走资源/流式传输;直连支持多端口回退;单条共享同步标签;资源与清单乱序到达可正确处理;直连标签改用真实 ID。
    Transfer: resource/stream for large payloads; multi-port fallback; tag sync on share; out-of-order resource/manifest handled; real tag IDs for direct connect.

  • 关键修复:标签接收后即时刷新;TOTP 验证码实时轮换,减少校验失败。
    Fixes: tag list refreshes on receive; TOTP live-rotating to reduce verification failures.

  • Welcome 体验优化:欢迎页圆角和按钮配色已优化,左侧文案切页更稳定;无可迁移内容时自动跳过第 7 页(6 直接到 8)。
    Welcome onboarding polish: corner/button colors are refined with steadier text transitions, and page 7 is auto-skipped when no importable data is found (6 goes directly to 8).

新增 / Added

  • 新增标签拖拽排序功能
    在弹出面板(⌘P)中,按住 Command 键后拖动标签即可自定义排列顺序。所有标签(系统标签与用户自定义标签)均支持拖拽排序,顺序会自动保存。
    In the popup panel (⌘P), hold Command and drag any tag to reorder. All tags (system and user-defined) support drag reordering, and the order is persisted automatically.

    • 拖拽时标签仅在水平轴移动,纵向位置锁定
      Tags move only horizontally during drag; vertical position is locked.
    • 标签完全跟随鼠标位置,无加速度或惯性
      Tags follow the cursor exactly with no acceleration or inertia.
    • 左右边界严格限制,标签不会超出显示区域
      Left/right boundaries are strictly enforced; tags cannot exceed the visible area.
    • 拖拽中释放 Command 键会取消操作并恢复原始顺序
      Releasing Command during drag cancels the operation and restores the original order.
    • 被拖拽标签有轻微放大和阴影效果,便于区分当前操作目标
      The dragged tag shows a subtle scale-up and shadow effect for visual distinction.
    • 拖拽标签与其他标签重叠时,被覆盖的标签会自动虚化(降低透明度),视觉层级更清晰
      When the dragged tag overlaps another tag, the overlapped tag fades out (reduced opacity) for clearer visual hierarchy.
  • 新增安装工具文件夹结构
    原先分散的脚本改为统一收纳到 Deck Installer Tools,默认包含 install.commandfix.command
    Standalone scripts are now grouped into Deck Installer Tools, including install.command and fix.command.

  • 粘贴队列 HUD 胶囊支持拖拽并自动记忆位置
    右下角的粘贴队列 HUD 胶囊现在可以用鼠标拖拽到屏幕任意位置,位置会自动保存。鼠标悬停时显示小手光标提示可拖动,即使 App 不在前台也能正常显示。
    The paste queue HUD capsule at the bottom-right can now be dragged to any position on screen. The position is automatically saved and restored. An open-hand cursor appears on hover to indicate draggability, even when the app is in the background.

  • 新增多语言帮助文档 help.txt
    帮助文档覆盖当前 App 支持语言,并明确“脚本用途 + 双击运行步骤”。
    The new help.txt covers all currently supported app languages and explains script purpose plus double-click run steps.

  • 新增 LAN 文件归档工具 LANFileArchiver
    新增统一打包、解包、临时文件认领和清理能力,专门用于局域网资源传输路径。
    Added LANFileArchiver for archiving, extraction, temp-resource claiming, and cleanup in LAN transfer flows.

  • 新增直连流式传输链路(大内容)
    直连模式新增 stream_start / chunk / stream_end 传输链路,用于大内容和文件归档发送。
    Added a direct-connect streaming path (stream_start / chunk / stream_end) for large payload and archived file transfer.

  • 新增资源清单机制(Multipeer)
    新增 resource_manifest 元信息通道,在资源到达后可准确还原内容类型、时间、应用名和标签信息。
    Added a resource_manifest metadata channel in Multipeer so type, timestamp, app name, and tag metadata are restored correctly after resource transfer.

优化 / Improvements

  • Welcome 引导页细节优化
    圆角调整为 30pt,浅色模式下右侧按钮图标/文字改为黑色,切页观感更稳定。
    Welcome refinements: 30pt corner radius, black right-side button text/icons in light mode, and steadier page transitions.

  • 首次启动引导页全面重设计
    引导页改为左右分栏沉浸式布局,左侧文字右侧配图。图片贴合右下角裁切露出局部。窗口改为无边框无红绿灯按钮,极简黑白风格,适配 Light/Dark Mode。导航按钮叠加在图片区底部,所有按钮统一使用毛玻璃材质。每页图片中央叠加对应 SF Symbol 动画图标(macOS 15+)。
    Welcome view redesigned with a left-right split layout. Images are anchored bottom-right with overflow clipping. Borderless window with no traffic lights, minimalist black-and-white scheme, Light/Dark adaptive. Navigation buttons overlaid on the image panel with frosted glass material. Each page displays an animated SF Symbol overlay on the image (macOS 15+).

  • 菜单栏图标重绘
    图标改为 document.on.clipboard,默认单色渲染,暂停时使用分层渲染以区分状态。复制内容入库时触发 .symbolEffect(.bounce.up.byLayer) 动画,反馈更直观。
    Menu bar icon now uses document.on.clipboard, with monochrome by default and hierarchical rendering when paused. Copy events trigger a bounce-up symbol effect for clearer feedback.

  • 菜单栏右键菜单增强
    顶部图标右键菜单新增“反馈意见”入口(与面板“告诉我们您的想法”一致,打开邮件并使用反馈 HTML 模板);在“偏好设置...”与“退出 Deck”之间新增版本与更新分组,显示“版本 X.X.X”并提供“检查更新”,点击后复用“关于”页手动检查更新流程,检测到新版本会弹出更新窗口。
    The status-bar icon context menu now includes a Feedback entry (same behavior as “Tell us your thoughts”, opening email with the HTML feedback template). A version/update section was also added between Preferences and Quit, showing “Version X.X.X” and a “Check for Updates” action that reuses the About page’s manual update-check flow and presents the update prompt window when a newer version is found.

  • TagChips 顶栏布局与按钮状态优化
    标签栏改为更符合直觉的分布:添加标签按钮(+)和新建标签编辑器紧贴标签区内最后一个标签右侧;设置、暂停/恢复、退出和反馈按钮保留在右侧。相关按钮默认无背景,鼠标悬停时才显示高亮效果(与搜索按钮风格一致)。
    Tag bar layout is now more intuitive: the Add Tag (+) button and new-tag inline editor sit inside the tag area directly after the last tag, while settings, pause/resume, quit, and feedback stay on the right. These controls are now transparent by default and show highlight only on hover, matching the search-button behavior.

  • 设置窗口侧边栏右侧圆角优化
    设置窗口左侧导航栏的右上角和右下角添加了圆角效果,侧边栏与右侧内容区之间的过渡更柔和,同时移除了原先的 1px 直线分隔线,改为右侧方向的柔和阴影分层。内容区域向左延伸填充圆角间隙,确保白色背景页面(如 Orbit)不会在圆角处露出灰色底色。
    The right-top and right-bottom corners of the settings sidebar now have rounded corners for a softer transition between the sidebar and content area. The previous 1px straight divider line has been replaced with a subtle rightward shadow for depth. The content area extends slightly behind the sidebar to fill rounded-corner gaps, ensuring pages with white backgrounds (e.g. Orbit) don't expose gray corners.

  • 统计页面 UI 全面重设计
    统计页面采用极简风格重新设计:概览数据合并为单一卡片并加入千分位格式化;数据安全提示精简为标题旁的小胶囊标记;内容类型分布新增右侧图例列表显示百分比;常用应用每行加入水平进度条与百分比显示;7 天活动柱状图细化为窄柱大圆角渐变填充;存储信息融入概览卡片底部。
    The statistics page has been redesigned with a minimalist style: overview stats merged into a single card with number formatting; the data security notice is now a compact capsule badge; type distribution chart now has a side legend with percentages; top apps rows feature inline progress bars with percentage display; the 7-day activity chart uses narrower bars with gradient fills; storage info is integrated into the overview card footer.

  • 模版库使用提示和描述优化
    模版库页面标题旁增加了"光标助手"胶囊标记,明确表示模版库是配合光标助手使用的功能。副标题和使用提示卡片重新编写,采用分步骤引导的形式清晰说明创建模版、设置触发词和快速调用的完整流程。
    A "Cursor Assistant" capsule badge is now shown next to the Template Library title, clarifying its purpose. The subtitle and usage tips card have been rewritten with a step-by-step guide format explaining the full workflow of creating templates, setting trigger words, and quick invocation.

  • 触发词添加弹窗 UI 优化
    触发词添加 Sheet 重新设计:顶部增加图标和说明文字;输入框改为自定义样式;匹配类型选择器从系统分段控件替换为自定义按钮组;类型选择网格改为水平布局,选中态更简洁;底部按钮区域点击范围扩大至整个区域。
    The Add Trigger Word sheet has been redesigned: header now includes an icon and description; text field uses a custom style; match type selector replaced with custom tab buttons; type selection grid uses a horizontal layout with cleaner selection states; bottom button hit area now covers the full region.

  • 智能规则编辑页面 UI 优化
    编辑规则页面中"全部满足/任一满足"的匹配模式选择器从系统分段控件替换为自定义胶囊按钮组;条件和动作项改为带图标的卡片式行布局,视觉层级更清晰;添加条件/动作页面移除冗余空白,Sheet 高度改为自适应内容。
    The Smart Rules editor UI has been refined: the "All/Any" match mode selector is replaced with custom capsule-style buttons; condition and action items now use card-like rows with icons for better visual hierarchy; the Add Condition/Action sheets remove excess whitespace with content-adaptive height.

  • 存储整理与自检 UI 优化
    "会做的事情"说明从纯文本换成带彩色图标的分行展示,每项操作一目了然;整理完成报告弹窗的标题居中并使用圆形图标背景,卡片标题改为小号大写字母,数值使用等宽圆角字体,关闭按钮改为自定义样式。
    The maintenance description now uses icon-labeled rows instead of plain text; the report sheet header is centered with a circular icon background, card titles use small-caps style, metric values use rounded monospace font, and the close button has a custom style.

  • 安全设置页面 UI 优化
    隐写密钥口令输入框添加前置图标(锁/钥匙),密码文本改为等宽字体;保存和清除按钮改为带填充背景的胶囊样式;安全模式说明从 bullet list 改为带彩色图标的分行展示;OCR 识别语言列表的图标按语言差异化显示;存储信息末行移除多余的分隔线。
    Steganography passphrase field now has a leading icon (lock/key) with monospaced font; save and clear buttons use capsule-style with fill backgrounds; security mode info uses icon-labeled rows instead of bullet list; OCR language icons are now differentiated per language; storage info section removes the trailing divider.

  • 代码示例增加语法高亮(脚本插件 / CLI Bridge)
    设置页中的脚本插件创建示例(manifest.jsonindex.js)和 CLI Bridge 命令示例已增加颜色渲染,便于快速区分关键字、字符串、数字、注释与变量。
    Added syntax highlighting to settings code samples (Script Plugins and CLI Bridge), improving readability for keywords, strings, numbers, comments, and variables.

  • 连接状态反馈更清晰
    右侧状态提示补齐颜色和文案语义:冷却中为红色拒绝提示,冷却结束后显示蓝色可重试动作。
    The right-side status feedback is clearer: red reject/cooldown messaging while waiting, then a blue retry action when ready.

  • 关于页面 UI 优化
    版本号改为胶囊标签样式;"核心功能"和"智能功能"合并为单一"功能概览"卡片;快捷键标签改为仿键盘键帽样式(圆角 + 微阴影 + 描边);"更新"和"反馈"合并为一个卡片。
    Version number now uses a capsule badge style; "Core Features" and "Smart Features" are merged into a single "Features Overview" card; shortcut badges now mimic keyboard keycaps (rounded corners + subtle shadow + border); "Updates" and "Feedback" are merged into one card.

  • 搜索栏重构为收起/展开模式
    默认状态仅显示放大镜图标(扁平设计、无投影、悬停圆形高光),点击或键盘输入后平滑展开为胶囊搜索栏(宽度 300pt),失焦且无查询内容时自动收起。保留全局键盘捕获、中文输入法兼容和 / 斜杠命令功能。标签栏紧邻搜索图标排列;点击搜索栏以外的内容区域可自动退出搜索状态(点击标签栏和规则选择器弹窗时不影响搜索)。
    Search bar refactored to a collapse/expand pattern: shows only a magnifying glass icon by default (flat, no shadow, circular hover highlight); smoothly expands into a capsule search bar (300pt) on click or keyboard input; auto-collapses when blurred with empty query. Global keyboard capture, Chinese IME compatibility, and / slash command all preserved. Tag chips now sit directly next to the search icon; clicking the content area outside the top bar exits search mode (clicking tags or the rule picker popup does not).

  • 空状态图标更新
    弹出面板的三种空状态(标签无记录、剪贴板为空、未找到结果)图标从 clipboard 替换为 doc.on.clipboard,使用分层渲染模式(.hierarchical),深色/浅色模式自动适配。
    The three empty-state icons in the popup panel (tag has no records, clipboard is empty, no results found) now use doc.on.clipboard with hierarchical symbol rendering, automatically adapting to light and dark mode.

  • 多语言文案同步更新
    新状态文案已补齐多语言翻译,连接提示在不同语言下保持一致表达。
    The new status copy is fully localized, keeping connection feedback consistent across supported languages.

  • 系统提示与更新流程文案多语言补齐
    已将导入导出弹窗(成功/失败/数量提示)、生物识别验证默认文案与取消按钮、更新通知标题与正文、更新流程状态文案、辅助功能权限弹窗、iCloud 同步错误提示、Orbit 安装错误提示统一接入多语言。
    Localized system-facing copy across export/import dialogs (success/failure/count), biometric auth defaults and cancel label, update notification title/body, updater status texts, accessibility permission dialogs, iCloud sync error messages, and Orbit installer error prompts.

  • 首次安装路径更顺滑
    新增安装脚本会在执行安装时自动处理隔离属性,尽量减少用户进入系统“隐私与安全性”手动放行的频率。
    The new installer script now clears quarantine during installation to reduce manual Security & Privacy unblock steps.

  • DMG 布局进一步整理
    Deck.appApplications 保持主区域展示,安装工具文件夹固定放在其下方,首次安装路径更直观。
    Deck.app and Applications remain in the main area, with the tools folder placed below for a clearer first-install flow.

  • 安装器视觉一致性增强
    安装器图标默认使用 1024 Logo,并支持明暗外观自动匹配。
    The installer icon now uses the 1024 logo by default and adapts automatically to dark/light appearance.

  • Orbit 演示界面视觉层级简化
    Orbit 环形演示移除了黑洞/AirDrop 指示层与拖拽消散链路,保留点击、悬停、键盘切换等核心交互。
    Orbit demo visuals were simplified by removing black-hole/AirDrop overlays and drag-dissolve chains, while keeping click/hover/keyboard core interactions.

  • 接收缓冲与帧解析容错优化
    接收链路加入更清晰的单条消息上限与总缓冲上限,异常包会更早拦截,减少卡死和误解析。
    Receive flow now enforces clearer per-message and total-buffer limits, rejecting bad payloads earlier to reduce stalls and misparsing.

  • 面板弹出/收起动画优化
    缩短动画时长(show 0.16s、hide 0.18s),展示时改用 easeOut 曲线,收起更干脆、展开收尾更柔和。
    Panel show/hide animation shortened (0.16s / 0.18s) with easeOut on show for snappier close and gentler expand stop.

  • 快捷键连发与动画期间防抖
    对 ⌘P 等全局快捷键增加节流与按键释放检测,避免长按或快速连按导致面板闪烁、卡顿;动画进行中不再响应新的 toggle 请求。
    Hotkey throttling and key-release detection added to prevent panel flash and jank from key-repeat or rapid presses; toggle requests are ignored during active animation.

  • 面板关闭后延迟清理
    面板关闭时不再立即执行 purgeMissingFileItems 和 clearExpiredData,改为延迟约 0.6 秒后执行,避免快速开关面板时主线程被重任务抢占导致掉帧。
    Panel close no longer runs purgeMissingFileItems and clearExpiredData immediately; cleanup is deferred ~0.6s to avoid main-thread stalls during rapid toggles.

  • 面板获得焦点时机优化
    调整 activateApp 与 makeKeyAndOrderFront 的调用顺序,面板展示前先激活应用,动画完成后仅在需要时再次激活,减少“面板已显示但未获得焦点”的停顿感。
    Activation and makeKeyAndOrderFront order adjusted: app activates before panel animates; post-animation re-activation only when needed, reducing “panel visible but not focused” stalls.

  • 剪贴板 Copy/Cut 监听能耗优化
    全局按键监听仅在命中 ⌘C / ⌘X 时触发检测,其他按键在回调内直接过滤,避免每次按键都创建 Task 或切换主线程,降低后台能耗。
    Copy/Cut monitor now filters key events in-place; only ⌘C and ⌘X trigger detection, avoiding Task creation and main-thread switches on every keystroke to reduce background energy use.

  • 粘贴队列快捷键监听能耗优化
    快捷键配置改为缓存读取,配合 UserDefaults 变更通知同步;按键回调增加 fast path,仅处理 V 键与 Typing Paste 自定义快捷键,无关按键直接返回,减少 JSON 解码与主线程切换开销。
    Hotkey settings are now cached and synced via UserDefaults notifications; keyDown callbacks use a fast path to process only V key and Typing Paste shortcut, avoiding JSON decode and main-thread hops on unrelated keys.

  • 暂停倒计时 UI 能耗优化
    暂停指示器与标签栏倒计时由 Timer.publish 改为 .task + Task.sleep,仅在限时暂停时每秒刷新;无限期暂停不再持续唤醒,减少 CPU 唤醒。
    Pause countdown UI now uses .task + Task.sleep instead of Timer.publish; tick only when paused with an end time; indefinite pause no longer triggers periodic wakeups, reducing CPU activity.

  • 搜索栏展开/收起动画与样式
    搜索栏展开/收起使用自定义 timingCurve 动画,背景从 Capsule/Circle 切换改为单一 RoundedRectangle 条件填充,图标用 scaleEffect 替代字体切换,过渡更顺滑。
    Search bar expand/collapse now uses a custom timingCurve; background unified to RoundedRectangle with conditional fill; icon uses scaleEffect instead of font switching for smoother transitions.

  • 分组分享自动选择更稳路径
    当分组内包含文件 URL 或大内容时,会自动退化为逐条资源发送,避免分组大包失败。
    Group sharing now automatically falls back to per-item resource transfer when file URLs or large payloads are included, avoiding oversized group-send failures.

  • 资源接收生命周期更稳
    资源文件到达后会先迁移到应用临时目录再处理,避免系统回收临时文件导致读取失败。
    Received resource files are now moved into app-controlled temp storage before processing, preventing read failures from OS temp cleanup.

变更 / Changes

  • Welcome 迁移页自动跳过
    欢迎窗口打开后会后台预扫描;无可迁移内容时自动隐藏第 7 页(6 直接到 8)。
    Welcome now pre-scans in background and auto-hides page 7 when no importable content is found (6 goes directly to 8).

  • 移除光标助手和局域网共享的 Beta 标记
    光标助手与局域网共享设置页面标题旁的 Beta 标签已移除,这两项功能现已正式发布。
    The Beta badge next to Cursor Assistant and LAN Sharing settings headers has been removed; both features are now considered stable.

  • 连接重试策略调整
    “X后重试”现在是操作提示而非自动行为,系统不会在倒计时结束后自动重连。
    “Retry in X” is now an action hint rather than an automatic action; the app will not auto-reconnect after countdown.

  • 安装辅助入口改为文件夹形态
    DMG 中安装辅助内容从“直接展示两个脚本”调整为“展示一个工具文件夹”,减少界面噪音。
    Installer helpers in the DMG are changed from two standalone scripts to a single tools folder to reduce visual clutter.

  • Orbit 演示行为范围调整
    Orbit 现在默认走“单模式应用切换”路径,不再进入剪贴板环切换流程,也不再启用跳转预测排序。
    Orbit now follows a single-mode app-switching flow by default, without clipboard-ring switching or jump-model prediction ordering.

  • 空状态图标更新
    弹出面板的三种空状态(标签无记录、剪贴板为空、未找到结果)图标从 clipboard 替换为 doc.on.clipboard,使用分层渲染模式(.hierarchical),深色/浅色模式自动适配。
    The three empty-state icons in the popup panel (tag has no records, clipboard is empty, no results found) now use doc.on.clipboard with hierarchical symbol rendering, automatically adapting to light and dark mode.

  • 面板顶部间距优化
    顶部导航栏(搜索、标签、控制按钮)距面板上边缘间距从 14pt 减至 10pt,面板视觉更紧凑。
    Top bar padding reduced from 14pt to 10pt for a more compact panel appearance.

  • 文件 URL 传输策略调整
    文件 URL 不再按普通内联数据发送,改为统一归档后传输并在接收端还原。
    File URLs are no longer sent as inline blobs; they are archived for transfer and restored on the receiver.

  • 单条共享 payload 扩展元信息字段
    共享 payload 新增 contentLengthtimestampappNametagNametagColor,用于更准确还原来源上下文。
    Single-item payloads now include contentLength, timestamp, appName, tagName, and tagColor for better context restoration.

  • 大内容发送阈值行为调整
    超过阈值的内容会自动切到资源传输(Multipeer)或流式传输(直连),小内容仍走内联。
    Payloads above threshold now auto-switch to resource transfer (Multipeer) or streaming (Direct), while small items stay inline.

修复 / Fixes

  • 修复 Welcome 切页时左侧文案漂移
    左侧文案不再因布局偏移出现明显横向移动。
    Fixed visible horizontal drift of left text during onboarding page transitions.

  • 修复 Welcome 引导页索引越界崩溃
    处理了 WelcomeView 在页面切换时偶发的数组越界访问(pages[currentPage])问题,避免出现 Swift/ContiguousArrayBuffer.swift:691: Fatal error: Index out of range 崩溃。
    Fixed an occasional index-out-of-range crash in WelcomeView page switching (pages[currentPage]), preventing Swift/ContiguousArrayBuffer.swift:691: Fatal error: Index out of range.

  • 修复拒绝后仍显示连接中
    处理了对方拒绝或超时后发起端状态未及时更新的问题,避免界面误导。
    Fixed the issue where sender-side status could remain “Connecting” after a decline or timeout.

  • 修复重复触发连接弹窗的问题
    通过冷却与手动重试流程,减少短时间内重复请求导致的连续弹窗。
    Reduced repeated invitation popups by enforcing cooldown and manual retry flow.

  • 修复重复内容导致的列表 ID 冲突警告
    当智能识别结果里出现重复文本(如多个 127.0.0.1)时,不再触发 SwiftUI ForEach 的重复 ID 警告,列表渲染更稳定。
    Fixed a SwiftUI ForEach duplicate-ID warning when detected content contains repeated values (such as multiple 127.0.0.1), improving list rendering stability.

  • 修复打包脚本变量解析异常
    处理了 release.sh 在部分环境下可能触发的变量解析报错,提升打包稳定性。
    Fixed a variable parsing issue in release.sh that could trigger an unbound-variable error in some environments.

  • 修复 Orbit 精简后窗口控制器的上下文进程获取编译问题
    调整了 Orbit 窗口控制器中的上下文进程获取实现,避免精简后出现返回类型不匹配导致的编译错误。
    Fixed a compile issue in Orbit window controller context-process resolution after simplification by correcting the return-type implementation.

  • 修复关闭面板时的线程优先级反转告警
    优化了面板关闭时的焦点收尾流程,减少主线程等待低优先级任务导致的性能告警。
    Reduced priority-inversion performance warnings when closing the panel by streamlining focus teardown and avoiding main-thread waits.

  • 修复极速按 ESC 时焦点未归还
    现在在弹出面板刚出现的极短时间内立刻按 ESC,焦点也会稳定返回到原来的应用,不再出现“面板已关闭但焦点仍停在 Deck”的情况。
    Fixed a focus-return race when pressing ESC immediately after opening the panel; focus now reliably returns to the previous app instead of staying on Deck.

  • 修复自动更新后残留 .Deck.app.old.* 备份文件
    更新完成后新 App 启动时会自动删除 /Applications 下的旧版备份,不再累积残留。
    Old app backups (.Deck.app.old.*) in /Applications are now automatically removed on startup after an update, preventing accumulation.

  • 修复单条资源接收时标签未即时显示
    接收端创建新标签后会立即刷新标签栏,内容和标签可同步可见。
    Fixed delayed tag visibility for single-item resource receive by refreshing the tag list immediately after tag creation.

  • 修复大内容在局域网下偶发传输失败
    通过资源/流式链路替代单次大包发送,降低大图、安装包、文件夹分享失败概率。
    Fixed intermittent LAN failures for heavy payloads by replacing one-shot large sends with resource/stream transfer.

  • 修复资源接收临时文件偶发丢失
    处理回调里先迁移临时文件再解码,避免文件在回调结束后被系统回收。
    Fixed occasional temp-file loss on receive by moving resources before decode, avoiding cleanup after callback return.

  • 修复默认端口占用导致直连失败
    新增端口回退后,默认端口被占用时仍可自动连上。
    Fixed direct-connect failures when the default port is occupied by adding automatic port fallback.

  • 修复 TOTP 弹窗验证码显示与验证窗口不同步
    验证码现在按当前时间窗口实时计算,避免倒计时变化但验证码不变化导致的偶发失败。
    TOTP is now computed live against the current time window, preventing failures caused by countdown changes while code stayed static.

  • 修复验证请求早期失败时的 continuation 残留风险
    发送验证请求编码失败、会话不可用或发送异常时,会及时清理等待态,避免后续二次回调风险。
    Continuation state is now cleared on early verify-request failures (encode/session/send), preventing later double-callback risks.

  • 修复资源先到但清单未到时被忽略的问题
    接收端新增“先收资源后补清单”的配对处理,不再因为到达顺序差异直接丢弃资源。
    Fixed resource drops caused by arrival-order mismatch by adding resource-first then manifest matching on receiver side.

  • 修复资源接收失败场景的临时文件残留
    对接收失败、会话停止和过期缓存等路径补齐清理,减少临时目录堆积。
    Added cleanup on receive-failure, service stop, and stale-cache paths to reduce temp-file buildup.

  • 修复未验证设备资源被缓存的安全边界问题
    在安全模式下,未完成验证的资源会被立即拒绝并清理,不再进入等待队列。
    In security mode, unverified resources are now rejected and cleaned immediately instead of being queued.

  • 修复直连共享标签 ID 映射错误
    直连共享标签改为按真实标签 ID 读写,并同步维护标签显示顺序,避免标签错位。
    Fixed direct-connect tag ID mapping by using real IDs and maintaining tag display order consistency.

  • 修复接收方验证码弹窗“取消后不关闭”
    接收方点击取消后会立即关闭弹窗,交互反馈更明确。
    Receiver-side TOTP dialog now closes immediately when cancel is tapped.

  • 修复直连发送路径中的未使用变量编译告警
    清理了 sendItem 里无实际用途的弱引用绑定,消除无效警告。
    Removed an unused weak-capture binding in direct-send sendItem, eliminating the compiler warning.

  • 修复 HotKeyManager 全局快捷键事件处理的类型不匹配编译错误
    统一 InstallEventHandler 参数类型:将 paramErr 显式转为 OSStatus,并把事件数量参数改为 Int,避免因类型不一致导致构建失败。
    Fixed type-mismatch compile errors in HotKeyManager global hotkey event handling by aligning InstallEventHandler argument types: casting paramErr to OSStatus and passing event count as Int.

  • 修复“模拟键盘输入粘贴”快捷键取消按钮无反馈
    当快捷键已是默认值 ⌘⌥V 时,取消按钮现在会显示为灰色不可点;只有在用户自定义过快捷键后才可点击并恢复默认,避免“点了没反应”的误解。
    Fixed no-feedback behavior of the Typing Paste shortcut cancel button. When the shortcut is already the default ⌘⌥V, the cancel button is now dimmed/disabled; it becomes clickable only after customization to reset back to default.

  • 修复规则选择面板布局递归告警
    调整规则选择面板的刷新时机,避免在布局过程中触发递归布局告警,弹层显示更稳定。
    Adjusted rule-picker panel refresh timing to avoid layout-recursion warnings during active layout, improving popup stability.

  • 优化敏感窗口标题检测的系统日志噪声
    对不适合查询的系统进程做了过滤,减少 task name port 相关报错刷屏,同时保持常用场景检测能力。
    Added filtering for system processes that are unsuitable for title queries, reducing task name port log noise while preserving normal detection behavior.

  • 归档解压路径越界防护(Zip Slip)
    解压前会先检查压缩包条目路径,解压后再校验输出路径与符号链接目标,避免越界落盘。
    Added archive extraction boundary protection by validating zip entries before extraction and verifying output/symlink paths after extraction to prevent path escape.

  • 资源清单发送失败时的临时文件残留
    resource_manifest 发送失败时,会立即清理对应临时文件,避免积累。
    Temp artifacts are now cleaned immediately when resource_manifest sending fails, preventing file buildup.

  • 安全模式协商上下文不一致
    连接邀请现在携带 securityMode 上下文,接收端会解析并同步对端安全模式状态。
    Connection invitations now carry securityMode context, and the receiver parses it to keep peer security-mode state in sync.

  • 分组加密一致性问题
    分组发送时若任一条目加密失败会直接失败,接收端若解密任一条目失败会丢弃整组,避免“部分成功”造成数据错乱。
    Group transfer is now all-or-nothing for encryption: send fails if any item fails to encrypt, and receive drops the whole group if any item fails to decrypt.

  • 验证流程并发覆盖与异常成功判定
    验证流程加入忙碌保护和对端绑定校验;verify_success 缺少或非法密钥时会判定失败,不再误报成功。
    Verification flow now has busy protection and peer binding checks; verify_success without a valid secret now fails instead of being treated as success.

  • 直连异常包处理不及时导致状态错乱
    接收缓冲在追加前先做上限判断;遇到溢出或非法长度包会直接拒绝连接,减少 DoS 与状态错乱风险。
    Direct receive buffer now enforces limits before append; overflow/invalid-length payloads trigger immediate connection rejection to reduce DoS and state corruption risks.

  • 直连拒绝/重连后的连接状态不同步
    拒绝和重连路径现在会先统一标记断开,避免 UI 长时间显示“已连接”假状态。
    Reject/reconnect paths now mark disconnected first, preventing stale “connected” UI state.

  • AES-GCM 空密文与 PSK 边界异常
    发送侧不再接受空 combined 密文;PSK fallback 改为合法长度密钥,挑战阶段 PSK 非法会直接拒绝连接。
    Sender no longer accepts empty AES-GCM combined output; PSK fallback now uses valid key length, and invalid PSK during challenge handling now rejects the connection immediately.

  • 接收落盘目录使用远端 transferId 的路径风险
    接收归档落盘目录改为安全化 transferId 组件,降低路径注入风险。
    Archive receive destination now uses sanitized transferId components to reduce path-injection risk.

兼容性与行为说明 / Compatibility & Behavior Notes

  • macOS 安全限制下仍需手动触发脚本
    将 App 拖入 Applications 后,系统不会自动执行 DMG 内脚本;如需修复隔离属性,请手动双击对应脚本。
    After dragging the app into Applications, macOS will not auto-run scripts inside the DMG; run the needed script manually.

升级建议 / Upgrade Notes

  • 建议尽快升级到 v1.2.7
    本版本覆盖局域网连接与传输(拒绝状态、冷却重试、大内容流式传输、多端口回退、标签同步)、安全验证(TOTP 实时轮换、加密一致性、Zip Slip 防护)、安装体验(工具文件夹、一键安装、多语言说明)及多处 UI 优化,建议所有用户升级。
    v1.2.7 covers LAN connection and transfer (reject state, cooldown retry, large-payload streaming, multi-port fallback, tag sync), security and verification (live TOTP, encryption consistency, Zip Slip protection), install experience (tools folder, one-click install, multi-language help), and extensive UI improvements. Upgrade recommended for all users.

Don't miss a new Deck release

NewReleases is sending notifications on new releases.