@stratl.ai/sdk
v0.1.0
Published
Stratl SDK: record AI decisions as Stratl Record Format (SRF) evidence
Maintainers
Readme
@stratl.ai/sdk (TypeScript SDK)
Record AI decisions as Stratl Record Format (SRF) evidence, from Node 20+ or the browser.
npm install @stratl.ai/sdkimport { Client, decision } from "@stratl.ai/sdk";
const client = new Client(); // reads STRATL_API_URL, STRATL_API_KEY and STRATL_SPOOL_DIR
const { record, submitted } = await decision("claims-triage", ["claim", "8843"], async (d) => {
await d.input(claim);
await d.model("anthropic", "claude-sonnet-5", prompt, response);
await d.tool("providers.lookup", args, result);
await d.approval({ required: true, approver: "[email protected]", authority: "medical_director", decision: "approved" });
await d.action("claim.deny", { target: "claim/8843", result: "executed" });
await d.outcome({ adverse: true, category: "claim_denial" });
}, client);
console.log(record.decision_id, submitted?.status); // "recorded", or "spooled" if the API was unreachableWhatever you pass to input, retrieval, model, tool, approval({ comment }) or
action({ params }) is fingerprinted on your side: strings as UTF-8, Uint8Array as it is,
everything else as RFC 8785 canonical JSON. The record carries only the sha256: fingerprints.
The client uploads the exact bytes it hashed to the custody store (only the ones the store does
not already hold), so a fingerprint alone can fetch the original later and be re-hashed against
the record. The Python SDK uses the same rules, so both produce the same fingerprint for the same
content. Pass new Client({ storeArtifacts: false }) to send fingerprints only.
Under Node, a record that cannot be sent (network failure, 5xx, 429) is spooled to
.stratl-spool/ and submit resolves with status: "spooled" instead of throwing; call
client.flushSpool() later. A record the API refuses (4xx) is reported as failed and not
retried. In the browser there is no spool.
src/srf.ts is the TypeScript implementation of SRF types, canonicalisation and hashing. It is
conformance-tested against spec/fixtures alongside the Python and Go implementations.
