skills-experimental/hook-types/SKILL.md
# Hook Types Skill Hook类型系统 - Discriminated hook output + Zod validation + Event-specific output + Async/Sync type guard。 ## 功能概述 从Claude Code的Hook Types提取的hook类型模式,用于OpenClaw的hook系统。 ## 核心机制 ### Discriminated Hook Output ```typescript hookSpecificOutput: z.union([ z.object({ hookEventName: z.literal('PreToolUse'), permissionDecision, updatedInput }), z.object({ hookEventName: z.literal('UserPromptSubmit'), additionalContext }), z.object({ hookEventName: z.literal('SessionStart'), in
npx skillsauth add bianhaifeng789-hue/openclaw-config skills-experimental/hook-typesInstall 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.
Hook类型系统 - Discriminated hook output + Zod validation + Event-specific output + Async/Sync type guard。
从Claude Code的Hook Types提取的hook类型模式,用于OpenClaw的hook系统。
hookSpecificOutput: z.union([
z.object({ hookEventName: z.literal('PreToolUse'), permissionDecision, updatedInput }),
z.object({ hookEventName: z.literal('UserPromptSubmit'), additionalContext }),
z.object({ hookEventName: z.literal('SessionStart'), initialUserMessage, watchPaths }),
z.object({ hookEventName: z.literal('PostToolUse'), updatedMCPToolOutput }),
z.object({ hookEventName: z.literal('PermissionRequest'), decision }),
// ... more event types
])
// hookEventName作为discriminator
// Event-specific output shape
export function isSyncHookJSONOutput(json: HookJSONOutput): json is SyncHookJSONOutput {
return !('async' in json && json.async === true)
}
export function isAsyncHookJSONOutput(json: HookJSONOutput): json is AsyncHookJSONOutput {
return 'async' in json && json.async === true
}
// Type guard for async/sync
// Compile-time narrowing
export const syncHookResponseSchema = lazySchema(() =>
z.object({
continue: z.boolean().optional(),
suppressOutput: z.boolean().optional(),
stopReason: z.string().optional(),
decision: z.enum(['approve', 'block']).optional(),
hookSpecificOutput: z.union([...]).optional()
})
)
export const hookJSONOutputSchema = lazySchema(() =>
z.union([asyncHookResponseSchema, syncHookResponseSchema()])
)
// Lazy schema for validation
// Union for async/sync
z.object({
hookEventName: z.literal('SessionStart'),
additionalContext: z.string().optional(),
initialUserMessage: z.string().optional(),
watchPaths: z.array(z.string()).optional()
})
// SessionStart → initial message + watch paths
// 每个event有unique shape
z.object({
hookEventName: z.literal('PermissionRequest'),
decision: z.union([
z.object({ behavior: z.literal('allow'), updatedInput, updatedPermissions }),
z.object({ behavior: z.literal('deny'), message, interrupt })
])
})
// PermissionRequest → allow/deny decision
// Structured permission result
export type PromptRequest = {
prompt: z.string() // request id
message: z.string()
options: z.array({ key, label, description })
}
export type PromptResponse = {
prompt_response: string // request id
selected: string
}
// prompt key as discriminator
// Elicitation protocol
export type AggregatedHookResult = {
message?: Message
blockingErrors?: HookBlockingError[]
preventContinuation?: boolean
additionalContexts?: string[]
permissionRequestResult?: PermissionRequestResult
}
// Multiple hooks → aggregated result
// 防止多个blockingError
{
"hookEventName": "PreToolUse",
"permissionDecision": "allow",
"updatedInput": {...},
"async": false
}
hookEventName: z.literal('PreToolUse') → unique shape
// 每个event unique output
// 编译时类型安全
isSyncHookJSONOutput / isAsyncHookJSONOutput
// 区分async/sync
// Type narrowing
lazySchema(() => z.union([...]))
// 避免循环dependency
// 按需validate
decision: z.union([allow, deny])
// 结构化permission decision
// Hook可override permission
types/hooks.tsbusiness
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