Files
Kilo-Org_kilo/packages/opencode/src/util/log.ts
T
Dax Raad 526a8ea19a Refactor application path handling and data storage architecture
Replace simple directory-based path system with git-aware data management that uses global data directories and proper workspace detection.

🤖 Generated with opencode
Co-Authored-By: opencode <noreply@opencode.ai>
2025-06-01 14:40:44 -04:00

71 lines
1.9 KiB
TypeScript

import path from "path"
import fs from "fs/promises"
export namespace Log {
const write = {
out: (msg: string) => {
process.stdout.write(msg)
},
err: (msg: string) => {
process.stderr.write(msg)
},
}
export async function file(directory: string) {
await fs.mkdir(directory, { recursive: true })
const outPath = path.join(directory, "opencode.out.log")
const errPath = path.join(directory, "opencode.err.log")
await fs.truncate(outPath).catch(() => {})
await fs.truncate(errPath).catch(() => {})
const out = Bun.file(outPath)
const err = Bun.file(errPath)
const outWriter = out.writer()
const errWriter = err.writer()
write["out"] = (msg) => {
outWriter.write(msg)
outWriter.flush()
}
write["err"] = (msg) => {
errWriter.write(msg)
errWriter.flush()
}
}
export function create(tags?: Record<string, any>) {
tags = tags || {}
function build(message: any, extra?: Record<string, any>) {
const prefix = Object.entries({
...tags,
...extra,
})
.filter(([_, value]) => value !== undefined && value !== null)
.map(([key, value]) => `${key}=${value}`)
.join(" ")
return (
[new Date().toISOString(), prefix, message].filter(Boolean).join(" ") +
"\n"
)
}
const result = {
info(message?: any, extra?: Record<string, any>) {
write.out(build(message, extra))
},
error(message?: any, extra?: Record<string, any>) {
write.err(build(message, extra))
},
warn(message?: any, extra?: Record<string, any>) {
write.err(build(message, extra))
},
tag(key: string, value: string) {
if (tags) tags[key] = value
return result
},
clone() {
return Log.create({ ...tags })
},
}
return result
}
}