Skip to content

Releases: luskyle/pupu

pupu v0.3.0

Choose a tag to compare

@github-actions github-actions released this 10 Oct 09:12

pupu v0.3.0

下载什么

  • 浏览器扩展:pupu-v0.3.0.zip,解压后在 Chrome/Edge 中加载。
  • Linux x64 桌面实验版:pupu-desktop-v0.3.0-linux-x64.tar.gz,解压完整目录后运行 pupu-linux-x64/pupu。不需要 Node.js 或浏览器扩展。
  • SHA256SUMS:两个归档的 SHA-256 校验值。

新增桌面 Agent

内容工作台、草稿保存、图片选择、持久隔离的平台登录窗口,以及显式确认任务后的自动上传、标题定位、填写、回读、提交和成功提示检查。
默认模型为本地 Ollama / Qwen3 4B(约 2.5 GB),模型和 Ollama 不包含在安装归档中。
首次使用先安装 Ollama 并启动服务,通过工作台高级设置下载模型;也可选择 Ollama 可执行文件,由桌面自动启动。

目前只试点小红书图文。模型只读取有限字段标签,不读取正文、图片或登录凭据;正文和图片仍会上传到目标平台。
支持 open/closed shadow DOM。停止不能撤销已提交内容,提交不确定时不会自动重试。

修复与校验

  • 缺少内容、图片或模型时明确提示,不再静默禁用发布按钮;首次连接失败后可重试。
  • 处理编辑器填写后占位提示消失与异步节点替换,仍坚持全文核对和覆盖保护。
  • 使用后端节点引用,并仅在页面动作之前限次重新观察,避免重复提交。
  • 排除真实小红书页面的屏幕外、近透明入口副本,去重嵌套入口。
  • 正常图文/视频准备阶段导航不再误判为登录失败。
  • 扩展新增默认关闭的本地 Agent 标题辅助试点;启用该试点后小红书只填写,不自动提交。

已验证与限制

  • 本机 Linux:真实小红书选择图文、测试图片上传、标题正文填写/延迟回读、发布入口就绪、正常 tab 导航已实测。
  • 没有执行真实内容发布,真实提交及成功回执仍未验收。
  • 真实 Electron + Qwen3 本地演示已完成单次提交、回执、权限隔离、覆盖/重复提交保护与完整界面链路。
  • CI 校验扩展与桌面类型、单元测试、扩展构建、无模型 Chromium 冒烟和 Linux 桌面归档。
  • Windows/macOS、手机 App、多账号选择和全平台桌面迁移尚未交付。
  • 图片选择不持久化,重启后需重新添加;登录/验证码仍由用户完成。

pupu v0.2.11

Choose a tag to compare

@github-actions github-actions released this 15 Sep 06:52

本版本起不再提供 .crx —— 原因是它是没用的一类产物,而不是我们打包有问题。

为什么移除 .crx

把自签名 CRX 拖进 Chrome / Edge 会得到:

包无效:"CRX_REQUIRED_PROOF_MISSING"。

Chromium 会校验 CRX 内的 proof 是否由 Chrome 应用商店的私钥签名(依据 components/crx_file/crx_verifier.cc:
off-store 来源的 CRX 按 CRX3_WITH_PUBLISHER_PROOF 校验),自签名 CRX 永远不可能满足,
因此拖拽 / 双击 / 普通安装流程一律失败,且文件会被浏览器自动清除。

  • 加 manifest 的 key 字段、或加 update_url 都不解决;
  • 唯一可行路径是机器级强制企业策略(ExtensionInstallAllowlist + ExtensionInstallSources,recommended 会被忽略);
  • 想彻底摆脱「开发者模式」,唯一途径是上架 Chrome Web Store / Edge 加载项商店。

早期版本把它当作「可直接安装」的产物并在文档里写成推荐方式,这是错误的说法,现已全面更正;
历史 Release(v0.2.5 ~ v0.2.10)里的 .crx 附件也已一并移除,避免其他人继续踩这个坑。

CRX 的打包能力仍保留(pnpm crx / pnpm verify:crx),CI 也会用临时密钥做冒烟测试,
保证这条路径不会失修;将来要做企业策略自托管或上架时会用到它。

📦 安装

  1. 下载下方的 pupu-v0.2.11.zip 并解压(解压后目录中应能直接看到 manifest.json)
  2. 打开 chrome://extensions(Edge 为 edge://extensions),开启右上角「开发者模式」
  3. 点击「加载已解压的扩展程序」,选择解压出的目录

