UNPKG

@gguf/claw

Version:

WhatsApp gateway CLI (Baileys web) with Pi RPC agent

215 lines (213 loc) 7.65 kB
import { p as defaultRuntime } from "./entry.js"; import "./auth-profiles-CfFGCDJa.js"; import { P as normalizeMainKey } from "./agent-scope-jm0ZdXwM.js"; import "./utils-PmTbZoD1.js"; import "./exec-BIMFe4XS.js"; import "./github-copilot-token-rP-6QdKv.js"; import "./pi-model-discovery-CsRo-xMp.js"; import { r as loadConfig } from "./config-DCT1RAo6.js"; import "./manifest-registry-tuAcHxrV.js"; import "./server-context-CM_E6wD5.js"; import "./errors-DdT2Dtkb.js"; import "./control-service-Ds9ompnU.js"; import "./client-cU7Xg1MO.js"; import "./call-CfqL-4Nc.js"; import "./message-channel-CAFcg7mw.js"; import "./links-jGisPfXW.js"; import { r as normalizeChannelId } from "./plugins-TrKFfrLt.js"; import "./logging-fywhKCmE.js"; import "./accounts-B5QZU96b.js"; import { Hn as requestHeartbeatNow, tn as loadSessionEntry, zn as enqueueSystemEvent } from "./loader-BYWxo-_j.js"; import "./progress-Dn3kWpaL.js"; import "./prompt-style-D5D7b3cX.js"; import "./manager-rDmdE7O9.js"; import "./paths-RvF0P6tQ.js"; import "./sqlite-B_L84oiu.js"; import "./routes-yI5QIzeL.js"; import "./pi-embedded-helpers-DJgCXZEz.js"; import "./deliver-eE21zdeQ.js"; import { g as updateSessionStore } from "./sandbox-Cnq9TXEn.js"; import "./channel-summary-BkqO8zZ9.js"; import "./wsl-DASmek7h.js"; import "./skills-DtwGIkTI.js"; import "./image-CXg7Z0WD.js"; import "./redact-CDPAzwi8.js"; import "./tool-display-BMYWrp0L.js"; import "./restart-sentinel-DywisDen.js"; import "./channel-selection-BAwiO0li.js"; import "./commands-DMKDOFmC.js"; import "./pairing-store-DMex6WWe.js"; import "./login-qr-sEcxw1_U.js"; import "./pairing-labels-C6I3dD-m.js"; import "./deps-wXkiMwLZ.js"; import { t as formatForLog } from "./ws-log-C4IerKk4.js"; import { t as agentCommand } from "./agent-BBI-UGkN.js"; import { randomUUID } from "node:crypto"; //#region src/gateway/server-node-events.ts const handleNodeEvent = async (ctx, nodeId, evt) => { switch (evt.event) { case "voice.transcript": { if (!evt.payloadJSON) return; let payload; try { payload = JSON.parse(evt.payloadJSON); } catch { return; } const obj = typeof payload === "object" && payload !== null ? payload : {}; const text = typeof obj.text === "string" ? obj.text.trim() : ""; if (!text) return; if (text.length > 2e4) return; const sessionKeyRaw = typeof obj.sessionKey === "string" ? obj.sessionKey.trim() : ""; const rawMainKey = normalizeMainKey(loadConfig().session?.mainKey); const sessionKey = sessionKeyRaw.length > 0 ? sessionKeyRaw : rawMainKey; const { storePath, entry, canonicalKey } = loadSessionEntry(sessionKey); const now = Date.now(); const sessionId = entry?.sessionId ?? randomUUID(); if (storePath) await updateSessionStore(storePath, (store) => { store[canonicalKey] = { sessionId, updatedAt: now, thinkingLevel: entry?.thinkingLevel, verboseLevel: entry?.verboseLevel, reasoningLevel: entry?.reasoningLevel, systemSent: entry?.systemSent, sendPolicy: entry?.sendPolicy, lastChannel: entry?.lastChannel, lastTo: entry?.lastTo }; }); ctx.addChatRun(sessionId, { sessionKey, clientRunId: `voice-${randomUUID()}` }); agentCommand({ message: text, sessionId, sessionKey, thinking: "low", deliver: false, messageChannel: "node" }, defaultRuntime, ctx.deps).catch((err) => { ctx.logGateway.warn(`agent failed node=${nodeId}: ${formatForLog(err)}`); }); return; } case "agent.request": { if (!evt.payloadJSON) return; let link = null; try { link = JSON.parse(evt.payloadJSON); } catch { return; } const message = (link?.message ?? "").trim(); if (!message) return; if (message.length > 2e4) return; const channel = normalizeChannelId(typeof link?.channel === "string" ? link.channel.trim() : "") ?? void 0; const to = typeof link?.to === "string" && link.to.trim() ? link.to.trim() : void 0; const deliver = Boolean(link?.deliver) && Boolean(channel); const sessionKeyRaw = (link?.sessionKey ?? "").trim(); const sessionKey = sessionKeyRaw.length > 0 ? sessionKeyRaw : `node-${nodeId}`; const { storePath, entry, canonicalKey } = loadSessionEntry(sessionKey); const now = Date.now(); const sessionId = entry?.sessionId ?? randomUUID(); if (storePath) await updateSessionStore(storePath, (store) => { store[canonicalKey] = { sessionId, updatedAt: now, thinkingLevel: entry?.thinkingLevel, verboseLevel: entry?.verboseLevel, reasoningLevel: entry?.reasoningLevel, systemSent: entry?.systemSent, sendPolicy: entry?.sendPolicy, lastChannel: entry?.lastChannel, lastTo: entry?.lastTo }; }); agentCommand({ message, sessionId, sessionKey, thinking: link?.thinking ?? void 0, deliver, to, channel, timeout: typeof link?.timeoutSeconds === "number" ? link.timeoutSeconds.toString() : void 0, messageChannel: "node" }, defaultRuntime, ctx.deps).catch((err) => { ctx.logGateway.warn(`agent failed node=${nodeId}: ${formatForLog(err)}`); }); return; } case "chat.subscribe": { if (!evt.payloadJSON) return; let payload; try { payload = JSON.parse(evt.payloadJSON); } catch { return; } const obj = typeof payload === "object" && payload !== null ? payload : {}; const sessionKey = typeof obj.sessionKey === "string" ? obj.sessionKey.trim() : ""; if (!sessionKey) return; ctx.nodeSubscribe(nodeId, sessionKey); return; } case "chat.unsubscribe": { if (!evt.payloadJSON) return; let payload; try { payload = JSON.parse(evt.payloadJSON); } catch { return; } const obj = typeof payload === "object" && payload !== null ? payload : {}; const sessionKey = typeof obj.sessionKey === "string" ? obj.sessionKey.trim() : ""; if (!sessionKey) return; ctx.nodeUnsubscribe(nodeId, sessionKey); return; } case "exec.started": case "exec.finished": case "exec.denied": { if (!evt.payloadJSON) return; let payload; try { payload = JSON.parse(evt.payloadJSON); } catch { return; } const obj = typeof payload === "object" && payload !== null ? payload : {}; const sessionKey = typeof obj.sessionKey === "string" ? obj.sessionKey.trim() : `node-${nodeId}`; if (!sessionKey) return; const runId = typeof obj.runId === "string" ? obj.runId.trim() : ""; const command = typeof obj.command === "string" ? obj.command.trim() : ""; const exitCode = typeof obj.exitCode === "number" && Number.isFinite(obj.exitCode) ? obj.exitCode : void 0; const timedOut = obj.timedOut === true; const output = typeof obj.output === "string" ? obj.output.trim() : ""; const reason = typeof obj.reason === "string" ? obj.reason.trim() : ""; let text = ""; if (evt.event === "exec.started") { text = `Exec started (node=${nodeId}${runId ? ` id=${runId}` : ""})`; if (command) text += `: ${command}`; } else if (evt.event === "exec.finished") { const exitLabel = timedOut ? "timeout" : `code ${exitCode ?? "?"}`; text = `Exec finished (node=${nodeId}${runId ? ` id=${runId}` : ""}, ${exitLabel})`; if (output) text += `\n${output}`; } else { text = `Exec denied (node=${nodeId}${runId ? ` id=${runId}` : ""}${reason ? `, ${reason}` : ""})`; if (command) text += `: ${command}`; } enqueueSystemEvent(text, { sessionKey, contextKey: runId ? `exec:${runId}` : "exec" }); requestHeartbeatNow({ reason: "exec-event" }); return; } default: return; } }; //#endregion export { handleNodeEvent };