mirror of
https://github.com/getpaseo/paseo.git
synced 2026-07-29 12:01:31 +00:00
* feat(app): add ByteDance TRAE CLI to the ACP provider catalog Adds the official ByteDance TRAE CLI (traecli) to the in-app ACP provider catalog. traecli is ACP-native, so Paseo drives it over the standard ACP transport via `traecli acp serve`, reusing the generic ACP client exactly like Kiro, Qoder, Cursor, and Gemini. - catalog: traecli entry (command ["traecli","acp","serve"], manual install) - icon: vendored TRAE monogram SVG + registered icon name - docs: supported-providers list + CHANGELOG - tests: focused command + icon-name assertions Verified against the real traecli ACP surface in multica-ai/multica#4724. * feat(app): use the real TRAE app logo for the traecli provider icon * docs: drop TRAE CLI changelog entry --------- Co-authored-by: Mohamed Boudra <boudra.moha@gmail.com>
52 lines
2.1 KiB
TypeScript
52 lines
2.1 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
BUILTIN_PROVIDER_ICON_NAMES,
|
|
KNOWN_PROVIDER_ICON_NAMES,
|
|
TERMINAL_PROFILE_ICON_NAMES,
|
|
} from "@getpaseo/protocol/provider-icon-names";
|
|
import { ACP_PROVIDER_CATALOG } from "@/data/acp-provider-catalog";
|
|
import { resolveProviderIconName } from "./provider-icon-name";
|
|
|
|
describe("resolveProviderIconName", () => {
|
|
it("returns the built-in identifier for known provider ids", () => {
|
|
expect(resolveProviderIconName("kiro")).toEqual({ kind: "builtin", id: "kiro" });
|
|
expect(resolveProviderIconName("claude")).toEqual({ kind: "builtin", id: "claude" });
|
|
expect(resolveProviderIconName("omp")).toEqual({ kind: "builtin", id: "omp" });
|
|
expect(resolveProviderIconName("minimax")).toEqual({ kind: "builtin", id: "minimax" });
|
|
});
|
|
|
|
it("returns the catalog identifier for ACP catalog provider ids that ship an icon", () => {
|
|
expect(resolveProviderIconName("amp-acp")).toEqual({ kind: "catalog", id: "amp-acp" });
|
|
expect(resolveProviderIconName("gemini")).toEqual({ kind: "catalog", id: "gemini" });
|
|
expect(resolveProviderIconName("traecli")).toEqual({ kind: "catalog", id: "traecli" });
|
|
});
|
|
|
|
it("falls back to the bot icon for unknown custom providers", () => {
|
|
expect(resolveProviderIconName("custom-claude-profile")).toEqual({ kind: "bot" });
|
|
});
|
|
});
|
|
|
|
describe("known provider icon names", () => {
|
|
it("includes every ACP catalog entry that ships an icon", () => {
|
|
const known = new Set(KNOWN_PROVIDER_ICON_NAMES);
|
|
for (const entry of ACP_PROVIDER_CATALOG) {
|
|
if (entry.iconSvg) {
|
|
expect(known).toContain(entry.id);
|
|
}
|
|
}
|
|
});
|
|
|
|
it("only lists ACP icon ids that have a catalog entry with an icon", () => {
|
|
const builtin = new Set(BUILTIN_PROVIDER_ICON_NAMES);
|
|
const terminalOnly = new Set(TERMINAL_PROFILE_ICON_NAMES);
|
|
const catalogIdsWithIcons = new Set(
|
|
ACP_PROVIDER_CATALOG.filter((entry) => entry.iconSvg).map((entry) => entry.id),
|
|
);
|
|
for (const name of KNOWN_PROVIDER_ICON_NAMES) {
|
|
if (!builtin.has(name) && !terminalOnly.has(name)) {
|
|
expect(catalogIdsWithIcons).toContain(name);
|
|
}
|
|
}
|
|
});
|
|
});
|