Skip to content

Releases

1.2.33

Choose a tag to compare

@lmce72 lmce72 released this 10 Nov 14:48

同步配置像同步系统一样直接采用最新版本

Better Manager 1.2.33 重做了同步冲突的判定:另一台设备保存的 data.json 同步过来后,只要本机没有未保存的用户修改,就直接采用最新配置,不再把一次普通的同步变成冲突;真正的冲突也会在发现时立即打开解决窗口,而不是等用户去点闪烁的保存键。

跟随最新配置

  • 启动、打开管理器、打开设置以及收到同步文件事件时,都会检查共享配置。
  • 本机没有用户编辑时,直接采用共享文件中的最新版本并刷新界面;不写入、不覆盖 data.json,也不需要点保存。
  • “手机同步了电脑的配置却仍显示旧设置,保存键一直闪,点保存才弹冲突”的链路不会再出现。
  • 后台自动保存(视图状态、启动迁移、设备心跳)不再把本机标记成“有用户编辑”,不会让保存键无端闪烁。
  • 旧版本遗留下来的、本机一侧其实只是基线的冲突,在启动时自动跟随最新远端并清除。
  • 本机有真实未保存编辑时,才会保留冲突并交给用户选择。

冲突直接显示

  • 启动时发现真实冲突,直接打开冲突解决窗口。
  • 运行中收到更新且本机有编辑时,检测到冲突就打开窗口,不再依赖保存键提示。
  • 已打开并被用户关闭的同一冲突不会反复弹窗,仍可从提示条重新打开。
  • 差异按实际有差异的设置项逐项成行,每项单独选择本机/远端;没有差异的项不会渲染,也不存在固定占位的类别。
  • 只有紧密相关的键才合并:分组+标签为「分组与标签」,边栏相关键为「边栏设置」,延迟相关键为「延迟启动」;其余设置各占一行,方便逐项选择。
  • 每行带一句说明,讲清这一项包含什么;设备预设差异仍按每个预设单独成行。
  • 顶层差异由行标题直接表达,不再重复显示「设置项」文本;只有嵌套路径保留「显示差异」明细。
  • 差异明细里的设置路径改用设置页名称,不再显示 RECENT_INSTALL_DAYS 这类原始配置键;数组项优先显示条目名或插件名。
  • “全部保留远端”等原有选择方式不变。

冲突范围

  • 只把用户定制的内容放进冲突:设置项、插件记录、分组/标签、布局、边栏、设备预设、设备名称/类型、来源订阅、外观方案等。
  • BPM 生成、可重新下载/同步且重复无碍的数据不再让用户处理:设备记录文件、插件图标/配色文件、安装记录、仓库映射、安装历史、已解除来源、筛选状态、批量操作快照、排查进度等。
  • 设备记录的增删与心跳不进入冲突;共同设备的名称/类型修改仍会保留。设备预设差异继续按预设分行显示。
  • 图标文件跟随整体设置来源;设备记录保留本机合并结果。

条目差异标记

  • 管理器条目新增未保存标记:本机改动与上次保存不同时,卡片上显示圆形铅笔图标。
  • 冲突状态下,条目改为圆形来源图标(本机/远端);冲突标记优先于未保存标记。
  • 标记只显示图标,边框为圆形;未保存、本机、远端等文字放在悬浮气泡里。
  • 保存完成或冲突解决后,标记自动消失;列表重绘后也会重新挂上。

边界

  • 没有增加“绝对三设备分立”开关。
  • 单机模式的行为保持不变。
  • 旧格式、丢失版本标记的共享内容仍交给冲突界面确认,不静默覆盖本机配置。

验证

  • npm run check 通过:类型检查、Lint 和 655 项自动化测试。
  • 使用真实文件系统与真实修订逻辑复现完整链路:旧设备私有缓存 + 新 data.json 启动后直接显示最新配置且不写共享文件;本机编辑后收到更新会直接产生冲突并打开窗口;选择远端后正确落盘。
  • npm run build 通过。

English

Follow the newest synced configuration

Better Manager 1.2.33 reworks how sync conflicts are decided. When another device publishes data.json, a device with no unsaved user edits adopts the newest configuration immediately instead of turning an ordinary sync into a conflict. Genuine conflicts open the resolver as soon as they are detected, without waiting for a flashing Save button.

Following the latest version

  • The shared configuration is checked at startup, when the manager or settings open, and when shared files change.
  • With no local user edits, the newest shared revision is adopted and the interface refreshes; data.json is neither rewritten nor overwritten, and Save is not required.
  • The old chain — the phone syncs the computer's file but keeps showing old settings, the Save button keeps flashing, and clicking it finally raises a conflict — no longer occurs.
  • Background automatic saves (view state, startup migrations, device heartbeats) no longer mark the device as user-edited, so the Save control no longer flashes without a real edit.
  • Conflicts left by older builds where the local side was merely the base are cleared by following the newest remote at startup.
  • A real unsaved local edit still produces a conflict for the user to resolve.

