Skip to content

Releases: codeugar/comment-link-assistant-extension

v0.10.0 — 归档的计划可以恢复了

Choose a tag to compare

@codeugar codeugar released this 12 Aug 08:51
ba22c97

归档从此不是单程票。这一版还顺手拆掉了一条早就不存在、却还写在代码里的限制,并修好了计划管理页选错计划的问题。

改了什么

归档的计划可以恢复了

以前:一个计划归档之后就锁死了——改不了名、加不了链接、跑不了批次,界面上只剩一个红色的「永久删除」。想把它拿回来用,唯一的办法是删掉重建,之前跑过的批次、发出去的评论、失败记录全部作废。而实际上归档什么都没删,只是给计划打了个「已归档」的标记,数据一直好好躺在那儿。

现在:归档后的计划详情页多了一个「恢复计划」,在「永久删除」旁边。点一下,计划立刻回到可用状态,链接、批次、运行记录、失败历史原样都在。

一个细节:归档会把计划原来的状态盖掉,所以恢复时不是无脑写回「进行中」,而是按这个计划的批次重新算一遍——批次在归档前就已经全部跑完的,恢复后显示「已完成」,不会假装还有活没干;同时顺便把已处理、已提交、失败这些计数也刷新一遍。

同一个推广网站可以有多个进行中的计划

代码里写着一条限制:一个推广网站同时只能有一个未归档的计划,想再建一个得先把旧的归档掉。界面上还配了一句提示语「该推广网站已有未归档计划,请先归档旧计划。」

但这条限制其实早就被拆掉了——数据层没做唯一性约束,建计划时不检查网站,后台也不拦。剩下的只是一个没人抛出的错误码、一段界面上匹配它的代码,和那句永远不会弹出来的提示语。你实际上一直可以给同一个网站建多个计划,只是读代码的人会以为不行。这次把这三处一并删掉,代码和实际行为对上了。

点了某个计划,页面却跳到另一个计划上

以前:计划的编号里带一个冒号(plan:abc),写进网址时冒号会被转义成 %3A,但读回来的时候没有还原。于是程序拿着一个还原不了的编号去找计划,一个都对不上,只好退而求其次——自动选中列表里第一个进行中的计划。

你会碰到的情况:把当前正在看的计划归档掉,页面莫名其妙跳到了另一个计划上;想马上撤销归档,还得先勾上「显示已归档」,在列表里把它翻出来重新点开。另外,刷新页面、或者从收藏夹打开某个计划的链接,打开的也不是你要的那个,总是落到第一个。

现在:网址里的编号会正确还原。归档完页面停在原地,「恢复计划」就在眼前,点一下就撤销了;刷新和链接直达也都能回到正确的计划。

安装

下载 comment-link-assistant-extension-0.10.0-chrome.zip 解压,在 chrome://extensions 打开开发者模式,「加载已解压的扩展程序」选解压出来的目录。扩展 ID 是固定的(gmdfkglpanbbilahmjfhmekegphloicl),覆盖安装不会丢数据。

v0.9.1 — WordPress.com 评论框终于能加载出来了

Choose a tag to compare

@codeugar codeugar released this 12 Aug 04:03
b90656e

跑批时 WordPress.com 站点整批失败的问题修好了。以前面板上报 VERBUM_COMMENT_FORM_TIMEOUT(显示「无表单」)或 PAGE_COMMAND_TIMEOUT(显示「失败」),一条外链都拿不到。

修了什么

WordPress.com 的评论框永远等不到(两种报错,同一个原因)

以前:扩展新开的工作标签页是后台开的,你人在看仪表盘,那个页面从头到尾没被显示出来。而 WordPress.com 的评论框不是随页面一起出来的,页面里只有一个空壳子,真正的输入框和按钮要等浏览器真的在画这个页面的时候才挂上去——它靠 IntersectionObserver 检测评论区是否进入可视区来决定下不下载那段代码。后台标签页不绘制,这个检测一次都不会触发。

所以「滚到评论区 + 等 60 秒」这套做法,在后台标签页里等多久都没用。实测:页面开了 243 秒,requestAnimationFrame 不触发、IntersectionObserver 不回调、评论框壳子始终是空的。等待时间还把整条命令的 75 秒上限撑爆,于是同一个问题分裂成了两种报错。

