| import { describe, expect, it } from "vitest"; |
| import { |
| resolveAcpSessionCwd, |
| resolveAcpSessionIdentifierLinesFromIdentity, |
| resolveAcpThreadSessionDetailLines, |
| } from "./session-identifiers.js"; |
|
|
| describe("session identifier helpers", () => { |
| it("hides unresolved identifiers from thread intro details while pending", () => { |
| const lines = resolveAcpThreadSessionDetailLines({ |
| sessionKey: "agent:codex:acp:pending-1", |
| meta: { |
| backend: "acpx", |
| agent: "codex", |
| runtimeSessionName: "runtime-1", |
| identity: { |
| state: "pending", |
| source: "ensure", |
| lastUpdatedAt: Date.now(), |
| acpxSessionId: "acpx-123", |
| agentSessionId: "inner-123", |
| }, |
| mode: "persistent", |
| state: "idle", |
| lastActivityAt: Date.now(), |
| }, |
| }); |
|
|
| expect(lines).toEqual([]); |
| }); |
|
|
| it("adds a Codex resume hint when agent identity is resolved", () => { |
| const lines = resolveAcpThreadSessionDetailLines({ |
| sessionKey: "agent:codex:acp:resolved-1", |
| meta: { |
| backend: "acpx", |
| agent: "codex", |
| runtimeSessionName: "runtime-1", |
| identity: { |
| state: "resolved", |
| source: "status", |
| lastUpdatedAt: Date.now(), |
| acpxSessionId: "acpx-123", |
| agentSessionId: "inner-123", |
| }, |
| mode: "persistent", |
| state: "idle", |
| lastActivityAt: Date.now(), |
| }, |
| }); |
|
|
| expect(lines).toContain("agent session id: inner-123"); |
| expect(lines).toContain("acpx session id: acpx-123"); |
| expect(lines).toContain( |
| "resume in Codex CLI: `codex resume inner-123` (continues this conversation).", |
| ); |
| }); |
|
|
| it("adds a Kimi resume hint when agent identity is resolved", () => { |
| const lines = resolveAcpThreadSessionDetailLines({ |
| sessionKey: "agent:kimi:acp:resolved-1", |
| meta: { |
| backend: "acpx", |
| agent: "kimi", |
| runtimeSessionName: "runtime-1", |
| identity: { |
| state: "resolved", |
| source: "status", |
| lastUpdatedAt: Date.now(), |
| acpxSessionId: "acpx-kimi-123", |
| agentSessionId: "kimi-inner-123", |
| }, |
| mode: "persistent", |
| state: "idle", |
| lastActivityAt: Date.now(), |
| }, |
| }); |
|
|
| expect(lines).toContain("agent session id: kimi-inner-123"); |
| expect(lines).toContain("acpx session id: acpx-kimi-123"); |
| expect(lines).toContain( |
| "resume in Kimi CLI: `kimi resume kimi-inner-123` (continues this conversation).", |
| ); |
| }); |
|
|
| it("shows pending identity text for status rendering", () => { |
| const lines = resolveAcpSessionIdentifierLinesFromIdentity({ |
| backend: "acpx", |
| mode: "status", |
| identity: { |
| state: "pending", |
| source: "status", |
| lastUpdatedAt: Date.now(), |
| agentSessionId: "inner-123", |
| }, |
| }); |
|
|
| expect(lines).toEqual(["session ids: pending (available after the first reply)"]); |
| }); |
|
|
| it("prefers runtimeOptions.cwd over legacy meta.cwd", () => { |
| const cwd = resolveAcpSessionCwd({ |
| backend: "acpx", |
| agent: "codex", |
| runtimeSessionName: "runtime-1", |
| mode: "persistent", |
| runtimeOptions: { |
| cwd: "/repo/new", |
| }, |
| cwd: "/repo/old", |
| state: "idle", |
| lastActivityAt: Date.now(), |
| }); |
| expect(cwd).toBe("/repo/new"); |
| }); |
| }); |
|
|