Conflicts are shown directly

  • A genuine conflict found at startup opens the resolver immediately.
  • When a newer version arrives while local edits exist, the resolver opens as soon as the conflict is detected.
  • The same conflict is not repeatedly reopened after the user dismisses it; it remains available from the notice.
  • Each setting that actually differs gets its own row with an independent local/remote choice. Rows without differences are never rendered; there are no placeholder categories.
  • Only tightly related keys are combined: groups + tags as Groups & tags, Ribbon keys as Ribbon settings, and delay keys as Delayed startup. Every other setting is its own row for item-by-item resolution.
  • Each row carries a one-line description; device presets still appear as one row per preset.
  • Top-level differences are stated by the row title, without repeating a "Setting" text block; the Show differences details remain only for nested paths.
  • Detail paths use the setting names shown in the settings page instead of raw keys such as RECENT_INSTALL_DAYS; array items show their item or plugin name when available.
  • Existing choices such as Remote version · All settings are unchanged.

Conflict scope

  • Only user-customized content enters conflicts: settings, plugin records, groups/tags, layout, Ribbon, device presets, device names/types, source subscriptions and appearance profiles.
  • BPM-generated data that can be re-downloaded or synced harmlessly is no longer user-resolved: device record files, icon/color files, install receipts, repository mappings, install history, unbound sources, saved filters, batch snapshots and troubleshooting progress.
  • Added or removed device records and heartbeats do not conflict; name/type edits on devices present on both sides remain selectable. Preset differences still appear as per-preset rows.
  • The icon file follows the overall settings source; device record files keep the local merged result.

Item marks

  • Manager items now show a round pencil icon when they differ from the last save.
  • During a conflict, the item shows a round source icon (local or remote) instead; the conflict mark takes priority over the unsaved mark.
  • Marks are icon-only with a circular border; the label (Unsaved, Local, Remote) appears in the floating tooltip.
  • Marks disappear after saving or resolving, and are reattached after a list re-render.

Boundaries

  • No "absolute three-device separation" switch was added.
  • Single-machine mode is unchanged.
  • Legacy shared content without a verifiable revision still goes through the conflict UI instead of silently replacing local settings.

Verification

  • npm run check passes: type checking, lint and 655 automated tests.
  • The full path was reproduced with the real filesystem and revision logic: a stale private cache plus a newer data.json shows the latest settings at startup without writing the shared file; a local edit plus an incoming update raises and opens a conflict; choosing the remote side is written correctly.
  • npm run build passes.

1.2.32

Choose a tag to compare

@github-actions github-actions released this 10 Nov 05:47

冲突界面可查看差异

Better Manager 1.2.32 让配置冲突弹窗可以展开查看具体差异位置,并澄清「生效方式」与手动保存的关系。

配置冲突

  • 冲突弹窗底部新增「显示差异 / 隐藏差异」按钮,默认收起。
  • 展开后按冲突分区列出发生变化的设置路径,方便判断冲突在哪。
  • 只显示设置路径,不显示两侧的具体值,避免把令牌等敏感内容展示出来。
  • 展开/收起不会重建分区,也不会丢失已选择的本机/远端版本或滚动位置。

生效方式说明

  • 明确「仅本次会话」的更改立即生效、不写入配置、无需保存,重启后还原。
  • 只有「持久保存」的更改才受「仅手动保存配置」控制;不会因为切换生效方式而自动更改该设置。

验证

  • npm run check 通过:类型检查、Lint 和 633 项自动化测试。
  • npm run build 通过;发布产物使用本次构建生成的 main.js、manifest.json 与 styles.css。
  • 在临时 vault 中制作真实同步冲突,验证差异按钮、路径列表与展开/收起状态。

English

View differences in the conflict dialog

Better Manager 1.2.32 lets the configuration-conflict dialog reveal exactly which settings differ, and clarifies how the apply mode relates to manual saving.

Configuration conflicts

  • The conflict dialog gains a Show differences / Hide differences button, collapsed by default.
  • Expanding it lists the changed setting paths per conflict section, making the conflict easy to locate.
  • Only setting paths are shown, never the values from either side, so tokens and other sensitive content stay hidden.
  • Expanding or collapsing does not rebuild the sections or lose the selected local/remote choices or scroll position.

Apply mode

  • This session only changes take effect immediately, are never written to configuration, do not need saving, and reset after restarting Obsidian.
  • Only Save permanently changes follow Save settings manually; switching the apply mode never changes that setting automatically.