现在:扩展直接调用页面自己的脚本注册表把那段代码要过来,不再依赖「页面被看到」这个前提。在隐藏标签页里实测五个站点,评论框在请求后 1~2 秒挂出来。既然不用再干等,等待窗口也跟着收紧:预检 60 秒 → 30 秒,页内等待 60 秒 → 15 秒。一次分析的最坏耗时从约 135 秒降到约 58 秒。

评论明明发出去了,却显示「提交结果未确认」

以前:WordPress.com 开了订阅弹框的站点,提交评论后页面不跳转——它在后台把评论提交掉,然后弹一个让你填邮箱订阅的小框,把带评论编号的回执地址扣在手里,等你关掉框才跳过去。扩展拿不到回执,只能一直等到超时报「未确认」。实际发生过的情况:一条评论在目标站上确确实实已经公开显示(编号 comment-78757,外链完好),面板上却记成未确认。

现在:提交后如果出现这个订阅框,扩展点一下它自己的关闭按钮(「Continue reading」),Verbum 就会跳到刚发出的那条评论,回执照常拿到。邮箱输入框和订阅按钮一个都不碰,不会替你订阅任何东西。

慢站点被误判成「打不开」

后台标签页的请求会被 Chrome 降低优先级,实测这些博客要 15~40 秒才能把页面提交出来。原来 30 秒就放弃,把正常的慢加载记成了打不开的页面。现在放宽到 60 秒。

看板里选中的方案会跳回上一个

点某个方案,界面有时会弹回之前选中的那个。路由地址和组件内部各存了一份「当前选中哪个方案」,而地址要经过一个异步事件才传到界面,中间有机会被旧值覆盖。现在只保留路由这一个来源,切换即时生效。

安装

下载 comment-link-assistant-extension-0.9.1-chrome.zip 解压,在 chrome://extensions 打开开发者模式,「加载已解压的扩展程序」选解压出来的目录。扩展 ID 是固定的(gmdfkglpanbbilahmjfhmekegphloicl),覆盖安装不会丢数据。


Full Changelog: v0.9.0...v0.9.1

v0.9.0 — 匿名读页判定发布,不再信提交跳转

Choose a tag to compare

@codeugar codeugar released this 08 Aug 15:35
2a7f3a4

一条评论算不算发布出去了,现在由一次匿名读取目标页面决定,而不是看提交后跳转的网址。

修了什么

以前:网站接收评论后跳转的网址里带了个 #comment-123 之类的编号,扩展就当作发布成功。但网站把评论扣下审核、丢进垃圾箱、或者事后删掉,跳转的网址都长这样。结果是面板上一片绿,实际一条外链都没拿到。

现在:不带任何 cookie、绕开缓存重新读一遍那个页面,在页面上真的找到这条评论、并且链接确实在评论里,才算「已显示」。

这一版还修掉了上一轮判定改造里遗留的四处误判:

  • **默认主题的评论被误报成失败。**判定用字符串标记切 HTML,其中一个标记是 <footer——而 WordPress 核心每条评论开头就是 <footer class="comment-meta">,作者署名的链接正好在里面。切片切在那里,一个链接都找不到,于是把一条真实存在的外链记成了终态失败「已显示,链接被删」。现在按 DOM 解析,评论的边界就是它自己那个元素。
  • **comment-only 模式全部被记成失败。**这个模式本来就不放链接,但复查任务还是拿推广站地址去评论里找链接,找不到就判失败。现在判定标准跟着任务一起传下去。
  • **子目录站被别的站判定。**REST 地址原来是拿 域名 + /wp-json/ 拼的,WordPress 装在子目录时这会打到根目录上另一个站点。现在只用页面自己公布的地址,拼不出来就不问。
  • 重试会重复发评论。「已显示,链接被删」被算进失败列表,而「重试失败的目标」用的就是这个列表,重跑等于在一篇已经挂着自己评论的文章下再发一条。现在它算失败,但永远不进重试。

另外:只靠评论文字匹配(没有服务器给的评论编号)时,不再给出任何终态失败结论——文字像不代表就是你的评论。

