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)); // 15000Generated 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