






















@@ -681,71 +681,72 @@ export async function runEmbeddedAttempt(
681681 ...(err ? { errorCategory: diagnosticErrorCategory(err) } : {}),
682682});
683683};
684-const toolsRaw = params.disableTools
685- ? []
686- : (() => {
687-const allTools = createOpenClawCodingTools({
688-agentId: sessionAgentId,
689- ...buildEmbeddedAttemptToolRunContext({ ...params, trace: runTrace }),
690-exec: {
691- ...params.execOverrides,
692-elevated: params.bashElevated,
693-},
694- sandbox,
695-messageProvider: params.messageChannel ?? params.messageProvider,
696-agentAccountId: params.agentAccountId,
697-messageTo: params.messageTo,
698-messageThreadId: params.messageThreadId,
699-groupId: params.groupId,
700-groupChannel: params.groupChannel,
701-groupSpace: params.groupSpace,
702-memberRoleIds: params.memberRoleIds,
703-spawnedBy: params.spawnedBy,
704-senderId: params.senderId,
705-senderName: params.senderName,
706-senderUsername: params.senderUsername,
707-senderE164: params.senderE164,
708-senderIsOwner: params.senderIsOwner,
709-allowGatewaySubagentBinding: params.allowGatewaySubagentBinding,
710-sessionKey: sandboxSessionKey,
711-sessionId: params.sessionId,
712-runId: params.runId,
713- agentDir,
714-workspaceDir: effectiveWorkspace,
715-// When sandboxing uses a copied workspace (`ro` or `none`), effectiveWorkspace points
716-// at the sandbox copy. Spawned subagents should inherit the real workspace instead.
717-spawnWorkspaceDir: resolveAttemptSpawnWorkspaceDir({
684+const toolsRaw =
685+params.disableTools || params.modelRun
686+ ? []
687+ : (() => {
688+const allTools = createOpenClawCodingTools({
689+agentId: sessionAgentId,
690+ ...buildEmbeddedAttemptToolRunContext({ ...params, trace: runTrace }),
691+exec: {
692+ ...params.execOverrides,
693+elevated: params.bashElevated,
694+},
718695 sandbox,
719- resolvedWorkspace,
720-}),
721-config: params.config,
722-abortSignal: runAbortController.signal,
723-modelProvider: params.model.provider,
724-modelId: params.modelId,
725-modelCompat: extractModelCompat(params.model),
726-modelApi: params.model.api,
727-modelContextWindowTokens: params.model.contextWindow,
728-modelAuthMode: resolveModelAuthMode(params.model.provider, params.config),
729-currentChannelId: params.currentChannelId,
730-currentThreadTs: params.currentThreadTs,
731-currentMessageId: params.currentMessageId,
732-replyToMode: params.replyToMode,
733-hasRepliedRef: params.hasRepliedRef,
734-modelHasVision: params.model.input?.includes("image") ?? false,
735-requireExplicitMessageTarget:
736-params.requireExplicitMessageTarget ?? isSubagentSessionKey(params.sessionKey),
737-disableMessageTool: params.disableMessageTool,
738-forceMessageTool: params.forceMessageTool,
739-onYield: (message) => {
740-yieldDetected = true;
741-yieldMessage = message;
742-queueYieldInterruptForSession?.();
743-runAbortController.abort("sessions_yield");
744-abortSessionForYield?.();
745-},
746-});
747-return applyEmbeddedAttemptToolsAllow(allTools, params.toolsAllow);
748-})();
696+messageProvider: params.messageChannel ?? params.messageProvider,
697+agentAccountId: params.agentAccountId,
698+messageTo: params.messageTo,
699+messageThreadId: params.messageThreadId,
700+groupId: params.groupId,
701+groupChannel: params.groupChannel,
702+groupSpace: params.groupSpace,
703+memberRoleIds: params.memberRoleIds,
704+spawnedBy: params.spawnedBy,
705+senderId: params.senderId,
706+senderName: params.senderName,
707+senderUsername: params.senderUsername,
708+senderE164: params.senderE164,
709+senderIsOwner: params.senderIsOwner,
710+allowGatewaySubagentBinding: params.allowGatewaySubagentBinding,
711+sessionKey: sandboxSessionKey,
712+sessionId: params.sessionId,
713+runId: params.runId,
714+ agentDir,
715+workspaceDir: effectiveWorkspace,
716+// When sandboxing uses a copied workspace (`ro` or `none`), effectiveWorkspace points
717+// at the sandbox copy. Spawned subagents should inherit the real workspace instead.
718+spawnWorkspaceDir: resolveAttemptSpawnWorkspaceDir({
719+ sandbox,
720+ resolvedWorkspace,
721+}),
722+config: params.config,
723+abortSignal: runAbortController.signal,
724+modelProvider: params.model.provider,
725+modelId: params.modelId,
726+modelCompat: extractModelCompat(params.model),
727+modelApi: params.model.api,
728+modelContextWindowTokens: params.model.contextWindow,
729+modelAuthMode: resolveModelAuthMode(params.model.provider, params.config),
730+currentChannelId: params.currentChannelId,
731+currentThreadTs: params.currentThreadTs,
732+currentMessageId: params.currentMessageId,
733+replyToMode: params.replyToMode,
734+hasRepliedRef: params.hasRepliedRef,
735+modelHasVision: params.model.input?.includes("image") ?? false,
736+requireExplicitMessageTarget:
737+params.requireExplicitMessageTarget ?? isSubagentSessionKey(params.sessionKey),
738+disableMessageTool: params.disableMessageTool,
739+forceMessageTool: params.forceMessageTool,
740+onYield: (message) => {
741+yieldDetected = true;
742+yieldMessage = message;
743+queueYieldInterruptForSession?.();
744+runAbortController.abort("sessions_yield");
745+abortSessionForYield?.();
746+},
747+});
748+return applyEmbeddedAttemptToolsAllow(allTools, params.toolsAllow);
749+})();
749750const toolsEnabled = supportsModelTools(params.model);
750751const bootstrapHasFileAccess = toolsEnabled && toolsRaw.some((tool) => tool.name === "read");
751752const bootstrapRouting = await resolveAttemptWorkspaceBootstrapRouting({
@@ -1057,7 +1058,9 @@ export async function runEmbeddedAttempt(
10571058},
10581059});
10591060const isDefaultAgent = sessionAgentId === defaultAgentId;
1060-const promptMode = resolvePromptModeForSession(params.sessionKey);
1061+const promptMode =
1062+params.promptMode ??
1063+(params.modelRun ? "none" : resolvePromptModeForSession(params.sessionKey));
1061106410621065// When toolsAllow is set, use minimal prompt and strip skills catalog
10631066const effectivePromptMode = params.toolsAllow?.length ? ("minimal" as const) : promptMode;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。