openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
125 lines (124 loc) • 4.93 kB
JavaScript
import { t as formatErrorMessage } from "./errors-BSdPMFao.mjs";
import { a as resolveAgentDir, d as resolveAgentWorkspaceDir, r as resolveAgentConfig } from "./agent-scope-config-BU4qc9bA.mjs";
import { i as listAgentIds } from "./agent-roster-B45JERT5.mjs";
import { l as isUpdateDoctorLintPass } from "./update-phase-BjNYi_ax.mjs";
import "./defaults-BbU4k6fu.mjs";
import "./agent-scope-DWB4x52T.mjs";
import { n as findModelInCatalog } from "./model-catalog-lookup-yn4mcQ3v.mjs";
import { t as resolveDefaultModelForAgent } from "./model-selection-config-f31fW3C2.mjs";
import "./model-catalog-DEp70Mhx.mjs";
import "./model-selection-CibyjxTm.mjs";
import { d as readPreparedModelCatalog } from "./prepared-model-catalog-0uZANRjz.mjs";
import { t as resolveConversationCapabilityProfile } from "./conversation-capability-profile-rQYLcX4p.mjs";
import { n as supportsModelTools } from "./model-tool-support-DIQSEumC.mjs";
import { t as resolveDoctorPrimaryModelRef } from "./primary-model-ref-g4WdfIBi.mjs";
//#region src/flows/doctor-tool-schema-frames.ts
function modelContextFinding(agentId, reason, deferred = false) {
return {
checkId: "core/doctor/runtime-tool-schemas",
severity: "warning",
message: deferred ? `Agent ${agentId} model-specific tool schema inspection was deferred because its provider needs live model discovery.` : `Agent ${agentId} runtime tool schema inspection could not prepare its selected model context.`,
errorCode: deferred ? "provider-dynamic-model-deferred" : "model-context-unavailable",
path: `agents.${agentId}.model`,
requirement: reason,
fixHint: deferred ? "Use the model in an authenticated agent run to validate its tool schemas." : "Resolve the provider/model loading problem, then rerun doctor to validate model-specific tool schemas."
};
}
function buildDoctorRuntimeModel(params) {
const provider = params.provider || "openai";
const id = params.modelId || "gpt-6-astra";
const api = params.entry?.api ?? (provider === "openai" ? "openai-responses" : void 0);
const baseUrl = params.entry?.baseUrl ?? (api === "openai-chatgpt-responses" ? "https://chatgpt.com/backend-api" : provider === "openai" ? "https://api.openai.com/v1" : void 0);
return {
...params.entry,
provider,
id,
name: params.entry?.name ?? id,
...api ? { api } : {},
...baseUrl ? { baseUrl } : {}
};
}
/** Prepare each agent's local facts before acquiring the operation's tool registrations. */
async function prepareDoctorToolSchemaFrames(cfg, options = {}) {
const env = options.env ?? process.env;
const standalone = options.mode !== void 0 && options.mode !== "lint" && !isUpdateDoctorLintPass(env);
const frames = [];
const findings = [];
for (const agentId of listAgentIds(cfg)) {
const agent = resolveAgentConfig(cfg, agentId);
if (agent?.runtime?.type === "acp") continue;
const agentDir = resolveAgentDir(cfg, agentId, env);
const workspaceDir = resolveAgentWorkspaceDir(cfg, agentId, env);
const prepare = async () => {
const modelRef = standalone ? resolveDoctorPrimaryModelRef(cfg, agent?.model) : resolveDefaultModelForAgent({
cfg,
agentId,
allowPluginNormalization: true
});
let model;
if (standalone) {
const { resolveModelAsync } = await import("./model-Ddq3CU4F.mjs");
const resolution = await resolveModelAsync(modelRef.provider, modelRef.model, agentDir, cfg, {
modelIdSource: "selected",
agentId,
workspaceDir,
skipAgentDiscovery: true,
allowBundledStaticCatalogFallback: true,
deferProviderDynamicModelPreparation: true
});
if (!resolution.model) {
findings.push(modelContextFinding(agentId, resolution.error, Boolean(resolution.deferred)));
return;
}
model = resolution.model;
} else {
const catalog = await readPreparedModelCatalog({
config: cfg,
agentId,
agentDir,
readOnly: true,
providerDiscoveryProviderIds: []
});
model = buildDoctorRuntimeModel({
entry: findModelInCatalog(catalog, modelRef.provider, modelRef.model),
provider: modelRef.provider,
modelId: modelRef.model
});
}
if (!supportsModelTools(model)) return;
const capabilityProfile = resolveConversationCapabilityProfile({
config: cfg,
agentId,
agentDir,
workspaceDir,
modelProvider: modelRef.provider,
modelId: modelRef.model,
modelApi: model.api,
modelContextWindowTokens: model.contextWindow
});
frames.push({
agentId,
agentDir,
workspaceDir,
modelRef,
model,
capabilityProfile
});
};
try {
if (options.runWithPluginMetadataSnapshot) await options.runWithPluginMetadataSnapshot({
config: cfg,
workspaceDir
}, prepare);
else await prepare();
} catch (error) {
findings.push(modelContextFinding(agentId, formatErrorMessage(error)));
}
}
return {
frames,
findings
};
}
//#endregion
export { prepareDoctorToolSchemaFrames };