























@@ -1,4 +1,3 @@
1-import { truncateUtf16Safe } from "../../../utils.js";
21import {
32OPENCLAW_NEXT_TURN_RUNTIME_CONTEXT_HEADER,
43OPENCLAW_RUNTIME_CONTEXT_CUSTOM_TYPE,
@@ -9,7 +8,6 @@ import type { CurrentTurnPromptContext } from "./params.js";
98export { OPENCLAW_RUNTIME_CONTEXT_CUSTOM_TYPE };
1091110const OPENCLAW_RUNTIME_EVENT_USER_PROMPT = "Continue the OpenClaw runtime event.";
12-const MAX_CURRENT_TURN_CONTEXT_STRING_CHARS = 2_000;
13111412type RuntimeContextSession = {
1513sendCustomMessage: (
@@ -30,85 +28,10 @@ type RuntimeContextPromptParts = {
3028runtimeSystemContext?: string;
3129};
323033-function neutralizeMarkdownFences(value: string): string {
34-return value.replaceAll("```", "`\u200b``");
35-}
36-37-function truncateCurrentTurnContextString(value: string): string {
38-if (value.length <= MAX_CURRENT_TURN_CONTEXT_STRING_CHARS) {
39-return value;
40-}
41-return `${truncateUtf16Safe(value, Math.max(0, MAX_CURRENT_TURN_CONTEXT_STRING_CHARS - 14)).trimEnd()}…[truncated]`;
42-}
43-44-function sanitizeCurrentTurnContextString(value: string): string {
45-return neutralizeMarkdownFences(truncateCurrentTurnContextString(value.replaceAll("\0", "")));
46-}
47-48-export function buildCurrentTurnPromptContextSuffix(
31+export function buildCurrentTurnPromptContextPrefix(
4932context: CurrentTurnPromptContext | undefined,
5033): string {
51-const replyChain = context?.replyChain?.filter(
52-(entry) =>
53-entry.body?.trim() ||
54-entry.mediaType?.trim() ||
55-entry.mediaPath?.trim() ||
56-entry.mediaRef?.trim(),
57-);
58-if (replyChain && replyChain.length > 0) {
59-const payload = replyChain.map((entry) => ({
60-message_id: entry.messageId ? sanitizeCurrentTurnContextString(entry.messageId) : undefined,
61-thread_id: entry.threadId ? sanitizeCurrentTurnContextString(entry.threadId) : undefined,
62-sender: entry.sender ? sanitizeCurrentTurnContextString(entry.sender) : undefined,
63-sender_id: entry.senderId ? sanitizeCurrentTurnContextString(entry.senderId) : undefined,
64-sender_username: entry.senderUsername
65- ? sanitizeCurrentTurnContextString(entry.senderUsername)
66- : undefined,
67-timestamp: entry.timestamp,
68-body: entry.body ? sanitizeCurrentTurnContextString(entry.body) : undefined,
69-is_quote: entry.isQuote === true ? true : undefined,
70-media_type: entry.mediaType ? sanitizeCurrentTurnContextString(entry.mediaType) : undefined,
71-media_path: entry.mediaPath ? sanitizeCurrentTurnContextString(entry.mediaPath) : undefined,
72-media_ref: entry.mediaRef ? sanitizeCurrentTurnContextString(entry.mediaRef) : undefined,
73-reply_to_id: entry.replyToId ? sanitizeCurrentTurnContextString(entry.replyToId) : undefined,
74-forwarded_from: entry.forwardedFrom
75- ? sanitizeCurrentTurnContextString(entry.forwardedFrom)
76- : undefined,
77-forwarded_from_id: entry.forwardedFromId
78- ? sanitizeCurrentTurnContextString(entry.forwardedFromId)
79- : undefined,
80-forwarded_from_username: entry.forwardedFromUsername
81- ? sanitizeCurrentTurnContextString(entry.forwardedFromUsername)
82- : undefined,
83-forwarded_date: entry.forwardedDate,
84-}));
85-return [
86-"",
87-"Reply chain of current user message (untrusted, nearest first):",
88-"```json",
89-JSON.stringify(payload, null, 2),
90-"```",
91-].join("\n");
92-}
93-const reply = context?.reply;
94-const replyBody = reply?.body?.trim();
95-if (!reply || !replyBody) {
96-return "";
97-}
98-const payload = {
99-sender_label: reply.senderLabel
100- ? sanitizeCurrentTurnContextString(reply.senderLabel)
101- : undefined,
102-is_quote: reply.isQuote === true ? true : undefined,
103-body: sanitizeCurrentTurnContextString(replyBody),
104-};
105-return [
106-"",
107-"Reply target of current user message (untrusted, for context):",
108-"```json",
109-JSON.stringify(payload, null, 2),
110-"```",
111-].join("\n");
34+return context?.text.trim() ?? "";
11235}
1133611437function removeLastPromptOccurrence(text: string, prompt: string): string | null {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。