扩展 ID 为 nffpajdealkjpdmjjboneelajanbboig(由签名密钥决定,各版本固定不变)。

🛠 工程调整

  • 本地构建不再产出 zip / crx:pnpm build 只输出可直接「加载已解压」的 build/chrome-mv3-prod/;
    打包由 CI 独占(本地需打包时用 pnpm build:ci)。顺带移除了本地构建里的 npm version patch
    —— 它会自建提交与标签,与「改版本 → 提交 → 打标签」的发版流程冲突
  • 版本号维护已全自动化:扩展内「关于」页取自构建时 manifest,官网/文档站在部署时注入最新标签版本,
    README 徽章动态读取;发布流程还会校验标签与 package.json 一致,不一致直接失败

完整的优化审计与决策记录见 OPTIMIZATION.md(其中 P4-1 记录了本次 CRX 结论与教训)。

pupu v0.2.10

Choose a tag to compare

@github-actions github-actions released this 15 Sep 06:21

本版本把版本号同步这件事彻底自动化 —— 扩展内「关于」页、官网/文档站、README 徽章三处的版本号现在都不需要手工维护。

版本号现在怎么同步

位置 来源 说明
扩展内「关于」页 构建时 manifest manifest 版本来自 package.json,发布流程会校验它与标签一致
官网 / 文档站 部署时注入最新 v* 标签 页面再用 GitHub API 覆盖为最新 release(此前静态兜底值是写死的,曾长期停在 0.2.4)
README 徽章 shields 动态读取 无需维护

