UNPKG

@phren/cli

Version:

Knowledge layer for AI agents - CLI, MCP server, and data layer

33 lines (32 loc) • 1.69 kB
import { BridgeError, objects } from "./protocol.js"; import { hookPeers, peerRequest } from "./peers.js"; import { ownerInboxSchema } from "./owner-inbox.js"; import { isLocalComputer } from "./dispatch-hosts.js"; /** Aggregate each Hook's own inbox once, without recursively listing peers. * inboxComputer identifies the Hook to send a resolution to; computer on a * dispatch row names the worker and can be a different computer. */ export async function ownerInboxView(inbox, input, localOnly = false) { const data = ownerInboxSchema.parse(input); const { computer, ...local } = data; const peers = await hookPeers().catch(() => []); if (computer && computer !== "local" && !isLocalComputer(computer)) { const peer = peers.find(peer => peer.name === computer); if (!peer) throw new BridgeError(404, "That inbox computer is not linked."); return peerRequest(peer, "/v1/owner-inbox", local); } const result = await inbox.run(local); if (data.action !== "list" || localOnly) return result; const items = objects(result.items).map(item => ({ ...item, inboxComputer: "local" })), unreachable = []; await Promise.all(peers.map(async (peer) => { try { const view = await peerRequest(peer, `/v1/owner-inbox?local=1${data.includeResolved ? "&includeResolved=true" : ""}`); items.push(...objects(view.items).map(item => ({ ...item, inboxComputer: peer.name }))); } catch (error) { unreachable.push({ computer: peer.name, error: error instanceof Error ? error.message : "Unreachable." }); } })); return { ok: true, items, unreachable }; }