[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CHXFF4NJ91DZ197XD462N8":3,"skill-same:01M6CHXFF4NJ91DZ197XD462N8":80},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":37,"commitSha":43,"skillDirectory":44,"forksCount":14,"repositoryHtmlUrl":45,"repositoryHomepageUrl":46,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M6CHXFF4NJ91DZ197XD462N8","squash-commits",null,"Squash all commits on the current branch (relative to the main branch) into a single commit while preserving the branch name. Use when: user wants to squash commits, clean up branch history, compress multiple commits into one, or tidy up before merging. Triggers on: squash commits, 压缩提交, 合并提交, clean up commits, compress commits, squash branch, 整理提交记录, 合并为一个提交. Make sure to use this skill whenever the user mentions squashing, compressing, or cleaning up commit history on a branch, even if they don't use the exact term \"squash\".","Yukiniro\u002Fskills","Yukiniro","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F21242087?v=4","01M6CHWDY0NKQKGFCYMGSCTQ2X","Zhanghao","01M6CHWE1Z4CEH54PB0XJESZ0Z",0,"MIT","https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fsquash-commits\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37],"commits","squash","squash commits","commit","tidy","压缩","compress","history","branch","user","use","up","clean","main","2026-11-10 10:12:30",false,"---\nname: squash-commits\ndescription: >\n  Squash all commits on the current branch (relative to the main branch) into a single commit while preserving the branch name.\n  Use when: user wants to squash commits, clean up branch history, compress multiple commits into one, or tidy up before merging.\n  Triggers on: squash commits, 压缩提交, 合并提交, clean up commits, compress commits, squash branch, 整理提交记录, 合并为一个提交.\n  Make sure to use this skill whenever the user mentions squashing, compressing, or cleaning up commit history on a branch, even if they don't use the exact term \"squash\".\n---\n\n# Squash Commits\n\nCompress all commits on the current feature branch (relative to the main branch) into a single, clean commit. The branch name stays the same — only the commit history changes.\n\n## Workflow\n\n### Step 1: Detect the Main Branch\n\nDetermine whether the repository uses `main` or `master` as its primary branch:\n\n```bash\ngit symbolic-ref refs\u002Fremotes\u002Forigin\u002FHEAD 2>\u002Fdev\u002Fnull | sed 's@^refs\u002Fremotes\u002Forigin\u002F@@'\n```\n\nIf that fails (e.g., `origin\u002FHEAD` is not set), fall back to checking which branch exists locally:\n\n```bash\ngit branch --list main master\n```\n\nUse whichever one exists. If both exist, prefer `main`. Store the result as `$MAIN_BRANCH` for subsequent steps.\n\n### Step 2: Safety Checks\n\nRun all three checks before proceeding. If any fail, stop and explain the issue to the user.\n\n1. **Not on the main branch** — The current branch must not be the main branch itself. Squashing the main branch makes no sense and would rewrite shared history.\n\n   ```bash\n   CURRENT_BRANCH=$(git branch --show-current)\n   ```\n\n   If `$CURRENT_BRANCH` equals `$MAIN_BRANCH`, stop with a message: \"You are currently on the main branch. Switch to a feature branch first.\"\n\n2. **Clean working directory** — There must be no uncommitted changes (staged or unstaged). A dirty working tree would mix unrelated changes into the squashed commit.\n\n   ```bash\n   git status --porcelain\n   ```\n\n   If output is non-empty, stop with a message: \"You have uncommitted changes. Please commit or stash them first.\"\n\n3. **Commits exist to squash** — The branch must have at least 2 commits ahead of the main branch. With 0 or 1 commits, there's nothing to squash.\n\n   ```bash\n   MERGE_BASE=$(git merge-base $MAIN_BRANCH HEAD)\n   COMMIT_COUNT=$(git rev-list --count $MERGE_BASE..HEAD)\n   ```\n\n   If `$COMMIT_COUNT` is 0, stop: \"This branch has no commits ahead of $MAIN_BRANCH.\"\n   If `$COMMIT_COUNT` is 1, stop: \"This branch has only 1 commit — nothing to squash.\"\n\n### Step 3: Show the User What Will Happen\n\nBefore making any changes, show the user a summary so they can confirm:\n\n- Current branch name\n- Main branch name\n- Number of commits that will be squashed\n- List of those commits (hash + message)\n\n```bash\ngit log --format=\"%h %s\" $MERGE_BASE..HEAD\n```\n\nPresent this as a clear summary, for example:\n\n```\nBranch: feature-login\nSquashing 5 commits into 1 (relative to main):\n  a1b2c3d feat: add login form\n  d4e5f6g fix: handle empty password\n  h7i8j9k style: adjust button alignment\n  l0m1n2o refactor: extract validation logic\n  p3q4r5s test: add login form tests\n```\n\nAsk the user to confirm before proceeding. This is a destructive operation — once squashed, the original individual commits are gone from the branch history (they can still be recovered via reflog within the git GC window, but that's not something typical users should rely on).\n\n### Step 4: Build the Commit Message\n\nCompose a commit message for the squashed commit. The message should be useful and informative:\n\n**Title line:** Use the first commit's message as the base, or derive a summary from the branch name. If the branch name follows a pattern like `feature\u002Flogin` or `fix\u002Fauth-bug`, convert it to a readable title (e.g., \"feat: add login functionality\").\n\n**Body:** List all original commit messages as bullet points so the history isn't completely lost:\n\n```\nfeat: add login functionality\n\nSquashed commits:\n- feat: add login form\n- fix: handle empty password\n- style: adjust button alignment\n- refactor: extract validation logic\n- test: add login form tests\n```\n\nShow the proposed commit message to the user and let them confirm or provide a custom message. If the user provides their own message, use that instead.\n\n### Step 5: Execute the Squash\n\n```bash\ngit reset --soft $MERGE_BASE\ngit commit -m \"\u003Cthe commit message>\"\n```\n\n`git reset --soft` moves HEAD back to the fork point while keeping all file changes staged. The subsequent `git commit` bundles everything into a single commit. The branch name is unchanged — only the commit graph is rewritten.\n\n### Step 6: Verify and Inform\n\nAfter the squash, confirm success:\n\n```bash\ngit log --oneline -5\n```\n\nShow the user the new clean history. Also check whether the branch has been pushed to a remote:\n\n```bash\ngit branch -vv | grep \"^\\*\"\n```\n\nIf the branch tracks a remote, remind the user: \"This branch has been pushed before. You'll need to force-push to update the remote: `git push --force-with-lease`\". Recommend `--force-with-lease` over `--force` because it guards against overwriting someone else's work on the same branch.\n\n## Edge Cases\n\n- **Detached HEAD** — If not on any branch, abort with a clear message.\n- **Diverged from main** — The squash works on commits since the merge-base, so it handles divergence correctly. The merge-base is the most recent common ancestor, not the tip of main.\n- **Merge commits in the branch** — `git reset --soft` handles this fine; all changes (including those from merges) end up staged.\n- **Branch has been rebased** — If the branch was previously rebased onto main, the merge-base is already up to date and the squash proceeds normally.\n","# Squash Commits\n\nCompress all commits on the current feature branch (relative to the main branch) into a single, clean commit. The branch name stays the same — only the commit history changes.\n\n## Workflow\n\n### Step 1: Detect the Main Branch\n\nDetermine whether the repository uses `main` or `master` as its primary branch:\n\n```bash\ngit symbolic-ref refs\u002Fremotes\u002Forigin\u002FHEAD 2>\u002Fdev\u002Fnull | sed 's@^refs\u002Fremotes\u002Forigin\u002F@@'\n```\n\nIf that fails (e.g., `origin\u002FHEAD` is not set), fall back to checking which branch exists locally:\n\n```bash\ngit branch --list main master\n```\n\nUse whichever one exists. If both exist, prefer `main`. Store the result as `$MAIN_BRANCH` for subsequent steps.\n\n### Step 2: Safety Checks\n\nRun all three checks before proceeding. If any fail, stop and explain the issue to the user.\n\n1. **Not on the main branch** — The current branch must not be the main branch itself. Squashing the main branch makes no sense and would rewrite shared history.\n\n   ```bash\n   CURRENT_BRANCH=$(git branch --show-current)\n   ```\n\n   If `$CURRENT_BRANCH` equals `$MAIN_BRANCH`, stop with a message: \"You are currently on the main branch. Switch to a feature branch first.\"\n\n2. **Clean working directory** — There must be no uncommitted changes (staged or unstaged). A dirty working tree would mix unrelated changes into the squashed commit.\n\n   ```bash\n   git status --porcelain\n   ```\n\n   If output is non-empty, stop with a message: \"You have uncommitted changes. Please commit or stash them first.\"\n\n3. **Commits exist to squash** — The branch must have at least 2 commits ahead of the main branch. With 0 or 1 commits, there's nothing to squash.\n\n   ```bash\n   MERGE_BASE=$(git merge-base $MAIN_BRANCH HEAD)\n   COMMIT_COUNT=$(git rev-list --count $MERGE_BASE..HEAD)\n   ```\n\n   If `$COMMIT_COUNT` is 0, stop: \"This branch has no commits ahead of $MAIN_BRANCH.\"\n   If `$COMMIT_COUNT` is 1, stop: \"This branch has only 1 commit — nothing to squash.\"\n\n### Step 3: Show the User What Will Happen\n\nBefore making any changes, show the user a summary so they can confirm:\n\n- Current branch name\n- Main branch name\n- Number of commits that will be squashed\n- List of those commits (hash + message)\n\n```bash\ngit log --format=\"%h %s\" $MERGE_BASE..HEAD\n```\n\nPresent this as a clear summary, for example:\n\n```\nBranch: feature-login\nSquashing 5 commits into 1 (relative to main):\n  a1b2c3d feat: add login form\n  d4e5f6g fix: handle empty password\n  h7i8j9k style: adjust button alignment\n  l0m1n2o refactor: extract validation logic\n  p3q4r5s test: add login form tests\n```\n\nAsk the user to confirm before proceeding. This is a destructive operation — once squashed, the original individual commits are gone from the branch history (they can still be recovered via reflog within the git GC window, but that's not something typical users should rely on).\n\n### Step 4: Build the Commit Message\n\nCompose a commit message for the squashed commit. The message should be useful and informative:\n\n**Title line:** Use the first commit's message as the base, or derive a summary from the branch name. If the branch name follows a pattern like `feature\u002Flogin` or `fix\u002Fauth-bug`, convert it to a readable title (e.g., \"feat: add login functionality\").\n\n**Body:** List all original commit messages as bullet points so the history isn't completely lost:\n\n```\nfeat: add login functionality\n\nSquashed commits:\n- feat: add login form\n- fix: handle empty password\n- style: adjust button alignment\n- refactor: extract validation logic\n- test: add login form tests\n```\n\nShow the proposed commit message to the user and let them confirm or provide a custom message. If the user provides their own message, use that instead.\n\n### Step 5: Execute the Squash\n\n```bash\ngit reset --soft $MERGE_BASE\ngit commit -m \"\u003Cthe commit message>\"\n```\n\n`git reset --soft` moves HEAD back to the fork point while keeping all file changes staged. The subsequent `git commit` bundles everything into a single commit. The branch name is unchanged — only the commit graph is rewritten.\n\n### Step 6: Verify and Inform\n\nAfter the squash, confirm success:\n\n```bash\ngit log --oneline -5\n```\n\nShow the user the new clean history. Also check whether the branch has been pushed to a remote:\n\n```bash\ngit branch -vv | grep \"^\\*\"\n```\n\nIf the branch tracks a remote, remind the user: \"This branch has been pushed before. You'll need to force-push to update the remote: `git push --force-with-lease`\". Recommend `--force-with-lease` over `--force` because it guards against overwriting someone else's work on the same branch.\n\n## Edge Cases\n\n- **Detached HEAD** — If not on any branch, abort with a clear message.\n- **Diverged from main** — The squash works on commits since the merge-base, so it handles divergence correctly. The merge-base is the most recent common ancestor, not the tip of main.\n- **Merge commits in the branch** — `git reset --soft` handles this fine; all changes (including those from merges) end up staged.\n- **Branch has been rebased** — If the branch was previously rebased onto main, the merge-base is already up to date and the squash proceeds normally.\n",{"name":5,"description":7},"bdc113818552fc6973af63a3890b61d9777b677d","skills\u002Fsquash-commits","https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills","https:\u002F\u002Fskills.sh\u002Fyukiniro\u002Fskills","https:\u002F\u002Fgithub.com\u002FYukiniro","zhanghao.zone","Done is better than perfect.","2026-10-17 22:26:31",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add Yukiniro\u002Fskills --skill squash-commits",{"tool":57,"command":58},"bunx","bunx skills add Yukiniro\u002Fskills --skill squash-commits",{"tool":60,"command":61},"pnpm","pnpm dlx skills add Yukiniro\u002Fskills --skill squash-commits","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fsquash-commits\u002FSKILL.md",true,[65,70,76],{"path":66,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"LICENSE","许可证",1070,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fmcp-servers\u002Fedward-arinin-web-dev-dexe-staking\u002FLICENSE",{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"SOURCE.md","REFERENCE","参考文档",385,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fmcp-servers\u002Fedward-arinin-web-dev-dexe-staking\u002FSOURCE.md",{"path":77,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":78,"sourceHtmlUrl":79},"TRUST.auto.yaml",2217,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fmcp-servers\u002Fedward-arinin-web-dev-dexe-staking\u002FTRUST.auto.yaml",[81,91,113,129,141,166],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":88,"publishedAt":38},"01M6CHXN4VA42C1N988S7BWCMG","template-skill","Replace with description of the skill and when to use it.","https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Ftemplate\u002FSKILL.md",[87],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[89,90,34],"template skill","template",{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":102,"publishedAt":38},"01M6CHXJMHXG22G9TQPPN498ZV","work-weekly-report","Generate structured weekly work summaries from daily work logs. Use when: user provides daily work logs\u002Fnotes and asks to create a weekly report\u002Fsummary (周报\u002F周工作总结), or when user pastes fragmented daily entries and wants them consolidated into a categorized summary. Triggers on keywords: 周报, 周工作总结, weekly summary, weekly report, 工作日志整理, 每日日志汇总.","https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fwork-weekly-report\u002FSKILL.md",[97],{"categoryNo":98,"categoryName":99,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[103,104,105,106,107,108,109,110,33,34,111,112],"report","work","Weekly Report","work weekly report","notes","create","generate","logs","daily","summary",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":38},"01M6CHXCM56VNQFDYXZ8NQT3A9","smart-commit","Automated Git commit with Conventional Commits format. Analyzes staged changes, determines commit type and scope, detects description language from commit history (defaults to English), and generates a complete commit message. Use when the user says \"commit\", \"smart commit\", \"提交代码\", \"帮我提交\", or any variation of requesting a git commit with an auto-generated message.","https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fsmart-commit\u002FSKILL.md",[],[120,27,121,31,33,122,24,123,124,125,34,126,127,128],"smart commit","commit message","format","language","git","generated","auto","conventional commits","git commit",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":38},"01M6CHXAZNH6HMY4DW6663QJ25","setup-agents-md","创建、初始化或更新 AGENTS.md 通用工程原则文档时使用。触发词包括“创建 AGENTS.md”、“更新 AGENTS.md”、“初始化 AGENTS.md”、“setup AGENTS.md”、“create AGENTS.md”、“update AGENTS.md”。","https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fsetup-agents-md\u002FSKILL.md",[],[136,137,138,139,108,140],"setup agents md","setup","agents md","文档","update",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":153,"publishedAt":38},"01M6CHX7J863WH94J35ZVN8EMZ","resume-screener","Evaluate and grade resumes against job requirements using a 10-level grading system (C, B-, B, B+, A-, A, A+, S, SS, SSS). Provides multi-dimensional scoring with evidence-based reasoning and hiring recommendations. Use when screening candidates, comparing applicants, assessing resume-job fit, or filtering resumes. Supports Chinese and English resumes in any format (PDF, DOCX, text, image).","https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fresume-screener\u002FSKILL.md",[147,150],{"categoryNo":148,"categoryName":149,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",{"categoryNo":151,"categoryName":152,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000038","人力资源",[154,155,156,157,158,159,160,161,122,162,163,34,164,165],"resume screener","resume","image","docx","PDF","reasoning","Hiring","system","text","filtering","evidence","chinese",{"skillNo":167,"name":168,"nameZh":6,"description":169,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":173,"publishedAt":38},"01M6CHX4RDME6453Z8EKTC7H91","prompt-optimizer","Transforms vague or simple user prompts into high-quality, structured, and high-performance AI instructions using systematic optimization techniques like XML tagging, few-shot examples, and Chain-of-Thought. Use this skill when you need to improve the reliability, accuracy, or formatting of an AI's output.","https:\u002F\u002Fgithub.com\u002FYukiniro\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fprompt-optimizer\u002FSKILL.md",[172],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[174,175,176,177,178,179,180,181,33,34,182,183,184,185],"prompt","prompt optimizer","xml","examples","Optimization","improve","quality","instructions","reliability","prompts","simple","performance"]