skills-experimental/cleanup-registry-pattern/SKILL.md
# Cleanup Registry Pattern Skill Cleanup Registry Pattern - cleanupFunctions Set + registerCleanup + unregister return + runCleanupFunctions + Promise.all + global registry + graceful shutdown support + circular dependency avoidance + async cleanup + Set.add/delete。 ## 功能概述 从Claude Code的utils/cleanupRegistry.ts提取的Cleanup registry模式,用于OpenClaw的清理函数管理。 ## 核心机制 ### cleanupFunctions Set ```typescript const cleanupFunctions = new Set<() => Promise<void>>() // Global registry for cleanup functio
npx skillsauth add bianhaifeng789-hue/openclaw-config skills-experimental/cleanup-registry-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.
Cleanup Registry Pattern - cleanupFunctions Set + registerCleanup + unregister return + runCleanupFunctions + Promise.all + global registry + graceful shutdown support + circular dependency avoidance + async cleanup + Set.add/delete。
从Claude Code的utils/cleanupRegistry.ts提取的Cleanup registry模式,用于OpenClaw的清理函数管理。
const cleanupFunctions = new Set<() => Promise<void>>()
// Global registry for cleanup functions
# Set of async cleanup functions
export function registerCleanup(cleanupFn: () => Promise<void>): () => void {
cleanupFunctions.add(cleanupFn)
return () => cleanupFunctions.delete(cleanupFn) // Return unregister function
}
// Register cleanup function
# Return unregister function
return () => cleanupFunctions.delete(cleanupFn) // Return unregister function
// Unregister cleanup handler
# Remove from Set
# Function identity check
export async function runCleanupFunctions(): Promise<void> {
await Promise.all(Array.from(cleanupFunctions).map(fn => fn()))
}
// Run all registered cleanup functions
# Used by gracefulShutdown
await Promise.all(Array.from(cleanupFunctions).map(fn => fn()))
// Execute all cleanup functions in parallel
# Promise.all for concurrent execution
// Global registry for cleanup functions
// Separate from gracefulShutdown.ts to avoid circular dependencies
# Global Set
# Module isolation
// Used internally by gracefulShutdown
// Cleanup functions run during shutdown
# Shutdown hook
// This module is separate from gracefulShutdown.ts to avoid circular dependencies
// cleanupRegistry.ts ← gracefulShutdown.ts (import runCleanupFunctions)
# Separate module
# Avoid circular import
cleanupFn: () => Promise<void>
// Async cleanup functions
# Can be sync or async
# Promise<void> return
cleanupFunctions.add(cleanupFn) // Register
cleanupFunctions.delete(cleanupFn) // Unregister
// Set operations
# add for register
# delete for unregister
{
"cleanupCount": 5,
"cleanupFunctions": ["fn1", "fn2", "fn3", "fn4", "fn5"]
}
registerCleanup(fn) → add to Set → return () => delete → unregister pattern
# register添加到Set
# 返回unregister函数
# delete移除
Promise.all(Array.from(set).map(fn => fn())) → parallel execution → concurrent cleanup
# Promise.all并行执行
# 所有cleanup functions并发
# 快速shutdown
new Set<() => Promise<void>>() → global registry → module isolation → circular avoidance
# global Set registry
# 模块隔离
# 避免circular dependency
cleanupRegistry.ts ← gracefulShutdown.ts → avoid circular → import only runCleanupFunctions
# cleanupRegistry独立模块
# gracefulShutdown导入runCleanupFunctions
# 无circular dependency
Set.add(fn) → identity check → Set.delete(fn) → exact same function → reference equality
# Set使用function identity
# add/delete使用相同function reference
# reference equality
utils/cleanupRegistry.ts (25 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