发版后站点会自动刷新:发布流程在创建 Release 后会触发一次站点重部署,因此打完标签站点上的版本号即随更新(此前 Deploy Pages 只监听 docs/** 推送,打标签不会触发它)。

🔒 新增一致性闸门

发布流程现在会校验标签与 package.json 版本一致,不一致直接失败并给出修复命令。此前是「静默把 package.json 改成标签版本」,会让仓库版本与已发布版本悄悄漂移 —— 而扩展「关于」页显示的正是构建时的 manifest 版本,漂移就意味着本地构建出来的「关于」页会显示错的版本。

发布步骤因此变成(顺序不能反):

pnpm pkg set version=0.2.11
git commit -am "chore(release): 0.2.11"
git push origin main
git tag v0.2.11 && git push origin v0.2.11

📦 安装

下载 pupu-v0.2.10.crx 拖进 chrome://extensions(Edge 用 edge://extensions,需开发者模式)。
扩展 ID 仍为 nffpajdealkjpdmjjboneelajanbboig,覆盖更新即可。

本版扩展代码本身没有功能改动(改动集中在 CI/文档与站点),「关于」页显示的版本会更新为 v0.2.10。

⏭️ 待办

  • 开发依赖组 PR 仍被类型门禁拦着(@types/chrome 0.2.9 + TS 5.9.3 需先修 4 处类型用法)
  • ICO 图标(402 KB)与 pdfjs 无 WASM 兜底件(583 KB):需实机验证后再启用
  • HeroUI 2.8 带来的 +130 KB 下载体积:如需退回 2.7.8,见 v0.2.9 的说明
  • 大版本升级(React 19 / Tailwind 4 / Biome 2)与商店上架

pupu v0.2.9

Choose a tag to compare

@github-actions github-actions released this 15 Sep 06:04

本版本为依赖升级,把 Dependabot 提过来并通过 CI 的几项升级合并进发布。

⬆️ 升级内容

依赖 变更
@heroui/react 2.7.8 → 2.8.10
@heroui/theme 2.4.6 → 2.4.26
tailwindcss 3.3.5 → 3.4.19
pdfjs-dist 6.2.108 → 6.3.289
marked ^18.0.9 → ^18.0.12

️ 安装包比上一版略大(如实说明)

指标 v0.2.8 v0.2.9
下载体积(zip) 4.14 MB 4.27 MB
主界面首屏代码 1845 KB 2007 KB

原因是 HeroUI 2.8 换了内部的样式合并实现:tailwind-variants 0.3.0 → 3.2.2,并新引入运行时依赖
tailwind-merge,两者都会进入首屏包(已用对照实验确认:单独把 HeroUI 退回 2.7.8 可恢复
1845 KB / 4.14 MB,即本次增大约 144 KB 首屏、130 KB 下载)。

这是「组件库小版本升级」与「安装包体积」之间的取舍。若你更在意体积,可以把
@heroui/react 固定回 2.7.8(并在 .github/dependabot.yml 里给该包加 ignore,否则 Dependabot
会再次提交同样的 PR);要升回来时再移除 ignore 即可。

✅ 质量门禁(本次发布流程已包含)

  • CI 与发布流程现在都会跑 lint + typecheck + 单元测试(76 个用例)+ 构建 + 产物校验 + CRX 签名校验
  • 4 个升级虽然在各自 PR 上单独过了 CI,本次发布又在组合状态下重新验证了一遍

📦 安装

下载 pupu-v0.2.9.crx 拖进 chrome://extensions(Edge 用 edge://extensions,需开发者模式)。
扩展 ID 仍为 nffajdealkjpdmjjboneelajanbboig,覆盖更新即可,账号缓存与设置不会丢失。

建议顺手扫一眼界面(主界面、侧边栏、三个发布 Tab)—— HeroUI 与 Tailwind 都是 UI/样式层面的
升级,CI 只能验证「能构建、类型正确、测试通过」,看不出视觉是否走样。

⏭️ 待办

  • 开发依赖组那个 PR 仍被类型门禁拦着:@types/chrome 0.0.251 → 0.2.9 与 typescript 5.2.2 → 5.9.3
    需要先修正 4 处类型用法(见 OPTIMIZATION.md 的 P3)
  • ICO 图标(402 KB)与 pdfjs 无 WASM 兜底件(583 KB)的去除:需先实机验证(P2-3 / P2-4)
  • 大版本升级(React 19 / Tailwind 4 / Biome 2)与商店上架

pupu v0.2.8

Choose a tag to compare

@github-actions github-actions released this 15 Sep 05:16

本版本是体积与可观测性优化,安装包更小、首屏更快、控制台不再刷屏。

📦 更小、更快

指标 上一版 本版
下载体积(zip) 4.29 MB 4.14 MB
主界面首屏需解析的代码 4191 KB 1845 KB(-56%)
popup 点击后加载的代码 369 KB 139 KB
平台图标资源 872 KB 684 KB
  • PDF / PPT 导入改为按需加载:pdfjs 与 pptx-preview 原先都压在主界面首屏上,现在只在
    你真正点「导入 PDF / PPT」时才加载(新增 pdf.* / pptx.* 分包)。
  • popup 瘦身:它只做「打开主界面并关闭」,此前却把整套 Tailwind 一起打包了(那套样式是给
    内容脚本的 shadow DOM 用的,对 popup 无用)。
  • 图标重采样:平台图标实际只按 18–20 px 显示,但源图最大到 2048×2048(单个文件 144 KB),
    现统一到 64×64。

⚠️ 请顺手验一下:导入一次 PDF 与 PPT(含扫描版 PDF),确认逐页转图正常 ——
这两条路径改成了按需加载,虽然产物接线已核对,但浏览器里的实际加载我没法替你验证。

🔇 控制台不再刷屏

生产构建里此前有 1459 处 console 调用(其中 1153 处 console.log,多在平台适配器里逐步打印
页面流程),既刷屏也可能带上页面内容、账号等信息。现在统一走分级日志:

  • debug / info:仅开发环境输出
  • warn / error:始终输出
  • 需要现场排查时:在扩展页面控制台执行 window.__PUPU_DEBUG__ = true 即可临时打开全部级别,
    不用重新打包

共迁移 2311 处调用,src 内 console.* 已归零。

🧹 依赖清理

  • 移除 uuid(改用原生 crypto.randomUUID())与 @iconify/react(全仓库零导入)
  • 保留 docx-preview / jspdf:Word/WPS 导入虽已屏蔽,但项目有意保留实现与依赖以便恢复

📦 安装

下载 pupu-v0.2.8.crx 拖进 chrome://extensions(Edge 用 edge://extensions,需开发者模式)。
扩展 ID 仍为 nffpajdealkjpdmjjboneelajanbboig,直接覆盖更新即可。

⏭️ 下一步

  • ICO 图标(402 KB)转换与 pdfjs 无 WASM 兜底件(583 KB)剔除:都做过可行性查证,
    前者需 DIB 解码 + 改 75 处引用,后者需先实机验证扫描版 PDF,详见 OPTIMIZATION.md 的 P2-3 / P2-4
  • 大版本升级(React 19 / HeroUI 3 / Tailwind 4)与商店上架
  • 语言包里的「运行日志」页签仍未实现(本次只解决「不再喷日志」)

完整审计(含实测证据、审计纠错与验证命令)见 OPTIMIZATION.md。

pupu v0.2.7

Choose a tag to compare

@github-actions github-actions released this 15 Sep 04:44

本版本以工程加固为主:修掉一处内容注入问题、三处界面文案缺陷,并把自动化门禁补齐。

🔒 安全与正确性

动态正文注入 innerHTML 未转义

maimai(脉脉)与 weixinchannel(微信视频号)把你在扩展里输入的动态正文直接拼进 HTML 再赋给编辑器,因此正文里含有 < > 时会被平台当成标签解析 —— 轻则字符消失、排版错乱,重则可触发脚本执行。

  • 现在会先转义再拼接(含话题标签)
  • 视频号那条路径额外注意:剪贴板仍写入原文,编辑器才用转义后的 HTML,避免把 &lt; 之类实体粘进正文

🐛 修复的界面文案缺陷

自动化的一致性校验一启用就查出了 3 个此前没人发现的问题:

问题 原表现
refreshAccountsNotLoggedIn 不存在且无兜底 刷新账号取不到信息时,错误提示是空白
devEnvironmentTitle / devEnvironmentContent 不存在 开发模式预填文案取不到翻译
英文包 syncPublicPageTitle 是空串 英文界面显示中文兜底「发布中心」

🛠 工程加固

  • 新增 66 个单元测试(此前为 0),覆盖 HTML 消毒、可信域名匹配、文本转义、小红书文案规则、语言包一致性
  • CI 增加类型检查与单元测试,并在 main 上开启分支保护:PR 必须等 CI 通过才能合并(直接推 main 仍可用,服务端会留一条绕过记录)
  • 发布流程也自证:出包前先跑 lint / 类型检查 / 单元测试,校验不过就不产出 Release
  • 新增 Dependabot:minor/patch 自动开 PR,大版本一律不自动升级(避免 React 19 / Tailwind 4 这类被误升)
  • 工具链版本单一来源:packageManager + .nvmrc,不再在 workflow 里硬编码

📦 安装

下载 pupu-v0.2.7.crx,拖进 chrome://extensions(Edge 为 edge://extensions,需开启「开发者模式」)。扩展 ID 仍为 nffpajdealkjpdmjjboneelajanbboig,直接覆盖更新即可,账号缓存与设置不会丢失。

️ 仍待处理

  • 动态正文在视频号编辑器里的换行处理需要实机确认(已记录在 OPTIMIZATION.md P1-7)
  • 生产代码里仍有 1153 处 console.log 待收敛为分级日志(P0-3)
  • 大版本升级(React 19 / HeroUI 3 / Tailwind 4)与商店上架仍在计划中

完整的优化审计(含实测证据、优先级与执行顺序)见 OPTIMIZATION.md。

pupu v0.2.6

Choose a tag to compare

@github-actions github-actions released this 15 Sep 02:57

本版本是安全修复版,建议所有用户更新。

🔒 安全修复

1. 可信域名校验可被绕过

*.example.com 形式的通配符判断缺少子域点边界,导致 evilpupu.app 这类同后缀但不属于该域的域名被误判为可信。而可信域名列表正是「允许该网站调用扩展发布能力 / API」的授权凭据。

  • 影响:若你的可信域名列表里存在 *.xxx 形式的条目,同后缀域名会被一并放行
  • 修复:两处判断(后台与内容脚本)统一收敛为带点边界的匹配,并补了 15 个单元测试
  • 建议顺带检查一下设置页里的可信域名条目,移除不再需要的通配符

2. 文章内容未做 HTML 消毒

Markdown 预览与「发布时提交的 HTML」都直接使用渲染结果,未过滤。而文章可以从任意 URL 导入,该 HTML 不仅渲染在扩展页面,还会被注入到 dongchedi / sohu 等平台的编辑器页面。

  • 修复:接入 DOMPurify,移除 <script>、<iframe>、on* 事件处理器、javascript: 链接,并额外禁止表单控件
  • 保留文章排版所需的标签与内联样式,导入文章的排版保真度不受影响
  • 代价:入口包 +28 KB

🛠 工程质量

  • 引入 vitest,新增 35 个单元测试(域名匹配 15 / HTML 消毒 20),并接入 CI —— 这是本项目第一次有自动化测试
  • 修好了 husky 钩子:此前 .husky/ 下只有 husky 内部目录,导致 lint-staged 与 commitlint 从未真正运行过
  • 补齐英文语言包缺失的 3 个条目(此前英文界面会显示原始 key 名)
  • 新增 OPTIMIZATION.md:完整的项目优化审计,含实测证据、优先级与执行顺序

📦 安装

下载 pupu-v0.2.6.crx,拖进 chrome://extensions(Edge 为 edge://extensions,需开启「开发者模式」)。已装旧版的用户直接安装即可覆盖更新。

扩展 ID 保持 nffpajdealkjpdmjjboneelajanbboig 不变(沿用同一签名密钥),因此升级不会丢失已保存的账号缓存与设置。

更完整的安装与使用说明见文档站:https://luskyle.github.io/pupu/guide.html

️ 已知待办

  • 动态内容在 maimai / weixinchannel 两个平台仍存在未转义的 innerHTML 拼接(会导致含 < > 的文本被吞,属 self-XSS 级别),已记录在 OPTIMIZATION.md 的 P1-7,下个版本处理
  • 依旧需要「开发者模式」才能安装:这是不经过应用商店的浏览器限制

⚠️ 本项目为个人学习 / 交流项目,请遵守各平台的使用规范与当地法律法规。

pupu v0.2.5

Choose a tag to compare

@github-actions github-actions released this 15 Sep 02:13

本版本起,Release 除了 .zip 之外还提供可直接安装的 .crx。

📦 新增产物

文件 用途
pupu-v0.2.5.crx Chrome / Edge 直接安装(推荐,无需解压)
pupu-v0.2.5.zip 加载已解压的扩展

扩展 ID:nffpajdealkjpdmjjboneelajanbboig(由签名密钥决定,各版本固定不变)

安装 .crx

  1. 下载 pupu-v0.2.5.crx
  2. 打开 chrome://extensions(Edge 为 edge://extensions),开启右上角「开发者模式」
  3. 把 .crx 拖进扩展管理页,弹窗中点「添加扩展程序」即可

Edge 与 Chrome 同为 Chromium,共用同一份 .crx / .zip。
两种方式都需要开启「开发者模式」,这是不经过应用商店安装的浏览器限制,与扩展本身无关。
Safari 暂不支持:Safari 扩展必须由 Xcode 打包成宿主 App 分发,且本扩展依赖的 sidePanel / tabGroups 在 Safari 上并不存在。

🔧 构建与发布

  • Release 工作流现在会读取仓库 Secret CRX_PRIVATE_KEY 签名 CRX,并在发布前校验 CRX3 签名、扩展 ID 与包内 manifest.json 版本
  • CI 增加用临时密钥打包 CRX 的冒烟测试,避免该路径在 PR 上静默损坏
  • 工作流 Actions 升级到当前主版本(checkout/setup-node/upload-artifact v7、pnpm-action-setup v6、Pages 系列 v5/v6),消除 Node 20 弃用告警

📚 链接

⚠️ 本项目为个人学习 / 交流项目,请遵守各平台的使用规范与当地法律法规。

pupu v0.2.4

Choose a tag to compare

@github-actions github-actions released this 15 Sep 01:39

pupu 是一款多平台内容发布浏览器扩展,一次编辑,轻松将内容同步发布到多个社交平台。

📦 安装

  1. 下载下方的 pupu-v0.2.4.zip 并解压(解压后目录中应能直接看到 manifest.json)
  2. 打开 chrome://extensions,开启右上角「开发者模式」
  3. 点击「加载已解压的扩展程序」,选择解压出的目录

主要特性

  • 动态 / 视频 / 文章三个发布 Tab,发布时通过侧边栏选择平台并确认
  • 自动 / 手动发布一键切换:自动发布填充后直接提交,手动发布仅填充内容
  • 动态支持图片与 PPT / PDF 导入(自动逐页转图片),工具栏支持 #话题# 与 emoji 分类面板
  • 文章支持导入本地 Markdown 并可视化编辑 / 预览渲染
  • 支持微博、小红书、知乎、抖音、快手、微信视频号、bilibili、微信公众号、CSDN、51CTO 等数十个平台,平台图标内置本地、离线可用
  • 暗 / 亮主题切换,侧边栏联动平台列表与账号管理(12 生肖头像)

📚 链接

⚠️ 本项目为个人学习 / 交流项目,请遵守各平台的使用规范与当地法律法规。