Verification

  • npm run check passes: type checking, lint and 633 automated tests.
  • npm run build passes. The release artifacts main.js, manifest.json and styles.css come from this build.
  • A real sync conflict was created in a temporary vault to verify the difference button, the path list and the expanded/collapsed states.

1.2.31

Choose a tag to compare

@github-actions github-actions released this 10 Nov 04:24

配置同步保护加固

Better Manager 1.2.31 加固同步库中的配置保存边界,避免后台写入覆盖其他设备的更新,也避免把同步期间暂时缺失的配置误当成首次安装。

配置文件同步

  • 单机模式检测到 Obsidian Sync 或已知同步插件时,后台自动保存会保留为待保存更改;显式保存时才将本机编辑合并到当时磁盘上的配置。
  • 同步服务状态无法确认时,后台自动保存同样保持待处理,避免检测失败导致直接写入。
  • 已建立的 data.json 暂时缺失或为空时,不会由后台或后续重启自动重建;首次安装仍须由用户显式保存来创建配置文件。
  • 保存期间文件消失、变空或被另一设备更新时,取消本次写入并保留本机待保存更改。
  • 合并到不完整的外部文件时,仍保留运行所需的设备管理数据,不会因缺少字段而报错。
  • 接受外部或合并后的预设内容时,不再以设备本地时钟时间戳判断版本先后,减少时钟偏差导致的旧配置回写。
  • 保护模式遇到不完整的共享配置时保留修订标记与原文件,只恢复本机可用状态并提示检查同步文件,不自动修补共享配置。

多设备模式

  • 同一同步库中的设备应统一开启配置同步保护。混用保护与单机模式时,设备记录格式不同仍可能产生误冲突。
  • .bpm 恢复目录应加入同步工具的排除列表。

验证

  • npm run check 通过:类型检查、Lint 和 632 项自动化测试。
  • npm run build 通过;发布产物使用本次构建生成的 main.js、manifest.json 与 styles.css。

English

Stronger configuration sync protection

Better Manager 1.2.31 tightens configuration writes in synced vaults. Background saves no longer overwrite updates from another device, and a temporarily missing file is not mistaken for a fresh installation.

Configuration sync

  • In single-machine mode, background saves remain pending when Obsidian Sync or a recognized sync plugin is enabled. An explicit Save merges local edits with the configuration currently on disk.
  • If the sync-service state cannot be checked, background saves also remain pending instead of writing directly.
  • Once data.json has been established, a temporary missing or empty file is never recreated by a background save or a later restart. A first-time installation creates it only after an explicit Save.
  • If the file disappears, becomes empty or changes on another device during a save, the write is cancelled and local changes remain pending.
  • Merging with a partial external file keeps the device-management data required at runtime, so missing fields cannot break the plugin.
  • Accepted external and merged presets no longer rely on device-local timestamps to choose a winner, reducing stale writes caused by clock skew.
  • In protected mode, an incomplete shared configuration keeps its revision marker and original files. BPM recovers only locally available state and reports the sync issue instead of repairing shared files automatically.

Multi-device mode

  • Enable configuration sync protection on every device using the same synced vault. Mixing protected and single-machine modes can still cause false conflicts because device records use different representations.
  • Exclude the .bpm recovery directory from the sync tool.

Verification

  • npm run check passes: type checking, lint and 632 automated tests.
  • npm run build passes. The release artifacts main.js, manifest.json and styles.css come from this build.

1.2.30

Choose a tag to compare

@github-actions github-actions released this 10 Nov 02:23

配置同步修复与手动刷新

Better Manager 1.2.30 修复多设备同步时本机覆盖其他设备修改的问题,并加入手动刷新入口。

配置保存与同步

  • 单机模式保存前把本机改动合并到其他设备的最新配置上,不再整份覆盖;合并后立即同步内存,后续保存不会把外部改动改回去。
  • 磁盘在读取与写入之间再次变化时取消本次保存;支持原子读写的运行环境会使用 adapter.process 缩短窗口。
  • data.json 暂时缺失或为空时,不会把配置重置为默认值;空闲时会直接采纳外部修改。
  • 放弃未保存更改会回到最后一次成功保存的基线,读取失败也不会清空设置或预设。
  • 保护模式下删除缓存后的重建会先确认 data.json 未被同步更新;冲突引用的状态文件缺失时自动丢弃悬空冲突,不再每次启动失败。
  • 启动时迁移的设备记录在关闭窗口选择“不保存”后仍会保留;单机模式删除设备会同时删除旧的设备记录文件,避免下次启动复活。

