fix(agent): allow cross-provider creation for modeless providers (#2000)

* fix: 允许无模式 Provider 创建子 Agent

* test: 补充无模式 Provider 继承场景
This commit is contained in:
psyche
2026-07-13 05:47:02 +08:00
committed by GitHub
parent c2a1ac7c3b
commit 1a4d7852a8
2 changed files with 31 additions and 0 deletions

View File

@@ -96,6 +96,32 @@ describe("resolveAndValidateCreateAgentMode", () => {
);
});
it("uses the provider default when the cross-provider target has no modes", () => {
const resolved = resolveAndValidateCreateAgentMode({
requestedMode: undefined,
targetProvider: "pi",
parent: agentParent("codex", "auto"),
unattended: false,
availableModes: [],
targetUnattendedMode: undefined,
});
expect(resolved).toBeUndefined();
});
it("uses the provider default when an unattended parent targets a provider with no modes", () => {
const resolved = resolveAndValidateCreateAgentMode({
requestedMode: undefined,
targetProvider: "pi",
parent: agentParent("claude", "bypassPermissions", true),
unattended: false,
availableModes: [],
targetUnattendedMode: undefined,
});
expect(resolved).toBeUndefined();
});
it("passes through an explicit mode when the target provider's modes are unknown", () => {
const resolved = resolveAndValidateCreateAgentMode({
requestedMode: "default",

View File

@@ -14,6 +14,7 @@ export interface ResolveCreateAgentModeInput {
unattended: boolean;
// `undefined` = target provider's modes unknown: explicit modes pass through
// unvalidated, but cross-provider inheritance is still refused.
// `[]` = target provider explicitly has no modes: use its default behavior.
availableModes: string[] | undefined;
// Target provider's own unattended mode id, if it has one. Used to bridge
// unattended parents into unattended children across providers.
@@ -71,6 +72,10 @@ export function resolveAndValidateCreateAgentMode(
return input.targetUnattendedMode;
}
if (availableModes?.length === 0) {
return undefined;
}
throw new Error(
`cannot inherit mode '${formatCreateConfigParentMode(parent)}' from ${formatCreateConfigParentSource(parent)} for new agent (provider '${targetProvider}'). Pass an explicit mode. Available modes for '${targetProvider}': ${listModes(availableModes)}`,
);