| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- import { describe, expect } from "bun:test"
- import type {
- CloseSessionResponse,
- ListSessionsResponse,
- LoadSessionResponse,
- ResumeSessionResponse,
- } from "@agentclientprotocol/sdk"
- import { Duration, Effect } from "effect"
- import { cliIt } from "../../lib/cli-process"
- import { expectOk, selectConfigOption } from "./acp-test-client"
- import { createAcpClient, initialize, newSession, verifierConfig } from "./helpers"
- describe("kirincode acp lifecycle subprocess", () => {
- cliIt.live(
- "stdin EOF exits cleanly",
- ({ kirincode }) =>
- Effect.gen(function* () {
- const acp = yield* kirincode.acp()
- acp.close()
- const code = yield* Effect.promise(() => acp.exited).pipe(Effect.timeout(Duration.seconds(5)))
- expect(code).toBe(0)
- }),
- 60_000,
- )
- cliIt.live(
- "close capability and close request",
- ({ home, llm, kirincode }) =>
- Effect.gen(function* () {
- const acp = yield* createAcpClient(
- { kirincode },
- { KIRINCODE_CONFIG_CONTENT: JSON.stringify(verifierConfig(llm.url)) },
- )
- const initialized = yield* initialize(acp)
- expect(initialized.agentCapabilities?.sessionCapabilities?.close).toEqual({})
- const session = yield* newSession(acp, home)
- expectOk(yield* acp.request<CloseSessionResponse>("session/close", { sessionId: session.sessionId }))
- }),
- 60_000,
- )
- cliIt.live(
- "loadSession capability and load request return session config options",
- ({ home, llm, kirincode }) =>
- Effect.gen(function* () {
- const acp = yield* createAcpClient(
- { kirincode },
- { KIRINCODE_CONFIG_CONTENT: JSON.stringify(verifierConfig(llm.url)) },
- )
- const initialized = yield* initialize(acp)
- expect(initialized.agentCapabilities?.loadSession).toBe(true)
- const session = yield* newSession(acp, home)
- const loaded = expectOk(
- yield* acp.request<LoadSessionResponse>("session/load", {
- cwd: home,
- sessionId: session.sessionId,
- mcpServers: [],
- }),
- )
- expect(selectConfigOption(loaded.configOptions, "model")?.category).toBe("model")
- }),
- 60_000,
- )
- cliIt.live(
- "list request includes a live ACP-created session",
- ({ home, llm, kirincode }) =>
- Effect.gen(function* () {
- const acp = yield* createAcpClient(
- { kirincode },
- { KIRINCODE_CONFIG_CONTENT: JSON.stringify(verifierConfig(llm.url)) },
- )
- yield* initialize(acp)
- const session = yield* newSession(acp, home)
- const listed = expectOk(yield* acp.request<ListSessionsResponse>("session/list", { cwd: home }))
- expect(listed.sessions.some((item) => item.sessionId === session.sessionId)).toBe(true)
- }),
- 60_000,
- )
- cliIt.live(
- "resume capability advertisement",
- ({ kirincode }) =>
- Effect.gen(function* () {
- const initialized = yield* initialize(yield* createAcpClient({ kirincode }))
- expect(initialized.agentCapabilities?.sessionCapabilities?.resume).toEqual({})
- }),
- 60_000,
- )
- cliIt.live(
- "resume request returns session config options",
- ({ home, llm, kirincode }) =>
- Effect.gen(function* () {
- const acp = yield* createAcpClient(
- { kirincode },
- { KIRINCODE_CONFIG_CONTENT: JSON.stringify(verifierConfig(llm.url)) },
- )
- yield* initialize(acp)
- const session = yield* newSession(acp, home)
- const resumed = expectOk(
- yield* acp.request<ResumeSessionResponse>("session/resume", {
- cwd: home,
- sessionId: session.sessionId,
- mcpServers: [],
- }),
- )
- expect(selectConfigOption(resumed.configOptions, "model")?.category).toBe("model")
- }),
- 60_000,
- )
- })
|