配置同步保护开关

  • 「启用配置同步保护」改为每台设备自己的设置,只保存在本机,不写入 data.json、不随同步传播,也不会影响其他设备。
  • 修改开关不需要写配置,重启 Obsidian 后生效;设置页会提示“重启后生效”。
  • 关闭保护并选择删除缓存时,只在本设备下次以单机模式启动后删除本机自己的缓存目录,不再删除整个 .bpm 根目录。
  • 旧版本写在 data.json 里的开关会迁移一次;没有开关字段的配置以修订标记或本机 .bpm 判断是否为旧保护库,全新安装默认关闭。
  • 从保护模式切回单机模式时,启动后自动把 data.json 改写成普通格式(去掉修订标记、写回设备记录)。

手动刷新

  • 管理器「更多」菜单新增「刷新」,重新读取外部设置和插件列表并重绘界面。
  • 设置页顶栏新增刷新按钮,可在不重启的情况下采纳外部配置并刷新当前分类。

验证

  • 自动检查通过(618 个测试),构建通过。
  • 在临时 vault 中实测了单机合并、连续自动保存、保护开关切换、保护转单机的格式转换、缓存删除范围,以及两处刷新按钮。

English

Configuration sync fixes and manual refresh

Better Manager 1.2.30 fixes local machines overwriting edits made on other devices during sync, and adds manual refresh entries.

Saving and sync

  • Single-machine mode merges local edits onto the latest settings from other devices before saving instead of replacing the file; merged values are adopted into memory so later saves do not revert them.
  • If the disk changes again between the read and the write, the save is cancelled; environments with atomic read-modify-write use adapter.process to narrow the window.
  • A temporarily missing or empty data.json no longer resets settings to defaults, and external changes are adopted while idle.
  • Discarding unsaved changes returns to the last successful baseline; a failed read no longer clears settings or presets.
  • In protected mode, rebuilding after cache deletion first verifies that data.json has not been updated by sync; conflicts whose referenced states are missing are dropped instead of blocking every startup.
  • Device records migrated at startup survive choosing Don't save; deleting a device in single-machine mode also removes its stale record file so it does not return.

Configuration sync protection switch

  • Enable configuration sync protection is now a per-device setting stored locally. It is not written to data.json, does not sync to other devices and does not affect them.
  • Changing the switch no longer writes configuration; it applies after restarting Obsidian, and the settings page shows a restart notice.
  • Turning protection off with cache deletion removes only this device's own cache directory after the next single-machine start, not the whole .bpm root.
  • A legacy switch stored in data.json is migrated once; files without the field are treated as protected only when they carry a revision marker or a local .bpm exists, and fresh installs default to off.
  • Switching from protected to single-machine mode rewrites data.json into the plain format at startup (revision marker removed, device records written back).

Manual refresh

  • The manager's More menu adds Refresh, which re-reads external settings and the plugin list and redraws the interface.
  • The settings top bar adds a refresh button that adopts external configuration and refreshes the current category without restarting.

Verification

  • Automated checks pass (618 tests), and the build passes.
  • Tested in a temporary vault: single-machine merging, consecutive automatic saves, switching protection, the protected-to-single-machine conversion, cache deletion scope, and both refresh buttons.

1.2.29

Choose a tag to compare

@github-actions github-actions released this 09 Nov 14:52

更清晰的编辑界面与更稳妥的配置保存

编辑与快捷创建

  • 编辑模式加入用途说明;自定义布局模式提示排序和分割线操作,窄屏下按内容自然排布。
  • 批量分组、添加标签和单插件快捷菜单支持直接创建分组或标签,创建后应用到所选插件;没有现有分类时也能使用。
  • 分类创建入口共用 ID 校验,防止重复 ID 和覆盖内置标签;取消创建不会修改配置。
  • 管理器悬浮提示支持图标、标题与下方说明,长文字完整换行。旧版 Obsidian 保留完整文字提示。

配置保存与同步保护

  • 单文件模式保存相同内容时跳过重复写盘,减少不必要的同步事件。
  • 读取配置失败时停止保存,避免覆盖尚未成功读取的配置。
  • 保存等待期间出现新编辑或新的外部配置时,拒绝过期保存,保留待保存内容。
  • 为 .bpm 中已有的恢复文件建立只读内存基线,避免将相同内容或仅修改时间变化误报为外部修改;不会为此写入磁盘索引。
  • 外部修改事件仍仅用于提醒,不会自动采用配置、重建界面或暂停保存。

Clearer editing and safer settings saves

Editing and quick creation

  • Edit mode explains the available actions, with ordering and separator guidance for custom layouts. Narrow screens size the bar to its content.
  • Bulk group assignment, tag addition and per-plugin quick menus can create groups or tags and apply them to selected plugins, including when no categories exist yet.
  • Creation entry points share ID validation to prevent duplicate IDs and replacement of built-in tags. Cancelling leaves settings unchanged.
  • Manager tooltips support an icon, title and wrapping explanation. Older Obsidian versions retain the complete text tooltip.

