openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
144 lines (143 loc) • 6.61 kB
JavaScript
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 };