ljg-push

ljg-push

熱門

將 `~/.agents/skills/ljg-*` 中所有更新過的 skills 同步至 GitHub repo (ljg-skills),先推送 master 分支(org-mode 輸出風格),再切換至 md 分支(markdown 輸出風格)進行基礎 markdown 化後推送。適用於使用者輸入 '/ljg-push'、'push skills'、'推送 skills'、'同步 skills'、'sync ljg',或是 ljg-* skills 有更新需要發布時。請勿用於推送非 ljg 的 skills 或任意 git repos。

6597星標
768分支
更新於 2026/7/17
SKILL.md
唯讀
名稱
ljg-push
描述

將 `~/.agents/skills/ljg-*` 中所有更新過的 skills 同步至 GitHub repo (ljg-skills),先推送 master 分支(org-mode 輸出風格),再切換至 md 分支(markdown 輸出風格)進行基礎 markdown 化後推送。適用於使用者輸入 '/ljg-push'、'push skills'、'推送 skills'、'同步 skills'、'sync ljg',或是 ljg-* skills 有更新需要發布時。請勿用於推送非 ljg 的 skills 或任意 git repos。

ljg-push: 推送 ljg-* skills

將本地 ~/.agents/skills/ljg-* 修改過的 skills,一鍵同步至 GitHub repo,涵蓋 master 與 md 兩個分支。

儲存庫路徑(硬編碼)

SKILLS_REPO="$HOME/code/ljg-skills"     # 本地工作 repo
SKILLS_LOCAL="$HOME/.agents/skills"      # 本地 skill 來源
REPO_URL="git@github.com:lijigang/ljg-skills.git"

如果 $SKILLS_REPO 不存在,腳本會自動 clone。如果已存在但非 ljg-skills 的 git repo,腳本會報錯退出(不破壞既有目錄)。

兩條分支的差異

分支 輸出格式 檔案副檔名 粗體 標頭檔 (Header)
master(預設) org-mode .org *bold* #+title:
md markdown .md **bold** YAML frontmatter

~/.agents/skills/ 中的 skill 為 master 風格(來源版本)。md 分支的差異由腳本自動轉換,必要時輔以人工補齊。

腳本推送完 md 後會自動切回 master。本地 $HOME/code/ljg-skills 應始終保持在來源分支,方便下次檢視與安裝。

工作流

Workflows/Push.md 步驟執行 → 呼叫 Tools/Push.sh

README 一致性(硬性關卡)

每次 push 前,腳本強制執行一件事:將 README 與本地 skills 進行比對

  • 列出 ~/.agents/skills/ljg-* 的全部 skill 名稱
  • grep $SKILLS_REPO/README.md 中出現的 ljg-xxx
  • 找出本地存在但 README 缺漏的——幾乎代表 README 漏未更新
  • 觸發命中 → 中止 push 並回報差異

每次 push 都是檢視 README 的時機。請自問:

  1. 新增 skill 了嗎?README 的 skill 清單 / 安裝命令需補上一行
  2. 刪除 skill 了嗎?README 對應行需刪除
  3. 某個 skill 的描述大幅修改了嗎?README 的簡介可能需要同步更新

確認 README 已審核、確實無需更新時,可跳過此關卡:

/ljg-push --skip-readme-check

自動轉換的範圍

md 分支同步時自動轉換(2026-06-12 起包含 org 檔案本體):

  • org 檔案本體:skill 內每個 .org 檔案(assets/ 除外)轉為同名 .md 並刪除原檔——org 標頭區塊→YAML frontmatter(含 --- 圍欄,filetagstags)、* 標題→# 標題(保留階層)、刪除 #+ATTR_* 行、[[file:x]]![](x)#+begin_src→``` 圍欄。其他 .md 檔案中對被改名檔案的引用同步進行全域改寫
  • 檔案副檔名引用:__qa.org__qa.md__paper.org__paper.md 等(denote 命名約定)
  • 關鍵字:org-modemarkdownOrg-modeMarkdown
  • org 式格式指令:加粗用 *bold*(單星號)…加粗用 **bold**(雙星號)標題層級從 * 開始從 # 開始Org 文件頭Markdown 標頭、行首 #+title: 等 8 個範例鍵 → YAML 鍵值行

仍不自動轉換(按需求人工處理):

  • 正文中的 *bold* 標記:markdown 中 *x* 代表斜體,盲目替換會破壞文件本身的格式
  • SKILL.md 範例區塊中轉換出的 YAML 鍵值行不帶 --- 圍欄(已知樣式調整項,不影響語意)

Voice Notification

curl -s -X POST http://localhost:31337/notify \
  -H "Content-Type: application/json" \
  -d '{"message": "Running Push in ljg-push"}' \
  > /dev/null 2>&1 &

輸出文字:Running **Push** in **ljg-push**...

Examples

Example 1: 一鍵推送

User: /ljg-push
→ 檢測 ~/.agents/skills/ljg-* 中與 repo 有差異的 skills
→ master: rsync + bump version + commit + push
→ md: rsync + mdize + bump version + commit + push
→ 切回 master
→ 報告:推送了哪些 skills、新版本號、剩餘的人工差異

Example 2: 檢視擬推送內容但不實際執行

User: /ljg-push --dry-run
→ 列出將被同步的 skills
→ 列出將執行的 markdown 化轉換
→ 不執行 rsync / commit / push

Gotchas

  • README 偏差是最容易被忽略的——新增 skill 後直接推送,README 仍停留在舊清單。腳本目前設有硬性關卡進行攔截;被攔下時請勿盲目加上 --skip-readme-check,請先確認 README
  • 腳本前提為 Git 憑證已配置完成(SSH key 或 PAT)—— ljg-push 不處理驗證,驗證失敗時直接報錯
  • master 必須先推送——md 分支的 markdown 化是基於 master 的 org 版本進行轉換。反向推送會破壞執行順序
  • 未追蹤 (untracked) 的雜檔(如 assets/measure.js)會被 rsync 同步至 repo——若不想推送,請先在本地刪除,或加入 .gitignore
  • org 檔案本體已自動轉換(自 2026-06-12 起)——template.org 等會被轉為 .md 並刪除原檔,每次推送時重新生成(rsync --delete 覆蓋亦無妨,具備冪等性)。遺留的人工處理項僅剩正文中的 *bold* 標記。新增帶有複雜構件的 org reference 檔案後,建議先以 --dry-run 或在沙盒中執行 mdize 檢視轉換效果
  • 腳本會自動在 plugin.json + marketplace.json 中 bump patch version——若欲調整 minor / major 版本,請先手動修改後再執行腳本,腳本僅會追加 patch 版本號
  • 若 md 分支的遠端版本比本地更新(例如在另一台機器推送過),腳本在 pull --rebase 失敗時會嘗試執行 reset --hard origin/md 重新應用——這會捨棄本地未推送的 md 分支 commit。執行腳目前會跳出提示
  • 當前路徑:skill 來源固定為 ~/.agents/skills/,工作 repo 固定為 ~/code/ljg-skills/;請勿從歷史備份目錄讀取或推送