Back to Docs

TypeScript SDK

Full TypeScript client with streaming, typed errors, automatic retries, and complete type definitions.

Installation
npm install @myconsilium/sdk
yarn add @myconsilium/sdkpnpm add @myconsilium/sdk
Client Configuration
import { ConsiliumClient } from "@myconsilium/sdk";

const client = new ConsiliumClient({
  apiUrl: "http://localhost:4000/api/v1",  // default
  apiKey: "your-api-key",
  timeout: 120000,     // ms (default: 120s)
  maxRetries: 2,       // retry attempts (default: 2)
  retryDelay: 1000,    // ms base delay (default: 1s)
});

Methods

MethodReturns
healthCheck()Promise<HealthStatus>
deliberate(options)Promise<DeliberationResult>
redTeam(options)Promise<RedTeamReport>
blindEval(options)Promise<EvaluationResult>
estimateCost(options)Promise<CostEstimate>
streamDeliberation(options)AsyncIterable<Event>

Types

TypeDefinition
DeliberationMode'quick' | 'council' | 'deep' | 'blind' | 'redteam' | 'jury' | 'market' | 'auto' | 'prediction-market' | 'adversarial' | 'delphi'
DeliberationResult{ goldenPrompt, dissentReport, cost, auditTrail[], votes, confidenceScores }
RedTeamReport{ attacks[], defenses[], judgments[], overallScore, vulnerabilityCount }
EvaluationResult{ rankings[], scores, method }
CostEstimate{ estimatedCost, breakdown[{ model, role, estimatedCost }], rounds, mode }
DeliberationEvent{ event, agentId?, chunk?, round?, model?, content?, message?, data? }

Error Classes

ClassStatusDescription
ConsiliumErroranyBase error class. Has message and optional statusCode.
AuthenticationError401Invalid or missing API key / auth token.
TimeoutError408Request exceeded configured timeout.
ServerError500+Server-side error. Automatically retried.
RateLimitError429Rate limit exceeded. Includes retry_after header.
Full Example
import { ConsiliumClient } from "@myconsilium/sdk";

const client = new ConsiliumClient({
  apiUrl: "http://localhost:4000/api/v1",
  apiKey: "your-api-key",
});

// 1. Health check
const health = await client.healthCheck();
console.log(`Status: ${health.status}`);

// 2. Estimate cost
const estimate = await client.estimateCost({
  topic: "Should we migrate from REST to GraphQL?",
  mode: "council",
  models: ["claude-sonnet-4-6", "gpt-5.4", "gemini-3-flash-preview"],
});
console.log(`Estimated: $${estimate.estimatedCost.toFixed(4)}`);

// 3. Run deliberation
const result = await client.deliberate({
  topic: "Should we migrate from REST to GraphQL?",
  mode: "council",
  models: ["claude-sonnet-4-6", "gpt-5.4", "gemini-3-flash-preview"],
  maxRounds: 3,
});
console.log(result.goldenPrompt);
console.log(`Cost: $${result.cost.toFixed(4)}`);

// 4. Red team
const redTeam = await client.redTeam({
  topic: "Review this auth middleware for vulnerabilities",
  models: ["claude-sonnet-4-6", "gpt-5.4"],
});
console.log(`Vulnerabilities: ${redTeam.vulnerabilityCount}`);

// 5. Stream events
for await (const event of client.streamDeliberation({
  topic: "Is Kubernetes overkill for our startup?",
  mode: "jury",
  models: ["claude-sonnet-4-6", "gpt-5.4", "gemini-3-flash-preview"],
})) {
  switch (event.event) {
    case "agent:chunk":
      process.stdout.write(event.chunk ?? "");
      break;
    case "phase:voting":
      console.log("\nVoting phase started");
      break;
    case "convergence:detected":
      console.log("\nConsensus reached!");
      break;
    case "dissent:report":
      console.log(`\nDissent: ${JSON.stringify(event.data)}`);
      break;
  }
}
Error Handling Example
import {
  ConsiliumClient,
  AuthenticationError,
  RateLimitError,
  TimeoutError,
} from "@myconsilium/sdk";

try {
  const result = await client.deliberate({ ... });
} catch (error) {
  if (error instanceof AuthenticationError) {
    console.error("Invalid API key. Check your config.");
  } else if (error instanceof RateLimitError) {
    console.error(`Rate limited. Retry after ${error.retryAfter}s`);
  } else if (error instanceof TimeoutError) {
    console.error("Request timed out. Try a simpler mode.");
  } else {
    throw error;
  }
}