mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-19 09:08:38 +00:00
refactor(auto-reply): share elevated unavailable message
This commit is contained in:
@@ -6,9 +6,9 @@ import { getFinishedSession, getSession, markExited } from "../../agents/bash-pr
|
|||||||
import { createExecTool } from "../../agents/bash-tools.js";
|
import { createExecTool } from "../../agents/bash-tools.js";
|
||||||
import { resolveSandboxRuntimeStatus } from "../../agents/sandbox.js";
|
import { resolveSandboxRuntimeStatus } from "../../agents/sandbox.js";
|
||||||
import { killProcessTree } from "../../agents/shell-utils.js";
|
import { killProcessTree } from "../../agents/shell-utils.js";
|
||||||
import { formatCliCommand } from "../../cli/command-format.js";
|
|
||||||
import { logVerbose } from "../../globals.js";
|
import { logVerbose } from "../../globals.js";
|
||||||
import { clampInt } from "../../utils.js";
|
import { clampInt } from "../../utils.js";
|
||||||
|
import { formatElevatedUnavailableMessage } from "./elevated-unavailable.js";
|
||||||
import { stripMentions, stripStructuralPrefixes } from "./mentions.js";
|
import { stripMentions, stripStructuralPrefixes } from "./mentions.js";
|
||||||
|
|
||||||
const CHAT_BASH_SCOPE_KEY = "chat:bash";
|
const CHAT_BASH_SCOPE_KEY = "chat:bash";
|
||||||
@@ -174,35 +174,6 @@ function buildUsageReply(): ReplyPayload {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatElevatedUnavailableMessage(params: {
|
|
||||||
runtimeSandboxed: boolean;
|
|
||||||
failures: Array<{ gate: string; key: string }>;
|
|
||||||
sessionKey?: string;
|
|
||||||
}): string {
|
|
||||||
const lines: string[] = [];
|
|
||||||
lines.push(
|
|
||||||
`elevated is not available right now (runtime=${params.runtimeSandboxed ? "sandboxed" : "direct"}).`,
|
|
||||||
);
|
|
||||||
if (params.failures.length > 0) {
|
|
||||||
lines.push(`Failing gates: ${params.failures.map((f) => `${f.gate} (${f.key})`).join(", ")}`);
|
|
||||||
} else {
|
|
||||||
lines.push(
|
|
||||||
"Failing gates: enabled (tools.elevated.enabled / agents.list[].tools.elevated.enabled), allowFrom (tools.elevated.allowFrom.<provider>).",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
lines.push("Fix-it keys:");
|
|
||||||
lines.push("- tools.elevated.enabled");
|
|
||||||
lines.push("- tools.elevated.allowFrom.<provider>");
|
|
||||||
lines.push("- agents.list[].tools.elevated.enabled");
|
|
||||||
lines.push("- agents.list[].tools.elevated.allowFrom.<provider>");
|
|
||||||
if (params.sessionKey) {
|
|
||||||
lines.push(
|
|
||||||
`See: ${formatCliCommand(`openclaw sandbox explain --session ${params.sessionKey}`)}`,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return lines.join("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function handleBashChatCommand(params: {
|
export async function handleBashChatCommand(params: {
|
||||||
ctx: MsgContext;
|
ctx: MsgContext;
|
||||||
cfg: OpenClawConfig;
|
cfg: OpenClawConfig;
|
||||||
|
|||||||
30
src/auto-reply/reply/elevated-unavailable.ts
Normal file
30
src/auto-reply/reply/elevated-unavailable.ts
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
import { formatCliCommand } from "../../cli/command-format.js";
|
||||||
|
|
||||||
|
export function formatElevatedUnavailableMessage(params: {
|
||||||
|
runtimeSandboxed: boolean;
|
||||||
|
failures: Array<{ gate: string; key: string }>;
|
||||||
|
sessionKey?: string;
|
||||||
|
}): string {
|
||||||
|
const lines: string[] = [];
|
||||||
|
lines.push(
|
||||||
|
`elevated is not available right now (runtime=${params.runtimeSandboxed ? "sandboxed" : "direct"}).`,
|
||||||
|
);
|
||||||
|
if (params.failures.length > 0) {
|
||||||
|
lines.push(`Failing gates: ${params.failures.map((f) => `${f.gate} (${f.key})`).join(", ")}`);
|
||||||
|
} else {
|
||||||
|
lines.push(
|
||||||
|
"Failing gates: enabled (tools.elevated.enabled / agents.list[].tools.elevated.enabled), allowFrom (tools.elevated.allowFrom.<provider>).",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
lines.push("Fix-it keys:");
|
||||||
|
lines.push("- tools.elevated.enabled");
|
||||||
|
lines.push("- tools.elevated.allowFrom.<provider>");
|
||||||
|
lines.push("- agents.list[].tools.elevated.enabled");
|
||||||
|
lines.push("- agents.list[].tools.elevated.allowFrom.<provider>");
|
||||||
|
if (params.sessionKey) {
|
||||||
|
lines.push(
|
||||||
|
`See: ${formatCliCommand(`openclaw sandbox explain --session ${params.sessionKey}`)}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return lines.join("\n");
|
||||||
|
}
|
||||||
@@ -4,8 +4,8 @@ import { resolveAgentConfig } from "../../agents/agent-scope.js";
|
|||||||
import { getChannelDock } from "../../channels/dock.js";
|
import { getChannelDock } from "../../channels/dock.js";
|
||||||
import { normalizeChannelId } from "../../channels/plugins/index.js";
|
import { normalizeChannelId } from "../../channels/plugins/index.js";
|
||||||
import { CHAT_CHANNEL_ORDER } from "../../channels/registry.js";
|
import { CHAT_CHANNEL_ORDER } from "../../channels/registry.js";
|
||||||
import { formatCliCommand } from "../../cli/command-format.js";
|
|
||||||
import { INTERNAL_MESSAGE_CHANNEL } from "../../utils/message-channel.js";
|
import { INTERNAL_MESSAGE_CHANNEL } from "../../utils/message-channel.js";
|
||||||
|
export { formatElevatedUnavailableMessage } from "./elevated-unavailable.js";
|
||||||
|
|
||||||
function normalizeAllowToken(value?: string) {
|
function normalizeAllowToken(value?: string) {
|
||||||
if (!value) {
|
if (!value) {
|
||||||
@@ -202,32 +202,3 @@ export function resolveElevatedPermissions(params: {
|
|||||||
}
|
}
|
||||||
return { enabled, allowed: globalAllowed && agentAllowed, failures };
|
return { enabled, allowed: globalAllowed && agentAllowed, failures };
|
||||||
}
|
}
|
||||||
|
|
||||||
export function formatElevatedUnavailableMessage(params: {
|
|
||||||
runtimeSandboxed: boolean;
|
|
||||||
failures: Array<{ gate: string; key: string }>;
|
|
||||||
sessionKey?: string;
|
|
||||||
}): string {
|
|
||||||
const lines: string[] = [];
|
|
||||||
lines.push(
|
|
||||||
`elevated is not available right now (runtime=${params.runtimeSandboxed ? "sandboxed" : "direct"}).`,
|
|
||||||
);
|
|
||||||
if (params.failures.length > 0) {
|
|
||||||
lines.push(`Failing gates: ${params.failures.map((f) => `${f.gate} (${f.key})`).join(", ")}`);
|
|
||||||
} else {
|
|
||||||
lines.push(
|
|
||||||
"Failing gates: enabled (tools.elevated.enabled / agents.list[].tools.elevated.enabled), allowFrom (tools.elevated.allowFrom.<provider>).",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
lines.push("Fix-it keys:");
|
|
||||||
lines.push("- tools.elevated.enabled");
|
|
||||||
lines.push("- tools.elevated.allowFrom.<provider>");
|
|
||||||
lines.push("- agents.list[].tools.elevated.enabled");
|
|
||||||
lines.push("- agents.list[].tools.elevated.allowFrom.<provider>");
|
|
||||||
if (params.sessionKey) {
|
|
||||||
lines.push(
|
|
||||||
`See: ${formatCliCommand(`openclaw sandbox explain --session ${params.sessionKey}`)}`,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return lines.join("\n");
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user