Settings saves and sync protection

  • Single-file mode skips writes when the configuration content is unchanged, reducing unnecessary sync events.
  • A configuration read failure stops the save instead of allowing an unread configuration to be overwritten.
  • New edits or external configuration changes while a save is waiting invalidate the stale save and preserve pending changes.
  • Existing recovery files in .bpm receive a read-only, in-memory baseline so identical content and modification-time-only changes do not trigger false external-change warnings. No disk index is written for this baseline.
  • External file events remain advisory: they do not automatically adopt settings, rebuild the interface or pause saving.

1.2.28

Choose a tag to compare

@github-actions github-actions released this 09 Nov 08:19

一键操作与更清晰的弹窗

Better Manager 1.2.28 新增一键更新、按筛选结果或分组/标签批量启停插件,并统一了插件商店、还原点和更新规则的弹窗样式。手机端的菜单与筛选也更紧凑。

一键操作

  • 插件总览工具栏新增闪电按钮,可一键更新全部、全部启用或全部禁用「当前筛选列表」,以及按分组或标签批量启用/禁用。
  • 基础设置新增「一键操作」分组,可分别关闭不需要的单项操作。
  • 批量启停会跳过 BPM 自身和 bpm-ignore 插件;在手机上启用时还会跳过仅支持桌面的插件。
  • 操作会去重、避免重复启动,并在失败时列出失败插件,而不是静默跳过。

批量编辑

  • 批量工具栏加入「全选当前列表」,与原有隐藏操作并列。
  • 批量启停不再因为个别插件失败而中断全部操作,成功的部分仍会保存。
  • 手机端的子菜单改为逐层替换,不再叠加多个菜单。

插件商店(Preview)

  • 商店、详情页统一为新的弹窗标题栏与卡片布局;手机上分类改用下拉菜单,筛选可折叠。
  • 详情页的「返回列表」按钮与内容左对齐,并改为与其他 BPM 卡片一致的边框样式。
  • 分页、筛选说明与卡片间距统一,减少窄屏下的挤压。

还原点与更新规则

  • 版本回退、更新规则弹窗使用同一套标题栏、卡片与分页样式。
  • 更新规则的「清除全部」移到每个插件卡片的标题行,规则项改为紧凑的单行布局,手机上更易操作。

筛选与排序

  • 筛选/排序菜单的选项可带独立操作按钮;排序菜单中的「自定义布局」现在可直接进入布局编辑。
  • 改进触摸与键盘操作:滑动时不会误触选项,方向键与独立操作按钮都能正确聚焦。
  • 设置页和原生分类列表的关闭按钮英文提示修正为 Close。

验证

  • 自动检查通过(584 个测试),构建通过。
  • 在临时 vault 中检查了插件商店详情页与返回按钮、一键操作菜单及筛选菜单的实际显示。

English

One-click actions and clearer dialogs

Better Manager 1.2.28 adds one-click updates, filtered-list and group/tag bulk toggles, and refreshes the plugin store, restore-point and update-rule dialogs. Mobile menus and filters are more compact.

One-click actions

  • A lightning button in the plugin overview toolbar can update everything, enable or disable the current filtered list, and toggle every plugin in a group or tag.
  • Basic settings gains a One-click actions group so individual actions can be turned off.
  • Bulk toggles skip BPM itself and bpm-ignore plugins, and skip desktop-only plugins when enabling on mobile.
  • Runs are deduplicated, overlap is prevented, and failures are listed instead of silently skipped.

Bulk editing

  • The bulk toolbar gains Select current list alongside the existing hide action.
  • A single plugin failure no longer aborts the whole batch; successful changes are still saved.
  • Mobile submenus replace the previous menu instead of stacking.

Plugin store (Preview)

  • The store and detail pages share a new dialog header and card layout; mobile uses a tab dropdown and collapsible filters.
  • The detail page's Back to list button aligns with the content and uses the same bordered card style as other BPM controls.
  • Pagination, filter help and card spacing are unified for narrow screens.

Restore points and update rules

  • Version rollback and update-rule dialogs use the same header, cards and pagination.
  • Update rules move Clear all into each plugin card header and use compact single-row settings that are easier to use on phones.

Filters and sorting

  • Filter and sort menu options can carry their own action button; Custom layout in the sort menu now opens layout editing directly.
  • Touch and keyboard handling improved: swiping does not trigger options, and arrow keys and option actions keep focus.
  • The English tooltip for the settings close button is corrected to Close.

Verification

  • Automated checks pass (584 tests), and the build passes.
  • Checked the plugin store detail page and back button, the one-click menu and filter menus in a temporary vault.

