SDKs

SDKs · TypeScript

Utilities

Agent and bundle references, JSON bytes helpers, errors, constants, and proto types.

Agent references

parseAgentRef(string)

TypeScript
import { parseAgentRef, formatAgentRef } from "@phrony/sdk";

const ref = parseAgentRef("default/my-agent@0.2.0");
// { namespace: "default", name: "my-agent", version: "0.2.0" }

formatAgentRef(ref); // "default/my-agent@0.2.0"

formatAgentRef(ref)

TypeScript
import { formatAgentRef } from "@phrony/sdk";

formatAgentRef({
  namespace: "default",
  name: "my-agent",
  version: "0.2.0",
}); // "default/my-agent@0.2.0"

Bundle references

parseBundleRef(string)

Version may be semver or a lock hash (sha256:…).

TypeScript
import { parseBundleRef, formatBundleRef } from "@phrony/sdk";

const semver = parseBundleRef("demo/payment-desk@1.0.0");
// { namespace: "demo", name: "payment-desk", version: "1.0.0" }

const lockHash = parseBundleRef("demo/payment-desk@sha256:abc…");
formatBundleRef(lockHash); // "demo/payment-desk@sha256:abc…"

formatBundleRef(ref)

TypeScript
import { formatBundleRef } from "@phrony/sdk";

formatBundleRef({
  namespace: "demo",
  name: "payment-desk",
  version: "1.0.0",
}); // "demo/payment-desk@1.0.0"

parseBundleRefVersionRequired(string)

Same as parseBundleRef but rejects empty @version — use for deployBundle.

TypeScript
import { parseBundleRefVersionRequired } from "@phrony/sdk";

// Deploy flows require an explicit @version (semver or lock hash)
const ref = parseBundleRefVersionRequired("demo/payment-desk@sha256:abc…");

JSON bytes

jsonBytes / parseJsonBytes / jsonBytesMap

Encode and decode proto bytes fields that carry UTF-8 JSON.

TypeScript
import { jsonBytes, parseJsonBytes, jsonBytesMap } from "@phrony/sdk";

const input = jsonBytes({ claimId: "CLM-48219" });
const parsed = parseJsonBytes<{ claimId: string }>(input);
const secrets = jsonBytesMap({ openai: process.env.OPENAI_API_KEY });

Errors

PhronyRuntimeError

TypeScript
import { PhronyRuntimeError } from "@phrony/sdk";

try {
  await client.getVersion();
} catch (err) {
  if (err instanceof PhronyRuntimeError) {
    console.error(err.grpcCode, err.action, err.details);
  }
}

wrapRpcError(action, err)

TypeScript
import { wrapRpcError } from "@phrony/sdk";

try {
  await someGrpcCall();
} catch (err) {
  throw wrapRpcError("my action", err);
}

AgentSessionError

TypeScript
import { Phrony, AgentSessionError } from "@phrony/sdk";

try {
  const phrony = await Phrony.connect();
  await phrony.agent("default/my-agent").run({ input: {} });
} catch (err) {
  if (err instanceof AgentSessionError) {
    console.error(err.sessionId, err.message);
  }
}

AgentRefParseError

TypeScript
import { parseAgentRef, AgentRefParseError } from "@phrony/sdk";

try {
  parseAgentRef("my-agent"); // missing namespace/
} catch (err) {
  if (err instanceof AgentRefParseError) console.error(err.message);
}

BundleRefParseError

TypeScript
import { parseBundleRef, BundleRefParseError } from "@phrony/sdk";

try {
  parseBundleRef("payment-desk"); // missing namespace/
} catch (err) {
  if (err instanceof BundleRefParseError) console.error(err.message);
}

ToolError

TypeScript
import { ToolError } from "@phrony/sdk/worker";

handler: async () => {
  throw new ToolError("UPSTREAM_TIMEOUT", "Weather API timed out");
}

Constants and helpers

SDK_VERSION, DEFAULT_MAX_CONCURRENCY, handlerKey, heartbeatIntervalMs

TypeScript
import {
  SDK_VERSION,
  DEFAULT_MAX_CONCURRENCY,
  handlerKey,
  heartbeatIntervalMs,
} from "@phrony/sdk";

console.log(SDK_VERSION);
console.log(handlerKey("weather.get-forecast", "1.0.0")); // weather.get-forecast@1.0.0
console.log(heartbeatIntervalMs(30_000)); // 15000

Generated types

Import proto message types from @phrony/sdk when building requests for RuntimeClient unary methods.

Type imports

TypeScript
import type {
  AgentRef,
  BundleRef,
  BundleSummary,
  BundleVersionSummary,
  DeployBundleRequest,
  PublishBundleRequest,
  PublishRequest,
  RunSessionRequest,
  WorkClientMsg,
} from "@phrony/sdk";

const agentRun: RunSessionRequest = {
  agentRef: { namespace: "default", name: "my-agent", version: "" },
  input: Buffer.alloc(0),
  resolvedSecrets: {},
};

const bundleRun: RunSessionRequest = {
  bundleRef: { namespace: "demo", name: "payment-desk", version: "" },
  input: Buffer.alloc(0),
  resolvedSecrets: {},
};

Commonly used types

AgentRef, BundleRef, Approval, ApprovalDecision, PublishRequest, PublishBundleRequest, DeployRequest, DeployBundleRequest, BundleSummary, BundleVersionSummary, RunSessionRequest, WorkClientMsg, RunSessionInteractiveClientMsg