fix(cli-run): rely on continuation markers for completion
Use hook-written continuation marker state to gate run completion checks and remove the noisy event-stream shutdown timeout log in run mode.
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
import { afterEach, describe, expect, it } from "bun:test"
|
||||
import { mkdtempSync, rmSync } from "node:fs"
|
||||
import { join } from "node:path"
|
||||
import { tmpdir } from "node:os"
|
||||
import {
|
||||
clearContinuationMarker,
|
||||
isContinuationMarkerActive,
|
||||
readContinuationMarker,
|
||||
setContinuationMarkerSource,
|
||||
} from "./storage"
|
||||
|
||||
const tempDirs: string[] = []
|
||||
|
||||
function createTempDir(): string {
|
||||
const directory = mkdtempSync(join(tmpdir(), "omo-run-marker-"))
|
||||
tempDirs.push(directory)
|
||||
return directory
|
||||
}
|
||||
|
||||
afterEach(() => {
|
||||
while (tempDirs.length > 0) {
|
||||
const directory = tempDirs.pop()
|
||||
if (directory) {
|
||||
rmSync(directory, { recursive: true, force: true })
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
describe("run-continuation-state storage", () => {
|
||||
it("stores and reads per-source marker state", () => {
|
||||
// given
|
||||
const directory = createTempDir()
|
||||
const sessionID = "ses_test"
|
||||
|
||||
// when
|
||||
setContinuationMarkerSource(directory, sessionID, "todo", "active", "2 todos remaining")
|
||||
setContinuationMarkerSource(directory, sessionID, "stop", "stopped", "user requested stop")
|
||||
const marker = readContinuationMarker(directory, sessionID)
|
||||
|
||||
// then
|
||||
expect(marker).not.toBeNull()
|
||||
expect(marker?.sessionID).toBe(sessionID)
|
||||
expect(marker?.sources.todo?.state).toBe("active")
|
||||
expect(marker?.sources.todo?.reason).toBe("2 todos remaining")
|
||||
expect(marker?.sources.stop?.state).toBe("stopped")
|
||||
})
|
||||
|
||||
it("treats marker as active when any source is active", () => {
|
||||
// given
|
||||
const directory = createTempDir()
|
||||
const sessionID = "ses_active"
|
||||
setContinuationMarkerSource(directory, sessionID, "todo", "active", "pending")
|
||||
setContinuationMarkerSource(directory, sessionID, "stop", "idle")
|
||||
const marker = readContinuationMarker(directory, sessionID)
|
||||
|
||||
// when
|
||||
const isActive = isContinuationMarkerActive(marker)
|
||||
|
||||
// then
|
||||
expect(isActive).toBe(true)
|
||||
})
|
||||
|
||||
it("returns inactive when no source is active", () => {
|
||||
// given
|
||||
const directory = createTempDir()
|
||||
const sessionID = "ses_idle"
|
||||
setContinuationMarkerSource(directory, sessionID, "todo", "idle")
|
||||
setContinuationMarkerSource(directory, sessionID, "stop", "stopped")
|
||||
const marker = readContinuationMarker(directory, sessionID)
|
||||
|
||||
// when
|
||||
const isActive = isContinuationMarkerActive(marker)
|
||||
|
||||
// then
|
||||
expect(isActive).toBe(false)
|
||||
})
|
||||
|
||||
it("clears marker for a session", () => {
|
||||
// given
|
||||
const directory = createTempDir()
|
||||
const sessionID = "ses_clear"
|
||||
setContinuationMarkerSource(directory, sessionID, "todo", "active")
|
||||
|
||||
// when
|
||||
clearContinuationMarker(directory, sessionID)
|
||||
const marker = readContinuationMarker(directory, sessionID)
|
||||
|
||||
// then
|
||||
expect(marker).toBeNull()
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user