Files
tutti/tools/scripts/generate-agent-gui-provider-catalog.test.mjs
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

167 lines
5.1 KiB
JavaScript

import assert from "node:assert/strict";
import test from "node:test";
import {
renderProviderIdentityCatalog,
validateRegistryCatalog,
validateRegistryCatalogAgainstOpenAPI
} from "./generate-agent-gui-provider-catalog.mjs";
const catalog = [
{
providerId: "example",
displayName: "Example",
iconKey: "example-icon",
localeKey: "example",
modelPlanProtocol: "openai",
statusKind: "generic_cli",
aliases: ["example-alias"],
target: {
id: "local:example",
launchRefType: "local_cli",
enabled: true,
sortOrder: 20
},
desktop: {
managed: true,
managedOrder: 1,
statusProbePriority: 1,
usageProbeKind: "example",
visibilityGate: "example",
runtimeProbeFallback: "direct",
installBootstrap: true,
refreshOnAccountChange: true,
unavailableDockOrderOffset: 0,
developerLogs: true,
defaultProviderEligible: true,
defaultProviderPriority: 1
}
}
];
test("renders every registry identity and target field", async () => {
const source = await renderProviderIdentityCatalog(catalog);
assert.match(source, /providerId: "example"/u);
assert.match(source, /iconKey: "example-icon"/u);
assert.match(source, /localeKey: "example"/u);
assert.match(source, /modelPlanProtocol: "openai"/u);
assert.match(source, /statusKind: "generic_cli"/u);
assert.match(source, /id: "local:example"/u);
assert.match(source, /launchRefType: "local_cli"/u);
assert.match(source, /usageProbeKind: "example"/u);
assert.match(source, /runtimeProbeFallback: "direct"/u);
assert.match(source, /statusProbePriority: 1/u);
assert.match(source, /installBootstrap: true/u);
assert.match(source, /defaultProviderPriority: 1/u);
});
test("rejects duplicate target ids before generating", () => {
assert.throws(
() =>
validateRegistryCatalog([
...catalog,
{
...catalog[0],
providerId: "another-example",
iconKey: "another-example"
}
]),
/duplicate target id/u
);
});
test("keeps AgentTargetProvider open while checking closed provider registries", () => {
const openapi = providerOpenAPI(["example"]);
validateRegistryCatalogAgainstOpenAPI(catalog, openapi);
openapi.components.schemas.AgentTargetProvider.enum = ["example"];
assert.throws(
() => validateRegistryCatalogAgainstOpenAPI(catalog, openapi),
/must remain an open/u
);
});
test("rejects an AgentTargetProvider pattern that excludes extensions", () => {
const openapi = providerOpenAPI(["example"]);
openapi.components.schemas.AgentTargetProvider.pattern = "^[a-z]+$";
assert.throws(
() => validateRegistryCatalogAgainstOpenAPI(catalog, openapi),
/AgentTargetProvider must remain an open/u
);
});
test("rejects a WorkspaceAgentProvider pattern outside canonical grammar", () => {
const openapi = providerOpenAPI(["example"]);
openapi.components.schemas.WorkspaceAgentProvider.pattern =
"^[a-z][a-z0-9._:/-]*$";
assert.throws(
() => validateRegistryCatalogAgainstOpenAPI(catalog, openapi),
/WorkspaceAgentProvider must remain an open/u
);
});
test("requires provider-keyed preference schemas to remain closed", () => {
const openapi = providerOpenAPI(["example"]);
openapi.components.schemas.DesktopAgentComposerDefaultsByProvider.additionalProperties = true;
assert.throws(
() => validateRegistryCatalogAgainstOpenAPI(catalog, openapi),
/must remain a closed object/u
);
});
test("rejects provider-keyed preference schema key drift", () => {
const openapi = providerOpenAPI(["example"]);
openapi.components.schemas.DesktopAgentGuiConversationRailCollapsedByProvider.properties.ghost =
{ type: "boolean" };
assert.throws(
() => validateRegistryCatalogAgainstOpenAPI(catalog, openapi),
/provider schema drift/u
);
});
test("keeps WorkspaceAgentProvider open", () => {
const openapi = providerOpenAPI(["example"]);
openapi.components.schemas.WorkspaceAgentProvider.enum = ["example"];
assert.throws(
() => validateRegistryCatalogAgainstOpenAPI(catalog, openapi),
/WorkspaceAgentProvider must remain an open/u
);
});
function providerOpenAPI(migratedProviderIds) {
const preferenceProperties = Object.fromEntries(
migratedProviderIds.map((providerId) => [providerId, { type: "boolean" }])
);
return {
components: {
schemas: {
AgentTargetProvider: {
type: "string",
minLength: 1,
maxLength: 128,
pattern: "^[a-z][a-z0-9._:-]*$"
},
DesktopAgentComposerDefaultsByProvider: {
type: "object",
additionalProperties: false,
properties: preferenceProperties
},
DesktopAgentGuiConversationRailCollapsedByProvider: {
type: "object",
additionalProperties: false,
properties: preferenceProperties
},
DesktopDefaultAgentProvider: {
enum: [migratedProviderIds[0]]
},
WorkspaceAgentProvider: {
type: "string",
minLength: 1,
maxLength: 128,
pattern: "^[a-z][a-z0-9._:-]*$"
}
}
}
};
}