skills-experimental/app-state-provider/SKILL.md
# App State Provider Skill 应用状态管理 - React Context + Zustand-like store。 ## 功能概述 从Claude Code的AppState.tsx提取的状态管理模式,用于OpenClaw的UI状态管理。 ## 核心机制 ### Provider结构 ```typescript type Props = { children: React.ReactNode initialState?: AppState onChangeAppState?: (args: { newState, oldState }) => void } export function AppStateProvider({ children, initialState, onChangeAppState }) { const [store] = useState(() => createStore(initialState ?? getDefaultAppState(), onChangeAppState)) // ...
npx skillsauth add bianhaifeng789-hue/openclaw-config skills-experimental/app-state-providerInstall 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.
应用状态管理 - React Context + Zustand-like store。
从Claude Code的AppState.tsx提取的状态管理模式,用于OpenClaw的UI状态管理。
type Props = {
children: React.ReactNode
initialState?: AppState
onChangeAppState?: (args: { newState, oldState }) => void
}
export function AppStateProvider({ children, initialState, onChangeAppState }) {
const [store] = useState(() => createStore(initialState ?? getDefaultAppState(), onChangeAppState))
// ...
}
export const AppStoreContext = React.createContext<AppStateStore | null>(null)
const HasAppStateContext = React.createContext<boolean>(false)
// 双context:store + hasProvider检测
const hasAppStateContext = useContext(HasAppStateContext)
if (hasAppStateContext) {
throw new Error("AppStateProvider can not be nested within another AppStateProvider")
}
// 防止多层嵌套
const onSettingsChange = useEffectEvent(source => applySettingsChange(source, store.setState))
useSettingsChange(onSettingsChange)
// 监听settings变化并apply
const VoiceProvider = feature('VOICE_MODE')
? require('../context/voice.js').VoiceProvider
: ({ children }) => children
// Feature-gated provider
// DCE: 外部builds使用passthrough
{
"appState": {
"messages": [],
"tasks": {},
"ultraplanSessionUrl": null,
"toolPermissionContext": {...}
},
"hasProvider": true
}
使用HasAppStateContext防止嵌套:
const onSettingsChange = useEffectEvent(...)
// 稳定callback,无需在依赖数组中声明
// React 18+推荐模式
<VoiceProvider>{children}</VoiceProvider>
// VoiceProvider可能是真实provider或passthrough
// 编译时决定,无运行开销
state/AppState.tsxbusiness
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