skills-experimental/graceful-exit-reason-pattern/SKILL.md
# Graceful Exit Reason Pattern Skill Graceful Exit Reason Pattern - ExitReason type + gracefulShutdown function + reason string + 'user-interrupt'/'normal'/'error'/'timeout'/'drain-scroll' + code mapping + exitMessage + logEvent analytics + forceExit fallback + retry shutdown + setTimeout delay + lastRequest wait + session persistence。 ## 功能概述 从Claude Code的utils/gracefulShutdown.ts提取的Graceful exit reason模式,用于OpenClaw的退出原因追踪。 ## 核心机制 ### ExitReason Type ```typescript type ExitReason = | '
npx skillsauth add bianhaifeng789-hue/openclaw-config skills-experimental/graceful-exit-reason-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.
Graceful Exit Reason Pattern - ExitReason type + gracefulShutdown function + reason string + 'user-interrupt'/'normal'/'error'/'timeout'/'drain-scroll' + code mapping + exitMessage + logEvent analytics + forceExit fallback + retry shutdown + setTimeout delay + lastRequest wait + session persistence。
从Claude Code的utils/gracefulShutdown.ts提取的Graceful exit reason模式,用于OpenClaw的退出原因追踪。
type ExitReason =
| 'user-interrupt' // Ctrl+C
| 'normal' // Successful completion
| 'error' // Error exit
| 'timeout' // Timeout
| 'drain-scroll' // Scroll drain exit
// Exit reason classification
export async function gracefulShutdown(
reason: ExitReason = 'normal',
code: number = 0,
): Promise<void> {
// Cleanup and exit gracefully
}
// Graceful shutdown with reason
gracefulShutdown('user-interrupt', 1) // Ctrl+C
gracefulShutdown('normal', 0) // Success
gracefulShutdown('error', 1) // Error
// Reason string for analytics
// Different exit reasons
// user-interrupt: SIGINT (Ctrl+C)
// normal: successful completion
// error: error exit
// timeout: timeout exit
// drain-scroll: scroll draining exit
gracefulShutdown('user-interrupt', 1) // Exit code 1
gracefulShutdown('normal', 0) // Exit code 0
gracefulShutdown('error', 1) // Exit code 1
// Exit code mapping
const exitMessage = getExitMessage(reason)
// Message for user display
# Different messages per reason
logEvent('tengu_session_exit', {
reason: reason as AnalyticsMetadata,
exit_code: code,
// ... more metadata
})
// Analytics logging on exit
# Track exit reasons
// Fallback to forceExit after timeout
setTimeout(() => {
logForDebugging('gracefulShutdown timeout, forcing exit')
forceExit(code)
}, 5000)
// Force exit after 5s timeout
# Graceful → force fallback
// Retry shutdown if last request pending
if (getLastMainRequestId()) {
await sleep(100)
// Retry
}
// Wait for pending requests
# Retry shutdown
setTimeout(() => forceExit(code), 5000)
// Delay before force exit
# Allow cleanup to complete
// Wait for last main request
if (getLastMainRequestId()) {
// Wait
}
// Wait for pending requests
# Don't exit mid-request
if (!isSessionPersistenceDisabled()) {
// Persist session
}
// Session persistence on exit
# Resume capability
{
"reason": "normal",
"code": 0,
"analyticsSent": true,
"forceTimeout": 5000
}
user-interrupt | normal | error | timeout | drain-scroll → reason classification → analytics
# ExitReason分类
# 不同原因
# analytics tracking
gracefulShutdown → timeout 5s → forceExit → fallback → cleanup may not complete
# graceful shutdown
# 5秒timeout
# forceExit fallback
logEvent('session_exit', {reason, code}) → analytics → track exit patterns → improve UX
# exit时log analytics
# track exit patterns
# improve UX
lastRequest pending → sleep → retry → don't exit mid-request → complete request
# last request pending时等待
# 不在request中途exit
# 完成request
!isSessionPersistenceDisabled → persist session → resume capability → save state
# session persistence选项
# resume capability
# save state on exit
utils/gracefulShutdown.ts (529 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