新增

  • 手工添加的复查条目如果只填了页面地址、没有 #comment-123 永久链接,会明确标出「需要评论永久链接」,因为这种条目无法确定页面上哪条评论是你的,任何结论都不可信。
  • 匿名读取带一次性参数绕开整页缓存。不加这个参数的话,装了缓存插件的站会返回评论发出之前的旧页面,刚发的评论一律被判成没公开。

安装

下载 comment-link-assistant-extension-0.9.0-chrome.zip 解压,在 chrome://extensions 打开开发者模式,「加载已解压的扩展程序」选解压出来的目录。


Full Changelog: v0.8.0...v0.9.0

v0.8.0 — 发起运行收归看板,侧边栏可续跑

Choose a tag to compare

@codeugar codeugar released this 06 Aug 18:28
e2fe446

安装

下载 Assets 中的 comment-link-assistant-extension-0.8.0-chrome.zip(不要下载 Source code),解压后在 chrome://extensions/ 开启开发者模式,点「加载已解压的扩展程序」选择解压目录。

从旧版升级:把新包解压覆盖到原来那个文件夹,然后点扩展的 ⟳ 刷新。不要点「移除」再重装 —— 移除会连同本地数据一起删除。

修复

外链发成了别的站的域名。

运行时用的推广 URL 取自 batch.websiteProfile.url,它优先于这次运行自己 settings 快照里记录的推广站。一旦这份网站资料属于另一个站,评论里的链接就指向那个站,而且发出去就收不回来。

侧边栏正是能造出这种错配的地方:它在开跑前先抓一份推广站资料做预览,而这中间当前站点可能被别处改掉——在看板新增一个站会顺带把它设为当前站,侧边栏的预览却还停在旧站上。

现在推广 URL 只认这次运行自己的 settings 快照,网站资料只提供标题和描述。

变更

发起运行统一收归看板。

侧边栏不再能发外链。移除:批次设置与确认面板、推广站资料预览、单条与批量重试、历史批次重跑、到期计划的「立即执行」横幅。背后的 batch.start、batch.preview、batch.retry-items、batch.retry-from-history、plan.run-next 五个消息处理器,以及只被它们引用的两个模块一并删除。

这不只是收窄入口。运行的推广站从此只能来自计划——计划在创建时就记下了推广哪个站,看板卡片上显示的域名就是它会发的域名。启动路径只剩一条之后,「资料属于 A 站、运行属于 B 站」这种组合在结构上不再拼得出来。

侧边栏保留它擅长的部分:跟进度、逐条查看节点时间线、处理登录与验证码这类需要人工介入的卡点、停止、复制诊断信息、查看历史。

新增「继续运行」。

停止批次后,直接在侧边栏点「继续运行」就能接着跑,不用回看板。

它用快照 id 反查自己属于哪次看板运行,所以侧边栏不需要知道 planId,看板那边也接成同一条运行,不会多出一条对不上的记录。

进度不丢:没跑完的目标回到队列重跑,已提交、已发布、已失败的保持原状;已经点过提交按钮的目标保留 prepared 数据走验证路径,不会重复发一遍评论。

按钮只在真能继续时才出现——用的是 resumeStoppedBatch 自己那份判断,不会出现点了报错的情况。

其他

  • 清理 24 个失效文案键和对应的失效样式
  • e2e 增加 T5R:接着停止用例停下的运行,从侧边栏续跑,断言目标数不变、没有目标残留在 stopped 状态

v0.7.0 — 网站管理页与锚文本用词统计

Choose a tag to compare

@codeugar codeugar released this 06 Aug 17:06
23f28b9

安装

下载 Assets 中的 comment-link-assistant-extension-0.7.0-chrome.zip(不要下载 Source code),解压后在 chrome://extensions/ 开启开发者模式,点「加载已解压的扩展程序」选择解压目录。

从旧版升级:把新包解压覆盖到原来那个文件夹,然后点扩展的 ⟳ 刷新。不要点「移除」再重装 —— 移除会连同本地数据一起删除。本次 manifest 变更了权限,必须刷新才生效。

新增

网站管理页

