skills-experimental/file-edit-tool/SKILL.md
# File Edit Tool Skill 文件编辑工具 - Atomic RMW + Staleness check + LSP notify + Skill discovery。 ## 功能概述 从Claude Code的FileEditTool提取的文件编辑模式,用于OpenClaw的文件修改。 ## 核心机制 ### Atomic Read-Modify-Write ```typescript // CRITICAL SECTION - no async between staleness check and write const lastWriteTime = getFileModificationTime(absoluteFilePath) const lastRead = readFileState.get(absoluteFilePath) if (lastWriteTime > lastRead.timestamp) { throw new Error(FILE_UNEXPECTEDLY_MODIFIED_ERROR) } // ... immed
npx skillsauth add bianhaifeng789-hue/openclaw-config skills-experimental/file-edit-toolInstall 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.
文件编辑工具 - Atomic RMW + Staleness check + LSP notify + Skill discovery。
从Claude Code的FileEditTool提取的文件编辑模式,用于OpenClaw的文件修改。
// CRITICAL SECTION - no async between staleness check and write
const lastWriteTime = getFileModificationTime(absoluteFilePath)
const lastRead = readFileState.get(absoluteFilePath)
if (lastWriteTime > lastRead.timestamp) {
throw new Error(FILE_UNEXPECTEDLY_MODIFIED_ERROR)
}
// ... immediate write ...
writeTextContent(absoluteFilePath, updatedFile, encoding, endings)
// 原子性:检查后立即写入
// 避免并发编辑冲突
const isFullRead = lastRead.offset === undefined && lastRead.limit === undefined
const contentUnchanged = isFullRead && originalFileContents === lastRead.content
if (!contentUnchanged) throw new Error(FILE_UNEXPECTEDLY_MODIFIED_ERROR)
// Windows timestamp可能误报
// Full read时比较内容作为fallback
const lspManager = getLspServerManager()
clearDeliveredDiagnosticsForFile(`file://${absoluteFilePath}`)
lspManager.changeFile(absoluteFilePath, updatedFile).catch(...)
lspManager.saveFile(absoluteFilePath).catch(...)
// didChange + didSave
// 触发diagnostics刷新
const newSkillDirs = await discoverSkillDirsForPaths([absoluteFilePath], cwd)
if (newSkillDirs.length > 0) {
dynamicSkillDirTriggers?.add(dir)
addSkillDirectories(newSkillDirs).catch(() => {}) // fire-and-forget
}
activateConditionalSkillsForPaths([absoluteFilePath], cwd)
// 编辑文件触发skill discovery
// 自动加载相关skills
const secretError = checkTeamMemSecrets(fullFilePath, new_string)
if (secretError) {
return { result: false, message: secretError, errorCode: 0 }
}
// Team memory文件不允许写入secrets
// 安全检查
const actualNewString = preserveQuoteStyle(old_string, actualOldString, new_string)
// 文件使用curly quotes时保持风格
// 避免风格破坏
if (fileHistoryEnabled()) {
await fileHistoryTrackEdit(updateFileHistoryState, absoluteFilePath, parentMessage.uuid)
}
// 编辑前备份
// 支持undo历史
{
"filePath": "/Users/mac/test.ts",
"staleCheckPassed": true,
"lspNotified": true,
"skillsDiscovered": 2,
"backupCreated": true
}
staleness check → NO ASYNC → write
// 任何yield都可能引入并发编辑
// 必须紧凑执行
timestamp changed → compare content → reject if different
// Windows兼容
// 避免false positive
discover → add (async, catch errors) → activate
// 不阻塞编辑
// 后台加载
tools/FileEditTool/FileEditTool.ts (40KB+)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