mirror of https://github.com/openclaw/openclaw.git
71 lines
2.2 KiB
TypeScript
71 lines
2.2 KiB
TypeScript
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";
|
|
}
|
|
// ACP dispatch is enabled unless explicitly 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.`,
|
|
);
|
|
}
|