@gguf/claw
Version:
WhatsApp gateway CLI (Baileys web) with Pi RPC agent
216 lines (214 loc) • 7.68 kB
JavaScript
import { p as defaultRuntime } from "./entry.js";
import "./auth-profiles-CYBuGiBb.js";
import { l as normalizeMainKey } from "./session-key-CZkcvAtx.js";
import "./utils-DX85MiPR.js";
import "./exec-B8JKbXKW.js";
import "./agent-scope-C9VjJXEK.js";
import "./github-copilot-token-SLWintYd.js";
import "./pi-model-discovery-DzEIEgHL.js";
import { i as loadConfig } from "./config-CKLedg5Y.js";
import "./manifest-registry-C69Z-I4v.js";
import "./server-context-yKyxyxOJ.js";
import "./errors-CZ9opC6L.js";
import "./control-service-D2E9NKqQ.js";
import "./client-CxbkcEZ7.js";
import "./call-90HgQQ8o.js";
import "./message-channel-BlgPSDAh.js";
import "./links-D0uzJbi6.js";
import { r as normalizeChannelId } from "./plugins-BUPpq5aS.js";
import "./logging-CfEk_PnX.js";
import "./accounts-Dto4p9zB.js";
import { Wn as enqueueSystemEvent, qn as requestHeartbeatNow, tn as loadSessionEntry } from "./loader-_Pj-TZS2.js";
import "./progress-Da1ehW-x.js";
import "./prompt-style-Dc0C5HC9.js";
import "./manager-BXiIQku7.js";
import "./paths-CTg8F3AE.js";
import "./sqlite-DqUEZnjO.js";
import "./routes-BSfXf8a5.js";
import "./pi-embedded-helpers-DF8SAHU-.js";
import "./deliver-Cau4HL7W.js";
import { g as updateSessionStore } from "./sandbox-DuqLKN5J.js";
import "./channel-summary-D9nzC5WB.js";
import "./wsl-ATjkMwMA.js";
import "./skills-CmU0Q92f.js";
import "./image-nRwqkmtf.js";
import "./redact-B8YiFlwn.js";
import "./tool-display-DmgKs6-V.js";
import "./channel-selection-PZuuCvrp.js";
import "./session-cost-usage-BTXosU1k.js";
import "./commands-DAC7XMAT.js";
import "./pairing-store-DTfv_FGA.js";
import "./login-qr-Cmsf7BGt.js";
import "./pairing-labels-BbydDT7w.js";
import "./deps-ytXmI88x.js";
import { t as formatForLog } from "./ws-log-DJIXahf0.js";
import { t as agentCommand } from "./agent-DztWhVCH.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 };