v1.3.0 | Palimpsestic #35
yuzeguitarist
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Release Notes v1.3.0
TL;DR
动作类型升级为菜单结构,新增“转换”和“脚本插件”二级菜单,规则保存与执行全面兼容新旧值。
Smart Rules received a major upgrade, with action types moved to menus and new "Transform" and "Script Plugin" submenus, while save/execute now fully support both new and legacy values.
支持竖版停靠方向(靠左/靠右),并联动搜索规则弹窗、卡片预览、底部区域和交互布局。
Vertical mode is now fully available, including left/right docking and coordinated behavior across search rule popup, card preview, bottom area, and overall interactions.
脚本插件支持热更新、防抖刷新、缓存加速与监听策略优化,减少闪烁和重复重载。
The plugin system is now faster and more stable, with hot reload, debounced refresh, caching improvements, and optimized watchers to reduce flicker and repeated reloads.
导出改为“临时写入 + 原子替换”,并修复多项迁移/加密/握手/任务清理等高风险问题。
Export and data safety are now more reliable through "staging write + atomic replace" and fixes for multiple high-risk paths such as migration, encryption, handshake, and task cleanup.
预览改异步,智能计算提速提准,缓存一致性更好,减少卡顿与结果延迟。
Preview and smart calculation are significantly improved with async preview, faster and more accurate computation, and better cache consistency to reduce lag and stale results.
多图展示、标签菜单、焦点行为、设置页动画、对比度与间距等均有系统性优化。
UI interaction details were polished end-to-end, including multi-image display, tag menus, focus behavior, settings-page animation, contrast, and spacing.
新增 / Added
规则编辑时可直接悬停展开转换项并点击选择。
Added a new "Transform" submenu under action type so users can hover to expand and click specific transforms directly.
SmartRulesView.swift:889
选择“转换”后会保存为稳定码,避免语言切换导致规则失效,并兼容旧值。
Transform actions are now persisted with stable codes, preventing breakage after language switches while still supporting legacy values.
SmartRulesView.swift:971, SmartRuleService.swift:155, DeckDataStore.swift:1151
可直接选择已安装插件作为规则动作,同时打通模型编码/解析与执行链路。
Added a "Script Plugin" submenu in action menu, allowing installed plugins to be selected directly with full model encode/decode and execution integration.
SmartRulesView.swift:814, SmartRuleService.swift:136, DeckDataStore.swift:1136, ScriptPluginService.swift:658
新增 idle/empty/newCopy/searching/tagSelected/dataRich 场景、字符级过渡、60fps 驱动和动态宽度渲染。
Added an ASCII animation bar with six scenes, character-level transitions, 60fps timeline driving, and dynamic-width rendering.
ASCIIArtBarView.swift
增加工作原理、条件说明、动作说明和实用小贴士,降低上手门槛。
Added a "Usage Guide" block in SmartRules with workflow explanation, condition/action references, and practical tips for easier onboarding.
SmartRulesView.swift, Localizable.xcstrings
设置页新增“立即恢复”按钮与确认弹窗,满足条件时可手动触发恢复。
Added an "Immediate Restore" capability with a settings button and confirmation dialog, allowing manual restore when required conditions are met.
DeckSQLManager.swift:2196, SettingsView.swift:2089, SettingsView.swift:2327, SettingsView.swift:2333, SettingsView.swift:2559, SettingsView.swift:2566
竖版模式可自定义停靠方向,并联动规则弹窗与预览窗口自动在外侧展示。
Added vertical dock-side settings (left/right), with rule popup and preview window automatically placed on the outer side accordingly.
SettingsView.swift, MainWindowController.swift, MainViewController.swift, SearchRulePickerPanelController.swift, PreviewWindowController.swift, UserDefaultsManager.swift,
Constants.swift, DeckViewModel.swift
启动后自动监听插件目录,脚本/manifest/目录变化会自动刷新,且保留手动刷新入口。
Script plugin hot reload is now live: plugin directories are auto-watched on startup, changes auto-refresh, and manual refresh is still available.
ScriptPluginService.swift:141, ScriptPluginService.swift:241, ScriptPluginService.swift:555, ScriptPluginService.swift:607, ScriptPluginService.swift:693
Deck × Orbit
默认由规则入口处理,支持继续按参数切回旧直存模式。
CLI /clipnow uses Smart Rules by default, while still allowing parameter-based fallback to legacy direct-save behavior.CLIBridgeService.swift:608, CLIBridgeService.swift:629, CLIBridgeService.swift:672
增加标签名/标签ID写入、空结果状态检查,并补充 health / last / write 别名示例与放置说明。
CLI Bridge examples and alias docs were expanded with tag name/id writing, empty-result status checks, and clearer
health / last / writealias usage.CLIBridgeSettingsView.swift:109, CLIBridgeSettingsView.swift:119, CLIBridgeSettingsView.swift:124, CLIBridgeSettingsView.swift:132, CLIBridgeSettingsView.swift:167
引导步骤更详细,示例 manifest/脚本更完整,并新增实测步骤与建议。
The script-plugin "creation steps" guide is now more complete, with richer manifest/script examples plus a real-test step and recommendations.
ScriptPluginsSettingsView.swift:17, ScriptPluginsSettingsView.swift:28, ScriptPluginsSettingsView.swift:220, ScriptPluginsSettingsView.swift:224
提升性能、稳定性、实时性、速度和并发能力。
The Cloudflare update-proxy backend was optimized for better performance, stability, real-time behavior, speed, and concurrency.
优化 / Improvements
避免中断留下半截 JSON,失败只清理临时文件,不再删用户已有备份。
Export now uses "staging write + atomic replace" to prevent partial JSON leftovers, and failures only clean temporary files instead of deleting existing user backups.
DataExportService.swift:108, DataExportService.swift:123, DataExportService.swift:163
写盘改为缓冲批量写(1MB 阈值),批次从 500 调整为 200,降低内存压力。
Large-data export performance was improved via buffered batch writes (1MB threshold), and batch size was reduced from 500 to 200 to lower memory pressure.
DataExportService.swift:180, DataExportService.swift:201
已加载完整数据时避免重复读 blob。
Reduced duplicate I/O in the export pipeline by avoiding repeated blob reads when full data is already loaded.
DataExportService.swift:220
U+2028/U+2029 常量静态复用,并加入快速预检,命中才替换。
LS/PS sanitization hot path was accelerated by reusing static U+2028/U+2029 constants and adding a fast pre-check so replacement runs only when needed.
DataExportService.swift:123, DataExportService.swift:165
增加插件索引、脚本文本缓存、网络授权缓存;执行路径改为缓存优先;仅在需要时计算脚本哈希。
Script-plugin execution performance was improved with plugin indexing, script-text caching, and network-permission caching; execution now prefers cache, and script hash is computed only when required.
ScriptPluginService.swift:136, ScriptPluginService.swift:247, ScriptPluginService.swift:730, ScriptPluginService.swift:755, ScriptPluginService.swift:836, ScriptPluginService.swift:937,
ScriptPluginService.swift:1231, ScriptPluginService.swift:1236, ScriptPluginService.swift:1452
预览中的同步热点改异步,减少主线程压力;关闭即时计算时行为更准确。
Preview and instant-calculation performance improved by replacing synchronous hotspots with async flow, reducing main-thread pressure and fixing behavior accuracy when instant calc is disabled.
PreviewOverlayView.swift:16, PreviewOverlayView.swift:103, PreviewWindowController.swift:330, PreviewWindowController.swift:382, PreviewWindowController.swift:461,
ClipItemCardView.swift:1738, SmartContentCache.swift:276
提升预检效率,支持等式左侧计算、多个/嵌套 sqrt,并优化数字格式化性能。
Math recognition and calculation were upgraded with faster pre-checks, support for left-side equation evaluation, multiple/nested
sqrt, and improved number-formatting performance.SmartTextService.swift:1846, SmartTextService.swift:1882, SmartTextService.swift:1928, SmartTextService.swift:1999, SmartTextService.swift:2032
OCR/文本更新与设置切换时主动失效缓存,卡片/行视图任务联动文本与开关变化。
Smart-cache consistency was improved by proactively invalidating cache on OCR/text updates and settings toggles, and by binding card/row tasks to text and switch changes.
DeckDataStore.swift:1414, SettingsView.swift:1211, ClipItemCardView.swift:42, ClipItemCardView.swift:558, ClipItemRowView.swift:21, ClipItemRowView.swift:104
图片严格限制在方形区域,按接近方图/宽图/竖图分别处理,避免冲出卡片。
Vertical-mode image display was refined by strictly constraining images to a square area with separate handling for near-square, wide, and tall images.
ClipItemRowView.swift:117, ClipItemRowView.swift:173
多图记录仅展示首图,新增数量角标与“还有 N 张图片”提示,并修复预加载跳过问题。
Multi-image display was improved by showing only the first image, adding count badges and an "N more images" hint, and fixing premature preload skipping.
ClipItemCardView.swift, Localizable.xcstrings
仅在多图时显示“共 X 张”,放在竖版右侧信息区中间。
In vertical mode, "Total X images" is now shown only for multi-image items and placed in the middle of the right info area.
ClipItemRowView.swift:290
去掉内容区偏移 hack,切换 tab(点击/键盘)不再带整页动画,过渡更稳。
Settings-page interactions and transitions were refined by removing the content offset hack and disabling full-page animation on tab switching (click/keyboard).
SettingsView.swift:184, SettingsView.swift:232, SettingsView.swift:270
迁移按钮改 Tonal 风格;textTertiary 对比度提升;标签编辑输入框改为随输入自动延长。
Visual details were polished with a Tonal migration button style, improved
textTertiarycontrast, and auto-expanding tag editor input fields.NewTagChipView.swift, EditingTagChipView.swift
重新激活时强制回到首项,复用现有平滑滚动逻辑。
Reopen scrolling experience was improved by forcing selection back to the first item on reactivation while reusing existing smooth-scroll logic.
HistoryListView.swift:135
变更 / Changes
竖版顶部移除设置/暂停/关闭/反馈;底部区域按队列模式与按钮栏二选一展示。
Vertical-mode top/bottom interaction logic was reworked: top controls (settings/pause/close/feedback) were removed, and the bottom area now toggles between queue bar and button bar.
TopBarView.swift:1155, HistoryListView.swift:110, TopBarView.swift:958
搜索聚焦/有输入/规则面板打开时,右侧标签区自动收起,避免布局被撑开。
Vertical search layout was adjusted so the right tag area auto-collapses when search is focused, has input, or rule panel is open, preventing horizontal stretch.
TopBarView.swift:18
按钮区和队列区统一为同一高度,移除偏移补丁,视觉对齐一致。
Vertical bottom heights were unified: button area and queue area now share the same height, with offset hacks removed for consistent alignment.
HistoryListView.swift:86, HistoryListView.swift:255, HistoryListView.swift:266
竖版搜索宽度接近吃满可用空间,横版行为不变。
Expanded search width in vertical mode now nearly fills available space, while horizontal-mode behavior remains unchanged.
TopBarView.swift:123
竖版下弹窗改为主面板外侧显示,并加边界保护,不遮挡输入与列表。
Search-rule popup positioning was adjusted for vertical mode to render outside the main panel with boundary protection, avoiding overlap with input and list.
SearchRulePickerPanelController.swift:95, SearchRulePickerPanelController.swift:102
保留编辑/共享分组/删除,并新增颜色圆点选择与状态反馈,点击即持久化。
Tag right-click menu was migrated to
NSMenu, keeping edit/share-group/delete and adding color-dot selection with state feedback and immediate persistence.TopBarView.swift:1568
改为优先保证首项选中;已在首项时不重复设置,避免二次闪动感。
Initial selection after opening panel was adjusted to prioritize the first item, and skip redundant resets when already on first item to avoid secondary flicker.
HistoryListView.swift:1271
调整为 04:00 / 12:00 / 20:00。
Automatic update checks were changed to three runs per day in Beijing time: 04:00, 12:00, and 20:00.
UpdateCoordinator.swift:18, UpdateCoordinator.swift:80
目录保留 .attrib,文件移除 .attrib,并关闭高频 watcher 日志。
Plugin watcher strategy now uses separate masks for directories/files:
.attribis kept for directories, removed for files, and high-frequency watcher logs are disabled.ScriptPluginService.swift:155, ScriptPluginService.swift:159, ScriptPluginService.swift:634, ScriptPluginService.swift:643
新增候选目录收集逻辑,避免新增插件目录初期遗漏刷新。
Watch scope now includes all first-level script directories via new candidate-directory collection logic, preventing missed refresh for newly created plugin folders.
ScriptPluginService.swift:681, ScriptPluginService.swift:695
修复 / Fixes
删除未使用的 tint、icon/iconColor、颜色常量及结构体冗余字段。
Removed unused fields/constants in Welcome page, including
tint,icon/iconColor, and redundant struct fields.WelcomeView.swift:22, WelcomeView.swift:49, WelcomeView.swift:102, WelcomeView.swift:514, WelcomeView.swift:606
已补齐异步调用,恢复编译与运行稳定性。
Fixed six errors caused by missing
awaitin async logging calls, restoring compile and runtime stability.DeckDataStore.swift:1148, DeckDataStore.swift:1176
不再用连续减法推算,改为固定映射,解决 5/6 错位及 7/8/9/0 无响应问题。
Fixed numeric key mapping in rule popup by replacing subtraction-based inference with fixed mapping, resolving 5/6 mismatch and no-response on 7/8/9/0.
焦点切到 .newTag/.editTag 时,跳过延迟 makeFirstResponder(nil)。
Fixed search box focus stealing by skipping delayed
makeFirstResponder(nil)when focus moves to.newTag/.editTag.新建标签时先确保拿到焦点,再自动全选“新标签”文字。
Fixed default selection behavior for new tags by ensuring focus is obtained first, then auto-selecting the "新标签" text.
改为只在“刚写入那次 changeCount”内跳过,不再无条件吞掉真实复制。
Fixed accidental swallowing of the next real copy after paste by limiting skip behavior to the exact just-written
changeCount.ClipboardService.swift:25, ClipboardService.swift:261, ClipboardService.swift:1645
快照恢复支持更大预算和图片类型,恢复函数返回成功/失败并记录错误。
Reduced clipboard-loss risk on paste failure by expanding snapshot restore budget/type coverage and returning explicit success/failure with error logs.
ClipboardService.swift:1469, ClipboardService.swift:1514, ClipboardService.swift:1654
blob 迁移与 blob_path 更新改为强校验,任何一步失败都会整体失败。
Fixed false-positive success in encryption migration by enforcing strict validation for blob migration and
blob_pathupdate, failing as a whole on any step error.DeckSQLManager.swift:5403, DeckSQLManager.swift:5425, BlobStorage.swift:178
解密分支新增严格检查,解不开直接失败,不再写 is_encrypted=false 假状态。
Fixed incorrect plaintext state marking after decrypt failure: decryption branch now strictly checks and fails directly without writing fake
is_encrypted=false.DeckSQLManager.swift:5245, DeckSQLManager.swift:5299
增加 pendingAuthSuccess 阶段校验,仅在合法阶段接受成功握手。
Fixed DirectConnect
authSuccessphase bypass by addingpendingAuthSuccessstate validation and accepting success handshake only in legal phases.DirectConnectService.swift:333, DirectConnectService.swift:980, DirectConnectService.swift:1025
必须存在活跃验证上下文才接受验证成功。
Fixed Multipeer
verify_successbypass by requiring an active verification context before accepting success.MultipeerService.swift:1541
仅 errSecItemNotFound 才创建新 key,其他错误直接上抛。
Fixed unintended key regeneration on temporary Keychain errors: only
errSecItemNotFoundcreates a new key, all other errors are returned directly.SecurityService.swift:111, SecurityService.swift:145, SecurityService.swift:177
clearAllData/clearAll 增加统一取消在飞任务入口。
Fixed stale task write-backs after data clearing by adding a unified in-flight task cancellation entry for
clearAllData/clearAll.DeckDataStore.swift:1441, DeckDataStore.swift:1518, DeckDataStore.swift:1721
已补 streamStore.clearAll()。
Fixed
stop()not clearingstreamStoreby addingstreamStore.clearAll().DirectConnectService.swift:275, DirectConnectService.swift:544
补齐 blob 清理与 totalCount 刷新。
Fixed incomplete
deleteItemByIdpath by adding blob cleanup andtotalCountrefresh.DeckDataStore.swift:1764
分页从 offset 改 cursor,并补稳定排序 ts desc, id desc。
Fixed blob-path collection deletion risk by switching pagination from offset to cursor and adding stable sorting (
ts desc, id desc).DeckDataStore.swift:1809, DeckSQLManager.swift:4378
改为两步赋值,消除编译失败。
Fixed compile error from placing
awaitinside??expression by splitting into two-step assignment.DeckDataStore.swift:1764
“光标助手功能”统一改为“队列模式功能”,并补齐多语言。
Fixed Cmd+Q prompt wording by replacing "Cursor Assistant feature" with "Queue Mode feature" consistently across languages.
Localizable.xcstrings:25502
增加类型校验与 guard 兜底,移除 fatalError 风险路径。
Fixed multiple potential crashes (force unwraps, abnormal elements, empty screen) by adding type checks and
guardfallbacks, and removing riskyfatalErrorpaths.IDEAnchorService.swift:401, OrbitWindow.swift:74, OrbitWindow.swift:102, OrbitWindow.swift:149, OrbitWindow.swift:156, DeckDataStore.swift:1420, MainWindowController.swift:69,
SettingsWindowController.swift:57, UpdatePromptWindowController.swift:34
改为运行时持续读取 stdout/stderr,并在 wait 前正确关闭写端。
Fixed potential process-pipe deadlocks by continuously reading stdout/stderr during execution and correctly closing write ends before waiting.
LANFileArchiver.swift:324, IDEAnchorService.swift:575, OrbitInstaller.swift:192
修正 item.colorValue、缩略图生成、智能分析赋值、脚本插件调用与隐写 API 调用。
Fixed row-view compile/API integration issues, including
item.colorValue, thumbnail generation, smart analysis assignment, script-plugin calls, and steganography API usage.ClipItemRowView.swift
说明 / Notes
新增/更新文案覆盖 de/en/fr/ja/ko/zh-Hans/zh-Hant。
Localization coverage was completed for new/updated strings across de/en/fr/ja/ko/zh-Hans/zh-Hant.
Localizable.xcstrings:19297, Localizable.xcstrings:22815, Localizable.xcstrings:2944, Localizable.xcstrings:50219, Localizable.xcstrings:55241, Localizable.xcstrings:45788,
Localizable.xcstrings:45835, Localizable.xcstrings:45882, Localizable.xcstrings:44852, Localizable.xcstrings:44899
de/fr/ja/ko 的新增长文案改为更自然表达,脚本设置页长文本改为 NSLocalizedString。
Some language content was rewritten with native phrasing (de/fr/ja/ko), and long script-settings text now uses
NSLocalizedString.Localizable.xcstrings, ScriptPluginsSettingsView.swift
所有位置引用均仅保留 文件名:行号,不含任何绝对路径信息。
This draft is path-sanitized: all references keep only
filename:linewithout any absolute path information.兼容性与行为说明 / Compatibility & Behavior Notes
transform 同时兼容“稳定码 + 历史旧值”,展示与执行都可回溯兼容。
Transform rules are compatible with both new stable codes and legacy values in both display and execution paths.
默认走规则;raw=1 或 rules=0 可强制直存;rules=1 可显式开启规则。
CLI /clipkeeps dual behavior compatibility: rules by default, force direct-save withraw=1orrules=0, and explicit enable viarules=1.自动监听持续生效,手动“刷新插件列表”按钮仍保留可用。
Plugin refresh supports both automatic and manual modes: directory watching remains active, and manual "Refresh Plugin List" is still available.
必须同时满足“自动维护恢复备份已开启 + 恢复备份文件存在”才可执行。
"Immediate Restore" uses dual safeguards and can run only when auto-maintenance restore backup is enabled and a restore backup file exists.
升级建议 / Upgrade Notes
重点确认“转换动作”和“脚本插件动作”在你当前规则集中的展示与执行结果。
After upgrading, prioritize validation of Smart Rules, especially how "Transform" and "Script Plugin" actions display and execute in your current rule set.
请在调用端显式加 raw=1 或 rules=0,避免行为变化影响自动化脚本。
If external CLI workflows depend on legacy direct-save behavior, explicitly pass
raw=1orrules=0to avoid automation regressions.可按使用习惯选择“靠左/靠右停靠”,并确认搜索弹窗与预览窗口位置符合预期。
After upgrading, verify vertical layout preference (left/right dock) and confirm search popup and preview window positions match expectations.
This discussion was created from the release v1.3.0 | Palimpsestic.
All reactions