站点资料和锚文本配比从设置抽屉搬到独立的导航页,与「计划管理」平级。左侧站点列表,右侧站点资料和锚文本配比。设置抽屉精简为评论模型、API Key、界面语言和数据备份。

锚文本用词统计

账本现在记录具体用词,不再只记类别。每一类下方列出已发布的用词和次数,按次数排序,条形长度按该类最高的一条归一化。

统计从本版本开始记录,此前发布的外链只有类别总数、没有用词明细。两者对不上时会明确写出「另有 N 条没有留下用词记录」,不会拿一个不闭合的列表糊弄过去。

计划的每批条数可以改了

计划详情页的「编辑计划」中除了名称,多了每批条数。只有还没开始的批次会重新分组;跑过的批次保留原有条数和批次号,目标行的 id 和序号都不变。批次运行中也允许改 —— 那正是发现每批太大的时刻。

修复

  • 词池输入框打不出空格和换行。 原本每次按键都把解析后的结果渲染回去,尾部空格和换行当场被吃掉,多词锚文本根本无法手动输入。
  • 站点域名权限改为安装时授予。 读取推广网站自身的标题和描述是一次跨域请求,此前只有恰好为该域名跑过批次才有权限,导致「用 AI 生成兜底词」在新站上必然失败。添加站点本身就是授权,不该再问一次。
  • 生成兜底词失败时报出真实原因,不再一律返回「请检查模型 API Key 和网站链接」。
  • 侧边栏版本号写死在 0.4.0,已改为从 manifest 读取。

权限变更

http://*/* 和 https://*/* 从可选权限改为安装时权限。安装提示会变成「读取和更改您在所有网站上的数据」——这正是扩展打开任意博客、识别评论表单并提交评论所需要的权限。代价是提示更醒目,收益是运行过程中不再逐站弹窗。

校验

650 个单元测试、8 个真实 Chromium 端到端测试通过,扩展页面控制台零错误。

校验和

4367124108c081507b0b66ac018860d077ea58e2496bc6064e18db8e856aaa08  comment-link-assistant-extension-0.7.0-chrome.zip

v0.6.0 — 数据备份、稳定 ID 与批次可靠性

Choose a tag to compare

@codeugar codeugar released this 05 Aug 08:38
269c93f

⚠️ 从 v0.5.x 升级必读(一次性迁移)

本版本固定了扩展 ID(manifest key)。直接替换会导致旧数据不可见,请按顺序:

  1. 旧版插件里:设置 → 数据备份 → 导出数据(保存 JSON)
  2. 移除旧插件,加载 v0.6.0(解压 zip 后"加载已解压的扩展程序")
  3. 看板首装横幅 → 导入数据 → 选第 1 步的 JSON

完成后 ID 固定为 gmdfkglpanbbilahmjfhmekegphloicl,以后所有更新数据自动保留,无需再迁移。

新增

  • 数据导出/导入:设置 → 数据备份,一个 JSON 携带全部配置(站点、API Key、外链库、过滤列表、批次历史、看板计划数据),导入前弹确认
  • 稳定扩展 ID:manifest key 固定 ID,换目录/重装数据不丢
  • 设置迁移至看板:看板设置抽屉完整可编辑;侧边栏精简为打开看板 + 批次控制
  • Playwright E2E 冒烟挡板(npm run e2e)

修复

  • 停止批次立即生效(实测 <300ms;此前可能卡"停止中"数分钟且批次继续跑)
  • 慢页面提交成功不再误报失败:提交后 90 秒轮询验证 + 认 WordPress #comment-<id> 回执;错误文案匹配限定评论表单区域;跳转提交加载宽限 120 秒,未确认结果 180 秒窗口内重验
  • 外链库导入预览显示解析行列表与友好错误文案(不再漏渲染/裸错误码)

校验

shasum -a 256 -c comment-link-assistant-extension-0.6.0-chrome.zip.sha256

v0.5.1

Choose a tag to compare

@codeugar codeugar released this 04 Aug 18:26
5653970

