skills-experimental/git-root-walker-pattern/SKILL.md
# Git Root Walker Pattern Skill Git Root Walker Pattern - findGitRootImpl + memoizeWithLRU + parent walk + statSync check + .git directory or file + GIT_ROOT_NOT_FOUND symbol + normalize NFC + stat count + dirname parent loop + root directory check + realpathSync。 ## 功能概述 从Claude Code的utils/git.ts提取的Git root walker模式,用于OpenClaw的Git根目录查找。 ## 核心机制 ### findGitRootImpl ```typescript const findGitRootImpl = memoizeWithLRU( (startPath: string): string | typeof GIT_ROOT_NOT_FOUND => { const
npx skillsauth add bianhaifeng789-hue/openclaw-config skills-experimental/git-root-walker-patternInstall 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 Root Walker Pattern - findGitRootImpl + memoizeWithLRU + parent walk + statSync check + .git directory or file + GIT_ROOT_NOT_FOUND symbol + normalize NFC + stat count + dirname parent loop + root directory check + realpathSync。
从Claude Code的utils/git.ts提取的Git root walker模式,用于OpenClaw的Git根目录查找。
const findGitRootImpl = memoizeWithLRU(
(startPath: string): string | typeof GIT_ROOT_NOT_FOUND => {
const startTime = Date.now()
logForDiagnosticsNoPII('info', 'find_git_root_started')
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)
if (stat.isDirectory() || stat.isFile()) {
logForDiagnosticsNoPII('info', 'find_git_root_completed', {
duration_ms: Date.now() - startTime,
stat_count: statCount,
found: true,
})
return current.normalize('NFC')
}
} catch {
// .git doesn't exist at this level, continue up
}
const parent = dirname(current)
if (parent === current) {
break
}
current = parent
}
// Check root directory as well
// ...
logForDiagnosticsNoPII('info', 'find_git_root_completed', {
duration_ms: Date.now() - startTime,
stat_count: statCount,
found: false,
})
return GIT_ROOT_NOT_FOUND
}
)
// Find Git root by walking up
# memoizeWithLRU
# statSync check .git
const findGitRootImpl = memoizeWithLRU(
(startPath: string): string | typeof GIT_ROOT_NOT_FOUND => {
// ...
}
)
// LRU memoize
# Cache results
# Avoid repeated statSync
while (current !== root) {
try {
const gitPath = join(current, '.git')
statSync(gitPath)
// ...
} catch {
// Continue up
}
const parent = dirname(current)
if (parent === current) {
break
}
current = parent
}
// Walk up parent directories
# dirname(current) → parent
# Loop until root
const stat = statSync(gitPath)
if (stat.isDirectory() || stat.isFile()) {
// .git can be a directory (regular repo) or file (worktree/submodule)
return current.normalize('NFC')
}
// statSync check
# .git directory or file
# worktree/submodule = file
// .git can be a directory (regular repo) or file (worktree/submodule)
if (stat.isDirectory() || stat.isFile()) {
return current.normalize('NFC')
}
// .git is directory (regular repo) OR file (worktree/submodule)
# Both are valid Git roots
const GIT_ROOT_NOT_FOUND = Symbol('git-root-not-found')
// Symbol for not found
# Distinct from null/undefined
# Type-safe sentinel
return current.normalize('NFC')
// NFC (Normalization Form Canonical Composition)
# Unicode normalization
# Consistent string comparison
let statCount = 0
statCount++
// Track stat count for diagnostics
# Performance monitoring
const parent = dirname(current)
if (parent === current) {
break
}
current = parent
// dirname loop
# dirname(current) → parent
# parent === current → break
const root = current.substring(0, current.indexOf(sep) + 1) || sep
// Check root directory as well
try {
const gitPath = join(root, '.git')
statSync(gitPath)
// ...
} catch {}
// Check root directory
# e.g., / on Unix, C:\ on Windows
// Realpath for resolved path
// (not shown in excerpt but used elsewhere)
# Resolve symlinks
# Canonical path
{
"gitRoot": "/home/user/project",
"found": true,
"statCount": 3
}
current → dirname(current) → parent → loop → until root → find .git
# parent walk向上查找
# dirname获取parent
# loop until root
stat.isDirectory() || stat.isFile() → regular repo OR worktree/submodule → both valid
# .git可以是directory或file
# directory: regular repo
# file: worktree/submodule
Symbol('git-root-not-found') → distinct sentinel → type-safe → not null/undefined
# Symbol作为sentinel
# distinct from null/undefined
# type-safe
current.normalize('NFC') → Unicode normalization → consistent comparison → NFC form
# NFC normalization
# Unicode规范化
# consistent string comparison
memoizeWithLRU(fn) → cache results → avoid repeated statSync → performance
# LRU memoize cache
# 避免重复statSync
# 性能优化
utils/git.ts (926 lines)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