mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-23 18:55:37 -04:00
8c94e9005f
Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Co-authored-by: Kit Langton <kit.langton@gmail.com> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Affan Ali <93028901+affanali2k3@users.noreply.github.com> Co-authored-by: affanali2k3 <affanalikhanxx@gmail.com> Co-authored-by: Frank <frank@anoma.ly> Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com> Co-authored-by: 𝓛𝓲𝓽𝓽𝓵𝓮 𝓕𝓻𝓪𝓷𝓴 <little-frank@opencord.local> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Jay V <air@live.ca> Co-authored-by: Dax Raad <d@ironbay.co> Co-authored-by: Aarav Sareen <96787824+arvsrn@users.noreply.github.com> Co-authored-by: OpeOginni <107570612+OpeOginni@users.noreply.github.com> Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> Co-authored-by: Ben Guthrie <benjee.012@gmail.com> Co-authored-by: Dax <mail@thdxr.com> Co-authored-by: Filip <34747899+neriousy@users.noreply.github.com> Co-authored-by: Max Anderson <max.a.anderson95@gmail.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: Jack <jack@anoma.ly> Co-authored-by: Shoubhit Dash <shoubhit2005@gmail.com> Co-authored-by: Dustin Deus <deusdustin@gmail.com> Co-authored-by: starptech <starptech@starptechs-MBP.fritz.box> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> Co-authored-by: usrnk1 <7547651+usrnk1@users.noreply.github.com> Co-authored-by: Jay <53023+jayair@users.noreply.github.com> Co-authored-by: runvip <164729189+runvip@users.noreply.github.com> Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: Julian Coy <julian@ex-machina.co> Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com>
61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
import fs from "fs/promises"
|
|
import os from "os"
|
|
import { Effect } from "effect"
|
|
import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder"
|
|
import { EffectFlock } from "@opencode-ai/core/util/effect-flock"
|
|
import { Global } from "@opencode-ai/core/global"
|
|
|
|
type Msg = {
|
|
key: string
|
|
dir: string
|
|
holdMs?: number
|
|
ready?: string
|
|
active?: string
|
|
done?: string
|
|
}
|
|
|
|
function sleep(ms: number) {
|
|
return new Promise<void>((resolve) => setTimeout(resolve, ms))
|
|
}
|
|
|
|
const msg: Msg = JSON.parse(process.argv[2])
|
|
|
|
const testGlobal = Global.layerWith({
|
|
home: os.homedir(),
|
|
data: os.tmpdir(),
|
|
cache: os.tmpdir(),
|
|
config: os.tmpdir(),
|
|
state: os.tmpdir(),
|
|
bin: os.tmpdir(),
|
|
log: os.tmpdir(),
|
|
})
|
|
|
|
const testLayer = AppNodeBuilder.build(EffectFlock.node, [[Global.node, testGlobal]])
|
|
|
|
async function job() {
|
|
if (msg.ready) await fs.writeFile(msg.ready, String(process.pid))
|
|
if (msg.active) await fs.writeFile(msg.active, String(process.pid), { flag: "wx" })
|
|
|
|
try {
|
|
if (msg.holdMs && msg.holdMs > 0) await sleep(msg.holdMs)
|
|
if (msg.done) await fs.appendFile(msg.done, "1\n")
|
|
} finally {
|
|
if (msg.active) await fs.rm(msg.active, { force: true })
|
|
}
|
|
}
|
|
|
|
await Effect.runPromise(
|
|
Effect.gen(function* () {
|
|
const flock = yield* EffectFlock.Service
|
|
yield* flock.withLock(
|
|
Effect.promise(() => job()),
|
|
msg.key,
|
|
msg.dir,
|
|
)
|
|
}).pipe(Effect.provide(testLayer)),
|
|
).catch((err) => {
|
|
const text = err instanceof Error ? (err.stack ?? err.message) : String(err)
|
|
process.stderr.write(text)
|
|
process.exit(1)
|
|
})
|