| import type { OpenClawConfig } from "../config/config.js"; |
| import { normalizeAgentId } from "../routing/session-key.js"; |
| import { AcpRuntimeError } from "./runtime/errors.js"; |
|
|
| const ACP_DISABLED_MESSAGE = "ACP is disabled by policy (`acp.enabled=false`)."; |
| const ACP_DISPATCH_DISABLED_MESSAGE = |
| "ACP dispatch is disabled by policy (`acp.dispatch.enabled=false`)."; |
|
|
| export type AcpDispatchPolicyState = "enabled" | "acp_disabled" | "dispatch_disabled"; |
|
|
| export function isAcpEnabledByPolicy(cfg: OpenClawConfig): boolean { |
| return cfg.acp?.enabled !== false; |
| } |
|
|
| export function resolveAcpDispatchPolicyState(cfg: OpenClawConfig): AcpDispatchPolicyState { |
| if (!isAcpEnabledByPolicy(cfg)) { |
| return "acp_disabled"; |
| } |
| |
| if (cfg.acp?.dispatch?.enabled === false) { |
| return "dispatch_disabled"; |
| } |
| return "enabled"; |
| } |
|
|
| export function isAcpDispatchEnabledByPolicy(cfg: OpenClawConfig): boolean { |
| return resolveAcpDispatchPolicyState(cfg) === "enabled"; |
| } |
|
|
| export function resolveAcpDispatchPolicyMessage(cfg: OpenClawConfig): string | null { |
| const state = resolveAcpDispatchPolicyState(cfg); |
| if (state === "acp_disabled") { |
| return ACP_DISABLED_MESSAGE; |
| } |
| if (state === "dispatch_disabled") { |
| return ACP_DISPATCH_DISABLED_MESSAGE; |
| } |
| return null; |
| } |
|
|
| export function resolveAcpDispatchPolicyError(cfg: OpenClawConfig): AcpRuntimeError | null { |
| const message = resolveAcpDispatchPolicyMessage(cfg); |
| if (!message) { |
| return null; |
| } |
| return new AcpRuntimeError("ACP_DISPATCH_DISABLED", message); |
| } |
|
|
| export function isAcpAgentAllowedByPolicy(cfg: OpenClawConfig, agentId: string): boolean { |
| const allowed = (cfg.acp?.allowedAgents ?? []) |
| .map((entry) => normalizeAgentId(entry)) |
| .filter(Boolean); |
| if (allowed.length === 0) { |
| return true; |
| } |
| return allowed.includes(normalizeAgentId(agentId)); |
| } |
|
|
| export function resolveAcpAgentPolicyError( |
| cfg: OpenClawConfig, |
| agentId: string, |
| ): AcpRuntimeError | null { |
| if (isAcpAgentAllowedByPolicy(cfg, agentId)) { |
| return null; |
| } |
| return new AcpRuntimeError( |
| "ACP_SESSION_INIT_FAILED", |
| `ACP agent "${normalizeAgentId(agentId)}" is not allowed by policy.`, |
| ); |
| } |
|
|