sandbox-agent/factory/packages/backend/tmp-decode-actors.mjs
Nathan Flurry d2346bafb3
Configure lefthook formatter checks (#231)
* Add lefthook formatter checks

* Fix SDK mode hydration

* Stabilize SDK mode integration test
2026-03-10 23:03:11 -07:00

78 lines
2.7 KiB
JavaScript

import { Database } from "bun:sqlite";
import { TO_CLIENT_VERSIONED, decodeWorkflowHistoryTransport } from "rivetkit/inspector";
const targets = [
{ actorId: "2e443238457137bf", handoffId: "7df7656e-bbd2-4b8c-bf0f-30d4df2f619a" },
{ actorId: "0e53dd77ef06862f", handoffId: "0e01a31c-2dc1-4a1d-8ab0-9f0816359a85" },
{ actorId: "ea8c0e764c836e5f", handoffId: "cdc22436-4020-4f73-b3e7-7782fec29ae4" },
];
function decodeAscii(u8) {
return new TextDecoder().decode(u8).replace(/[\x00-\x1F\x7F-\xFF]/g, ".");
}
function locationToNames(entry, names) {
return entry.location.map((seg) => {
if (seg.tag === "WorkflowNameIndex") return names[seg.val] ?? `#${seg.val}`;
if (seg.tag === "WorkflowLoopIterationMarker") return `iter(${seg.val.iteration})`;
return seg.tag;
});
}
for (const t of targets) {
const db = new Database(`/root/.local/share/openhandoff/rivetkit/databases/${t.actorId}.db`, { readonly: true });
const token = new TextDecoder().decode(db.query("SELECT value FROM kv WHERE hex(key)=?").get("03").value);
await new Promise((resolve, reject) => {
const ws = new WebSocket(`ws://127.0.0.1:7750/gateway/${t.actorId}/inspector/connect`, [`rivet_inspector_token.${token}`]);
ws.binaryType = "arraybuffer";
const to = setTimeout(() => reject(new Error("timeout")), 15000);
ws.onmessage = (ev) => {
const data = ev.data instanceof ArrayBuffer ? new Uint8Array(ev.data) : new Uint8Array(ev.data.buffer);
const msg = TO_CLIENT_VERSIONED.deserializeWithEmbeddedVersion(data);
if (msg.body.tag !== "Init") return;
const wh = decodeWorkflowHistoryTransport(msg.body.val.workflowHistory);
const entryMetadata = wh.entryMetadata;
const enriched = wh.entries.map((e) => {
const meta = entryMetadata.get(e.id);
return {
id: e.id,
path: locationToNames(e, wh.nameRegistry).join("/"),
kind: e.kind.tag,
status: meta?.status ?? null,
error: meta?.error ?? null,
attempts: meta?.attempts ?? null,
entryError: e.kind.tag === "WorkflowStepEntry" ? (e.kind.val.error ?? null) : null,
};
});
const wfStateRow = db.query("SELECT value FROM kv WHERE hex(key)=?").get("0715041501");
const wfState = wfStateRow?.value ? decodeAscii(new Uint8Array(wfStateRow.value)) : null;
console.log(
JSON.stringify(
{
handoffId: t.handoffId,
actorId: t.actorId,
wfState,
names: wh.nameRegistry,
entries: enriched,
},
null,
2,
),
);
clearTimeout(to);
ws.close();
resolve();
};
ws.onerror = (err) => {
clearTimeout(to);
reject(err);
};
});
}