





















@@ -35,6 +35,7 @@ import {
3535resolvePluginHarnessPolicyToolsAllow,
3636selectAgentHarness,
3737} from "./harness/selection.js";
38+import type { AgentHarness } from "./harness/types.js";
3839import {
3940resolveImageSanitizationLimits,
4041type ImageSanitizationLimits,
@@ -323,15 +324,17 @@ async function resolveRuntimeModel(params: {
323324if (!model) {
324325throw new Error(`Unknown model: ${params.provider}/${params.model}`);
325326}
327+const runtimeProvider = model.provider;
328+const runtimeModelId = model.id;
326329327330const authProfileId = await resolveSessionAuthProfileOverride({
328331cfg: params.cfg,
329-provider: params.provider,
332+provider: runtimeProvider,
330333acceptedProviderIds: listOpenAIAuthProfileProvidersForAgentRuntime({
331-provider: params.provider,
334+provider: runtimeProvider,
332335harnessRuntime: resolveAvailableAgentHarnessPolicy({
333-provider: params.provider,
334-modelId: params.model,
336+provider: runtimeProvider,
337+modelId: runtimeModelId,
335338config: params.cfg,
336339agentId: params.agentId,
337340sessionKey: params.sessionKey,
@@ -483,27 +486,41 @@ export async function runBtwSideQuestion(
483486agentId: sessionAgentId,
484487sessionKey: params.sessionKey,
485488});
486-if (harness.runSideQuestion) {
487-const { model, authProfileId, authProfileIdSource } = await resolveRuntimeModel({
488-cfg: params.cfg,
489-provider: params.provider,
490-model: params.model,
491-agentId: sessionAgentId,
492-agentDir: params.agentDir,
493- workspaceDir,
494-sessionEntry: params.sessionEntry,
495-sessionStore: params.sessionStore,
496-sessionKey: params.sessionKey,
497-storePath: params.storePath,
498-isNewSession: params.isNewSession,
499-});
489+let runtimeSelection: Awaited<ReturnType<typeof resolveRuntimeModel>> | undefined;
490+const resolveRuntimeSelection = async () => {
491+if (!runtimeSelection) {
492+runtimeSelection = await resolveRuntimeModel({
493+cfg: params.cfg,
494+provider: params.provider,
495+model: params.model,
496+agentId: sessionAgentId,
497+agentDir: params.agentDir,
498+ workspaceDir,
499+sessionEntry: params.sessionEntry,
500+sessionStore: params.sessionStore,
501+sessionKey: params.sessionKey,
502+storePath: params.storePath,
503+isNewSession: params.isNewSession,
504+});
505+}
506+return runtimeSelection;
507+};
508+const runHarnessSideQuestion = async (
509+selectedHarness: AgentHarness,
510+runtime: Awaited<ReturnType<typeof resolveRuntimeModel>>,
511+): Promise<ReplyPayload | undefined> => {
512+if (!selectedHarness.runSideQuestion) {
513+throw new Error(
514+`Selected agent harness "${selectedHarness.id}" does not support /btw side questions.`,
515+);
516+}
500517const toolsAllow = resolvePluginHarnessPolicyToolsAllow({
501518config: params.cfg,
502519sessionKey: params.sessionKey,
503520sandboxSessionKey: params.sandboxSessionKey,
504521agentId: sessionAgentId,
505-provider: model.provider,
506-modelId: model.id,
522+provider: runtime.model.provider,
523+modelId: runtime.model.id,
507524messageProvider: params.messageProvider,
508525messageChannel: params.messageChannel,
509526spawnedBy: params.spawnedBy,
@@ -516,20 +533,23 @@ export async function runBtwSideQuestion(
516533senderUsername: params.senderUsername,
517534senderE164: params.senderE164,
518535});
519-const result = await harness.runSideQuestion({
536+const result = await selectedHarness.runSideQuestion({
520537 ...params,
521-provider: model.provider,
522-model: model.id,
523-runtimeModel: model,
538+provider: runtime.model.provider,
539+model: runtime.model.id,
540+runtimeModel: runtime.model,
524541 sessionId,
525542 sessionFile,
526543agentId: sessionAgentId,
527544 workspaceDir,
528545 ...(toolsAllow ? { toolsAllow } : {}),
529- authProfileId,
530- authProfileIdSource,
546+authProfileId: runtime.authProfileId,
547+authProfileIdSource: runtime.authProfileIdSource,
531548});
532549return { text: result.text };
550+};
551+if (harness.runSideQuestion) {
552+return runHarnessSideQuestion(harness, await resolveRuntimeSelection());
533553}
534554if (harness.id === "codex") {
535555throw new Error(`Selected agent harness "${harness.id}" does not support /btw side questions.`);
@@ -626,19 +646,24 @@ export async function runBtwSideQuestion(
626646});
627647}
628648629-const { model, authProfileId, authProfileIdSource } = await resolveRuntimeModel({
630-cfg: params.cfg,
631-provider: params.provider,
632-model: params.model,
649+const runtimeSelectionForHarness = await resolveRuntimeSelection();
650+const runtimeHarness = selectAgentHarness({
651+provider: runtimeSelectionForHarness.model.provider,
652+modelId: runtimeSelectionForHarness.model.id,
653+config: params.cfg,
633654agentId: sessionAgentId,
634-agentDir: params.agentDir,
635- workspaceDir,
636-sessionEntry: params.sessionEntry,
637-sessionStore: params.sessionStore,
638655sessionKey: params.sessionKey,
639-storePath: params.storePath,
640-isNewSession: params.isNewSession,
641656});
657+if (runtimeHarness.runSideQuestion) {
658+return runHarnessSideQuestion(runtimeHarness, runtimeSelectionForHarness);
659+}
660+if (runtimeHarness.id === "codex") {
661+throw new Error(
662+`Selected agent harness "${runtimeHarness.id}" does not support /btw side questions.`,
663+);
664+}
665+666+const { model, authProfileId, authProfileIdSource } = runtimeSelectionForHarness;
642667let externalCliAuthScope = resolveExternalCliAuthOverlayScopeFromSelection({
643668provider: model.provider,
644669cfg: params.cfg,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。