resonate-basic-debugging-typescript — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited resonate-basic-debugging-typescript (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Use this skill to diagnose Resonate runtime issues in the TypeScript SDK or Resonate Server. Focus on reproducible symptoms, promise state, registration, determinism, and routing.
yield* usage inside durable functions.resonate dev.resonate invoke <promise-id> --func <name> --arg ....resonate tree <promise-id>.resonate promises get <id>.resonate promises search <id>.resonate promises resolve|reject <id>.register name matches invocation name.yield* before awaiting a future.ctx.run.// worker.ts
import { Resonate, type Context } from "@resonatehq/sdk";
const resonate = new Resonate({ url: "http://localhost:8001", group: "worker" });
function* ping(_: Context, name: string) {
return `pong ${name}`;
}
resonate.register("ping", ping);// client.ts
import { Resonate } from "@resonatehq/sdk";
const client = new Resonate({ url: "http://localhost:8001", group: "client" });
const handle = await client.beginRpc(
"ping.1",
"ping",
"Ada",
client.options({ target: "poll://any@worker" })
);
console.log(await handle.result());resonate promises get ping.1
resonate tree ping.1const id = "order/123";
await resonate.run(id, processOrder, "123");
await resonate.run(id, processOrder, "123"); // returns cached result// worker group is "workers"
const client = new Resonate({ url: "http://localhost:8001", group: "client" });
// wrong target
await client.rpc("job.1", "work", "x", client.options({ target: "poll://any@worker" }));
// correct target
await client.rpc("job.2", "work", "x", client.options({ target: "poll://any@workers" }));function* bad(ctx: Context) {
const x = ctx.run(step); // missing yield*
return x;
}function* good(ctx: Context) {
const x = yield* ctx.run(step);
return x;
}function* badRpc(ctx: Context, db: DbConn) {
return yield* ctx.rpc("remote", db); // db is not serializable
}function* goodRpc(ctx: Context, dbId: string) {
return yield* ctx.rpc("remote", dbId);
}Date.now() and Math.random() with ctx.date.now() and ctx.math.random().ctx.run.rpc/beginRpc.poll://any@<group> for load balancing across that group.url and group.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.