skills-experimental/change-detector-deletion-grace/SKILL.md
# Change Detector with Deletion Grace Pattern ## Source Claude Code: `utils/settings/changeDetector.ts` (415 lines) ## Pattern Chokidar file watcher with deletion grace period + MDM polling + ConfigChange hooks. ## Code Example ```typescript // Constants const FILE_STABILITY_THRESHOLD_MS = 1000 // Wait for write to stabilize const FILE_STABILITY_POLL_INTERVAL_MS = 500 const INTERNAL_WRITE_WINDOW_MS = 5000 // Suppress own writes const DELETION_GRACE_MS = 1200 // > stability thr
npx skillsauth add bianhaifeng789-hue/openclaw-config skills-experimental/change-detector-deletion-graceInstall 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.
Claude Code: utils/settings/changeDetector.ts (415 lines)
Chokidar file watcher with deletion grace period + MDM polling + ConfigChange hooks.
// Constants
const FILE_STABILITY_THRESHOLD_MS = 1000 // Wait for write to stabilize
const FILE_STABILITY_POLL_INTERVAL_MS = 500
const INTERNAL_WRITE_WINDOW_MS = 5000 // Suppress own writes
const DELETION_GRACE_MS = 1200 // > stability threshold
const MDM_POLL_INTERVAL_MS = 30 * 60 * 1000 // 30 minutes
// Pending deletions map - cancel on add/change
const pendingDeletions = new Map<string, ReturnType<typeof setTimeout>>()
// Chokidar setup
watcher = chokidar.watch(dirs, {
persistent: true,
ignoreInitial: true,
depth: 0, // Only immediate children
awaitWriteFinish: {
stabilityThreshold: FILE_STABILITY_THRESHOLD_MS,
pollInterval: FILE_STABILITY_POLL_INTERVAL_MS,
},
ignored: (path, stats) => {
if (stats && !stats.isFile() && !stats.isDirectory()) return true // Skip sockets/FIFOs
if (path.split.sep.some(dir => dir === '.git')) return true
// Only watch known settings files
return !settingsFiles.has(normalize(path))
},
})
// Deletion handler with grace period
function handleDelete(path: string): void {
const timer = setTimeout(() => {
pendingDeletions.delete(path)
// Fire ConfigChange hook first
void executeConfigChangeHooks(source, path).then(results => {
if (hasBlockingResult(results)) return // Hook blocked
fanOut(source)
})
}, DELETION_GRACE_MS)
pendingDeletions.set(path, timer)
}
// Add/change cancels pending deletion (delete-and-recreate pattern)
function handleAdd(path: string): void {
const pendingTimer = pendingDeletions.get(path)
if (pendingTimer) {
clearTimeout(pendingTimer)
pendingDeletions.delete(path)
}
handleChange(path)
}
// Fan-out with single cache reset (single producer)
function fanOut(source: SettingSource): void {
resetSettingsCache() // MUST happen here, not in each listener
settingsChanged.emit(source)
}
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