fix(agent): allow cross-provider creation for modeless providers (#2000)
* fix: 允许无模式 Provider 创建子 Agent * test: 补充无模式 Provider 继承场景
This commit is contained in:
@@ -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", () => {
|
it("passes through an explicit mode when the target provider's modes are unknown", () => {
|
||||||
const resolved = resolveAndValidateCreateAgentMode({
|
const resolved = resolveAndValidateCreateAgentMode({
|
||||||
requestedMode: "default",
|
requestedMode: "default",
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ export interface ResolveCreateAgentModeInput {
|
|||||||
unattended: boolean;
|
unattended: boolean;
|
||||||
// `undefined` = target provider's modes unknown: explicit modes pass through
|
// `undefined` = target provider's modes unknown: explicit modes pass through
|
||||||
// unvalidated, but cross-provider inheritance is still refused.
|
// unvalidated, but cross-provider inheritance is still refused.
|
||||||
|
// `[]` = target provider explicitly has no modes: use its default behavior.
|
||||||
availableModes: string[] | undefined;
|
availableModes: string[] | undefined;
|
||||||
// Target provider's own unattended mode id, if it has one. Used to bridge
|
// Target provider's own unattended mode id, if it has one. Used to bridge
|
||||||
// unattended parents into unattended children across providers.
|
// unattended parents into unattended children across providers.
|
||||||
@@ -71,6 +72,10 @@ export function resolveAndValidateCreateAgentMode(
|
|||||||
return input.targetUnattendedMode;
|
return input.targetUnattendedMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (availableModes?.length === 0) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
throw new Error(
|
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)}`,
|
`cannot inherit mode '${formatCreateConfigParentMode(parent)}' from ${formatCreateConfigParentSource(parent)} for new agent (provider '${targetProvider}'). Pass an explicit mode. Available modes for '${targetProvider}': ${listModes(availableModes)}`,
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user