openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
49 lines (48 loc) • 2.7 kB
JavaScript
import { a as readPublishedXAllowlist, r as normalizeXUserId } from "./allowlist-ZXKTf1Qk.mjs";
import { t as getXRuntime } from "./runtime-DJewOfvF.mjs";
//#region extensions/x/src/guest-tools.ts
const X_GUEST_TOOLS = [
"read",
"ls",
"sessions_spawn",
"sessions_yield",
"subagents"
];
//#endregion
//#region extensions/x/src/guest-policy.ts
function supportsXGuestHelpers(runtime = getXRuntime()) {
return runtime.capabilities?.includes("sender-restricted-hidden-helpers-v1") === true;
}
function resolveXGuestSettings(account) {
return {
enabled: account.config.guests?.enabled === true,
maxMentionsPerAuthorPerDay: account.config.guests?.maxMentionsPerAuthorPerDay ?? 5,
threadContextMaxPosts: account.config.guests?.threadContextMaxPosts ?? 10
};
}
function resolveXSenderTier(account, senderId) {
const id = senderId && normalizeXUserId(senderId);
const allowed = [...account.config.allowFrom ?? [], ...readPublishedXAllowlist(getXRuntime(), account.accountId, account.config.verifiedFromGitHub)];
return id && allowed.some((entry) => normalizeXUserId(entry) === id) ? "maintainer" : "guest";
}
function resolveXGuestToolPolicy(account) {
const configured = account.config.guests?.tools;
const helpersAvailable = supportsXGuestHelpers();
const allow = X_GUEST_TOOLS.filter((name) => (helpersAvailable || name === "read" || name === "ls") && (!configured?.allow || configured.allow.includes(name)));
return allow.length ? {
allow,
deny: ["skills_read", ...configured?.deny ?? []]
} : { deny: ["*"] };
}
function formatXSenderLine(tier, authorId, user, github) {
const inline = (text) => text.replace(/[\p{Cc}\p{Cf}\p{Zl}\p{Zp}]/gu, " ").trim();
const label = [user?.username ? `@${inline(user.username)}` : "", user?.name ? `(${inline(user.name)})` : ""].filter(Boolean).join(" ");
const sender = `${label ? `${label}, ` : ""}X user id ${authorId}`;
if (tier === "maintainer") {
if (github) return `This is from a verified user: ${sender}, GitHub @${inline(github.entry.githubLogin)} with write access to ${inline(github.repo)}.`;
return `This is from a verified user: ${sender}, on the maintainer allowlist.`;
}
return `This is from a guest: ${sender}. Guest tier: answer from the OpenClaw repo only; ${supportsXGuestHelpers() ? "hidden helpers must use the same agent and repository. You cannot open visible work sessions" : "this host supports read-only guest answers. You cannot start helpers or work sessions"}, write, run commands, or read unrelated sessions for guests.`;
}
//#endregion
export { supportsXGuestHelpers as a, resolveXSenderTier as i, resolveXGuestSettings as n, X_GUEST_TOOLS as o, resolveXGuestToolPolicy as r, formatXSenderLine as t };