feat(claude-tasks): add CLAUDE_CODE_TASK_LIST_ID env var support
- Export session-storage from claude-tasks/index.ts
- Add CLAUDE_CODE_TASK_LIST_ID fallback support in storage.ts
- Add comprehensive tests for CLAUDE_CODE_TASK_LIST_ID handling
- Prefer ULTRAWORK_TASK_LIST_ID, fall back to CLAUDE_CODE_TASK_LIST_ID
- Both env vars are properly sanitized for path safety
🤖 Generated with assistance of OhMyOpenCode
This commit is contained in:
@@ -1,2 +1,3 @@
|
||||
export * from "./types"
|
||||
export * from "./storage"
|
||||
export * from "./session-storage"
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user