skills-experimental/coordinator-task-panel/SKILL.md
# Coordinator Task Panel Skill Coordinator Task Panel - EvictAfter deadline + 1s tick eviction + Agent name registry + View/steer pattern。 ## 功能概述 从Claude Code的CoordinatorAgentStatus提取的任务面板模式,用于OpenClaw的后台任务展示。 ## 核心机制 ### EvictAfter Deadline ```typescript export function getVisibleAgentTasks(tasks: AppState['tasks']): LocalAgentTaskState[] { return Object.values(tasks).filter((t): t is LocalAgentTaskState => isPanelAgentTask(t) && t.evictAfter !== 0 ).sort((a, b) => a.startTime -
npx skillsauth add bianhaifeng789-hue/openclaw-config skills-experimental/coordinator-task-panelInstall 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.
Coordinator Task Panel - EvictAfter deadline + 1s tick eviction + Agent name registry + View/steer pattern。
从Claude Code的CoordinatorAgentStatus提取的任务面板模式,用于OpenClaw的后台任务展示。
export function getVisibleAgentTasks(tasks: AppState['tasks']): LocalAgentTaskState[] {
return Object.values(tasks).filter((t): t is LocalAgentTaskState =>
isPanelAgentTask(t) && t.evictAfter !== 0
).sort((a, b) => a.startTime - b.startTime)
}
// Presence in AppState.tasks IS visibility
// evictAfter !== 0 check handles immediate dismiss (x key)
// Time-dependent eviction
React.useEffect(() => {
if (!hasTasks) return
const interval = setInterval(() => {
const now = Date.now()
for (const t of Object.values(tasksRef.current)) {
if (isPanelAgentTask(t) && (t.evictAfter ?? Infinity) <= now) {
evictTerminalTask(t.id, setAppState)
}
}
setTick(prev => prev + 1)
}, 1000)
return () => clearInterval(interval)
}, [hasTasks, setAppState])
// 1s tick: re-render for elapsed time + evict tasks past deadline
// Eviction deletes from prev.tasks
// useCoordinatorTaskCount sees updated count without own tick
const agentNameRegistry = useAppState(s => s.agentNameRegistry)
const nameByAgentId = React.useMemo(() => {
const inv = new Map<string, string>()
for (const [n, id] of agentNameRegistry) inv.set(id, n)
return inv
}, [agentNameRegistry])
// Invert registry: name → id → id → name
// Display agent names in panel
const viewingAgentTaskId = useAppState(s => s.viewingAgentTaskId)
const selectedIndex = tasksSelected ? coordinatorTaskIndex : undefined
<MainLine onClick={() => exitTeammateView(setAppState)} />
{visibleTasks.map((task, i) =>
<AgentLine key={task.id} task={task}
isSelected={selectedIndex === i + 1}
isViewed={viewingAgentTaskId === task.id}
onClick={() => enterTeammateView(task.id, setAppState)}
/>
)}
// Enter to view/steer
// x to dismiss
// Selected vs viewed distinction
<MainLine isSelected={selectedIndex === 0} isViewed={viewingAgentTaskId === undefined} />
{visibleTasks.map((task, i) => <AgentLine key={task.id} task={task} isSelected={selectedIndex === i + 1} />)}
// MainLine for coordinator view
// AgentLines for workers
// Index 0 = main, i+1 = agent
// isSelected = footerSelection === 'tasks' && coordinatorTaskIndex matches
// isViewed = viewingAgentTaskId matches
// Selected → keyboard focus
// Viewed → expanded detail view
// Two distinct states
const [hover, setHover] = React.useState(false)
const prefix = isSelected || hover ? figures.pointer + " " : " "
// Hover + selected → pointer prefix
// Visual feedback
{
"evictAfterMs": 5000,
"tickIntervalMs": 1000,
"viewSteer": true,
"agentNameRegistry": true
}
evictAfter !== 0 → visible, evictAfter <= now → evict
// 时间驱动visibility
// 立即dismiss处理
setInterval(1000) → check deadline → evict → setTick re-render
// 自动清理过期任务
// 其他consumer无需tick
isSelected = keyboard focus, isViewed = expanded detail
// 两个独立状态
// 不同交互含义
agentNameRegistry: Map<name, id> → invert → Map<id, name>
// Registry反转显示
// Panel显示name
components/CoordinatorAgentStatus.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