skills-experimental/fs-operations/SKILL.md
File system operations abstraction. FsOperations type (cwd/existsSync/stat/readdir/unlink/rmdir/rm/mkdir/readFile/rename/readFileSync/writeFileSync/mkdirSync) + safeResolvePath + UNC path blocking + FIFO/Socket blocking + Type safety + Alternative implementations. Use when [fs operations] is needed.
npx skillsauth add bianhaifeng789-hue/openclaw-config fs-operationsInstall 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.
FS Operations 文件系统操作抽象。
场景:
Claude Code 方案:fsOperations.ts + 771+ lines OpenClaw 飞书适配:FS operations + File system
export type FsOperations = {
// File access
cwd(): string
existsSync(path: string): boolean
stat(path: string): Promise<fs.Stats>
readdir(path: string): Promise<fs.Dirent[]>
unlink(path: string): Promise<void>
rmdir(path: string): Promise<void>
rm(path: string, options?: { recursive?: boolean; force?: boolean }): Promise<void>
mkdir(path: string, options?: { mode?: number }): Promise<void>
readFile(path: string, options: { encoding: BufferEncoding }): Promise<string>
rename(oldPath: string, newPath: string): Promise<void>
statSync(path: string): fs.Stats
lstatSync(path: string): fs.Stats
// File content
readFileSync(path: string, options: { encoding: BufferEncoding }): string
readFileBytesSync(path: string): Buffer
readSync(path: string, options: { length: number }): { buffer: Buffer; bytesRead: number }
appendFileSync(path: string, data: string, options?: { mode?: number }): void
copyFileSync(src: string, dest: string): void
unlinkSync(path: string): void
renameSync(oldPath: string, newPath: string): void
linkSync(target: string, path: string): void
symlinkSync(target: string, path: string, type?: 'dir' | 'file' | 'junction'): void
readlinkSync(path: string): string
realpathSync(path: string): string
// Directory
mkdirSync(path: string, options?: { mode?: number }): void
readdirSync(path: string): fs.Dirent[]
readdirStringSync(path: string): string[]
isDirEmptySync(path: string): boolean
rmdirSync(path: string): void
rmSync(path: string, options?: { recursive?: boolean; force?: boolean }): void
createWriteStream(path: string): fs.WriteStream
readFileBytes(path: string, maxBytes?: number): Promise<Buffer>
}
export function safeResolvePath(
fs: FsOperations,
filePath: string,
): { resolvedPath: string; isSymlink: boolean; isCanonical: boolean } {
// Block UNC paths(Windows network)
if (filePath.startsWith('//') || filePath.startsWith('\\\\')) {
return { resolvedPath: filePath, isSymlink: false, isCanonical: false }
}
try {
// Check for FIFOs, sockets, devices
// realpathSync can block on FIFOs
const lstat = fs.lstatSync(filePath)
if (lstat.isFIFO() || lstat.isSocket() || lstat.isBlockDevice() || lstat.isCharacterDevice()) {
return { resolvedPath: filePath, isSymlink: false, isCanonical: false }
}
const resolved = fs.realpathSync(filePath)
const isSymlink = lstat.isSymbolicLink()
return { resolvedPath: resolved, isSymlink, isCanonical: true }
} catch {
// File doesn't exist or symlink resolution failed
return { resolvedPath: filePath, isSymlink: false, isCanonical: false }
}
}
| Feature | Description | |---------|-------------| | UNC blocking | Prevent DNS/SMB on Windows | | FIFO blocking | Prevent hangs on FIFOs | | Socket blocking | Prevent hangs on sockets | | Device blocking | Prevent device access | | Symlink safe | Handle broken symlinks |
{
"config": {"wide_screen_mode": true},
"elements": [
{
"tag": "div",
"text": {
"tag": "lark_md",
"content": "**📁 FS Operations**\n\n---\n\n**FsOperations Type**:\n• cwd/existsSync/stat/readdir\n• unlink/rmdir/rm/mkdir/readFile\n• rename/statSync/lstatSync\n• readFileSync/writeFileSync\n• mkdirSync/readdirSync\n\n---\n\n**Security**:\n• UNC path blocking\n• FIFO/Socket blocking\n• Symlink safe resolution\n\n---\n\n**Functions**:\n• safeResolvePath()"
}
}
]
}
// memory/fs-operations-state.json
{
"stats": {
"totalOperations": 0,
"blockedPaths": 0
},
"lastUpdate": "2026-04-12T12:37:00Z",
"notes": "FS Operations Skill 创建完成。"
}
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