117 lines
3.7 KiB
TypeScript
117 lines
3.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
isAcpTagVisible,
|
|
resolveAcpProjectionSettings,
|
|
resolveAcpStreamingConfig,
|
|
} from "./acp-stream-settings.js";
|
|
import { createAcpTestConfig } from "./test-fixtures/acp-runtime.js";
|
|
|
|
describe("acp stream settings", () => {
|
|
it("resolves stable defaults", () => {
|
|
const settings = resolveAcpProjectionSettings(createAcpTestConfig());
|
|
expect(settings.deliveryMode).toBe("final_only");
|
|
expect(settings.hiddenBoundarySeparator).toBe("paragraph");
|
|
expect(settings.repeatSuppression).toBe(true);
|
|
expect(settings.maxOutputChars).toBe(24_000);
|
|
expect(settings.maxSessionUpdateChars).toBe(320);
|
|
});
|
|
|
|
it("applies explicit stream overrides", () => {
|
|
const settings = resolveAcpProjectionSettings(
|
|
createAcpTestConfig({
|
|
acp: {
|
|
enabled: true,
|
|
stream: {
|
|
deliveryMode: "final_only",
|
|
hiddenBoundarySeparator: "space",
|
|
repeatSuppression: false,
|
|
maxOutputChars: 500,
|
|
maxSessionUpdateChars: 123,
|
|
tagVisibility: {
|
|
usage_update: true,
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
);
|
|
expect(settings.deliveryMode).toBe("final_only");
|
|
expect(settings.hiddenBoundarySeparator).toBe("space");
|
|
expect(settings.repeatSuppression).toBe(false);
|
|
expect(settings.maxOutputChars).toBe(500);
|
|
expect(settings.maxSessionUpdateChars).toBe(123);
|
|
expect(settings.tagVisibility.usage_update).toBe(true);
|
|
});
|
|
|
|
it("accepts explicit deliveryMode=live override", () => {
|
|
const settings = resolveAcpProjectionSettings(
|
|
createAcpTestConfig({
|
|
acp: {
|
|
enabled: true,
|
|
stream: {
|
|
deliveryMode: "live",
|
|
},
|
|
},
|
|
}),
|
|
);
|
|
expect(settings.deliveryMode).toBe("live");
|
|
expect(settings.hiddenBoundarySeparator).toBe("space");
|
|
});
|
|
|
|
it("uses default tag visibility when no override is provided", () => {
|
|
const settings = resolveAcpProjectionSettings(createAcpTestConfig());
|
|
expect(isAcpTagVisible(settings, "tool_call")).toBe(false);
|
|
expect(isAcpTagVisible(settings, "tool_call_update")).toBe(false);
|
|
expect(isAcpTagVisible(settings, "usage_update")).toBe(false);
|
|
});
|
|
|
|
it("respects tag visibility overrides", () => {
|
|
const settings = resolveAcpProjectionSettings(
|
|
createAcpTestConfig({
|
|
acp: {
|
|
enabled: true,
|
|
stream: {
|
|
tagVisibility: {
|
|
usage_update: true,
|
|
tool_call: false,
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
);
|
|
expect(isAcpTagVisible(settings, "usage_update")).toBe(true);
|
|
expect(isAcpTagVisible(settings, "tool_call")).toBe(false);
|
|
});
|
|
|
|
it("resolves chunking/coalescing from ACP stream controls", () => {
|
|
const streaming = resolveAcpStreamingConfig({
|
|
cfg: createAcpTestConfig(),
|
|
provider: "discord",
|
|
});
|
|
expect(streaming.chunking.maxChars).toBe(64);
|
|
expect(streaming.coalescing.idleMs).toBe(0);
|
|
});
|
|
|
|
it("applies live-mode streaming overrides for incremental delivery", () => {
|
|
const streaming = resolveAcpStreamingConfig({
|
|
cfg: createAcpTestConfig({
|
|
acp: {
|
|
enabled: true,
|
|
stream: {
|
|
deliveryMode: "live",
|
|
coalesceIdleMs: 350,
|
|
maxChunkChars: 256,
|
|
},
|
|
},
|
|
}),
|
|
provider: "discord",
|
|
deliveryMode: "live",
|
|
});
|
|
expect(streaming.chunking.minChars).toBe(1);
|
|
expect(streaming.chunking.maxChars).toBe(256);
|
|
expect(streaming.coalescing.minChars).toBe(1);
|
|
expect(streaming.coalescing.maxChars).toBe(256);
|
|
expect(streaming.coalescing.joiner).toBe("");
|
|
expect(streaming.coalescing.idleMs).toBe(350);
|
|
});
|
|
});
|