openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
247 lines (246 loc) • 9.39 kB
JavaScript
import { t as createSubsystemLogger } from "./subsystem-Dy2tqXOS.js";
import { t as normalizeChatType } from "./chat-type-CG0X_HJM.js";
import { s as listRegisteredPluginAgentPromptGuidance } from "./command-registration-Ctsn0AES.js";
import { n as resolveSandboxRuntimeStatus } from "./runtime-status-6c8Jb1Kg.js";
import { i as mapSandboxSkillEntriesForPrompt, n as resolveEmbeddedRunSkillEntries, s as resolveSandboxSkillRuntimeInputs } from "./runtime-capabilities-DSL-Cp6r.js";
import { a as resolveBootstrapContextForRun, i as makeBootstrapWarn } from "./bootstrap-files-DbaSu-Uk.js";
import { t as isAcpRuntimeSpawnAvailable } from "./availability-B71AKwcQ.js";
import { n as resolveSkillsPrompt } from "./workspace-skill-prompt-B50WpU6M.js";
import { t as ensureSandboxWorkspaceForSession } from "./context-B_khSODz.js";
import "./sandbox-A2KOznlu.js";
import { n as resolveNodeExecEligibility } from "./exec-defaults-CET-_UfH.js";
import { i as buildConfiguredAgentSystemPrompt, s as resolveAgentPromptSurfaceForSessionKey } from "./system-prompt-params-mVMVoMfR.js";
import { t as createOpenClawCodingTools } from "./agent-tools-By64BZu5.js";
import { i as resolveAgentRuntimePrompt, n as resolveEmbeddedFullAccessState } from "./sandbox-info-BJQoy6Lc.js";
import { t as getRemoteSkillEligibility } from "./remote-D-j1AEXQ.js";
import { t as resolveReusableWorkspaceSkillSnapshot } from "./session-snapshot-CnGGVFJ3.js";
import { t as resolveRuntimePolicySessionKey } from "./runtime-policy-session-key-DCz5SylW.js";
import { n as buildThreadingToolContext } from "./agent-runner-utils-4NqM1iMb.js";
//#region src/auto-reply/reply/commands-system-prompt.ts
const log = createSubsystemLogger("auto-reply/commands-system-prompt");
function resolveCommandSkillsEligibility(params) {
try {
const nodeSkills = resolveNodeExecEligibility({
cfg: params.config,
sessionEntry: params.sessionEntry,
sessionKey: params.sessionKey,
agentId: params.agentId
});
return {
nodeSkills,
remote: getRemoteSkillEligibility({ advertiseExecNode: nodeSkills.canExec })
};
} catch {
try {
return {
nodeSkills: { canExec: false },
remote: getRemoteSkillEligibility({ advertiseExecNode: false })
};
} catch {
return { nodeSkills: { canExec: false } };
}
}
}
async function resolveCommandSkillsPrompt(params) {
if (params.sandboxed) try {
const sandboxWorkspace = await ensureSandboxWorkspaceForSession({
config: params.config,
agentId: params.sandboxAgentId,
sessionKey: params.sessionKey,
workspaceDir: params.workspaceDir
});
if (!sandboxWorkspace) return "";
if (sandboxWorkspace.containerWorkdir) {
const { skillsEligibility, skillsPromptWorkspaceDir, skillsSnapshot: skillsSnapshotForRun, skillsWorkspaceDir, workspaceOnly } = resolveSandboxSkillRuntimeInputs({
sandbox: {
enabled: true,
containerWorkdir: sandboxWorkspace.containerWorkdir,
...sandboxWorkspace.skillsEligibility ? { skillsEligibility: sandboxWorkspace.skillsEligibility } : {},
...sandboxWorkspace.skillsWorkspaceDir ? { skillsWorkspaceDir: sandboxWorkspace.skillsWorkspaceDir } : {},
...sandboxWorkspace.workspaceAccess ? { workspaceAccess: sandboxWorkspace.workspaceAccess } : {}
},
skillsAnchorWorkspace: sandboxWorkspace.workspaceDir
});
const { shouldLoadSkillEntries, skillEntries, preserveEntryOrder } = resolveEmbeddedRunSkillEntries({
workspaceDir: skillsWorkspaceDir,
config: params.config,
agentId: params.agentId,
eligibility: skillsEligibility,
skillsSnapshot: skillsSnapshotForRun,
workspaceOnly
});
const promptSkillEntries = mapSandboxSkillEntriesForPrompt({
entries: shouldLoadSkillEntries ? skillEntries : void 0,
skillsWorkspaceDir,
skillsPromptWorkspaceDir
});
return resolveSkillsPrompt({
skillsSnapshot: skillsSnapshotForRun,
entries: promptSkillEntries,
config: params.config,
workspaceDir: skillsPromptWorkspaceDir,
agentId: params.agentId,
eligibility: skillsEligibility,
preserveEntryOrder
});
}
} catch {
return "";
}
try {
return resolveReusableWorkspaceSkillSnapshot({
workspaceDir: params.workspaceDir,
config: params.config,
agentId: params.agentId,
eligibility: params.eligibility,
watch: false
}).snapshot.prompt ?? "";
} catch {
return "";
}
}
async function resolveCommandsSystemPromptBundle(params) {
const workspaceDir = params.workspaceDir;
const targetSessionEntry = params.sessionStore?.[params.sessionKey] ?? params.sessionEntry;
const sessionAgentId = params.agentId;
const { bootstrapFiles, contextFiles: injectedFiles } = await resolveBootstrapContextForRun({
workspaceDir,
config: params.cfg,
sessionKey: params.sessionKey,
sessionId: targetSessionEntry?.sessionId,
chatType: targetSessionEntry?.chatType,
agentId: sessionAgentId,
warn: makeBootstrapWarn({
sessionLabel: params.sessionKey,
workspaceDir,
warn: (message) => log.warn(message)
})
});
const toolPolicySessionKey = resolveRuntimePolicySessionKey({
agentId: sessionAgentId,
cfg: params.cfg,
ctx: params.ctx,
sessionKey: params.sessionKey
});
const sandboxRuntime = resolveSandboxRuntimeStatus({
cfg: params.cfg,
agentId: sessionAgentId,
sessionKey: params.sessionKey,
classificationSessionKey: toolPolicySessionKey
});
const skillsEligibility = resolveCommandSkillsEligibility({
agentId: sessionAgentId,
config: params.cfg,
sessionEntry: targetSessionEntry,
sessionKey: params.sessionKey
});
const skillsPrompt = await resolveCommandSkillsPrompt({
agentId: sessionAgentId,
config: params.cfg,
eligibility: skillsEligibility,
sandboxAgentId: sandboxRuntime.classificationAgentId,
sandboxed: sandboxRuntime.sandboxed,
sessionKey: toolPolicySessionKey,
workspaceDir
});
const tools = (() => {
try {
return createOpenClawCodingTools({
config: params.cfg,
agentId: sessionAgentId,
workspaceDir,
sessionKey: toolPolicySessionKey,
allowGatewaySubagentBinding: true,
messageProvider: params.command.channel,
groupId: targetSessionEntry?.groupId ?? void 0,
groupChannel: targetSessionEntry?.groupChannel ?? void 0,
groupSpace: targetSessionEntry?.space ?? void 0,
spawnedBy: targetSessionEntry?.spawnedBy ?? void 0,
senderId: params.command.senderId,
senderName: params.ctx.SenderName,
senderUsername: params.ctx.SenderUsername,
senderE164: params.ctx.SenderE164,
modelProvider: params.provider,
modelId: params.model
});
} catch {
return [];
}
})();
const toolNames = tools.map((t) => t.name);
const promptSurface = resolveAgentPromptSurfaceForSessionKey(params.sessionKey);
const accountId = params.command.accountId ?? params.ctx.AccountId;
const threadingContext = buildThreadingToolContext({
sessionCtx: params.ctx,
config: params.cfg,
hasRepliedRef: void 0
});
const fallbackChannelId = params.ctx.NativeChannelId?.trim() || params.ctx.ChatId?.trim() || params.ctx.OriginatingTo?.trim() || params.command.to;
const fallbackThreadId = params.ctx.MessageThreadId ?? params.ctx.TransportThreadId;
const { runtimeInfo, userTimezone, userDate, reactionGuidance, messageToolHints } = await resolveAgentRuntimePrompt({
config: params.cfg,
agentId: sessionAgentId,
workspaceDir,
cwd: process.cwd(),
sessionKey: params.sessionKey,
sessionId: targetSessionEntry?.sessionId,
model: `${params.provider}/${params.model}`,
channel: params.command.channel,
accountId,
chatType: normalizeChatType(params.ctx.ChatType ?? targetSessionEntry?.chatType),
currentChannelId: threadingContext.currentChannelId ?? fallbackChannelId,
currentThreadTs: threadingContext.currentThreadTs ?? (fallbackThreadId === void 0 ? void 0 : String(fallbackThreadId)),
currentMessageId: threadingContext.currentMessageId,
senderId: params.ctx.SenderId ?? params.command.senderId,
senderIsOwner: params.command.senderIsOwner
});
const fullAccessState = resolveEmbeddedFullAccessState({ execElevated: {
enabled: params.elevated.enabled,
allowed: params.elevated.allowed,
defaultLevel: params.resolvedElevatedLevel ?? "off"
} });
const sandboxInfo = sandboxRuntime.sandboxed ? {
enabled: true,
workspaceDir,
workspaceAccess: "rw",
elevated: {
allowed: params.elevated.allowed,
defaultLevel: params.resolvedElevatedLevel ?? "off",
fullAccessAvailable: fullAccessState.available,
...fullAccessState.blockedReason ? { fullAccessBlockedReason: fullAccessState.blockedReason } : {}
}
} : { enabled: false };
return {
systemPrompt: buildConfiguredAgentSystemPrompt({
config: params.cfg,
agentId: sessionAgentId,
workspaceDir,
reasoningLevel: params.resolvedReasoningLevel,
extraSystemPrompt: void 0,
ownerNumbers: void 0,
reasoningTagHint: false,
toolNames,
userTimezone,
userDate,
contextFiles: injectedFiles,
skillsPrompt,
acpEnabled: isAcpRuntimeSpawnAvailable({
config: params.cfg,
sandboxed: sandboxRuntime.sandboxed
}),
promptSurface,
nativeCommandGuidanceLines: listRegisteredPluginAgentPromptGuidance({ surface: promptSurface }),
reactionGuidance,
messageToolHints,
runtimeInfo,
sandboxInfo
}),
tools,
skillsPrompt,
bootstrapFiles,
injectedFiles,
sandboxRuntime
};
}
//#endregion
export { resolveCommandsSystemPromptBundle as t };