UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

247 lines (246 loc) 9.39 kB
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 };