UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

90 lines (89 loc) • 4.61 kB
import { l as mergeAlsoAllowPolicy } from "./tool-policy-BrMCyUgN.mjs"; import { t as isFrozenClawToolAllowPolicy } from "./tool-policy-runtime-CAZfw5UW.mjs"; import { n as buildDefaultToolPolicyPipelineSteps, t as applyToolPolicyPipeline } from "./tool-policy-pipeline-4Av_cTF8.mjs"; //#region src/agents/conversation-tool-policy-pipeline.ts function mergePolicyAllowlist(policy, alsoAllow) { if (isFrozenClawToolAllowPolicy(policy)) return policy; return mergeAlsoAllowPolicy(policy, alsoAllow ? [...alsoAllow] : void 0); } /** * Resolves the shared policy layers once so local and remote fixed tool surfaces cannot * diverge on profile `alsoAllow`, sender, sandbox, delegation, or runtime-cap semantics. */ function resolveConversationToolPolicies(params) { const policy = params.capabilityProfile.policy; const profileAllow = [...policy.profileAlsoAllow ?? [], ...params.additionalProfileAllow ?? []]; const providerProfileAllow = [...policy.providerProfileAlsoAllow ?? [], ...params.additionalProfileAllow ?? []]; return { profilePolicy: mergePolicyAllowlist(policy.profilePolicy, profileAllow), providerProfilePolicy: mergePolicyAllowlist(policy.providerProfilePolicy, providerProfileAllow), globalPolicy: mergePolicyAllowlist(policy.globalPolicy, params.additionalPolicyAllow), globalProviderPolicy: mergePolicyAllowlist(policy.globalProviderPolicy, params.additionalPolicyAllow), agentPolicy: mergePolicyAllowlist(policy.agentPolicy, params.additionalPolicyAllow), agentProviderPolicy: mergePolicyAllowlist(policy.agentProviderPolicy, params.additionalPolicyAllow), groupPolicy: mergePolicyAllowlist(policy.groupPolicy, params.additionalPolicyAllow), senderPolicy: mergePolicyAllowlist(policy.senderPolicy, params.additionalPolicyAllow), sandboxPolicy: mergePolicyAllowlist(policy.sandboxPolicy, params.additionalPolicyAllow), subagentPolicy: mergePolicyAllowlist(policy.subagentPolicy, params.additionalPolicyAllow), runtimeToolPolicy: policy.runtimeToolPolicyForInheritance, inheritedToolPolicy: mergePolicyAllowlist(policy.inheritedToolPolicy, params.additionalInheritedAllow) }; } /** Builds the canonical ordered policy pipeline for a resolved conversation. */ function buildConversationToolPolicyPipelineSteps(params) { const profile = params.capabilityProfile.policy; const step = (policy, label, kind = "session") => ({ policy, source: { kind }, label, unavailableCoreToolReason: params.unavailableCoreToolReason }); return [ ...buildDefaultToolPolicyPipelineSteps({ profilePolicy: params.policies.profilePolicy, profile: profile.profile, profileUnavailableCoreWarningAllowlist: profile.profilePolicy?.allow, providerProfilePolicy: params.policies.providerProfilePolicy, providerProfile: profile.providerProfile, providerProfileUnavailableCoreWarningAllowlist: profile.providerProfilePolicy?.allow, globalPolicy: params.policies.globalPolicy, globalProviderPolicy: params.policies.globalProviderPolicy, agentPolicy: params.policies.agentPolicy, agentProviderPolicy: params.policies.agentProviderPolicy, groupPolicy: params.policies.groupPolicy, senderPolicy: params.policies.senderPolicy, agentId: profile.agentId, sources: profile.sources, unavailableCoreToolReason: params.unavailableCoreToolReason }), step(params.policies.sandboxPolicy, "sandbox tools.allow"), ...params.additionalStepsAfterSandbox ?? [], step(params.policies.subagentPolicy, "subagent tools.allow"), ...params.includeRuntimeToolPolicy ? [step(params.policies.runtimeToolPolicy, "runtime tools.allow", "runtime")] : [], step(params.policies.inheritedToolPolicy, "inherited tools") ]; } /** Projects a fixed runtime catalog through the exact conversation policy pipeline. */ function projectConversationToolNames(params) { const policies = resolveConversationToolPolicies({ capabilityProfile: params.capabilityProfile }); const tools = params.toolNames.map((name) => ({ name })); return applyToolPolicyPipeline({ tools, toolMeta: () => void 0, warn: params.warn, steps: buildConversationToolPolicyPipelineSteps({ capabilityProfile: params.capabilityProfile, policies, includeRuntimeToolPolicy: true }) }).map((tool) => tool.name); } function isConversationToolAllowed(capabilityProfile, toolName) { return projectConversationToolNames({ capabilityProfile, toolNames: [toolName], warn: () => void 0 }).length === 1; } //#endregion export { resolveConversationToolPolicies as i, isConversationToolAllowed as n, projectConversationToolNames as r, buildConversationToolPolicyPipelineSteps as t };