feat(shared): add fsync-skip tracker and path-environment classifier

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
YeonGyu-Kim
2026-05-08 15:08:05 +09:00
parent 7735b2abd5
commit 20ae3f8ba5
4 changed files with 266 additions and 0 deletions
+42
View File
@@ -0,0 +1,42 @@
import type { PathClassification } from "./classify-path-environment"
export type FsyncSkipEntry = {
filePath: string
contextLabel: string
errorCode: string
message: string
pathClassification: PathClassification
timestamp: number
}
const MAX_SKIPS = 200
const fsyncSkips: FsyncSkipEntry[] = []
export function recordFsyncSkip(entry: Omit<FsyncSkipEntry, "timestamp">): void {
fsyncSkips.push({ ...entry, timestamp: Date.now() })
if (fsyncSkips.length > MAX_SKIPS) {
fsyncSkips.splice(0, fsyncSkips.length - MAX_SKIPS)
}
}
export function drainSkipsAfter(timestampMs: number): FsyncSkipEntry[] {
const drainedEntries: FsyncSkipEntry[] = []
const retainedEntries: FsyncSkipEntry[] = []
for (const entry of fsyncSkips) {
if (entry.timestamp > timestampMs) {
drainedEntries.push(entry)
continue
}
retainedEntries.push(entry)
}
fsyncSkips.splice(0, fsyncSkips.length, ...retainedEntries)
return drainedEntries
}
export function clearAllSkips(): void {
fsyncSkips.length = 0
}