skills-experimental/file-write-tool/SKILL.md
# File Write Tool Skill 文件写入工具 - Atomic RMW + LSP notify + Mtime staleness + Skill discovery。 ## 功能概述 从Claude Code的FileWriteTool提取的文件写入模式,与FileEditTool类似但有独立机制。 ## 核心机制 ### Atomic RMW Pattern ```typescript // Load current state and confirm no changes since last read. // Please avoid async operations between here and writing to disk. let meta = readFileSyncWithMetadata(fullFilePath) if (meta !== null) { const lastWriteTime = getFileModificationTime(fullFilePath) const lastRead = readFil
npx skillsauth add bianhaifeng789-hue/openclaw-config skills-experimental/file-write-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 + LSP notify + Mtime staleness + Skill discovery。
从Claude Code的FileWriteTool提取的文件写入模式,与FileEditTool类似但有独立机制。
// Load current state and confirm no changes since last read.
// Please avoid async operations between here and writing to disk.
let meta = readFileSyncWithMetadata(fullFilePath)
if (meta !== null) {
const lastWriteTime = getFileModificationTime(fullFilePath)
const lastRead = readFileState.get(fullFilePath)
if (!lastRead || lastWriteTime > lastRead.timestamp) {
const isFullRead = lastRead && lastRead.offset === undefined && lastRead.limit === undefined
if (!isFullRead || meta.content !== lastRead.content) {
throw new Error(FILE_UNEXPECTEDLY_MODIFIED_ERROR)
}
}
}
writeTextContent(fullFilePath, content, enc, 'LF')
// NO ASYNC between check and write
// Timestamp staleness check
// Content fallback on Windows
const lspManager = getLspServerManager()
if (lspManager) {
clearDeliveredDiagnosticsForFile(`file://${fullFilePath}`)
lspManager.changeFile(fullFilePath, content).catch(...)
lspManager.saveFile(fullFilePath).catch(...)
}
// didChange + didSave
// Clear diagnostics first
notifyVscodeFileUpdated(fullFilePath, oldContent, content)
// VSCode diff view
// 跨进程通知
const newSkillDirs = await discoverSkillDirsForPaths([fullFilePath], cwd)
if (newSkillDirs.length > 0) {
dynamicSkillDirTriggers?.add(dir)
addSkillDirectories(newSkillDirs).catch(() => {}) // fire-and-forget
}
activateConditionalSkillsForPaths([fullFilePath], cwd)
// 与FileReadTool相同的skill discovery
// 写入也触发skill加载
if (fileHistoryEnabled()) {
await fileHistoryTrackEdit(updateFileHistoryState, fullFilePath, parentMessage.uuid)
}
// Backup pre-edit content
// Idempotent v1 backup
// Content hash keyed
readFileState.set(fullFilePath, {
content,
timestamp: getFileModificationTime(fullFilePath),
offset: undefined,
limit: undefined
})
// 写入后更新readFileState
// 后续写入可检查staleness
const secretError = checkTeamMemSecrets(fullFilePath, content)
if (secretError) {
return { result: false, message: secretError, errorCode: 0 }
}
// Team memory文件写入检查
// 防止泄露secrets
// Write is a full content replacement — the model sent explicit line endings
// in `content` and meant them. Do not rewrite them.
writeTextContent(fullFilePath, content, enc, 'LF')
// 不自动转换line endings
// 保留模型发送的格式
await diagnosticTracker.beforeFileEdited(fullFilePath)
// 写入前通知diagnostic tracker
// 异步track
{
"atomic": true,
"lspNotify": true,
"vscodeNotify": true,
"skillDirsDiscovered": 2,
"backupCreated": true
}
Load → Check staleness → NO ASYNC → Write
// 与FileEditTool一致
// Windows content fallback
lspManager.changeFile + saveFile + notifyVscodeFileUpdated
// 多进程通知
// 清除旧diagnostics
discoverSkillDirsForPaths → fire-and-forget addSkillDirectories
// 写入也触发skill discovery
// 后台加载
tools/FileWriteTool/FileWriteTool.ts (10KB+)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