Skip to content

Releases: 2026heshao/FloatPulse

FloatPulse v4.10.0 — startup flicker fixed, real text context menus

Choose a tag to compare

@github-actions github-actions released this 12 Oct 14:50

FloatPulse v4.10.0

A Windows floating ball that catches what you copy, drag or screenshot — clipboard snippets, temp assets, pinned reference shots — so they stay one hover away instead of getting lost in a chat log.

中文:一款 Windows 桌面常驻悬浮球:剪贴板自动留存 → 素材临时中转 → 截图钉屏对照。

Native PyQt6 + QSS. No Electron, no bundled browser engine. ~32 MB download, ~1 s cold start. Windows 10/11.

What's new

Fixes (both reported by users, both root-caused with frame-level evidence rather than guesswork):

  • Nav sidebar no longer jumps on startup. The plugin-page assembly was deliberately deferred to ~960 ms after the window appeared (a startup-speed trade-off), so the sidebar first rendered without its plugin buttons and then grew 5 rows at once — measured as the "Settings" entry shifting 190 px in a single frame, with the scrollbar appearing from nothing. Nav slots are now reserved before show via a manifest-only pre-scan (~1.6 ms, no plugin modules imported), so the sidebar is at its final state on the very first frame; real pages later swap into place idempotently. Measured after the fix: 0 relayouts, 0 px shift, 0 changed pixel frames.
  • Context menus on text fields are now real, usable menus. Qt's built-in createStandardContextMenu() is English-only, ignores the app theme, and is almost entirely greyed-out on an empty field (the "no real function" the user reported). A single application-level event filter now covers every window — including plugin pages created later — with a Chinese, theme-aware menu that lists only genuinely applicable actions. Password / no-echo fields deliberately never offer Cut or Copy.

Discoverability:

  • Added a full English README (README.en.md) with a 中文/English switcher, so the project is readable and searchable outside Chinese-speaking communities.

Download

Recommended — installer FloatPulse-v4.10.0-setup.exe (24.4 MB)
Portable zip FloatPulse-v4.10.0-win64.zip (32.4 MB) — unzip and run, no Python needed

Plugins are not bundled — grab only what you want from the assets below (10–40 KB each), drop into plugin_store\, then install from the in-app plugin store: ai-assistant, ai-text-workshop, kb-search, recurring-tasks, vault, weekly-report.

Verify your download

SHA256SUMS.txt is attached; run sha256sum -c SHA256SUMS.txt in the same folder.

Notes

  • UI is Chinese only for now (i18n is on the roadmap); architecture, plugin API and tests are language-neutral.
  • Portable zip keeps data next to the exe; the installer uses %APPDATA%\FloatPulse so upgrades never lose your data.
  • Not a second brain, not a global file searcher (use Everything / Flow Launcher), no cross-device sync — it is a staging area by design.

Full changelog: https://github.com/2026heshao/FloatPulse/blob/main/CHANGELOG.md

v4.9.1

Choose a tag to compare

@github-actions github-actions released this 11 Oct 14:04

Full Changelog: v4.9.0...v4.9.1

v4.9.0

Choose a tag to compare

@github-actions github-actions released this 11 Oct 10:02

Full Changelog: v4.8.0...v4.9.0

v4.8.0

Choose a tag to compare

@2026heshao 2026heshao released this 02 Oct 08:52

下载:FloatPulse-v4.8.0-win64.zip 解压即用(便携版,数据留在程序目录旁)。
插件按需下载 .fpplug,放进程序目录的 plugin_store\ 即可在「插件中心 → 插件商店」安装。
校验完整性:sha256sum -c SHA256SUMS.txt。


[v4.8.0] - 2026-10-02

本版把 v4.7.0 之后两天的打磨一次收口,主线是三件事:图标体系与高 DPI 显示彻底对齐(自绘图标全量替换 emoji、软件图标随卡片真正缩放)、设置页体验重整(番茄钟独立成页、新增窗口透明度 / 界面缩放 / 小卡片图标大小)、插件生态与数据安全补强(应用内插件市场、数据写入滚动备份与损坏自愈、安装版数据目录双轨)。

