| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import type { PromptResponse } from "@agentclientprotocol/sdk"
- import { describe, expect, test } from "bun:test"
- import path from "node:path"
- import { pathToFileURL } from "node:url"
- import { createAcpFixture, expectOk, initialize, newSession } from "./subprocess"
- const tinyPng = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+ip1sAAAAASUVORK5CYII="
- describe("acp prompt content subprocess", () => {
- test("accepts embedded text resource image and file resource link prompt content", async () => {
- await using fixture = await createAcpFixture()
- await Bun.write(path.join(fixture.home, "README.md"), "# ACP content smoke\n")
- const acp = fixture.spawn()
- await initialize(acp)
- const session = await newSession(acp, fixture.home)
- expectOk(
- await acp.request<PromptResponse>("session/prompt", {
- sessionId: session.sessionId,
- prompt: [
- { type: "text", text: "Use this embedded resource." },
- {
- type: "resource",
- resource: { uri: "file:///context.txt", mimeType: "text/plain", text: "embedded context" },
- },
- ],
- }),
- )
- expectOk(
- await acp.request<PromptResponse>("session/prompt", {
- sessionId: session.sessionId,
- prompt: [
- { type: "text", text: "Use this image." },
- {
- type: "image",
- mimeType: "image/png",
- data: tinyPng,
- },
- ],
- }),
- )
- const linked = expectOk(
- await acp.request<PromptResponse>("session/prompt", {
- sessionId: session.sessionId,
- prompt: [
- { type: "text", text: "Use this linked file." },
- {
- type: "resource_link",
- uri: pathToFileURL(path.join(fixture.home, "README.md")).href,
- name: "README.md",
- mimeType: "text/markdown",
- },
- ],
- }),
- )
- expect(linked.stopReason).toBe("end_turn")
- expect(fixture.llm.requests.length).toBeGreaterThanOrEqual(3)
- }, 60_000)
- })
|