fix(athena): resolve task output files to project directory instead of process.cwd()
task-output-writer wrote to process.cwd()/.sisyphus/task-outputs/ while council_finalize read from ctx.directory/.sisyphus/task-outputs/. When these differ, all output files appear missing. Fix by passing directory to writeTaskOutput from BackgroundManager, and adding basePath to council_read. Also removes process.chdir() from tests that was masking the bug.
This commit is contained in:
@@ -1709,7 +1709,7 @@ export class BackgroundManager {
|
||||
|
||||
// Write output to file if requested (before status flip)
|
||||
if (task.writeOutputToFile) {
|
||||
const filePath = await writeTaskOutput(task, this.client)
|
||||
const filePath = await writeTaskOutput(task, this.client, this.directory)
|
||||
if (filePath) task.outputFilePath = filePath
|
||||
}
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ describe("writeTaskOutput", () => {
|
||||
])
|
||||
const task = createMockTask()
|
||||
|
||||
const result = await writeTaskOutput(task, client)
|
||||
const result = await writeTaskOutput(task, client, ".")
|
||||
|
||||
expect(result).toBe(`${TEST_OUTPUT_DIR}/bg_test_123.md`)
|
||||
expect(existsSync(result!)).toBe(true)
|
||||
@@ -99,7 +99,7 @@ describe("writeTaskOutput", () => {
|
||||
const client = createMockClient([])
|
||||
const task = createMockTask({ sessionID: undefined })
|
||||
|
||||
const result = await writeTaskOutput(task, client)
|
||||
const result = await writeTaskOutput(task, client, ".")
|
||||
|
||||
expect(result).toBeNull()
|
||||
expect(existsSync(`${TEST_OUTPUT_DIR}/bg_test_123.md`)).toBe(false)
|
||||
@@ -111,7 +111,7 @@ describe("writeTaskOutput", () => {
|
||||
const client = createErrorClient("Session not found")
|
||||
const task = createMockTask()
|
||||
|
||||
const result = await writeTaskOutput(task, client)
|
||||
const result = await writeTaskOutput(task, client, ".")
|
||||
|
||||
expect(result).toBeNull()
|
||||
expect(existsSync(`${TEST_OUTPUT_DIR}/bg_test_123.md`)).toBe(false)
|
||||
@@ -123,7 +123,7 @@ describe("writeTaskOutput", () => {
|
||||
const client = createMockClient([])
|
||||
const task = createMockTask()
|
||||
|
||||
const result = await writeTaskOutput(task, client)
|
||||
const result = await writeTaskOutput(task, client, ".")
|
||||
|
||||
expect(result).toBe(`${TEST_OUTPUT_DIR}/bg_test_123.md`)
|
||||
expect(existsSync(result!)).toBe(true)
|
||||
@@ -149,7 +149,7 @@ describe("writeTaskOutput", () => {
|
||||
])
|
||||
const task = createMockTask()
|
||||
|
||||
const result = await writeTaskOutput(task, client)
|
||||
const result = await writeTaskOutput(task, client, ".")
|
||||
|
||||
expect(result).toBe(`${TEST_OUTPUT_DIR}/bg_test_123.md`)
|
||||
expect(existsSync(TEST_OUTPUT_DIR)).toBe(true)
|
||||
@@ -171,7 +171,7 @@ describe("writeTaskOutput", () => {
|
||||
])
|
||||
const task = createMockTask()
|
||||
|
||||
const result = await writeTaskOutput(task, client)
|
||||
const result = await writeTaskOutput(task, client, ".")
|
||||
|
||||
const content = await readFile(result!, "utf-8")
|
||||
expect(content).toContain("Let me think about this...")
|
||||
@@ -195,7 +195,7 @@ describe("writeTaskOutput", () => {
|
||||
])
|
||||
const task = createMockTask()
|
||||
|
||||
const result = await writeTaskOutput(task, client)
|
||||
const result = await writeTaskOutput(task, client, ".")
|
||||
|
||||
const content = await readFile(result!, "utf-8")
|
||||
const firstIdx = content.indexOf("First message")
|
||||
@@ -209,7 +209,7 @@ describe("writeTaskOutput", () => {
|
||||
const client = createMockClient([])
|
||||
const task = createMockTask({ completedAt: undefined })
|
||||
|
||||
const result = await writeTaskOutput(task, client)
|
||||
const result = await writeTaskOutput(task, client, ".")
|
||||
|
||||
const content = await readFile(result!, "utf-8")
|
||||
expect(content).toContain("completed_at: unknown")
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { mkdir, writeFile, rename } from "node:fs/promises"
|
||||
import { dirname } from "node:path"
|
||||
import { dirname, join } from "node:path"
|
||||
import { log } from "../../shared"
|
||||
import type { BackgroundTask } from "./types"
|
||||
import type { BackgroundOutputClient } from "../../tools/background-task/clients"
|
||||
@@ -53,6 +53,7 @@ function formatTranscript(
|
||||
export async function writeTaskOutput(
|
||||
task: BackgroundTask,
|
||||
client: BackgroundOutputClient,
|
||||
directory: string,
|
||||
): Promise<string | null> {
|
||||
if (!task.sessionID) {
|
||||
return null
|
||||
@@ -74,7 +75,7 @@ export async function writeTaskOutput(
|
||||
const transcript = formatTranscript(messages)
|
||||
const content = `${frontmatter}\n\n${transcript}`
|
||||
|
||||
const outputPath = `${OUTPUT_DIR}/${task.id}.md`
|
||||
const outputPath = join(directory, OUTPUT_DIR, `${task.id}.md`)
|
||||
const tmpPath = `${outputPath}.tmp`
|
||||
|
||||
await mkdir(dirname(outputPath), { recursive: true })
|
||||
|
||||
Reference in New Issue
Block a user