diff --git a/src/features/claude-tasks/index.ts b/src/features/claude-tasks/index.ts index f0d374ea..601a9932 100644 --- a/src/features/claude-tasks/index.ts +++ b/src/features/claude-tasks/index.ts @@ -1,2 +1,3 @@ export * from "./types" export * from "./storage" +export * from "./session-storage" diff --git a/src/features/claude-tasks/storage.test.ts b/src/features/claude-tasks/storage.test.ts index 8ceda380..e4aed7ff 100644 --- a/src/features/claude-tasks/storage.test.ts +++ b/src/features/claude-tasks/storage.test.ts @@ -20,6 +20,7 @@ const TEST_DIR_ABS = join(process.cwd(), TEST_DIR) describe("getTaskDir", () => { const originalTaskListId = process.env.ULTRAWORK_TASK_LIST_ID + const originalClaudeTaskListId = process.env.CLAUDE_CODE_TASK_LIST_ID beforeEach(() => { if (originalTaskListId === undefined) { @@ -27,6 +28,12 @@ describe("getTaskDir", () => { } else { process.env.ULTRAWORK_TASK_LIST_ID = originalTaskListId } + + if (originalClaudeTaskListId === undefined) { + delete process.env.CLAUDE_CODE_TASK_LIST_ID + } else { + process.env.CLAUDE_CODE_TASK_LIST_ID = originalClaudeTaskListId + } }) afterEach(() => { @@ -35,6 +42,12 @@ describe("getTaskDir", () => { } else { process.env.ULTRAWORK_TASK_LIST_ID = originalTaskListId } + + if (originalClaudeTaskListId === undefined) { + delete process.env.CLAUDE_CODE_TASK_LIST_ID + } else { + process.env.CLAUDE_CODE_TASK_LIST_ID = originalClaudeTaskListId + } }) test("returns global config path for default config", () => { @@ -62,6 +75,19 @@ describe("getTaskDir", () => { expect(result).toBe(join(configDir, "tasks", "custom-list-id")) }) + test("respects CLAUDE_CODE_TASK_LIST_ID env var when ULTRAWORK_TASK_LIST_ID not set", () => { + //#given + delete process.env.ULTRAWORK_TASK_LIST_ID + process.env.CLAUDE_CODE_TASK_LIST_ID = "claude list/id" + const configDir = getOpenCodeConfigDir({ binary: "opencode" }) + + //#when + const result = getTaskDir() + + //#then + expect(result).toBe(join(configDir, "tasks", "claude-list-id")) + }) + test("falls back to sanitized cwd basename when env var not set", () => { //#given delete process.env.ULTRAWORK_TASK_LIST_ID @@ -114,6 +140,7 @@ describe("getTaskDir", () => { describe("resolveTaskListId", () => { const originalTaskListId = process.env.ULTRAWORK_TASK_LIST_ID + const originalClaudeTaskListId = process.env.CLAUDE_CODE_TASK_LIST_ID beforeEach(() => { if (originalTaskListId === undefined) { @@ -121,6 +148,12 @@ describe("resolveTaskListId", () => { } else { process.env.ULTRAWORK_TASK_LIST_ID = originalTaskListId } + + if (originalClaudeTaskListId === undefined) { + delete process.env.CLAUDE_CODE_TASK_LIST_ID + } else { + process.env.CLAUDE_CODE_TASK_LIST_ID = originalClaudeTaskListId + } }) afterEach(() => { @@ -129,6 +162,12 @@ describe("resolveTaskListId", () => { } else { process.env.ULTRAWORK_TASK_LIST_ID = originalTaskListId } + + if (originalClaudeTaskListId === undefined) { + delete process.env.CLAUDE_CODE_TASK_LIST_ID + } else { + process.env.CLAUDE_CODE_TASK_LIST_ID = originalClaudeTaskListId + } }) test("returns env var when set", () => { @@ -142,6 +181,30 @@ describe("resolveTaskListId", () => { expect(result).toBe("custom-list") }) + test("returns CLAUDE_CODE_TASK_LIST_ID when ULTRAWORK_TASK_LIST_ID not set", () => { + //#given + delete process.env.ULTRAWORK_TASK_LIST_ID + process.env.CLAUDE_CODE_TASK_LIST_ID = "claude-list" + + //#when + const result = resolveTaskListId() + + //#then + expect(result).toBe("claude-list") + }) + + test("sanitizes CLAUDE_CODE_TASK_LIST_ID special characters", () => { + //#given + delete process.env.ULTRAWORK_TASK_LIST_ID + process.env.CLAUDE_CODE_TASK_LIST_ID = "claude list/id" + + //#when + const result = resolveTaskListId() + + //#then + expect(result).toBe("claude-list-id") + }) + test("sanitizes special characters", () => { //#given process.env.ULTRAWORK_TASK_LIST_ID = "custom list/id"