修复外链库只保留域名、丢失博客文章路径的问题。\n\n- 外链库现在保存完整文章 URL,包括路径和查询参数\n- 同一域名可保存多篇文章,并按完整 URL 去重\n- 从外链库新建计划时直接使用完整 URL,可正确定位评论表单\n- 批量导入、搜索和中英文界面同步支持完整 URL\n- 登录/CAPTCHA 跳过规则继续按域名聚合\n\n安装时请下载 Chrome extension ZIP,解压后在 Chrome 扩展程序页面选择“加载已解压的扩展程序”。不要下载 GitHub 自动生成的 Source code 压缩包。

v0.5.0

Choose a tag to compare

@codeugar codeugar released this 04 Aug 17:50
dc04359

新功能

  • 新建计划可直接从外链库搜索、跨页选择并导入目标域名
  • 外链库支持勾选域名后一键打开统一的新建计划流程
  • 运营看板与新建计划弹窗支持创建推广网站,创建后自动继续计划
  • 推广网站 URL 统一规范化为 HTTPS,并校验重复网站和数量上限
  • 执行遇到需要登录或 CAPTCHA 的网站时自动跳过,并加入域名级过滤列表
  • 后续同域名及子域名目标会在打开页面前自动过滤

安装

  1. 下载 Chrome extension ZIP,不要下载 GitHub 自动生成的 Source code。
  2. 解压 ZIP。
  3. 打开 chrome://extensions 并启用开发者模式。
  4. 点击“加载已解压的扩展程序”,选择解压后的目录。

验证

  • TypeScript、Biome lint、生产构建通过
  • 51 个测试文件、532 个测试全部通过
  • ZIP 内 manifest.json 版本为 0.5.0

v0.4.0 — 外链库、批量导入与自动跳过

Choose a tag to compare

@codeugar codeugar released this 04 Aug 09:16
08c68c0

v0.4.0

主要更新

  • 插件首次安装默认使用简体中文,可在设置中切换 English。
  • 外链库升级为独立看板页面,展示域名总数、Dofollow、Nofollow、匿名评论、无需人机验证等统计。
  • 外链库支持搜索、筛选、分页、新增、编辑、删除,以及 TXT、CSV、XLSX、XLS 批量导入。
  • 新建计划支持 Excel 文件;外链和计划输入不再要求填写 http://、https:// 或 www.。
  • 执行时遇到登录或 CAPTCHA 会自动标记域名、跳过当前目标并继续;已知受限域名会在打开页面前跳过。
  • 修复旧批次迁移反复写入存储的问题,并增强 Excel 空工作表、混合列 CSV、重复域名元数据合并等边界处理。

安装

请在下方 Assets 中下载 Chrome extension ZIP,不要下载 GitHub 自动生成的 Source code (zip) 或 Source code (tar.gz)。解压后,在 chrome://extensions/ 开启开发者模式,选择“加载已解压的扩展程序”,并选中直接包含 manifest.json 的目录。

可使用随附的 SHA-256 checksum 校验安装包完整性。

验证

  • TypeScript、Biome lint、生产构建通过
  • 46 个测试文件、518 条测试全部通过
  • Manifest V3,版本 0.4.0,默认 locale 为 zh_CN

Comment Link Assistant v0.3.5

Choose a tag to compare

@codeugar codeugar released this 02 Aug 15:32
1b99910

Comment Link Assistant v0.3.5

首个公开安装版本。

主要功能

  • 计划、批次、目标链接和执行进度看板
  • DeepSeek 与 KIE Gemini 内容生成支持
  • 评论表单识别、填写、提交回执与公开状态验证
  • 待审核评论每 6 小时定时复查及手动复查
  • 评论链接 dofollow / nofollow / ugc 状态记录
  • Chrome 本地存储中的配置、历史与恢复状态

安装方法

  1. 下载 comment-link-assistant-extension-0.3.5-chrome.zip。
  2. 解压 ZIP。
  3. 打开 chrome://extensions 或 edge://extensions。
  4. 开启开发者模式,点击“加载已解压的扩展程序”。
  5. 选择包含 manifest.json 的解压目录。

此侧载版本不会自动更新;升级时下载新版 ZIP、覆盖解压目录并在扩展管理页点击“重新加载”。

完整性校验

下载 SHA256SUMS.txt,核对 ZIP 的 SHA-256。