Added

  • 插件「密码保险箱」(v1.0.0,本版首次随发布包提供):只活在本机的密码保险箱——自定义字段收纳账号密码与任意机密,Ctrl+Alt+V 开主界面、Ctrl+Alt+B 热键快速取用,复制后 30 秒自动清剪贴板。加密是 DPAPI + 主密码(PBKDF2)双因子整形库加密:换机器或没主密码都打不开,不联网、不同步、不碰宿主数据。★能力声明恒为空(capabilities: [])——它拿不到宿主任何数据接口,也拿不到网络库;vault_core 刻意不 import PyQt6(纯逻辑可单测),搜索路径永不命中 secret 字段。上一版 Release 的附件区只有 5 个插件包,本版起为 6 个(vault.fpplug)。回归:tests/test_vault_core.py 115 项 + 离屏 tools/verify_vault.py 48/48;README 插件表与 marketplace/index.json(生成器 tools/build_marketplace.py,5 → 6 条)同步
  • 小卡片软件图标大小独立可调(用户可见变更,2026-10-02 用户报「图标大小调不动」):设置 → 外观新增「小卡片图标大小」步进器(app_mini_icon_size,24–56px、每档 4px,默认 36)。根因不是主窗口——主窗口软件导航页的图标一直是 card_size - 20 严格跟随(离屏实测 card 60/96/140 → 图标位图 40/76/120),用户看到「调不动」的是悬浮球旁那张小卡片:card_window._refresh_app_page 里 btn_size = 76 / icon_px = 36 是两处独立硬编码,与设置项完全脱钩。现改为读配置驱动,并抽出唯一换算点 constants.mini_btn_size()(按钮边长 = 图标 + 40;36 → 76,与历史值一致,老用户视觉零变化)。范围常量 MINI_ICON_{MIN,MAX,DEFAULT} / MINI_BTN_PAD 收进 src/constants.py(三处共用:card_window 渲染、settings_panel 步进器、config _CONFIG_RANGES),避免两处各写一个数字日后漂移;上限 56 的依据是内容区可用宽 ≈ 440−48−40 = 352px,按钮 96px 仍排得下 3 列。接线:CardWindow.mini_icon_size 懒读 property(set_config_manager 在构造之后注入,不能放 __init__;换源即作废缓存;越界钳制、脏值静默回退默认)+ 公开门面 apply_icon_size()(D3 契约,宿主不穿透私有成员;可见且停在 app 页才重建网格,不可见只更值、切页自然生效,同值不重复重建以免长按 ± 时反复重排);MainWindow.mini_icon_size_changed 信号 → knowledge_ball.main() 转发到 ball.card_window.apply_icon_size;「恢复默认设置」广播区补该键。回归:新增 tests/test_mini_icon_size.py 25 项(常量与换算单调/钳制、配置三件套、property 懒读/越界/脏值/换源、apply 门面幂等与可见性门控、源码级钉子「_refresh_app_page 里不得再出现 icon_px = 36 / btn_size = 76 字面量」、真实渲染三档 iconSize 与按钮边长、设置页落盘/广播/钳制/refresh 不误广播、MainWindow 信号 AST 断言);新增离屏 tools/verify_mini_icon_size.py A–G 七段全通过(三档实测 iconSize 24/36/56、按钮边长 64/76/96,deleteLater 结算后按钮数恒为 5 无残留;主窗口卡片链路回归 card=140 → 图标 120px);test_settings_nav 搬运完整性参数表补 _set_mini_icon_size;verify_settings_groups 8/8(外观组加行后分隔线动态校验通过,脚本零改动);全量 pytest 2035 passed / 3 skipped / 6 subtests;ruff 全绿;真截图目检 build/shots/mini_icon_{24,36,56}.png + mini_icon_settings.png(24px 一行 5 个 / 56px 自动换行 3+2,布局不溢出)。⚠本条的「主窗口图标一直正常」结论有误,已在下方 Fixed 段修正:当时只量了 pixmap 对象尺寸(card_size - 20),没量真实渲染像素;实机上是 QIcon 不放大导致图标恒卡在源帧尺寸(.lnk 更是恒定 40px),主窗口同样受影响
  • 番茄钟设置独立成页(用户可见变更,2026-10-02 用户拍板):设置页左侧分类导航新增「🍅 番茄钟」分类(原「⚡ 全局工具」卡内的 4 项整体搬迁:总开关 / 专注时长 / 休息时长 / 自动进入休息),工具卡此后只留快速捕捉与截图钉屏两组热键。纯 UI 重组,零行为变更——控件属性名、_on_pomodoro_* 回调、refresh() 同步与 pomodoro_changed 广播链一律不动,float_data/config.json 的 pomodoro_* 四键口径与老配置零迁移。设置分类 9 → 10(SETTINGS_CATEGORIES 新增 ("pomodoro", "🍅", "番茄钟"),插在 tools 与 system 之间);「全局工具」卡的末行标记随搬迁改挂到截图热键行(末行无悬空分隔线的不变量保持)。回归:test_settings_nav 分类数断言 9→10 + 搬运完整性参数表补「番茄钟」注释分组;verify_settings_groups 期望卡序同步(A/B 段 11 张卡逐卡校验通过,含「软件更新」子卡);全量 pytest 2035 passed / 3 skipped / 6 subtests;test_init 冒烟全 [OK];使用说明页「设置」章节的分类清单与「全局工具」描述同步改写;light/dark 双主题真截图目检(build/shots/settings_pomodoro_{light,dark}.png,临时截图脚本跑完即删)
  • 插件中心卡片降噪(用户可见变更,2026-10-01 用户拍板「降噪保留 + 动作保持逐行」):对照用户截图诊断——卡片信息全平铺(描述两三行 + 📖摘要 + 动作逐行 + 依赖行 + 能力行 + 4 按钮)导致单卡过高、一屏只能看两张。降噪三项:①描述截断:卡面最多 DESC_MAX=64 字(双列卡宽 ≈2 行,一眼能扫完),超出截断加省略号、全文进悬停提示(新增纯函数 clip_text);②依赖行消失:requires(PyQt6.QtCore 这类开发者信息)不再占卡面行,连同被截断的描述全文一起挂进卡片整体悬停提示(QToolTip 沿父链找最近有提示的控件,悬停卡面空白处可见)——有无能力行行为一致;③能力徽章化:原「能力: 🌐 网络访问、✍ 写入数据…」文字行改为一排胶囊徽章(pluginCapBadge,短文案 🌐 网络 / ✍ 写入 / 🛠 改删 / 🧠 AI,完整语义在徽章悬停提示 CAP_TIPS,从 _make_card 局部 dict 提升为模块级三卡共用),淡主色底 QSS 与 pluginStoreBadge 同族(light/dark token 双主题齐备)。附带:标题行「名称 v版本」拆成两个 QLabel(版本弱化为灰小字),商店卡 / 在线市场卡同步同款降噪(版本拆分 + 徽章行 + 描述截断,源包名/热键/体积保留文字行);「(无注册动作)」从主文字色(pluginCardDesc)降为弱化灰(pluginActionTag)不与描述抢层级。信息零删除——描述全文、依赖清单、能力语义全部可悬停查看;动作清单按用户选择保持逐行不动。回归:新增 tests/test_plugins_card_polish.py 15 项(clip_text 边界 / 长描述截断+悬停全文 / 依赖不占卡面且悬停可见(有无能力两态)/ 徽章数量短文案语义提示 / 标题拆分 / 商店卡在线卡同款 / 网格回归);既有 test_plugins_panel 42 项全绿(文本存在性断言不受排版影响);全量 pytest 1965 → 1987 passed;verify_plugins_panel 23/23 + verify_plugins_page 19/19;light/dark 双主题真截图(build/shots/plugins_card_{light,dark}.png,临时探针跑完即删);test_init 冒烟 RC=0。二次收敛(同日用户复看反馈「介绍重复太多,使用说明看 md 就行」):卡面 📖 使用说明摘要行整体移除(描述与摘自 md 的摘要两段都在介绍「这插件是干嘛的」,重复感是主要观感问题;详情点「查看使用说明」走程序内 md 查看器,信息零丢失)——usage_summary() 函数与 USAGE_SUMMARY_MAX 常量随之删除(无消费者不留死代码),theme.py 的 pluginCardUsage 死规则清理;描述再收短 DESC_MAX 64→48 字(约一行半,悬停全文保留)。测试同步:test_plugins_panel 的摘要函数三测删除、「摘要上卡」断言反转为「摘要不上卡 + 按钮保留」,verify_plugins_page C6 反转,test_plugins_card_polish DESC_MAX 常量断言对齐;复验:插件相关 54 项 + 全量 pytest(我方改动面全绿)+ verify_plugins_page 19/19 + verify_plugins_panel 23/23 + 双主题截图 build/shots/plugins_card2_*.png 目检(单卡高度再降约 1/3)+ 冒烟通过
  • AI 助手 1.12.0:新增「清空全部任务」动作 + 动作协议防谎报强化(用户可见变更,2026-10-01 用户实测反馈):用户实测「将任务清空,设置明天任务为…」时模型编造 delete_task #1/#2 编号(数据里根本不存在)被 id 护栏全部安全跳过,却在正文谎称「已清空了所有现有任务」——任务实际没清空。三处修复:①新增 clear_tasks{} 动作(无参数、manage 级 → 走既有确认卡「【清空】全部任务(当前 N 条)」),执行层现取现删(不用校验时旧快照,确认期间数据变化无碍)、逐条删除收集撤销令牌(清空 N 条 = N 个令牌,结果卡仍可「↩ 撤销删除」一键恢复;_execute_and_report 支持 list 令牌 extend)、部分失败如实报「成功 2/3 条」、空列表如实说「无需清空」;②协议规则补两条:清空/批量删除用 clear_tasks 不要逐条编造 delete_task;文字说明必须与动作一致——动作被跳过或失败时如实说明未完成,禁止声称已删除/已清空;③parse 校验豁免 clear_tasks 的 content 必填(无参动作)。契约注意:clear_tasks 是唯一无 id 的 manage 级动作(不进 _OP_TARGET),原「manage 级 ⟺ 需要 id」契约测试同步加例外。回归:test_ai_assistant_actions 60 → 67 项(parse 无参通过 / 描述带快照数量 / 执行层桩替身三场景——全成功返令牌列表、部分失败如实报、空列表诚实 no-op / _execute_and_report 聚合令牌 / 协议含防谎报条款);全量 pytest 1965 → 1972 passed;ruff 全绿;已重打包 plugin_store/ai-assistant.fpplug(1.12.0,37.5KB)
  • AI 总配置新增本地模型参数:思考模式 + 上下文长度(用户可见变更,2026-10-01 用户拍板:思考默认关 / 上下文默认 16K / 改参自动重启):设置 → AI 配置在本地模式下新增两行——「思考模式」(关=响应更快 / 开=输出思维链,ai_local_thinking)与「上下文长度」(8K/16K/32K/64K 档位,ai_local_ctx_size),仅对本地 llama-server 后端生效(纯启动参数,ctx.ai.params() 契约零变化,插件无感零迁移)。实现:config 三件套同步(bool 不进 RANGES;ai_local_ctx_size (2048,131072) + ai_server.sanitize_ctx_size 双层收敛);build_launch_args(gguf, port, ctx_size, thinking) 参数化;新增 AiServerManager.restart() 状态驱动平滑重启(运行中改参 → stop 后等旧实例真正退出(finished 信号)再以新参数拉起,替代固定延迟猜测——Windows 下 terminate 对无窗口控制台程序可能迟至 3s 强杀才生效;重复调用以后一次参数为准,期间被手动拉起则丢弃 pending 防双启);设置页 _ai_start_local 统一保存/手动启动入口(参数未变不打断、变化自动重启并提示);两行随本地/云端模式显隐同步(_ai_apply_mode_ui 补齐)。★参数选型实测存档:--reasoning-budget 0(预算立即耗尽)不被 Qwen3.5 模板遵循——同题对照实测 b10690:budget 0 与默认一样吐完整思维链(384 tokens 耗尽、content 为空、5.7s),--reasoning off 才是真开关(直答 0.3s/14 tokens,快约 20 倍),故「关」实现为 --reasoning off。回归:test_plugin_ai 扩至 29 项(新键类型/范围/bool 不进 RANGES、launch args ctx 收敛与 reasoning 旗标有无、restart 直启/覆盖/防双启守卫);verify_settings_groups 8/8(AI 卡加行后动态校验零改动通过);verify_ai_backend 26/26(B3/B4 补两新行显隐断言;顺带修正过期的 C1——weekly-report 自 v1.1.0 声明 ai 能力后属合法候选,反例换真零能力的 kb-search);全量 pytest 1965 passed / 3 skipped / 6 subtests;本地模式 AI 卡 light/dark 双主题真截图目检(build/shots/ai_local_card_*.png,临时脚本跑完即删)
  • 设置新增「窗口透明度」(用户可见变更,2026-10-01 用户提出):设置 → 外观与主题新增「窗口透明度」步进器(window_opacity,50–100%、每档 5%,默认 100=不透明)——主窗口整体半透明,方便「盯参考/对照材料」时让窗口退到背景(悬浮球、便签、卡片窗不受影响)。实现:config 三件套同步(int + _CONFIG_RANGES (50,100),下限 50 保文字可读——Qt windowOpacity=0 时窗口命中测试直接穿透不可点击);主窗新增 _target_window_opacity()(百分比→0.5~1.0 收敛,垃圾配置回 1.0 的防御纵深)与 _apply_window_opacity()(setWindowOpacity 单点应用,不走全量主题刷新);入场淡入终点改为读配置目标(_play_entrance_animation 原硬编码 setEndValue(1.0),预设半透明时启动动画直接到位,不闪「先不透明再变透明」);设置页 Stepper 改动即时持久化并直调主窗应用(getattr callable 守卫);「恢复默认设置」广播区补透明度回 100% + Stepper 同步刷新(refresh 走 blockSignals 护栏)。回归:新增 tests/test_window_opacity.py 17 项(config 三件套越界/错型拒写、垃圾加载回退、目标值收敛含防御纵深、真窗 show 后入场淡入终点=配置目标 70%≈0.7、Stepper 夹取/落盘/直调/同值省写、host 缺方法不崩、恢复默认回不透明且控件同步);全量 pytest 1948 → 1965 passed;verify_settings_groups 8/8(外观组加行后分组结构 B 段动态校验通过,脚本零改动);test_init 冒烟全 [OK]
  • 悬浮球右键菜单分组收纳(用户可见变更,2026-10-01 用户拍板):6 个插件动作此前全部平铺在一级菜单(站内搜索 / 周期任务 / 立即检查周期任务 / 密码保险箱 / 快速取用 / 生成日报周报草稿),装几个插件菜单就长一截。现参照 Win11 桌面右键「新建 >」的层级(用户提供的样图)把全部插件动作收进「🧩 插件功能」子菜单:一级菜单定型为「打开主窗口|开始专注|🧩 插件功能>|✂ 截图钉屏|退出程序」五段(分隔线分组不变,「截图钉屏」按用户选择留一级直达),二级保留各动作图标与标题、随启用/停用动态增删(refresh_plugin_menu 既有入口不变);子菜单显式套同一份 get_menu_qss(与托盘「📌 便签」子菜单同款做法),light/dark 跟随宿主主题(ball.apply_theme 正规换肤链覆盖)。回归:verify_plugin_loader 35/35(E1/E2 期望列表更新为子菜单形态 + 新增 E2b 子菜单收纳断言;F1/G2 计数同步);verify_weekly_report 65/65(D/E 段改走子菜单取 QAction);全量 pytest 1948 passed;test_init 冒烟全 OK;light/dark 四张真截图验证菜单结构与换肤(build/shots/ball_menu*,临时探针跑完即删)。★顺带对齐 verify_plugin_loader 三条过期断言(只改脚本不改产品):D1「.fpplug 自动解压后加载」→「残留 .fpplug 不再自动解压」(双目录模型 2026-09-27 移除自动解压后脚本一直没跟上,C4/F1/E2b 连锁红灯同源)
  • AI 助手思考动画自绘化(v1.11.0,用户可见变更):请求在途的「打字中」三点气泡从 ●○○ 字符帧轮换(180ms/帧,4 帧往返) 换成 自绘连续动画控件 ThinkingDots——①零字体依赖:●○ 几何符号在 msyh 下与 ▶▾▸ 同属 supportsCharacter=False 高危区(图标自绘铁律的既判场景),改为 paintEvent 画三个圆点后彻底摆脱字体;②观感:三点按正弦相位做垂直弹跳 + 透明度呼吸(33ms/帧 ≈30fps、周期 900ms、三点各差 1/3 相位,只取正半周弹跳落基线平滑),比 4 帧跳变顺滑;③主题跟随:颜色取宿主主题 $primary 并订阅 theme_changed(IconButton/PageTitle 同款 callable 守卫),换主题即时换色;④减弱动效联动:设置「减弱动效」开启时不启动计时器,静止显示三点(相位取 0.125 让透明度呈阶梯,不呆板);⑤气泡壳 chatBubbleThinking QSS 不变,同步删除已无消费者的 chatThinkingDots 文字规则(theme.py)。接线:页面级 _think_timer/_tick_thinking/_THINK_FRAMES 删除(计时器归控件自管,_hide_thinking 显式 stop() 双保险)。回归:新增 tests/test_ai_thinking.py 9 项(尺寸/启动即动画/stop 停/相位推进/离屏渲染非空/减弱动效静止但仍渲染/无宿主取色兜底/theme_changed 换色/页面挂气泡幂等+靠左+拆除计数回落+发送全链路在途挂起回复到达拆除);verify_ai_assistant 121/121(C20b/C20c 断言对齐新实现;顺带修正过期的 A7——weekly-report 自 v1.1.0 声明 network+ai,「未声明」反例换真零能力的 kb-search);全量 pytest 1820 passed
  • 五插件第二批增强(2026-10-01,用户可见变更):首批「推荐项」之外的五个可选批次一次做完,版本齐升 —— ①AI 助手 1.10.0:会话导出 Markdown(会话栏「💾」→ 选路径落盘 utf-8+LF,逐轮问答原样导出,快捷指令只导界面文案不含数据块,空会话拦截)+ 自定义快捷指令(快捷行「+」弹小对话框添加,上限 6 条随 config 落盘,点击直发不附加数据块,右键删除)。②AI 文本工坊 1.5.1:源文超 8000 字在「处理中…」状态行明示「已按上限截断发送」(此前悄悄砍内...
Read more

v4.7.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 12:01

Full Changelog: v4.0.0...v4.7.0

v4.6.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 11:20

Full Changelog: v4.0.0...v4.6.0

v4.0.0

Choose a tag to compare

@github-actions github-actions released this 26 Sep 12:41