← Back to home@luoyukun3-oss

gh-my-posts

Local dashboard for your own GitHub discussions, issues and inbox (read-only; single Node file, no git needed)

Stars
0
Language
JavaScript
Created
Oct 4, 2026
Updated
Oct 5, 2026

Introduction

gh-my-posts · 我的 GitHub 看板

把你在 GitHub 上的动静汇总成一页:收件箱 + 我发起的 + 我参与的,点一下就跳过去。

区块内容
📥 收件箱GitHub 通知里属于你的新回复 —— 谁回的你、在哪个帖子、什么原因
✍️ 我发起的你创建的 Discussions / Issues(含评论数、最后回复是谁)
💬 我参与的你评论过、但不是你发起的帖子(按 仓库#编号 剔除已在我发起里的)

全程只读,不发送任何写请求。

两种用法,选一个就行

方式适合谁入口
脚本版(单文件 Node)任何人 / 任何环境,只要装了 Node 与 gh本仓库根目录的 gh-my-posts.mjs,双击 run.cmd(Windows)或 bash run.sh
DSH 插件版在用 DeepSeek Harness 的话 —— 界面里直接有面板,不用开浏览器panel/ 目录,见文末「插件版」一节

两版取数逻辑同源(同一套 gh 调用与字段映射),差别只在呈现:脚本版吐一个本地 HTML,插件版是一个常驻面板。

📺 视频介绍(B 站,27 秒):https://www.bilibili.com/video/BV1NCHs6iE1m

为什么需要它

因为 GitHub 上「我发的」和「我参与的」是两个不同的地方,而且后者特别难找:

  • 自己发的:要么靠 author: 搜索,要么一个个仓库的 Discussions 页去翻;
  • 参与过的:得靠 involves: 限定符 —— 通知页里根本没有它。

顺带澄清一个常见误解:通知页不是"我发了什么"的列表。它是「别人对我做了什么」的收件箱 —— 你自己发帖不会通知你自己,所以那里永远看不到你发的内容。

依赖

脚本版用法

node gh-my-posts.mjs
  • Windows:双击 run.cmd
  • macOS / Linux:bash run.sh

它会在同目录生成 my-posts.html 并用默认浏览器打开。

换账号 / 换输出路径

GH_MY_POSTS_USER=someone-else node gh-my-posts.mjs          # 不填则用 gh 当前登录的账号
GH_MY_POSTS_HTML=~/dashboard.html node gh-my-posts.mjs

Windows PowerShell 写法:

$env:GH_MY_POSTS_USER = 'someone-else'; node gh-my-posts.mjs

它怎么取数

区块来源
收件箱gh api notifications --paginate —— GitHub 官方通知,"是否未读"由 GitHub 自己维护,不需要工具自己记时间戳
我发起的GitHub 搜索 author:<你>,分别取 discussion 与 issue
我参与的GitHub 搜索 involves:<你>,再剔除上面那一类

插件版(DSH)

panel/ 是一个标准的 DSH bundle:host 半边开一条只读路由 GET /gh-my-posts-panel/data,client 半边在左侧栏加一个 GitHub 图标,点开后主区域就是那三块列表。

安装分两步(用 DSH 官方的插件管理器,不要手改 profile 的 package.json):

第一步:把 panel/ 弄到本地。 它必须是本地目录才能安装 —— 用 git 的话:

git clone --depth 1 https://github.com/luoyukun3-oss/gh-my-posts.git
# 插件目录就是 ./gh-my-posts/panel

不用 git 的话,在 GitHub 网页上进 panel/ 逐个下载 package.json、cordis.patch.yml、src/index.js、lib/client.js,按相同结构放好。

第二步:安装这个目录。

plugin_manager  action=install_bundle  target=<本仓库 panel/ 目录的绝对路径>

装完刷新一次页面(浏览器半边的插件要重新加载页面才会装载)。

行为细节:

  • 数据在 host 侧缓存 60 秒(用来秒开;?force=1 绕过)。打开面板时先用缓存立刻渲染,再在后台补拉一次新的 —— 实测真拉一次要 3.2~3.6 秒(host 要跑 2 次 gh),而命中缓存只要 12 ms,所以体感是"瞬间出现、随即变新";
  • 从 GitHub 切回窗口时会自动重拉(监听 focus / visibilitychange),所以你在 GitHub 上读完一条再回来,未读状态会立刻更新。刷新带防抖(10 秒内只刷一次)—— 两个事件会几乎同时触发,不防抖会连拉两次 gh;
  • 点条目在新标签打开对应页面。

给写 DSH UI 插件的人一个踩坑提醒:cordis_inspect_query 只要传 platform: client(例如 Slots.listSubTree、Theme.listTokens),就会等页面应答;页面不应答时它静默挂起 —— 不报错、不超时(我们实测卡了 3 小时零输出,直到手动取消)。写 UI 插件建议直接照 templates/ 里的现成例子改,不要先查 client slot 树。

已知限制

  • 搜索接口每类最多取 50 条;
  • 通知默认只返回未读(GitHub 的行为)—— 你在 GitHub 上清掉通知后就看不到了;
  • 需要能访问 api.github.com(公司网络或代理环境下可能被拦;若代理开了 fake-IP,Hostname resolves to a non-public IP address 这类报错来自地址校验,改代理侧而不是改这里);
  • 脚本版输出的是生成时的快照,不是实时刷新 —— 想更新就再跑一次(插件版会自动/手动刷新)。

License

MIT