























@@ -24,6 +24,8 @@ import { listSecretTargetRegistryEntries } from "./target-registry.js";
2424describe("exec SecretRef id parity", () => {
2525const validateGatewaySecretRef = Compile(GatewaySecretRefSchema);
2626const pluginSdkSecretInput = buildSecretInputSchema();
27+const validEnvSecretRefIds = ["OPENAI_API_KEY", "A", "A_1", `A${"B".repeat(127)}`];
28+const invalidEnvSecretRefIds = ["", "openai_api_key", "OPENAI-API-KEY", "1OPENAI", "A B"];
27292830function configAcceptsExecRef(id: string): boolean {
2931const result = validateConfigObjectRaw({
@@ -73,10 +75,42 @@ describe("exec SecretRef id parity", () => {
7375});
7476}
757778+function planAcceptsRef(ref: { source: "env" | "file" | "exec"; provider: string; id: string }) {
79+return isSecretsApplyPlan({
80+version: 1,
81+protocolVersion: 1,
82+generatedAt: "2026-03-10T00:00:00.000Z",
83+generatedBy: "manual",
84+targets: [
85+{
86+type: "talk.providers.*.apiKey",
87+path: TALK_TEST_PROVIDER_API_KEY_PATH,
88+pathSegments: [...TALK_TEST_PROVIDER_API_KEY_PATH_SEGMENTS],
89+providerId: TALK_TEST_PROVIDER_ID,
90+ ref,
91+},
92+],
93+});
94+}
95+96+for (const id of [...validEnvSecretRefIds, ...invalidEnvSecretRefIds]) {
97+it(`keeps plan/gateway/plugin parity for env id "${id}"`, () => {
98+const expected = validEnvSecretRefIds.includes(id);
99+expect(planAcceptsRef({ source: "env", provider: "default", id })).toBe(expected);
100+expect(validateGatewaySecretRef.Check({ source: "env", provider: "default", id })).toBe(
101+expected,
102+);
103+expect(
104+pluginSdkSecretInput.safeParse({ source: "env", provider: "default", id }).success,
105+).toBe(expected);
106+});
107+}
108+76109for (const id of [...VALID_FILE_SECRET_REF_IDS, ...INVALID_FILE_SECRET_REF_IDS]) {
77110it(`keeps config/gateway/plugin parity for file id "${id}"`, () => {
78111const expected = isValidFileSecretRefId(id);
79112expect(configAcceptsFileRef(id)).toBe(expected);
113+expect(planAcceptsRef({ source: "file", provider: "default", id })).toBe(expected);
80114expect(validateGatewaySecretRef.Check({ source: "file", provider: "default", id })).toBe(
81115expected,
82116);
@@ -86,6 +120,14 @@ describe("exec SecretRef id parity", () => {
86120});
87121}
88122123+it("rejects invalid provider aliases across plan/gateway/plugin refs", () => {
124+const ref = { source: "env" as const, provider: "Default", id: "OPENAI_API_KEY" };
125+126+expect(planAcceptsRef(ref)).toBe(false);
127+expect(validateGatewaySecretRef.Check(ref)).toBe(false);
128+expect(pluginSdkSecretInput.safeParse(ref).success).toBe(false);
129+});
130+89131for (const id of [...VALID_EXEC_SECRET_REF_IDS, ...INVALID_EXEC_SECRET_REF_IDS]) {
90132it(`keeps config/plan/gateway/plugin parity for exec id "${id}"`, () => {
91133const expected = isValidExecSecretRefId(id);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。