skills-experimental/color-discriminated-union/SKILL.md
# Color Discriminated Union Skill Color Discriminated Union - Color type union + type discriminant + named/indexed/rgb/default variants + NamedColor enum + TextStyle type + defaultStyle function + UnderlineStyle enum + comprehensive text attributes。 ## 功能概述 从Claude Code的ink/termio/types.ts提取的Color discriminated union模式,用于OpenClaw的ANSI样式类型定义。 ## 核心机制 ### Color Type Union ```typescript /** Color specification - can be named, indexed (256), or RGB */ export type Color = | { type: 'named'; n
npx skillsauth add bianhaifeng789-hue/openclaw-config skills-experimental/color-discriminated-unionInstall 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.
Color Discriminated Union - Color type union + type discriminant + named/indexed/rgb/default variants + NamedColor enum + TextStyle type + defaultStyle function + UnderlineStyle enum + comprehensive text attributes。
从Claude Code的ink/termio/types.ts提取的Color discriminated union模式,用于OpenClaw的ANSI样式类型定义。
/** Color specification - can be named, indexed (256), or RGB */
export type Color =
| { type: 'named'; name: NamedColor }
| { type: 'indexed'; index: number } // 0-255
| { type: 'rgb'; r: number; g: number; b: number }
| { type: 'default' }
// Discriminated union
# type field as discriminant
# named: 16 named colors
# indexed: 256-color palette
# rgb: true color
# default: terminal default
type: 'named' | 'indexed' | 'rgb' | 'default'
// Discriminant field
# Type narrowing
# TypeScript discriminated union
export type NamedColor =
| 'black'
| 'red'
| 'green'
| 'yellow'
| 'blue'
| 'magenta'
| 'cyan'
| 'white'
| 'brightBlack'
| 'brightRed'
| 'brightGreen'
| 'brightYellow'
| 'brightBlue'
| 'brightMagenta'
| 'brightCyan'
| 'brightWhite'
// 16 named colors
# Standard 8 + bright 8
{ type: 'indexed'; index: number } // 0-255
// 256-color palette
# Index 0-255
{ type: 'rgb'; r: number; g: number; b: number }
// True color (24-bit)
# R, G, B components (0-255)
{ type: 'default' }
// Terminal default color
# No fields except type
export type TextStyle = {
bold: boolean
dim: boolean
italic: boolean
underline: UnderlineStyle
blink: boolean
inverse: boolean
hidden: boolean
strikethrough: boolean
overline: boolean
fg: Color
bg: Color
underlineColor: Color
}
// Comprehensive text style
# Boolean attributes
# Color attributes
export function defaultStyle(): TextStyle {
return {
bold: false,
dim: false,
italic: false,
underline: 'none',
blink: false,
inverse: false,
hidden: false,
strikethrough: false,
overline: false,
fg: { type: 'default' },
bg: { type: 'default' },
underlineColor: { type: 'default' },
}
}
// Default (reset) style factory
# All attributes false/default
export type UnderlineStyle =
| 'none'
| 'single'
| 'double'
| 'curly'
| 'dotted'
| 'dashed'
// Underline variants
# SGR 4: single
# SGR 21: double
# Extended underline styles
bold: boolean // SGR 1
dim: boolean // SGR 2
italic: boolean // SGR 3
blink: boolean // SGR 5
inverse: boolean // SGR 7
hidden: boolean // SGR 8
strikethrough: boolean // SGR 9
overline: boolean // SGR 53
// SGR boolean attributes
# Named by function
{
"fg": {"type": "rgb", "r": 255, "g": 0, "b": 0},
"bg": {"type": "default"},
"bold": true,
"underline": "single"
}
type: 'named' | 'indexed' | 'rgb' | 'default' → discriminant → TypeScript narrowing
# type字段作为discriminant
# TypeScript类型收窄
# 不同variant不同fields
black...white (8) + brightBlack...brightWhite (8) → 16 named colors → standard palette
# 16 named colors
# 标准8色 + bright 8色
indexed: 0-255 (256-color) | rgb: r,g,b (24-bit) → different color modes
# indexed: 256色palette
# rgb: true color 24-bit
# 不同color modes
defaultStyle() → all false/default → reset state → SGR 0 equivalent
# defaultStyle工厂函数
# 所有属性false/default
# 等价于SGR 0 reset
none/single/double/curly/dotted/dashed → extended underline styles → SGR 4:1:0-5
# 扩展underline styles
# SGR 4:1:0-5表示
# curly/dotted/dashed
ink/termio/types.ts (236 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