@truealter/sdk 0.2.4 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -406,6 +406,24 @@ interface MCPClientOptions {
406
406
  clientInfo?: MCPClientInfo;
407
407
  /** Optional x402 client for automatic premium tool payment. */
408
408
  x402?: X402Client;
409
+ /**
410
+ * Q5c per-invocation signing. When present, every `tools/call` is
411
+ * ES256-signed and submitted with the `Mcp-Invocation-Signature`
412
+ * header. The public half of `privateKey` MUST have been
413
+ * registered via `POST /api/v1/agents/keys` against the same API
414
+ * key configured here. Required whenever `apiKey` is set and the
415
+ * server is in production / staging (hard-required from
416
+ * 2026-04-20).
417
+ */
418
+ signing?: MCPSigningOptions;
419
+ }
420
+ interface MCPSigningOptions {
421
+ /** The signing-key id pre-registered with the server. */
422
+ kid: string;
423
+ /** ES256 P-256 private key: 32-byte scalar or PEM. */
424
+ privateKey: Uint8Array | string;
425
+ /** The caller's bound ~handle. */
426
+ handle: string;
409
427
  }
410
428
  interface MCPCallOptions {
411
429
  /** Override the configured x402 client for this single call. */
@@ -454,6 +472,7 @@ declare class MCPClient {
454
472
  private readonly maxRetries;
455
473
  private readonly clientInfo;
456
474
  private readonly x402?;
475
+ private readonly signing?;
457
476
  private requestCounter;
458
477
  private initialised;
459
478
  constructor(opts?: MCPClientOptions);
@@ -476,6 +495,12 @@ declare class MCPClient {
476
495
  */
477
496
  rpc(method: string, params: Record<string, unknown> | unknown[] | undefined): Promise<unknown>;
478
497
  private buildHeaders;
498
+ /**
499
+ * Produce the `Mcp-Invocation-Signature` header for a `tools/call`
500
+ * payload, when signing is configured. Returns `undefined` when no
501
+ * signing key is attached or the method is not `tools/call`.
502
+ */
503
+ private buildSignatureHeader;
479
504
  private extractPaymentEnvelope;
480
505
  private guessToolName;
481
506
  private backoff;
@@ -1272,6 +1297,76 @@ declare class AlterClient {
1272
1297
  fetchPublicKeys(): Promise<unknown>;
1273
1298
  }
1274
1299
 
1300
+ /**
1301
+ * Stable stringify mirroring Python's
1302
+ * `json.dumps(obj, sort_keys=True, separators=(",", ":"), ensure_ascii=False)`.
1303
+ *
1304
+ * Rules:
1305
+ * - object keys are sorted ascending by codepoint
1306
+ * - no whitespace
1307
+ * - `ensure_ascii=False` — non-ASCII characters pass through verbatim
1308
+ * (not re-encoded as \\uXXXX). UTF-8 encoding happens at the byte
1309
+ * layer before hashing.
1310
+ *
1311
+ * This is RFC-8785 adjacent; it is NOT a full JCS implementation
1312
+ * (numeric canonicalisation is delegated to the caller).
1313
+ */
1314
+ declare function canonicalStringify(value: unknown): string;
1315
+ /**
1316
+ * Hex SHA-256 of the canonical JSON encoding of `toolArgs`. Matches
1317
+ * `canonical_args_sha256` in the server-side verifier.
1318
+ */
1319
+ declare function canonicalArgsSha256(toolArgs: Record<string, unknown>): string;
1320
+ /**
1321
+ * Load an ES256 P-256 private key.
1322
+ *
1323
+ * Accepts:
1324
+ * - a 32-byte `Uint8Array` containing the raw d-scalar
1325
+ * - a PEM string (PKCS#8 or SEC1). Node's `crypto.createPrivateKey`
1326
+ * is used when available to parse the PEM; on non-Node runtimes
1327
+ * only the raw-bytes form is supported.
1328
+ */
1329
+ declare function loadPrivateKey(key: Uint8Array | string): Uint8Array;
1330
+ interface InvocationClaims {
1331
+ /** Tool name — must equal the `tools/call` `params.name`. */
1332
+ tool: string;
1333
+ /** Hex SHA-256 of canonical-JSON `tool_args`. */
1334
+ args_sha256: string;
1335
+ /** Random string, at least ~16 bytes of entropy (base64url). */
1336
+ nonce: string;
1337
+ /** Epoch seconds. Server accepts ±60s skew. */
1338
+ iat: number;
1339
+ /** The caller's bound ~handle. */
1340
+ iss: string;
1341
+ }
1342
+ interface SignInvocationOptions {
1343
+ /** The signing-key id pre-registered on the server. */
1344
+ kid: string;
1345
+ /** P-256 private key (32-byte Uint8Array or PEM string). */
1346
+ privateKey: Uint8Array | string;
1347
+ /** The caller's bound ~handle. */
1348
+ handle: string;
1349
+ /** Override nonce (tests). Defaults to 24 random bytes base64url. */
1350
+ nonce?: string;
1351
+ /** Override iat (tests). Defaults to now. */
1352
+ iatSeconds?: number;
1353
+ }
1354
+ /**
1355
+ * Produce the `Mcp-Invocation-Signature` header value for a single
1356
+ * `tools/call`. The returned string is a compact JWS:
1357
+ * `base64url(header) . base64url(payload) . base64url(signature)`
1358
+ *
1359
+ * Usage:
1360
+ *
1361
+ * ```ts
1362
+ * const header = signInvocation("get_profile", { candidate_id: "abc" }, {
1363
+ * kid, privateKey, handle: "~tester",
1364
+ * });
1365
+ * fetch(url, { headers: { "Mcp-Invocation-Signature": header } });
1366
+ * ```
1367
+ */
1368
+ declare function signInvocation(toolName: string, toolArgs: Record<string, unknown>, options: SignInvocationOptions): string;
1369
+
1275
1370
  interface McpServerConfig {
1276
1371
  url: string;
1277
1372
  transport: 'streamable-http';
@@ -1316,25 +1411,202 @@ declare function generateClaudeConfig(opts?: GenerateMcpConfigOptions): GenericM
1316
1411
  declare function generateCursorConfig(opts?: GenerateMcpConfigOptions): GenericMcpConfig;
1317
1412
 
1318
1413
  /**
1319
- * @truealter/sdk ALTER Identity SDK
1414
+ * Claude Desktop MCP config helper.
1415
+ *
1416
+ * Claude Desktop speaks stdio only — it does not currently dial
1417
+ * Streamable-HTTP MCP servers directly. The canonical bridge is our
1418
+ * own `alter-mcp-bridge` binary, which is published alongside this CLI
1419
+ * in the same npm package. Desktop hosts then spawn the bridge as a
1420
+ * child process and read JSON-RPC over stdin/stdout.
1421
+ *
1422
+ * Config file path varies by platform and is resolved in
1423
+ * `src/wire/paths.ts`. This adapter only produces the config *shape*.
1424
+ */
1425
+ interface ClaudeDesktopServerConfig {
1426
+ command: string;
1427
+ args?: string[];
1428
+ env?: Record<string, string>;
1429
+ description?: string;
1430
+ }
1431
+ interface ClaudeDesktopConfig {
1432
+ mcpServers: Record<string, ClaudeDesktopServerConfig>;
1433
+ }
1434
+ interface GenerateClaudeDesktopOptions {
1435
+ /** Override the MCP endpoint the bridge dials. Defaults to DEFAULT_ENDPOINT. */
1436
+ endpoint?: string;
1437
+ /** Optional API key passed via `ALTER_API_KEY` env so it never lands in argv. */
1438
+ apiKey?: string;
1439
+ /** Identifier used by Claude Desktop for this server. Default: `alter`. */
1440
+ serverName?: string;
1441
+ /** Override the bridge command (e.g. `npx alter-mcp-bridge`). Default: bare `alter-mcp-bridge`. */
1442
+ bridgeCommand?: string;
1443
+ /** Extra args appended after the default bridge args. */
1444
+ extraArgs?: string[];
1445
+ }
1446
+ declare function generateClaudeDesktopConfig(opts?: GenerateClaudeDesktopOptions): ClaudeDesktopConfig;
1447
+
1448
+ type ClientId = 'claude-code' | 'cursor' | 'claude-desktop' | 'vscode';
1449
+ interface ClientPaths {
1450
+ id: ClientId;
1451
+ /** Human-readable label. */
1452
+ label: string;
1453
+ /** The config file the wire step will mutate (or null if the client uses a CLI-only handoff). */
1454
+ configPath: string | null;
1455
+ /** A sibling directory whose presence counts as "the client is installed on this box". */
1456
+ probeDir: string;
1457
+ /** The `mcpServers`-shaped root key under which our entry is written. Defaults to `mcpServers`. */
1458
+ rootKey: string;
1459
+ }
1460
+ declare const CLAUDE_CODE: ClientPaths;
1461
+ declare const CURSOR: ClientPaths;
1462
+ declare const CLAUDE_DESKTOP: ClientPaths;
1463
+ declare const VSCODE: ClientPaths;
1464
+ declare const ALL_CLIENTS: readonly ClientPaths[];
1465
+
1466
+ /**
1467
+ * Detect which MCP-aware clients are installed on this machine.
1468
+ *
1469
+ * Probe signals, per client:
1470
+ * - claude-code : `claude` binary resolvable on PATH (spawn `--version`)
1471
+ * - cursor : `~/.cursor/` directory exists
1472
+ * - claude-desktop: platform config directory exists
1473
+ * - vscode : VS Code user data directory exists
1474
+ *
1475
+ * The probe is deliberately permissive — "the config directory exists"
1476
+ * means either the app is installed or was recently installed. Wire
1477
+ * will still refuse if the config file ends up on a synced volume.
1478
+ */
1479
+
1480
+ interface ProbeResult {
1481
+ client: ClientPaths;
1482
+ installed: boolean;
1483
+ /** Only present for claude-code — records `claude --version` output when resolvable. */
1484
+ version?: string;
1485
+ /** Diagnostic trail — why we said installed/not. */
1486
+ reason: string;
1487
+ }
1488
+ declare function probeClaudeCode(): ProbeResult;
1489
+ declare function probeByDir(id: ClientId): ProbeResult;
1490
+ declare function probeAll(): ProbeResult[];
1491
+
1492
+ /**
1493
+ * `wire-state.json` provenance artefact.
1320
1494
  *
1321
- * Query the continuous identity field from any JavaScript/TypeScript
1322
- * environment. Wraps the 32 tools exposed at
1323
- * `https://mcp.truealter.com/api/v1/mcp` (24 free L0 + 8 premium L1–L5).
1324
- * Write tools (`submit_*`, `attest_domain`, `dispute_attestation`,
1325
- * `create_identity_stub`) and alter-to-alter messaging tools are not
1326
- * advertised to public callers — they re-enable as the consent
1327
- * architecture and per-peer grant model land. First-class TypeScript
1328
- * types, x402 micropayment support, and ES256 provenance verification.
1495
+ * Written to `$XDG_CONFIG_HOME/alter/wire-state.json` after every wire
1496
+ * run. Holds everything `unwire` needs to reverse the operation without
1497
+ * guessing, plus enough metadata (SDK version, timestamps, SHAs pre and
1498
+ * post) to make the operation auditable.
1329
1499
  *
1330
- * The ALTER endpoint discovery anchor is `truealter.com` see
1331
- * `discover()` for the cascade. The default MCP wire endpoint is
1332
- * `https://mcp.truealter.com/api/v1/mcp`; the bare host
1333
- * `https://mcp.truealter.com` is the branded discovery surface and
1334
- * returns `405 Method Not Allowed` for JSON-RPC POSTs.
1500
+ * Append-only semantics: a new wire run rewrites this file in full.
1501
+ * Prior state is not retained — the backup siblings on disk are the
1502
+ * canonical rollback surface, not this file.
1335
1503
  */
1336
1504
 
1505
+ declare const WIRE_STATE_VERSION = 1;
1506
+ type WireTargetStatus = 'written' | 'already-wired' | 'skipped' | 'failed';
1507
+ interface WireTargetFile {
1508
+ client: ClientId;
1509
+ method: 'file';
1510
+ status: WireTargetStatus;
1511
+ path: string;
1512
+ backupPath: string | null;
1513
+ rootKey: string;
1514
+ serverName: string;
1515
+ preSha256: string | null;
1516
+ postSha256: string;
1517
+ reason?: string;
1518
+ }
1519
+ interface WireTargetCli {
1520
+ client: ClientId;
1521
+ method: 'cli';
1522
+ status: WireTargetStatus;
1523
+ command: string;
1524
+ stdout?: string;
1525
+ stderr?: string;
1526
+ reason?: string;
1527
+ }
1528
+ type WireTarget = WireTargetFile | WireTargetCli;
1529
+ interface WireState {
1530
+ version: typeof WIRE_STATE_VERSION;
1531
+ sdkVersion: string;
1532
+ writtenAt: string;
1533
+ endpoint: string;
1534
+ targets: WireTarget[];
1535
+ }
1536
+ declare function readWireState(): WireState | null;
1537
+ declare function writeWireState(state: WireState): void;
1538
+
1539
+ /**
1540
+ * Refuse to wire any client whose config sits on a synced volume.
1541
+ *
1542
+ * Writing MCP config under iCloud / OneDrive / Dropbox / Google Drive
1543
+ * silently propagates the same `mcpServers.alter` entry (and API key
1544
+ * headers) to every other device the user syncs. That is a consent
1545
+ * violation — wire consent is per-device.
1546
+ *
1547
+ * The check is a prefix match against the resolved absolute path; it
1548
+ * is deliberately broader than strictly necessary so that users who
1549
+ * symlink their home directory into a synced volume (a known Mac
1550
+ * pattern) are also caught.
1551
+ */
1552
+ interface SyncedVolumeHit {
1553
+ refused: true;
1554
+ matchedPrefix: string;
1555
+ resolvedPath: string;
1556
+ }
1557
+ /**
1558
+ * Returns a hit record if the resolved path lives under a known synced
1559
+ * volume, null otherwise. Normalises path separators so the check is
1560
+ * Windows-safe without hardcoding `\`.
1561
+ */
1562
+ declare function detectSyncedVolume(path: string): SyncedVolumeHit | null;
1563
+
1564
+ declare function sha256(bytes: string | Buffer): string;
1565
+
1566
+ /**
1567
+ * Public `wire` / `unwire` entry points.
1568
+ *
1569
+ * `wire()` probes for installed MCP clients, merges the ALTER entry
1570
+ * into each client's config (via atomic JSON merge or CLI handoff),
1571
+ * writes a `wire-state.json` provenance artefact, and returns a
1572
+ * structured report. `unwire()` reads that artefact and reverses
1573
+ * every target.
1574
+ *
1575
+ * Synchronous throughout — the CLI path is sequential and the
1576
+ * deterministic ordering is worth the tiny blocking cost.
1577
+ */
1578
+
1579
+ interface WireOptions {
1580
+ /** Override the endpoint written into every client config. Defaults to DEFAULT_ENDPOINT. */
1581
+ endpoint?: string;
1582
+ /** Optional API key written into `headers['X-ALTER-API-Key']` for each target. */
1583
+ apiKey?: string;
1584
+ /** Restrict to a subset of client ids. Default: every detected client. */
1585
+ only?: readonly ClientId[];
1586
+ /** Skip any client whose probe said "not installed" even if the caller passed it via `only`. */
1587
+ skipMissing?: boolean;
1588
+ }
1589
+ interface WireReport {
1590
+ state: WireState;
1591
+ probes: ProbeResult[];
1592
+ }
1593
+ declare function wire(opts?: WireOptions): WireReport;
1594
+ interface UnwireReport {
1595
+ state: WireState | null;
1596
+ undone: Array<{
1597
+ client: ClientId;
1598
+ action: 'restored' | 'removed' | 'cli-removed' | 'skipped' | 'failed';
1599
+ reason?: string;
1600
+ }>;
1601
+ }
1602
+ declare function unwire(): UnwireReport;
1603
+
1604
+ /**
1605
+ * Package metadata — kept in a standalone module so deep imports from
1606
+ * `src/wire/` can reference version constants without creating a
1607
+ * circular dependency through `src/index.ts`.
1608
+ */
1337
1609
  declare const SDK_NAME = "@truealter/sdk";
1338
- declare const SDK_VERSION = "0.2.4";
1610
+ declare const SDK_VERSION = "0.3.0";
1339
1611
 
1340
- export { AlterAuthError, AlterClient, type AlterClientOptions, AlterDiscoveryError, AlterError, type AlterErrorCode, AlterInvalidResponse, AlterNetworkError, AlterPaymentRequired, AlterProvenanceError, AlterRateLimited, type AlterResolveHandleInput, type AlterResolveHandleOutput, AlterTimeoutError, AlterToolError, type ApiKeyConfig, type Archetype, type AssessTraitsInput, type AssessTraitsOutput, type BeginGoldenThreadInput, type BeginGoldenThreadOutput, type CheckAssessmentStatusInput, type CheckAssessmentStatusOutput, type CheckGoldenThreadInput, type CheckGoldenThreadOutput, type CompleteKnotInput, type CompleteKnotOutput, type ComputeBelongingInput, type ComputeBelongingOutput, DEFAULT_DOMAIN, DEFAULT_ENDPOINT, DEFAULT_VERIFY_AT_ALLOWLIST, type DiscoveryOptions, type DiscoveryResult, type Ed25519Keypair, type EngagementLevel, FREE_TOOL_NAMES, type GenerateMatchNarrativeInput, type GenerateMatchNarrativeOutput, type GetAgentPortfolioInput, type GetAgentPortfolioOutput, type GetAgentTrustTierInput, type GetAgentTrustTierOutput, type GetCompetenciesInput, type GetCompetenciesOutput, type GetEarningSummaryInput, type GetEarningSummaryOutput, type GetEngagementLevelInput, type GetEngagementLevelOutput, type GetFullTraitVectorInput, type GetFullTraitVectorOutput, type GetIdentityEarningsInput, type GetIdentityEarningsOutput, type GetIdentityTrustScoreInput, type GetIdentityTrustScoreOutput, type GetMatchRecommendationsInput, type GetMatchRecommendationsOutput, type GetNetworkStatsInput, type GetNetworkStatsOutput, type GetPrivacyBudgetInput, type GetPrivacyBudgetOutput, type GetProfileInput, type GetProfileOutput, type GetSideQuestGraphInput, type GetSideQuestGraphOutput, type GetTraitSnapshotInput, type GetTraitSnapshotOutput, type GoldenThreadStatusInput, type GoldenThreadStatusOutput, type HelloAgentInput, type HelloAgentOutput, type InitiateAssessmentInput, type InitiateAssessmentOutput, type JsonWebKey, type JwksDocument, type ListArchetypesInput, type ListArchetypesOutput, type MCPCallOptions, type MCPCallToolResult, MCPClient, type MCPClientInfo, type MCPClientOptions, type MCPContentBlock, type MCPListToolsResult, type MCPMeta, type MCPResponse, type MCPToolDefinition, MCP_PROTOCOL_VERSION, type MatchTier, type McpServerConfig, PREMIUM_TOOL_NAMES, type PaymentEnvelope, type ProvenanceEnvelope, type ProvenancePayload, type ProvenanceToken, type ProvenanceVerification, type QueryGraphSimilarityInput, type QueryGraphSimilarityOutput, type QueryMatchesInput, type QueryMatchesOutput, type RecommendToolInput, type RecommendToolOutput, SDK_NAME, SDK_VERSION, type SearchIdentitiesInput, type SearchIdentitiesOutput, type SignedToolDefinition, TOOL_BLAST_RADIUS, TOOL_COSTS, TOOL_TIERS, type ThreadCensusInput, type ThreadCensusOutput, type ToolInputs, type ToolName, type ToolOutputs, type ToolSignatureMap, type VerifyIdentityInput, type VerifyIdentityOutput, type VerifyProvenanceOptions, X402Client, type X402ClientOptions, type X402Settlement, type X402Signer, base64urlDecode, base64urlEncode, clearDiscoveryCache, decodeDid, discover, encodeDid, fetchPublicKeys, generateClaudeConfig, generateCursorConfig, generateGenericMcpConfig, generateKeypair, keypairFromPrivateKey, parsePaymentHeader, resolveVerifyAt, sign, verify, verifyProvenance, verifyToolSignatures };
1612
+ export { ALL_CLIENTS, AlterAuthError, AlterClient, type AlterClientOptions, AlterDiscoveryError, AlterError, type AlterErrorCode, AlterInvalidResponse, AlterNetworkError, AlterPaymentRequired, AlterProvenanceError, AlterRateLimited, type AlterResolveHandleInput, type AlterResolveHandleOutput, AlterTimeoutError, AlterToolError, type ApiKeyConfig, type Archetype, type AssessTraitsInput, type AssessTraitsOutput, type BeginGoldenThreadInput, type BeginGoldenThreadOutput, CLAUDE_CODE, CLAUDE_DESKTOP, CURSOR, type CheckAssessmentStatusInput, type CheckAssessmentStatusOutput, type CheckGoldenThreadInput, type CheckGoldenThreadOutput, type ClaudeDesktopConfig, type ClaudeDesktopServerConfig, type ClientId, type ClientPaths, type CompleteKnotInput, type CompleteKnotOutput, type ComputeBelongingInput, type ComputeBelongingOutput, DEFAULT_DOMAIN, DEFAULT_ENDPOINT, DEFAULT_VERIFY_AT_ALLOWLIST, type DiscoveryOptions, type DiscoveryResult, type Ed25519Keypair, type EngagementLevel, FREE_TOOL_NAMES, type GenerateClaudeDesktopOptions, type GenerateMatchNarrativeInput, type GenerateMatchNarrativeOutput, type GetAgentPortfolioInput, type GetAgentPortfolioOutput, type GetAgentTrustTierInput, type GetAgentTrustTierOutput, type GetCompetenciesInput, type GetCompetenciesOutput, type GetEarningSummaryInput, type GetEarningSummaryOutput, type GetEngagementLevelInput, type GetEngagementLevelOutput, type GetFullTraitVectorInput, type GetFullTraitVectorOutput, type GetIdentityEarningsInput, type GetIdentityEarningsOutput, type GetIdentityTrustScoreInput, type GetIdentityTrustScoreOutput, type GetMatchRecommendationsInput, type GetMatchRecommendationsOutput, type GetNetworkStatsInput, type GetNetworkStatsOutput, type GetPrivacyBudgetInput, type GetPrivacyBudgetOutput, type GetProfileInput, type GetProfileOutput, type GetSideQuestGraphInput, type GetSideQuestGraphOutput, type GetTraitSnapshotInput, type GetTraitSnapshotOutput, type GoldenThreadStatusInput, type GoldenThreadStatusOutput, type HelloAgentInput, type HelloAgentOutput, type InitiateAssessmentInput, type InitiateAssessmentOutput, type InvocationClaims, type JsonWebKey, type JwksDocument, type ListArchetypesInput, type ListArchetypesOutput, type MCPCallOptions, type MCPCallToolResult, MCPClient, type MCPClientInfo, type MCPClientOptions, type MCPContentBlock, type MCPListToolsResult, type MCPMeta, type MCPResponse, type MCPSigningOptions, type MCPToolDefinition, MCP_PROTOCOL_VERSION, type MatchTier, type McpServerConfig, PREMIUM_TOOL_NAMES, type PaymentEnvelope, type ProbeResult, type ProvenanceEnvelope, type ProvenancePayload, type ProvenanceToken, type ProvenanceVerification, type QueryGraphSimilarityInput, type QueryGraphSimilarityOutput, type QueryMatchesInput, type QueryMatchesOutput, type RecommendToolInput, type RecommendToolOutput, SDK_NAME, SDK_VERSION, type SearchIdentitiesInput, type SearchIdentitiesOutput, type SignInvocationOptions, type SignedToolDefinition, TOOL_BLAST_RADIUS, TOOL_COSTS, TOOL_TIERS, type ThreadCensusInput, type ThreadCensusOutput, type ToolInputs, type ToolName, type ToolOutputs, type ToolSignatureMap, type UnwireReport, VSCODE, type VerifyIdentityInput, type VerifyIdentityOutput, type VerifyProvenanceOptions, type WireOptions, type WireReport, type WireState, type WireTarget, type WireTargetCli, type WireTargetFile, X402Client, type X402ClientOptions, type X402Settlement, type X402Signer, base64urlDecode, base64urlEncode, canonicalArgsSha256, canonicalStringify, clearDiscoveryCache, decodeDid, detectSyncedVolume, discover, encodeDid, fetchPublicKeys, generateClaudeConfig, generateClaudeDesktopConfig, generateCursorConfig, generateGenericMcpConfig, generateKeypair, keypairFromPrivateKey, loadPrivateKey, parsePaymentHeader, probeAll, probeByDir, probeClaudeCode, readWireState, resolveVerifyAt, sha256, sign, signInvocation, unwire, verify, verifyProvenance, verifyToolSignatures, wire, writeWireState };