UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

68 lines (67 loc) 4.11 kB
import { c as normalizeOptionalString } from "./string-coerce-mnp54Vah.js"; import { a as normalizeChannelId, t as getChannelPlugin } from "./registry-MkxNn1Ue.js"; import "./plugins-t2ejWcVy.js"; import { H as subagentRuns, _ as countPendingDescendantRunsFromRuns, t as getSubagentRunsSnapshotForRead } from "./subagent-registry-state-2yU6fwXx.js"; import { n as getSessionBindingService } from "./session-binding-service-cfUL2BWM.js"; import { a as sortSubagentRuns, t as formatRunLabel } from "./subagents-utils-BD_5s6t0.js"; import { d as resolveCommandSurfaceChannel, l as stopWithText, u as resolveChannelAccountId } from "./shared-jeYHliLc.js"; //#region src/auto-reply/reply/commands-subagents/action-agents.ts function formatConversationBindingText(params) { return `binding:${params.conversationId}`; } function supportsConversationBindings(channel) { const channelId = normalizeChannelId(channel); if (!channelId) return false; return getChannelPlugin(channelId)?.conversationBindings?.supportsCurrentConversationBinding === true; } function handleSubagentsAgentsAction(ctx) { const { params, requesterKey, runs } = ctx; const runsSnapshot = getSubagentRunsSnapshotForRead(subagentRuns); const channel = resolveCommandSurfaceChannel(params); const accountId = resolveChannelAccountId(params); const currentConversationBindingsSupported = supportsConversationBindings(channel); const bindingService = getSessionBindingService(); const bindingsBySession = /* @__PURE__ */ new Map(); const resolveSessionBindings = (sessionKey) => { const cached = bindingsBySession.get(sessionKey); if (cached) return cached; const resolved = bindingService.listBySession(sessionKey).filter((entry) => entry.status === "active" && entry.conversation.channel === channel && entry.conversation.accountId === accountId); bindingsBySession.set(sessionKey, resolved); return resolved; }; const dedupedRuns = []; const seenChildSessionKeys = /* @__PURE__ */ new Set(); for (const entry of sortSubagentRuns(runs)) { if (seenChildSessionKeys.has(entry.childSessionKey)) continue; seenChildSessionKeys.add(entry.childSessionKey); dedupedRuns.push(entry); } const recentCutoff = Date.now() - 30 * 6e4; const numericOrder = [...dedupedRuns.filter((entry) => !entry.endedAt || countPendingDescendantRunsFromRuns(runsSnapshot, entry.childSessionKey) > 0), ...dedupedRuns.filter((entry) => entry.endedAt && countPendingDescendantRunsFromRuns(runsSnapshot, entry.childSessionKey) === 0 && entry.endedAt >= recentCutoff)]; const indexByChildSessionKey = new Map(numericOrder.map((entry, idx) => [entry.childSessionKey, idx + 1])); const visibleRuns = []; for (const entry of dedupedRuns) { if (!(!entry.endedAt || countPendingDescendantRunsFromRuns(runsSnapshot, entry.childSessionKey) > 0 || resolveSessionBindings(entry.childSessionKey).length > 0)) continue; visibleRuns.push(entry); } const lines = ["agents:", "-----"]; if (visibleRuns.length === 0) lines.push("(none)"); else for (const entry of visibleRuns) { const binding = resolveSessionBindings(entry.childSessionKey)[0]; const bindingText = binding ? formatConversationBindingText({ conversationId: binding.conversation.conversationId }) : currentConversationBindingsSupported ? "unbound" : "bindings unavailable"; const resolvedIndex = indexByChildSessionKey.get(entry.childSessionKey); const prefix = resolvedIndex ? `${resolvedIndex}.` : "-"; lines.push(`${prefix} ${formatRunLabel(entry)} (${bindingText})`); } const requesterBindings = resolveSessionBindings(requesterKey).filter((entry) => entry.targetKind === "session"); if (requesterBindings.length > 0) { lines.push("", "acp/session bindings:", "-----"); for (const binding of requesterBindings) { const label = normalizeOptionalString(binding.metadata?.label) ?? binding.targetSessionKey; lines.push(`- ${label} (${formatConversationBindingText({ conversationId: binding.conversation.conversationId })}, session:${binding.targetSessionKey})`); } } return stopWithText(lines.join("\n")); } //#endregion export { handleSubagentsAgentsAction };