Skip to content

feat: add Dia tab title manager with sync and Alfred workflow - #22

Merged
mcoder2014 merged 9 commits into
masterfrom
feat/cq/dia_tabs
Nov 1, 2026
Merged

mcoder2014 merged 9 commits into
masterfrom
feat/cq/dia_tabs

Conversation

@mcoder2014

@mcoder2014 mcoder2014 commented Nov 1, 2026 •

Copy link
Copy Markdown
Owner

Dia 的标签显示名可能不能反映网页原始标题。新增独立 MV3 扩展,从已加载网页的顶层 document.title 记录标题;控制页支持按真实 tabId 切换已有标签、搜索、Ctrl/Cmd/Shift 多选,以及逐行复制 URL 或 Markdown。关闭标签即移除记录。

自动采集只处理 active、加载完成的 HTTP(S) 标签。真实 URL 变化或正常重载使旧标题失效;重复上报相同 URL 不清空标题,同 URL 的冻结、释放和 unloaded 保留已采集内容。DOM title 变化立即通知,150 毫秒内后续变化合并;导航版本、采样序号和初始化事件队列拒绝过期结果。浏览器标签名不作为标题来源,不监听用户输入推断标题变化的原因。

Dia 1.55.1 实测会对可交互的前台页面持续报告 frozen:true。对此只允许当前聚焦窗口内 active、complete、未 discarded 的页面进行有界 DOM 探测;结果必须同 URL、complete、visible,返回后仍在前台。切走、失焦、失败或超时不会覆盖已有标题,自动采集仍跳过后台冻结页;窗口恢复焦点时补采。界面标为“浏览器标记冻结”,避免把 API 标记解释为页面一定无法交互。

“同步已打开标签”会尝试读取当前 profile 已加载网页,包括后台和被浏览器标记 frozen 的标签,不要求窗口聚焦或 DOM visible,不激活、创建、加载或重载标签。已释放、加载中和尚未加载的页面仍跳过。读取失败或超时保留同 URL 已采集标题,并如实统计本轮结果。手动最多占 3 个实际未结束执行,与自动前台探测合计最多 4 个,为前台更新保留名额;同标签去重,每次最多等待 5 秒。超时执行直到实际结束才释放额度,迟到结果不写缓存;额度不足时跳过其余页面,不保证每个标签都会实际注入或读取成功。控制页显示成功、无法读取、跳过数量及原因,保留有效选择。普通自动采集保持原语义。

同 URL 已记录的具体标题若退化成完整域名或完整域名段,自动采集与手动同步均保留旧标题。匹配忽略大小写、边缘空白、单个 www. 前缀和末尾点,支持完整 DNS labels 组成的连续片段,不按任意字符 substring 判断;IP/IDN 仅整体匹配。首次域名标题可保存,正常标题升级及导航/重载后重新采集仍允许。手动同步将被拦截的结果计为跳过,并显示“标题退化,已保留”。这是启发式保护,同 URL SPA 合法切回站点名时也可能保留旧标题。

控制页支持浅色/深色、固定表头、长标题与 URL 省略及完整值复制、窄窗口横向滚动,以及同步和复制反馈。连接错误详情在恢复后清除;Alfred 连接不可用不影响本页列表和复制。

配套 Alfred Workflow 提供 dia list 搜索、回车激活、Cmd+回车复制 URL、Alt+回车复制 Markdown。Python 标准库 Native Messaging host 使用私有 Unix socket,按 connectionId + sessionId + tabId 定位,没有 TCP 服务、launchd 或浏览历史文件。安装到稳定用户目录并固定扩展 ID,不依赖 worktree 存续。本机 native host 注册目录采用实际连通的 Google/Chrome/NativeMessagingHosts,支持显式覆盖。

验证:

  • 145 项 Node 测试、28 项 Python 测试通过,覆盖采集边界、前台 frozen 标记兼容、后台 frozen 手动读取、失败保留标题、域名标题退化与正常更新边界、导航/关闭/焦点往返竞态、超时与前台执行名额保留、选择/复制、消息权限、桥接和安装包。新增回归已在旧实现验证失败。
  • shell、plist、全部扩展 JS/Python 语法和 diff 检查通过;3 个 zip/workflow 包完整性检查通过,source 包说明与仓库一致。
  • 前台 frozen 兼容已在 Dia 1.55.1 真实页面验证:激活原标签自动得到 DOM 标题,控制页显示已记录,API 仍为 active=true、complete、frozen=true;没有刷新网页或点击手动同步。手动同步范围更新已安装并在扩展管理页重新加载。实机 21 个网页中成功读取 2 个后台 frozen 标签,3 个读取超时、14 个因未结束执行占满手动额度跳过、2 个 discarded 跳过;同步前后标签集合与活动状态一致,未切换或刷新网页。
  • 标题退化保护已在本地公开演示页实机验证:DOM title 从 Dia Tabs Demo Alpha 改为主机名 127.0.0.1 后,控制页和桥接均保留原标题;随后改为 Alpha [changed] 中文 时正常更新。关闭演示标签后筛选结果变为 0,临时服务已停止,已恢复原用户标签。
  • 动态 DOM 标题、按 URL 返回原标签、单项 Markdown 实际粘贴、关闭标签移除、Alfred 实时搜索,以及后台延迟标题的手动同步已实机验证。后台同步没有激活页面或增加标签。
  • 控制页使用真实 HTML/CSS/JS 和示例数据检查浅色/深色、390px 窄窗口、多选、复制反馈、同步状态、精确激活请求、空结果禁用及连接错误详情。

尚未完整实机验收:手动重命名后的动态标题、跨窗口/最小化、浏览器退出清理,以及 Alfred Enter/Cmd/Alt 的实际动作。相关边界已记录在使用说明;冻结/释放异常事件序列由回归覆盖,没有强制回收用户页面。

修改限定为独立插件、文档及 CI,现有 Go 工具与构建入口未改动。

@mcoder2014 mcoder2014 changed the title feat: add Dia original-title tab manager and Alfred workflow feat: add Dia tab title manager with sync and Alfred workflow Nov 1, 2026
@mcoder2014
mcoder2014 merged commit f800f29 into master Nov 1, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant