蓝湖油猴脚本(userscript):在设计稿详情页(detailDetach)与项目画布页(stage)蓝湖自绘的右键菜单里注入三个菜单项,把登录态与设计稿定位信息一键喂给 lanhu-context CLI。功能与 ../browser-extension 浏览器扩展一致(同一份共享实现 ../ecosystem-core),面向不方便装扩展、但装了脚本管理器的场景。私有包,不发布 npm;随仓库 changesets 发版,产物(.user.js)见 GitHub Releases。
需要脚本管理器:Tampermonkey(推荐,≥5.3.1)/ ScriptCat / Violentmonkey(Cookie 能力见下文差异表)。
装好脚本管理器后,打开脚本主页「蓝湖 lanhu-context 助手」点「安装此脚本」,或直接点一键安装链接由脚本管理器弹出安装确认。GreasyFork 与本仓库 webhook 同步,发版后自动推送更新。
直接打开下面的地址,脚本管理器会弹出安装确认;之后管理器按安装来源检查更新:
https://github.com/DaYePython/lanhu-context/raw/main/ecosystem/lanhu-monkey/lanhu-monkey.user.js
到 Releases 页找最新的 @lanhu-context/lanhu-monkey@x.y.z,下载附件 lanhu-monkey.user.js 拖进浏览器安装。Release 附件 URL 随版本变化,升级需重新下载。
pnpm --filter @lanhu-context/lanhu-monkey build产物在 dist/lanhu-monkey.user.js,安装方式同上。开发调试用 pnpm --filter @lanhu-context/lanhu-monkey dev:vite-plugin-monkey 会自动打开 dev userscript 的安装页,装一次后改代码即热更新。
在设计稿详情页(https://lanhuapp.com/web/#/item/project/detailDetach?...)或项目画布页(.../#/item/project/stage?...)右键,蓝湖菜单底部会出现三个菜单项(详情页带 CLI 徽标;stage 页沿用宿主菜单的朴素样式,无徽标):
| 菜单项 | 作用 |
|---|---|
| 复制选中设计稿链接 | 解析 tid/pid/image_id,重构规范 URL(另带与 pid 同值的 project_id)写入剪贴板,可直接喂给 lanhu context "<URL>" |
| 复制 cookies | 优先经 GM_cookie 取 lanhuapp.com Cookie(开启相应设置后含 HttpOnly),失败时回落 document.cookie(无 HttpOnly,toast 会提示),写入剪贴板,可粘贴给 lanhu auth set |
| 发送 cookies 到本机 | 把同一份 Cookie 经 GM_xmlhttpRequest POST 到 http://127.0.0.1:7623/token(携带 x-lanhu-bridge 标记头),由 lanhu auth listen 一次性接收并写入用户级配置(0600) |
两个页面取设计稿 id 的方式与扩展完全一致(详情页取地址栏、画布页从左侧导航树选中项反查;空白区/分组/多选会提示缺少 image_id),详见扩展 README 的对应小节。
蓝湖的登录 Cookie 含 HttpOnly 项,document.cookie 拿不到。要让脚本取到完整 Cookie:
- Tampermonkey 图标 → 管理面板 → 设置,「配置模式」选 高级(Advanced);
- 找到 Security → Allow scripts to access cookies,选 All(Tampermonkey 稳定版 ≥5.3.1 支持);
- 重新执行菜单项。若 toast 仍提示未含 HttpOnly,用
lanhu auth test "<设计稿URL>"验证 token 是否够用,不够用就改装浏览器扩展。
ScriptCat 支持 GM_cookie(安装脚本时确认 Cookie 权限即可);Violentmonkey 需在设置里显式允许。
| 浏览器扩展 | 油猴脚本(本包) | |
|---|---|---|
| Cookie 完整性 | chrome.cookies,零配置含 HttpOnly |
GM_cookie 需手动开设置;未开启回落 document.cookie(缺 HttpOnly) |
| 安装方式 | 加载解压目录 / 企业分发 crx | 单文件 .user.js,任何脚本管理器 |
| 发送到本机的通道校验 | Origin: chrome-extension:// |
x-lanhu-bridge 请求头 |
| 菜单注入 / 链接解析 | 同一份 ecosystem-core 实现,行为一致 |
同左 |
拿不准选哪个:能装扩展就装扩展(Cookie 保真度零配置);只临时登录一次,油猴脚本 + lanhu auth test 验证也够用。
# 终端:启动一次性接收端(默认 127.0.0.1:7623,120s 超时)
lanhu auth listen
# 尚未安装 CLI 时,用 npx 免安装登录:
npx -y -p @lanhu-context/cli lanhu auth listen
# 浏览器:蓝湖设计稿页面 → 右键 → 「发送 cookies 到本机」
# 终端收到后自动写入用户级配置并退出;随后可验证:
lanhu auth status
lanhu auth test "<设计稿URL>"接收端只接受浏览器扩展来源(Origin: chrome-extension://)或油猴脚本标记(x-lanhu-bridge 请求头)的请求,普通网页两者都无法伪造;叠加仅监听回环地址、收到一次即退出、超时自动退出。
端口在两处必须一致:
- 脚本侧:
../ecosystem-core/src/constants.ts的DEFAULT_BRIDGE_PORT(改后重新 build 并重新安装.user.js) - CLI 侧:
lanhu auth listen --port <port>
@grant GM_cookie:读取 lanhuapp.com Cookie(含 HttpOnly,需开设置)——这是「复制/发送 cookies」的数据来源@grant GM_setClipboard:写剪贴板(失败时回落 DOM 复制)@grant GM_xmlhttpRequest+@connect 127.0.0.1:仅用于把 Cookie POST 给本机lanhu auth listen,不触达其他地址@match https://lanhuapp.com/web/*:只在蓝湖页面运行
整段 Cookie 等同蓝湖账号凭据。 勿分享、勿提交到仓库、勿粘贴到不可信的地方;CLI 侧输出只显示掩码指纹,绝不回显明文。
- Cookie 完整性依赖管理器设置(见上文);
lanhu auth test是最终判据。 - 扩展 README 列出的宿主行为限制(多选不复制链接、折叠分组依赖宿主自动展开、二级菜单展开还原定位修正)同样适用。
分发链路:CI 在每次 @lanhu-context/lanhu-monkey 发版后,把构建产物回写到本目录的 lanhu-monkey.user.js(见 .github/workflows/release-userscript.yml),GreasyFork 通过 push webhook 感知并从 raw URL 拉取更新(版本号由 changesets 递增,满足 GreasyFork 的更新要求)。首次配置两步:
-
GreasyFork 侧:发布脚本时选「从 URL 同步」,同步 URL 填:
https://github.com/DaYePython/lanhu-context/raw/main/ecosystem/lanhu-monkey/lanhu-monkey.user.js同步方式选 Webhook,记下 GreasyFork 给出的 Payload URL 与 Secret。
-
GitHub 侧:仓库 Settings → Webhooks → Add webhook——Payload URL 填 GreasyFork 给的地址(形如
https://api.greasyfork.org/zh-CN/users/<id>/webhook);Content type 选application/json;Secret 填 GreasyFork 显示的值;事件选 Just the push event;勾选 Active。
之后无需人工干预:merge 版本 PR → CI 发版并回写产物 → webhook 触发 GreasyFork 更新。
注入依赖实测选择器,唯一依据在 ../ecosystem-core/src/menu/(detail-selectors.ts / stage-selectors.ts);重测流程见扩展的 docs/implementation-plan.md 与 docs/implementation-plan-stage-menu.md。更新选择器后重新 build 本包与扩展即可,业务逻辑无需改动。