initialize-auth.test.ts 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { describe, expect } from "bun:test"
  2. import type { AuthenticateResponse, InitializeResponse } from "@agentclientprotocol/sdk"
  3. import { Effect } from "effect"
  4. import { cliIt } from "../../lib/cli-process"
  5. import { createAcpClient, expectErrorCode, initialize } from "./helpers"
  6. describe("kirincode acp initialize/auth subprocess", () => {
  7. cliIt.live(
  8. "initialize responds with capabilities",
  9. ({ kirincode }) =>
  10. Effect.gen(function* () {
  11. const initialized = yield* initialize(yield* createAcpClient({ kirincode }))
  12. expect(initialized.protocolVersion).toBe(1)
  13. expect(initialized.agentCapabilities?.promptCapabilities?.embeddedContext).toBe(true)
  14. expect(initialized.agentCapabilities?.promptCapabilities?.image).toBe(true)
  15. expect(initialized.agentCapabilities?.mcpCapabilities?.http).toBe(true)
  16. expect(initialized.agentCapabilities?.mcpCapabilities?.sse).toBe(true)
  17. expect(initialized.agentCapabilities?.loadSession).toBe(true)
  18. expect(initialized.agentCapabilities?.sessionCapabilities?.close).toEqual({})
  19. expect(initialized.agentCapabilities?.sessionCapabilities?.fork).toEqual({})
  20. expect(initialized.agentCapabilities?.sessionCapabilities?.list).toEqual({})
  21. expect(initialized.agentCapabilities?.sessionCapabilities?.resume).toEqual({})
  22. expect(initialized.agentInfo?.name).toBe("KirinCode")
  23. }),
  24. 60_000,
  25. )
  26. cliIt.live(
  27. "auth negotiation is explicit and safe",
  28. ({ kirincode }) =>
  29. Effect.gen(function* () {
  30. const acp = yield* createAcpClient({ kirincode })
  31. const initialized = yield* initialize(acp)
  32. expect(initialized.authMethods?.[0]?.id).toBe("opencode-login")
  33. expect(initialized.authMethods?.[0]?._meta?.["terminal-auth"]).toBeDefined()
  34. expect(yield* acp.request<AuthenticateResponse>("authenticate", { methodId: "opencode-login" })).toMatchObject({
  35. result: {},
  36. })
  37. const rejected = yield* acp.request<AuthenticateResponse>("authenticate", { methodId: "missing-auth-method" })
  38. expectErrorCode(rejected.error, -32602)
  39. expect(JSON.stringify(rejected.error)).not.toContain(process.env.KIRINCODE_AUTH_CONTENT ?? "not-present")
  40. }),
  41. 60_000,
  42. )
  43. cliIt.live(
  44. "initialize without terminal-auth metadata keeps auth command implicit",
  45. ({ kirincode }) =>
  46. Effect.gen(function* () {
  47. const acp = yield* createAcpClient({ kirincode })
  48. const initialized = yield* acp.request<InitializeResponse>("initialize", { protocolVersion: 1 })
  49. expect(initialized.result?.authMethods?.[0]?.id).toBe("opencode-login")
  50. expect(initialized.result?.authMethods?.[0]?._meta?.["terminal-auth"]).toBeUndefined()
  51. }),
  52. 60_000,
  53. )
  54. })