




















@@ -20,6 +20,8 @@ import {
2020import { formatErrorMessage } from "../infra/errors.js";
2121import { buildOutboundSessionContext } from "../infra/outbound/session-context.js";
2222import { createSubsystemLogger } from "../logging/subsystem.js";
23+import { setCurrentPluginMetadataSnapshot } from "../plugins/current-plugin-metadata-snapshot.js";
24+import { loadManifestMetadataSnapshot } from "../plugins/manifest-contract-eligibility.js";
2325import {
2426isSubagentSessionKey,
2527normalizeAgentId,
@@ -36,6 +38,7 @@ import { createLazyImportLoader } from "../shared/lazy-promise.js";
3638import { normalizeOptionalString } from "../shared/string-coerce.js";
3739import { sanitizeForLog } from "../terminal/ansi.js";
3840import { createTrajectoryRuntimeRecorder } from "../trajectory/runtime.js";
41+import { resolveUserPath } from "../utils.js";
3942import { resolveMessageChannel } from "../utils/message-channel.js";
4043import { resolveAgentRuntimeConfig } from "./agent-runtime-config.js";
4144import {
@@ -339,27 +342,6 @@ async function prepareAgentCommandExecution(
339342}
340343}
341344const agentCfg = cfg.agents?.defaults;
342-const configuredModel = resolveConfiguredModelRef({
343- cfg,
344-defaultProvider: DEFAULT_PROVIDER,
345-defaultModel: DEFAULT_MODEL,
346-});
347-const configuredThinkingCatalog = buildConfiguredModelCatalog({ cfg });
348-const thinkingLevelsHint = formatThinkingLevels(
349-configuredModel.provider,
350-configuredModel.model,
351-", ",
352-configuredThinkingCatalog.length > 0 ? configuredThinkingCatalog : undefined,
353-);
354-355-const thinkOverride = normalizeThinkLevel(opts.thinking);
356-const thinkOnce = normalizeThinkLevel(opts.thinkingOnce);
357-if (opts.thinking && !thinkOverride) {
358-throw new Error(`Invalid thinking level. Use one of: ${thinkingLevelsHint}.`);
359-}
360-if (opts.thinkingOnce && !thinkOnce) {
361-throw new Error(`Invalid one-shot thinking level. Use one of: ${thinkingLevelsHint}.`);
362-}
363345364346const verboseOverride = normalizeVerboseLevel(opts.verbose);
365347if (opts.verbose && !verboseOverride) {
@@ -414,13 +396,49 @@ async function prepareAgentCommandExecution(
414396// Internal callers (for example subagent spawns) may pin workspace inheritance.
415397const workspaceDirRaw =
416398normalizedSpawned.workspaceDir ?? resolveAgentWorkspaceDir(cfg, sessionAgentId);
399+const workspaceDir = resolveUserPath(workspaceDirRaw);
417400const agentDir = resolveAgentDir(cfg, sessionAgentId);
418-const workspace = await ensureAgentWorkspace({
401+const manifestMetadataSnapshot = loadManifestMetadataSnapshot({
402+config: cfg,
403+ workspaceDir,
404+env: process.env,
405+});
406+setCurrentPluginMetadataSnapshot(manifestMetadataSnapshot, {
407+config: cfg,
408+env: process.env,
409+ workspaceDir,
410+});
411+const manifestPlugins = manifestMetadataSnapshot.plugins;
412+const configuredModel = resolveConfiguredModelRef({
413+ cfg,
414+defaultProvider: DEFAULT_PROVIDER,
415+defaultModel: DEFAULT_MODEL,
416+ manifestPlugins,
417+});
418+const configuredThinkingCatalog = buildConfiguredModelCatalog({
419+ cfg,
420+ workspaceDir,
421+ manifestPlugins,
422+});
423+const thinkingLevelsHint = formatThinkingLevels(
424+configuredModel.provider,
425+configuredModel.model,
426+", ",
427+configuredThinkingCatalog.length > 0 ? configuredThinkingCatalog : undefined,
428+);
429+const thinkOverride = normalizeThinkLevel(opts.thinking);
430+const thinkOnce = normalizeThinkLevel(opts.thinkingOnce);
431+if (opts.thinking && !thinkOverride) {
432+throw new Error(`Invalid thinking level. Use one of: ${thinkingLevelsHint}.`);
433+}
434+if (opts.thinkingOnce && !thinkOnce) {
435+throw new Error(`Invalid one-shot thinking level. Use one of: ${thinkingLevelsHint}.`);
436+}
437+await ensureAgentWorkspace({
419438dir: workspaceDirRaw,
420439ensureBootstrapFiles: !agentCfg?.skipBootstrap,
421440skipOptionalBootstrapFiles: agentCfg?.skipOptionalBootstrapFiles,
422441});
423-const workspaceDir = workspace.dir;
424442const runId = opts.runId?.trim() || sessionId;
425443const { getAcpSessionManager } = await loadAcpManagerRuntime();
426444const acpManager = getAcpSessionManager();
@@ -460,6 +478,7 @@ async function prepareAgentCommandExecution(
460478 outboundSession,
461479 workspaceDir,
462480 agentDir,
481+ manifestPlugins,
463482 runId,
464483 acpManager,
465484 acpResolution,
@@ -499,6 +518,7 @@ async function agentCommandInternal(
499518 runId,
500519 acpManager,
501520 acpResolution,
521+ manifestPlugins,
502522} = prepared;
503523let sessionEntry = prepared.sessionEntry;
504524@@ -750,10 +770,12 @@ async function agentCommandInternal(
750770const configuredDefaultRef = resolveDefaultModelForAgent({
751771 cfg,
752772agentId: sessionAgentId,
773+ manifestPlugins,
753774});
754775const { provider: defaultProvider, model: defaultModel } = normalizeModelRef(
755776configuredDefaultRef.provider,
756777configuredDefaultRef.model,
778+{ manifestPlugins },
757779);
758780let provider = defaultProvider;
759781let model = defaultModel;
@@ -786,6 +808,7 @@ async function agentCommandInternal(
786808catalog: [],
787809 defaultProvider,
788810 defaultModel,
811+ manifestPlugins,
789812});
790813791814if (needsModelCatalog) {
@@ -796,6 +819,7 @@ async function agentCommandInternal(
796819 defaultProvider,
797820 defaultModel,
798821agentId: sessionAgentId,
822+ manifestPlugins,
799823});
800824allowedModelCatalog = visibilityPolicy.allowedCatalog;
801825}
@@ -818,7 +842,9 @@ async function agentCommandInternal(
818842const overrideProvider = sessionEntry.providerOverride?.trim() || defaultProvider;
819843const overrideModel = sessionEntry.modelOverride?.trim();
820844if (overrideModel) {
821-const normalizedOverride = normalizeModelRef(overrideProvider, overrideModel);
845+const normalizedOverride = normalizeModelRef(overrideProvider, overrideModel, {
846+ manifestPlugins,
847+});
822848const key = modelKey(normalizedOverride.provider, normalizedOverride.model);
823849if (!visibilityPolicy.allowsKey(key)) {
824850const { updated } = applyModelOverrideToSessionEntry({
@@ -841,7 +867,9 @@ async function agentCommandInternal(
841867let storedModelOverride = sessionEntry?.modelOverride?.trim();
842868if (storedModelOverride) {
843869const candidateProvider = storedProviderOverride || defaultProvider;
844-const normalizedStored = normalizeModelRef(candidateProvider, storedModelOverride);
870+const normalizedStored = normalizeModelRef(candidateProvider, storedModelOverride, {
871+ manifestPlugins,
872+});
845873const key = modelKey(normalizedStored.provider, normalizedStored.model);
846874if (visibilityPolicy.allowsKey(key)) {
847875provider = normalizedStored.provider;
@@ -867,10 +895,10 @@ async function agentCommandInternal(
867895if (hasExplicitRunOverride) {
868896const explicitRef = explicitModelOverride
869897 ? explicitProviderOverride
870- ? normalizeModelRef(explicitProviderOverride, explicitModelOverride)
871- : parseModelRef(explicitModelOverride, provider)
898+ ? normalizeModelRef(explicitProviderOverride, explicitModelOverride, { manifestPlugins })
899+ : parseModelRef(explicitModelOverride, provider, { manifestPlugins })
872900 : explicitProviderOverride
873- ? normalizeModelRef(explicitProviderOverride, model)
901+ ? normalizeModelRef(explicitProviderOverride, model, { manifestPlugins })
874902 : null;
875903if (!explicitRef) {
876904throw new Error("Invalid model override.");
@@ -1085,6 +1113,7 @@ async function agentCommandInternal(
10851113 cfg,
10861114 provider,
10871115 model,
1116+ manifestPlugins,
10881117 runId,
10891118 agentDir,
10901119fallbacksOverride: effectiveFallbacksOverride,
@@ -1276,7 +1305,7 @@ async function agentCommandInternal(
12761305{ cause: err },
12771306);
12781307}
1279-const switchRef = normalizeModelRef(err.provider, err.model);
1308+const switchRef = normalizeModelRef(err.provider, err.model, { manifestPlugins });
12801309const switchKey = modelKey(switchRef.provider, switchRef.model);
12811310if (!visibilityPolicy.allowsKey(switchKey)) {
12821311log.info(
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。