feat(sessions_spawn): add model parameter for sub-agent model override
This commit is contained in:
@@ -23,6 +23,7 @@ import { isAnnounceSkip } from "./sessions-send-helpers.js";
|
|||||||
const SessionsSpawnToolSchema = Type.Object({
|
const SessionsSpawnToolSchema = Type.Object({
|
||||||
task: Type.String(),
|
task: Type.String(),
|
||||||
label: Type.Optional(Type.String()),
|
label: Type.Optional(Type.String()),
|
||||||
|
model: Type.Optional(Type.String()),
|
||||||
timeoutSeconds: Type.Optional(Type.Integer({ minimum: 0 })),
|
timeoutSeconds: Type.Optional(Type.Integer({ minimum: 0 })),
|
||||||
cleanup: Type.Optional(
|
cleanup: Type.Optional(
|
||||||
Type.Union([Type.Literal("delete"), Type.Literal("keep")]),
|
Type.Union([Type.Literal("delete"), Type.Literal("keep")]),
|
||||||
@@ -178,6 +179,7 @@ export function createSessionsSpawnTool(opts?: {
|
|||||||
const params = args as Record<string, unknown>;
|
const params = args as Record<string, unknown>;
|
||||||
const task = readStringParam(params, "task", { required: true });
|
const task = readStringParam(params, "task", { required: true });
|
||||||
const label = typeof params.label === "string" ? params.label.trim() : "";
|
const label = typeof params.label === "string" ? params.label.trim() : "";
|
||||||
|
const model = readStringParam(params, "model");
|
||||||
const cleanup =
|
const cleanup =
|
||||||
params.cleanup === "keep" || params.cleanup === "delete"
|
params.cleanup === "keep" || params.cleanup === "delete"
|
||||||
? (params.cleanup as "keep" | "delete")
|
? (params.cleanup as "keep" | "delete")
|
||||||
@@ -218,11 +220,20 @@ export function createSessionsSpawnTool(opts?: {
|
|||||||
parseAgentSessionKey(requesterInternalKey)?.agentId,
|
parseAgentSessionKey(requesterInternalKey)?.agentId,
|
||||||
);
|
);
|
||||||
const childSessionKey = `agent:${requesterAgentId}:subagent:${crypto.randomUUID()}`;
|
const childSessionKey = `agent:${requesterAgentId}:subagent:${crypto.randomUUID()}`;
|
||||||
|
const patchParams: { key: string; spawnedBy?: string; model?: string } = {
|
||||||
|
key: childSessionKey,
|
||||||
|
};
|
||||||
if (opts?.sandboxed === true) {
|
if (opts?.sandboxed === true) {
|
||||||
|
patchParams.spawnedBy = requesterInternalKey;
|
||||||
|
}
|
||||||
|
if (model) {
|
||||||
|
patchParams.model = model;
|
||||||
|
}
|
||||||
|
if (patchParams.spawnedBy || patchParams.model) {
|
||||||
try {
|
try {
|
||||||
await callGateway({
|
await callGateway({
|
||||||
method: "sessions.patch",
|
method: "sessions.patch",
|
||||||
params: { key: childSessionKey, spawnedBy: requesterInternalKey },
|
params: patchParams,
|
||||||
timeoutMs: 10_000,
|
timeoutMs: 10_000,
|
||||||
});
|
});
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
@@ -87,6 +87,8 @@ export const agentHandlers: GatewayRequestHandlers = {
|
|||||||
skillsSnapshot: entry?.skillsSnapshot,
|
skillsSnapshot: entry?.skillsSnapshot,
|
||||||
lastProvider: entry?.lastProvider,
|
lastProvider: entry?.lastProvider,
|
||||||
lastTo: entry?.lastTo,
|
lastTo: entry?.lastTo,
|
||||||
|
modelOverride: entry?.modelOverride,
|
||||||
|
providerOverride: entry?.providerOverride,
|
||||||
};
|
};
|
||||||
sessionEntry = nextEntry;
|
sessionEntry = nextEntry;
|
||||||
const sendPolicy = resolveSendPolicy({
|
const sendPolicy = resolveSendPolicy({
|
||||||
|
|||||||
Reference in New Issue
Block a user