UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

144 lines (143 loc) • 6.61 kB
import { r as isIncognitoSessionKey } from "./session-key-CmZ4o9-l.mjs"; import "./session-key-DY3MOX4N.mjs"; import { i as isIncognitoOpenClawAgentSqlitePath } from "./openclaw-agent-db.paths-BbmZlEP5.mjs"; import "./openclaw-agent-db-DWI9Bgur.mjs"; import { n as canonicalizeMainSessionAlias, r as resolveAgentMainSessionKey } from "./main-session-BOUJdkxQ.mjs"; import { h as shouldIncludeProgressCardToolForOpenClawTools } from "./openclaw-tools-CSSYZDKR.mjs"; import { t as isHeartbeatLifecycleRunKind } from "./bootstrap-mode-HvSedbJl.mjs"; import { a as resolveUtilityModelRefForAgent } from "./utility-model-B8wGoqhr.mjs"; import { i as measureEmbeddedAgentPreparation } from "./attempt-system-prompt-prepare-ChKsbjSh.mjs"; import { t as resolveSessionGitCoauthorPrompt } from "./git-coauthor-prompt-CMnF82Iy.mjs"; import { t as beginContextEngineLogicalTurn } from "./context-engine-turn-begin-DbV1Nxer.mjs"; import { t as createContextEngineLogicalTurnLease } from "./context-engine-logical-turn-BsH0VwMl.mjs"; import { r as hasPairedCardRenderer } from "./device-pairing-Duk1-QC4.mjs"; //#region src/agents/embedded-agent-runner/run/blocked-run-result.ts function buildEmbeddedRunBlockedResult(input) { return { payloads: [{ text: input.text, isError: true }], meta: { durationMs: input.durationMs, agentMeta: input.agentMeta, systemPromptReport: input.attempt?.systemPromptReport, finalAssistantVisibleText: input.text, finalAssistantRawText: input.text, finalPromptText: input.finalPromptText, replayInvalid: input.replayInvalid, livenessState: "blocked", error: { kind: input.errorKind, message: input.errorMessage } } }; } //#endregion //#region src/agents/embedded-agent-runner/run/context-engine-admission.ts /** Selects the admitted harness host and settles prior context work before beginning its turn. */ async function admitEmbeddedContextEngine(input, harness) { const params = input.runParams; const ownsContextEngineLogicalTurnLease = params.contextEngineLogicalTurnLease === void 0; const contextEngineLogicalTurnLease = params.contextEngineLogicalTurnLease ?? await measureEmbeddedAgentPreparation("context-engine", () => createContextEngineLogicalTurnLease({ identity: params, config: params.config, agentDir: input.agentDir, workspaceDir: input.workspaceDir }), { config: params.config }); try { return { contextEngine: (await beginContextEngineLogicalTurn({ lease: contextEngineLogicalTurnLease, host: { id: `agent-harness:${harness.id}`, label: `agent harness "${harness.id}"`, capabilities: harness.contextEngineHostCapabilities ?? [] }, recorder: params.userTurnTranscriptRecorder, isHeartbeat: isHeartbeatLifecycleRunKind(params.bootstrapContextRunKind), sessionTarget: params.sessionTarget })).engine, contextEngineLogicalTurnLease, ownsContextEngineLogicalTurnLease, [Symbol.asyncDispose]: () => ownsContextEngineLogicalTurnLease ? contextEngineLogicalTurnLease.dispose() : Promise.resolve() }; } catch (error) { if (ownsContextEngineLogicalTurnLease) await contextEngineLogicalTurnLease.dispose(); throw error; } } //#endregion //#region src/agents/incognito-system-prompt.ts const INCOGNITO_SYSTEM_PROMPT = "This chat is incognito; do not store its conversation content in memory files or long-term notes."; function appendIncognitoSystemPrompt(params) { if (!(isIncognitoSessionKey(params.sessionKey) || params.storePath && isIncognitoOpenClawAgentSqlitePath(params.storePath, { agentId: params.agentId }))) return params.extraSystemPrompt; const existing = params.extraSystemPrompt?.trim(); return existing ? `${existing}\n\n${INCOGNITO_SYSTEM_PROMPT}` : INCOGNITO_SYSTEM_PROMPT; } //#endregion //#region src/agents/progress-card-system-prompt.ts const PROGRESS_CARD_SYSTEM_PROMPT = "Create a card with progress_card only for substantial work with at least two meaningful sequential steps, never for greetings, quick questions, or single-step requests. For measurable work with a known total, prefer a leading progress bar labeled with what is measured and observed completed/total counts; never invent percentages. Update or clear existing cards as needed."; function isAgentMainSession(params) { if (!params.sessionKey) return true; return canonicalizeMainSessionAlias({ cfg: params.config, agentId: params.agentId, sessionKey: params.sessionKey }) === canonicalizeMainSessionAlias({ cfg: params.config, agentId: params.agentId, sessionKey: resolveAgentMainSessionKey({ cfg: params.config, agentId: params.agentId }) }); } /** * Pairing may change between sessions and embedded attempts because this fragment * sits below the prompt-cache boundary. Codex pins developer instructions at * thread creation, so a mid-session pairing change reaches its next thread. */ async function appendProgressCardSystemPrompt(params) { if (!shouldIncludeProgressCardToolForOpenClawTools({ agentId: params.agentId, agentSessionKey: params.sessionKey, config: params.config, modelId: params.modelId, modelProvider: params.provider, runtimeToolAllowlist: params.toolsAllow }) || isAgentMainSession(params) || !await hasPairedCardRenderer()) return params.extraSystemPrompt; const provider = params.provider.trim().toLowerCase(); const modelId = params.modelId.trim(); const authProfileId = params.authProfileId?.trim(); const modelRef = `${provider}/${modelId}${authProfileId ? `@${authProfileId}` : ""}`; if (resolveUtilityModelRefForAgent({ cfg: params.config ?? {}, agentId: params.agentId, primaryProvider: provider, primaryModelRef: modelRef }) === modelRef) return params.extraSystemPrompt; const existing = params.extraSystemPrompt?.trim(); return existing ? `${existing}\n\n${PROGRESS_CARD_SYSTEM_PROMPT}` : PROGRESS_CARD_SYSTEM_PROMPT; } //#endregion //#region src/agents/embedded-agent-runner/run/attempt-system-prompt-additions.ts /** Prepares host-owned additions before either embedded or plugin harness dispatch. */ async function prepareAttemptSystemPromptAdditions(params) { return { extraSystemPrompt: await appendProgressCardSystemPrompt({ ...params, extraSystemPrompt: appendIncognitoSystemPrompt(params) }), gitCoauthorPrompt: await resolveSessionGitCoauthorPrompt({ config: params.config, agentId: params.agentId, sessionKey: params.sessionKey, sessionId: params.sessionId, storePath: params.storePath }) }; } //#endregion export { admitEmbeddedContextEngine as n, buildEmbeddedRunBlockedResult as r, prepareAttemptSystemPromptAdditions as t };