mirror of
http://192.168.0.88:13333/lywsvip/openclaw-zero-token.git
synced 2026-05-13 20:45:47 +08:00
Major upgrade from e26988a38 to upstream v2026.3.28 (f9b107928).
Key changes:
- Upstream src/, ui/, extensions/ (89 bundled extensions)
- Zero-token web providers preserved in src/zero-token/
- AskOnce plugin restored and registered as CLI command
- Added missing packages: @anthropic-ai/vertex-sdk, @modelcontextprotocol/sdk
- Fixed tsconfig rootDir, skipLibCheck for plugin-sdk DTS build
- Added askonce to bundled plugin metadata and package.json exports
- Fixed AskOnce CLI command registration (missing commands metadata)
- Restored AskOnce adapter imports (correct 5-level relative paths)
- Removed stale migration artifacts from root directory
46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
import { wrapExternalContent } from "./external-content.js";
|
|
|
|
const DEFAULT_MAX_CHARS = 800;
|
|
const DEFAULT_MAX_ENTRY_CHARS = 400;
|
|
|
|
function normalizeEntry(entry: string): string {
|
|
return entry.replace(/\s+/g, " ").trim();
|
|
}
|
|
|
|
function truncateText(value: string, maxChars: number): string {
|
|
if (maxChars <= 0) {
|
|
return "";
|
|
}
|
|
if (value.length <= maxChars) {
|
|
return value;
|
|
}
|
|
const trimmed = value.slice(0, Math.max(0, maxChars - 3)).trimEnd();
|
|
return `${trimmed}...`;
|
|
}
|
|
|
|
export function buildUntrustedChannelMetadata(params: {
|
|
source: string;
|
|
label: string;
|
|
entries: Array<string | null | undefined>;
|
|
maxChars?: number;
|
|
}): string | undefined {
|
|
const cleaned = params.entries
|
|
.map((entry) => (typeof entry === "string" ? normalizeEntry(entry) : ""))
|
|
.filter((entry) => Boolean(entry))
|
|
.map((entry) => truncateText(entry, DEFAULT_MAX_ENTRY_CHARS));
|
|
const deduped = cleaned.filter((entry, index, list) => list.indexOf(entry) === index);
|
|
if (deduped.length === 0) {
|
|
return undefined;
|
|
}
|
|
|
|
const body = deduped.join("\n");
|
|
const header = `UNTRUSTED channel metadata (${params.source})`;
|
|
const labeled = `${params.label}:\n${body}`;
|
|
const truncated = truncateText(`${header}\n${labeled}`, params.maxChars ?? DEFAULT_MAX_CHARS);
|
|
|
|
return wrapExternalContent(truncated, {
|
|
source: "channel_metadata",
|
|
includeWarning: false,
|
|
});
|
|
}
|