skills-experimental/git-utils/SKILL.md
Git utilities. findGitRoot + resolveCanonicalRoot + getCachedBranch + getCachedRemoteUrl + getCachedHead + getWorktreeCountFromFs + LRU cache (50 entries) + Security validation + memoizeWithLRU. Use when [git utils] is needed.
npx skillsauth add bianhaifeng789-hue/openclaw-config git-utilsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Git Utils Git 工具集。
场景:
Claude Code 方案:git.ts + 920+ lines OpenClaw 飞书适配:Git utils + Root finding
const GIT_ROOT_NOT_FOUND = Symbol('git-root-not-found')
const findGitRootImpl = memoizeWithLRU(
(startPath: string): string | typeof GIT_ROOT_NOT_FOUND => {
let current = resolve(startPath)
const root = current.substring(0, current.indexOf(sep) + 1) || sep
let statCount = 0
while (current !== root) {
try {
const gitPath = join(current, '.git')
statCount++
const stat = statSync(gitPath)
// .git can be a directory (regular repo) or file (worktree/submodule)
if (stat.isDirectory() || stat.isFile()) {
return current.normalize('NFC')
}
} catch {
// .git doesn't exist, continue up
}
const parent = dirname(current)
if (parent === current) break
current = parent
}
return GIT_ROOT_NOT_FOUND
},
path => path,
50, // LRU max entries
)
export function findGitRoot(startPath: string): string | null {
const result = findGitRootImpl(startPath)
return result === GIT_ROOT_NOT_FOUND ? null : result
}
const resolveCanonicalRoot = memoizeWithLRU(
(gitRoot: string): string => {
try {
// In worktree: .git is a file containing: gitdir: <path>
const gitContent = readFileSync(join(gitRoot, '.git'), 'utf-8').trim()
if (!gitContent.startsWith('gitdir:')) return gitRoot
const worktreeGitDir = resolve(gitRoot, gitContent.slice('gitdir:'.length).trim())
// commondir points to shared .git directory
const commonDir = resolve(worktreeGitDir, readFileSync(join(worktreeGitDir, 'commondir'), 'utf-8').trim())
// SECURITY: Validate worktree structure
// 1. worktreeGitDir must be direct child of <commonDir>/worktrees/
if (!worktreeGitDir.startsWith(join(commonDir, 'worktrees'))) {
throw new Error('Invalid worktree structure')
}
// 2. commondir must be absolute
if (!isAbsolute(commonDir)) throw new Error('commondir not absolute')
// 3. .git inside commondir must exist
if (!statSync(join(commonDir, '.git'))) throw new Error('No .git in commonDir')
// Working directory is parent of commonDir
return dirname(commonDir)
} catch {
return gitRoot // Submodule or regular repo
}
},
root => root,
10,
)
// Max 50 entries to prevent unbounded growth
// gitDiff calls with dirname(file), so many files = many entries
const cache = new LRUCache<string, string | null>({ max: 50 })
getCachedBranch() // From .git/HEAD
getCachedRemoteUrl() // From .git/config
getCachedHead() // From .git/HEAD (full ref)
getWorktreeCountFromFs() // Count worktrees
isShallowClone() // Check shallow
{
"config": {"wide_screen_mode": true},
"elements": [
{
"tag": "div",
"text": {
"tag": "lark_md",
"content": "**🌳 Git Utils**\n\n---\n\n**Functions**:\n• findGitRoot(startPath) - Walk up to find .git\n• resolveCanonicalRoot(gitRoot) - Resolve worktree\n• getCachedBranch() - Get current branch\n• getCachedRemoteUrl() - Get remote URL\n• getCachedHead() - Get HEAD ref\n• getWorktreeCountFromFs() - Count worktrees\n\n---\n\n**Cache**:LRU(max=50)\n\n---\n\n**Security**:\n• Validate worktree structure\n• Check commondir is absolute\n• Verify .git exists in commonDir"
}
}
]
}
// memory/git-utils-state.json
{
"stats": {
"rootsFound": 0,
"worktreesResolved": 0
},
"lastUpdate": "2026-04-12T11:14:00Z",
"notes": "Git Utils Skill 创建完成。"
}
| Claude Code | OpenClaw 飞书场景 | |-------------|------------------| | git.ts (920+ lines) | Skill + Git | | findGitRoot() | Root finding | | resolveCanonicalRoot() | Worktree | | LRU cache | Cache |
此 Skill 在 git operations 时自动运行。
business
IAA 日报飞书输出能力。 支持把固定 CSV 模板一键转换成: - 中文运营结论 - 飞书卡片 JSON - 飞书发送载荷 Use when: - 需要把 IAA 日报直接发到飞书 - 需要从 CSV 一键生成运营日报
data-ai
IAA日报分析模型 功能: - 渠道日报自动分析 - 小时级+日级ROI联动判断 - 按地区输出加量/降量/停投建议 - 按产品类型输出阈值 - 自动识别利润区/观察区/止损区 Use when: - 分析每天投放数据 - 生成运营日报结论 - 判断是否加量/降量/停投 - 对比美加澳/日韩表现 Keywords: - 日报模型, 投放日报, 加量, 降量, 停投, ROI日报, 分地区分析
data-ai
IAA固定日报分析模板 功能: - 固定字段模板(可直接贴每天数据) - 自动输出总盘结论 - 自动输出美加澳/日韩结论 - 自动给出加量/降量/停投建议 - 适配文件修复/清理两类产品 Use when: - 需要固定日报格式 - 每天复盘渠道表现 - 给运营团队出统一结论 Keywords: - 固定模板, 日报模板, ROI模板, IAA日报, 运营模板
development
# HyperlinkPool Pattern Skill HyperlinkPool Pattern - HyperlinkPool class + strings array + stringMap + Index 0 no hyperlink + intern(hyperlink) + get(id) + undefined handling + 5-minute reset + OSC8 hyperlink interning。 ## 功能概述 从Claude Code的ink/screen.ts提取的HyperlinkPool模式,用于OpenClaw的OSC8超链接池管理。 ## 核心机制 ### HyperlinkPool Class ```typescript export class HyperlinkPool { private strings: string[] = [''] // Index 0 = no hyperlink private stringMap = new Map<string, number>() // strings