import { describe, expect, test } from "bun:test" import { createOrGetSession } from "./session-creator" import { _resetForTesting, subagentSessions } from "../../features/claude-code-session-state" import { unsafeTestValue } from "../../../test-support/unsafe-test-value" describe("call-omo-agent createOrGetSession", () => { test("creates child session without overriding permission and tracks it as subagent session", async () => { // given _resetForTesting() const createCalls: Array = [] const ctx = { directory: "/project", client: { session: { get: async () => ({ data: { directory: "/parent" } }), create: async (args: unknown) => { createCalls.push(args) return { data: { id: "ses_child" } } }, }, }, } const toolContext = { sessionID: "ses_parent", messageID: "msg_parent", agent: "sisyphus", abort: new AbortController().signal, } const args = { description: "test", prompt: "hello", subagent_type: "explore", run_in_background: true, } // when const result = await createOrGetSession(unsafeTestValue(args), unsafeTestValue(toolContext), unsafeTestValue(ctx)) // then expect(result).toEqual({ sessionID: "ses_child", isNew: true }) expect(createCalls).toHaveLength(1) const createBody = (unsafeTestValue(createCalls[0]))?.body expect(createBody?.parentID).toBe("ses_parent") expect(createBody?.permission).toBeUndefined() expect(subagentSessions.has("ses_child")).toBe(true) }) })