1.2.26

Choose a tag to compare

@github-actions github-actions released this 08 Nov 12:34

默认单文件保存,多设备同步按需开启

Better Manager 1.2.26 默认回到更简单的单机保存方式:只读写 data.json,不再创建 .bpm 恢复目录。多设备实时同步的用户可以在基础设置中开启「启用配置同步保护」。

单机模式(默认)

  • 只读写 data.json,不创建 .bpm,也没有草稿文件、冲突副本和中断保存恢复。
  • 设备记录和预设保存在 data.json,不再维护 data/devices/*.json 和设备心跳文件。
  • 手动保存、自动保存、关闭时的保存询问以及「不保存」回退都保持不变。
  • 外部修改 data.json 后,保存前会确认一次,避免直接覆盖。

配置同步保护(可选)

  • 仅在 Obsidian Sync、iCloud、Syncthing 等工具多设备实时同步本库时开启;开启后会恢复草稿、冲突副本与中断保存恢复,并创建 .bpm 目录。
  • 修改开关后需重启 Obsidian 生效;切换前会先保存当前配置,关闭时可选择同时删除 .bpm。
  • 从旧版本升级且已有配置时,会沿用原来的开启状态;全新安装默认关闭。
  • 开启后请把 .bpm 加入同步工具的排除列表;检测到同步插件但保护关闭时,BPM 会提示一次。

恢复与设置界面

  • 删除 .bpm 或 data 目录后,BPM 会自动丢弃失效的恢复锚点并按现有 data.json 重建,不再无法启动;保存也能正常继续。
  • 设置分类列表右侧新增与设置页一致的搜索按钮和保存按钮;保存按钮仅在「仅手动保存配置」开启时显示。
  • 修复设置分类标题左侧齿轮图标丢失的问题。
  • 打开管理器时的内部布局整理不再产生「未保存」状态。

验证

  • 自动检查通过(554 个测试),构建通过。
  • 在空的临时 vault 中实测了默认单机模式、手动/自动保存与放弃、双向切换同步保护、删除恢复目录后的启动与再次保存,以及设置列表的搜索/保存按钮。

English

Single-file saving by default, sync protection on demand

Better Manager 1.2.26 returns to a simpler single-machine setup by default: only data.json is read and written, and no .bpm recovery folder is created. If a sync tool keeps this vault in sync across devices, turn on Enable configuration sync protection in Basic settings.

Single-machine mode (default)

  • Only data.json is read and written. There are no .bpm, draft files, conflict copies or interrupted-save recovery.
  • Device records and presets live in data.json; data/devices/*.json and device heartbeat files are no longer maintained.
  • Manual saving, automatic saving, the close prompt and Don't save rollback are unchanged.
  • If data.json changed externally, saving asks for confirmation instead of overwriting silently.

Configuration sync protection (optional)

  • Enable it only when Obsidian Sync, iCloud, Syncthing or a similar tool syncs this vault in real time across devices. It restores drafts, conflict copies and interrupted-save recovery, and creates the .bpm folder.
  • Restart Obsidian after changing the switch. The current configuration is saved first, and turning protection off can also delete .bpm.
  • Upgraded installations with an existing configuration keep the previous enabled state; fresh installs start with it off.
  • Exclude .bpm from your sync tool. BPM shows one reminder if a sync plugin is detected while protection is off.

Recovery and settings UI

  • Deleting .bpm or the data folder no longer prevents BPM from starting: stale anchors are discarded and the configuration is rebuilt from data.json; saving continues to work.
  • The settings category list gains the same search and save buttons as the settings editor; save appears only when Save settings manually is on.
  • Fixes the missing gear icon beside the settings category heading.
  • Internal layout normalization on opening the manager no longer creates an unsaved state.

Verification

  • Automated checks pass (554 tests), and the build passes.
  • Tested in an empty temporary vault: default single-machine mode, manual/automatic saving and discarding, switching sync protection both ways, starting and saving after deleting the recovery folder, and the settings-list search/save buttons.

1.2.25

Choose a tag to compare

@github-actions github-actions released this 08 Nov 10:51

保存更可靠,改动不再丢失

Better Manager 1.2.25 主要修复配置保存与多设备同步的可靠性问题,并带来两处界面改进。

保存与同步

  • 选择「不保存并丢弃」后,被放弃的修改不会再混进下一次保存,之前排队中的旧修改也不会重新出现。
  • 放弃过程中新做的修改会被保留;如果放弃后仍有未保存内容,窗口会保持打开,让你再确认一次。
  • 点「不保存」后,临时切换过的插件开关和外观会立即恢复成上次保存的样子。
  • 保存时如果另一台设备正好同步了配置文件,BPM 会先停下重新核对,不会覆盖对方刚同步的内容。
  • 保存被中断(同步冲突、写入失败等)不会再显示为成功;下次保存会先把文件恢复到保存前的状态,磁盘上原本存在、但不在记录里的文件也不会被删除。
  • 保存失败会写明具体原因(例如磁盘空间不足),并提示保留窗口后重试。
  • 配置不完整时,提示会逐项列出是哪个文件缺失、内容不一致,还是本该删除的文件仍然存在。
  • 只改了关联内容(图标样式、设备记录)也会显示未保存标记,直到保存或改回原样。

设备

  • 给其他设备改名或修改类型现在会真正保存并同步,重启后仍然有效。
  • 改名、改类型或删除失败会提示错误并恢复原状,不会出现界面变了却实际没保存。
  • 其他设备的「最后在线时间」更新不再阻塞保存,保存时仍会带上最新时间。

外观与菜单

  • 外观总览顶部统计改为按内容宽度靠左排列,不再被拉成四个等宽大块;过长的主题名会截断,悬停可查看完整名称。
  • 插件卡片「更多」菜单新增「快速添加到延迟启动组」,可直接选择延迟档位或设为无延迟;对 Better Manager 自身和标记为忽略的插件不可用。

Ribbon

  • 未加载插件的功能区图标归入「插件未启用」,不再算作显示中;筛选项「插件被禁用」更名为「插件未启用」,核心插件也不会再被误判为未加载。

验证

  • 自动检查通过(547 个测试),构建通过。
  • 在空的临时 vault 中实测了手动保存、自动保存与放弃草稿的完整流程。

English

More reliable saving, nothing lost

Better Manager 1.2.25 focuses on reliable configuration saving and multi-device sync, with two interface improvements.

Saving and sync

  • After choosing Don't save and discard, discarded changes no longer leak into the next save, and older queued changes no longer reappear.
  • Edits made while a discard is still finishing are kept. If anything is still unsaved afterwards, the window stays open so you can confirm again.
  • After choosing Don't save, temporary plugin switches and appearance changes immediately return to the last saved state.
  • If another device syncs the configuration file during a save, BPM stops and re-checks instead of overwriting the other device's content.
  • A save interrupted by a sync conflict or a failed write no longer reports success. The next save restores the pre-save state first, and files that already existed on disk but were not recorded are not deleted.
  • A failed save now explains the reason (for example, not enough disk space) and asks you to keep the window open and retry.
  • When the configuration is incomplete, the message lists exactly which file is missing, has different content, or still exists when it should have been removed.
  • Changing only related content (icon styles, device records) now also shows unsaved changes until you save or change it back.

Devices

  • Renaming another device or changing its type is now actually saved and synced, and survives a restart.
  • If renaming, changing type or deleting fails, you get an error and the old state is restored, so the interface never shows a change that was not saved.
  • Other devices' Last seen updates no longer block saving, and the latest time is still included when you save.

Appearance and menus

  • The statistics at the top of the appearance overview now sit left-aligned at their natural width instead of being stretched into four equal blocks. Long theme names are shortened, with the full name on hover.
  • The plugin card's More menu adds Quick add to delayed startup group, letting you pick a delay tier or no delay. It is unavailable for Better Manager itself and for plugins marked as ignored.

Ribbon

  • Ribbon icons for unloaded plugins are grouped under Plugin not enabled and no longer count as visible. The filter is renamed from Plugin disabled to Plugin not enabled, and core plugins are no longer incorrectly marked as unloaded.

Verification

  • Automated checks pass (547 tests), and the build passes.
  • Manual saving, automatic saving and discarding drafts were tested end to end in an empty temporary vault.

1.2.23

Choose a tag to compare

@github-actions github-actions released this 06 Nov 09:57

视图状态、设置导航与 Ribbon 修正

Better Manager 1.2.23 修复搜索/筛选被误当成待保存配置的问题,并补齐设置分类、Ribbon 和外观工具栏的状态。

保存行为

  • 搜索、排序、状态/分组/标签/延迟筛选改为自动保存视图状态,不再产生手动保存草稿。
  • 打开管理器时同步内部插件记录也走自动保存,不会制造“未保存”。
  • 关闭时选择“不保存并丢弃”会真正清除本机草稿;下次打开不再闪保存按钮。
  • 只有实际配置修改才需要手动保存。

设置导航

  • 分类下拉新增「全部分类」,可回到类似原生的设置分类总览,再进入各分类。
  • 延迟启动分类始终显示;未启用时变灰,并在分类行内提供开关。
  • 设置页背景改为 var(--modal-background),与设置弹窗整体背景一致。

Ribbon 与外观

  • 修复 Obsidian 核心插件(日记、命令面板、快速切换、关系图谱、白板、模板等)被误判为「插件未加载」的问题。
  • 只有确实缺少社区插件 manifest 的 Ribbon 条目才显示未加载状态。
  • 外观总览的“+”新建按钮去掉多余边框,仅保留图标。

验证

  • 搜索后 hasUnsavedSettings 保持 false,关闭不弹保存确认。
  • 设置根容器与弹窗背景一致。
  • bun run check 通过,464 个测试全部通过。
  • bun run build 通过。

English

View state, settings navigation and Ribbon fixes

Better Manager 1.2.23 stops search and filters from becoming manual-save drafts and completes settings, Ribbon and appearance toolbar states.

Saving

  • Search, sort, status/group/tag/delay filters are saved automatically as view state and no longer create a manual draft.
  • Internal plugin-record synchronization on opening the manager also saves automatically.
  • Choosing Don’t save and discard during close now clears the local draft; the save button no longer flashes on the next open.
  • Only real configuration changes require a manual save.

Settings navigation

  • The category dropdown adds All settings, returning to a native-like category overview before entering a category.
  • Delay Startup is always listed; when disabled it is grayed and includes an inline switch.
  • The settings root uses var(--modal-background) to match the settings modal.

Ribbon and appearance

  • Fixes Obsidian core plugins (Daily notes, Command palette, Quick switcher, Graph, Canvas, Templates and others) being incorrectly marked Plugin unavailable.
  • Only Ribbon entries whose community plugin manifest is actually missing show the unavailable state.
  • The appearance “+” create action no longer has an extra border.

Verification

  • After searching, hasUnsavedSettings stays false and closing does not ask to save.
  • The settings root and modal backgrounds match.
  • bun run check passes with 464 tests.
  • bun run build passes.

1.2.22

Choose a tag to compare

@github-actions github-actions released this 06 Nov 09:09

配置保存与界面修正

Better Manager 1.2.22 完成显式保存与冲突处理,并集中修正设置页、筛选栏和同步提示的界面细节。

配置与保存

  • 管理器和设置页使用「保存更改」提交持久修改;存在未保存内容时高亮提示。
  • 保存前检查最新共享配置,冲突时保留本地与远端两份,等待用户选择。
  • 外部 data.json 变化不会重建当前界面、打断编辑或自动回写。
  • 关闭设置页或管理器时,按当前保存策略检查并保留未保存修改。
  • 设备管理关闭期间的修改会合并保留,不会因重新开启而丢失。
  • 迁移或更新插件时校验目标插件身份,避免写入错误的插件目录。

界面修正

  • BPM 设置页背景跟随主题主背景,移除与纯黑背景割裂的灰色面板。
  • 恢复设置页功能/工具按钮选中时的强调色背景。
  • 紧凑下拉高度降至 30px,图标方格与下拉同高,图标与标签保留约 6px 间距。
  • 分组、标签、延迟筛选支持点击图标+标签直接打开对应设置;多选菜单底部增加「跳转到设置」。
  • 桌面端排序、状态、分组、标签、延迟五个筛选项保持单行。
  • 外观总览四项统计等宽,长主题名不再撑宽最后一格。
  • Ribbon 搜索框圆角与其他组件统一,并与设备作用域行紧贴。
  • 设备记录继续使用文件变更事件,不轮询。

验证

  • bun run check 通过,464 个测试全部通过。
  • bun run build 通过。

English

Configuration saving and UI fixes

Better Manager 1.2.22 completes explicit saving and conflict handling and polishes the settings, filter and sync-notice interfaces.

Configuration and saving

  • The manager and settings pages use Save changes for persistent edits and highlight unsaved changes.
  • Saving checks the latest shared configuration; conflicts preserve both local and remote versions for a choice.
  • External data.json changes do not rebuild the current view, interrupt editing or write back automatically.
  • Closing settings or the manager checks and preserves unsaved work according to the current save policy.
  • Device-management changes made while disabled are merged and retained when re-enabled.
  • Plugin transfers validate the target plugin identity before writing files.

Interface fixes

  • BPM settings follow the theme primary background instead of a separate gray panel.
  • Restores the accent background for selected feature and tool buttons.
  • Compact dropdowns are 30px tall with matching icon squares and about 6px between icon and label.
  • Group, tag and delay filters open their matching settings from the icon+label; multi-select menus include a settings jump.
  • The five desktop filter fields stay on one row.
  • Appearance summary chips are equal width, so a long theme name no longer widens the last chip.
  • Ribbon search uses the shared radius and sits flush with the device scope row.
  • Device records continue to use file-change events instead of polling.

Verification

  • bun run check passes with 464 tests.
  • bun run build passes.