UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

257 lines (256 loc) • 9.75 kB
import { t as createSubsystemLogger } from "./subsystem-BlrgtxyM.mjs"; import { d as resolveAgentWorkspaceDir } from "./agent-scope-config-BU4qc9bA.mjs"; import { t as normalizeChatType } from "./chat-type-Dw-QySg9.mjs"; import { i as listRegisteredPluginAgentPromptGuidance } from "./command-registry-state-B0TT9g3x.mjs"; import { n as resolveSandboxRuntimeStatus } from "./runtime-status-Bfel3YpH.mjs"; import { i as resolveNodeExecEligibility } from "./exec-defaults-D_C0LX4M.mjs"; import { t as createOpenClawCodingTools } from "./agent-tools-DBHF05OR.mjs"; import { t as isAcpRuntimeSpawnAvailable } from "./availability-DxsBYErz.mjs"; import { a as resolveSandboxSkillRuntimeInputs, n as resolveEmbeddedRunSkillEntries, r as mapSandboxSkillEntriesForPrompt } from "./runtime-capabilities-CsyWUWwP.mjs"; import { n as resolveSkillsPrompt } from "./workspace-skill-prompt-ucMCWKYn.mjs"; import { a as resolveBootstrapContextForRun, i as makeBootstrapWarn } from "./bootstrap-files-Dv5-lWCI.mjs"; import { t as ensureSandboxWorkspaceForSession } from "./context-VCSXF-7p.mjs"; import "./sandbox-BMYK2iq5.mjs"; import { i as buildConfiguredAgentSystemPrompt, s as resolveAgentPromptSurfaceForSessionKey } from "./system-prompt-params-DylHE8X5.mjs"; import { t as resolveAgentRuntimePrompt } from "./runtime-prompt-D48b_bFs.mjs"; import { n as resolveEmbeddedFullAccessState } from "./sandbox-info-BaWpukzA.mjs"; import { t as getRemoteSkillEligibility } from "./remote-DEzwkkt9.mjs"; import { t as resolveReusableWorkspaceSkillSnapshot } from "./session-snapshot-DkbzLWp5.mjs"; import { t as resolveRuntimePolicySessionKey } from "./runtime-policy-session-key-AsejGNGv.mjs"; //#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) { let skillsSnapshot; try { skillsSnapshot = (await resolveReusableWorkspaceSkillSnapshot({ workspaceDir: resolveAgentWorkspaceDir(params.config, params.agentId), executionWorkspaceDir: params.executionWorkspaceDir, config: params.config, agentId: params.agentId, resolveEligibility: () => ({ ...params.eligibility, remote: getRemoteSkillEligibility({ advertiseExecNode: params.eligibility?.nodeSkills?.canExec ?? false }) }), existingSnapshot: params.skillsSnapshot, skillFilter: params.skillsSnapshot?.skillFilter, skillOverrides: params.skillsSnapshot?.skillOverrides, watch: false })).snapshot; } catch { return ""; } if (params.sandboxed) try { const sandboxWorkspace = await ensureSandboxWorkspaceForSession({ skillsSnapshot, 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.skillUsagePaths ? { skillUsagePaths: sandboxWorkspace.skillUsagePaths } : {}, ...sandboxWorkspace.workspaceAccess ? { workspaceAccess: sandboxWorkspace.workspaceAccess } : {} }, skillsAnchorWorkspace: sandboxWorkspace.workspaceDir, skillsSnapshot }); const { shouldLoadSkillEntries, skillEntries, preserveEntryOrder } = await 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 await resolveSkillsPrompt({ skillsSnapshot: skillsSnapshotForRun, entries: promptSkillEntries, config: params.config, workspaceDir: skillsPromptWorkspaceDir, agentId: params.agentId, eligibility: skillsEligibility, preserveEntryOrder }); } } catch { return ""; } return skillsSnapshot.prompt; } 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, executionWorkspaceDir: targetSessionEntry?.worktree?.canonicalWorkspaceDir ?? workspaceDir, skillsSnapshot: targetSessionEntry?.skillsSnapshot }); 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 { 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) }); 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 }; const { getPreparedModelCatalogOwnerSnapshot } = await import("./prepared-model-catalog-BtACSAo5.mjs"); const preparedModelRuntime = getPreparedModelCatalogOwnerSnapshot({ config: params.cfg, agentId: sessionAgentId, workspaceDir }); return { systemPrompt: buildConfiguredAgentSystemPrompt({ config: params.cfg, preparedModelRuntime, 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 };