AI Employee SDK

Types Reference

All TypeScript type exports from @ai-employee-sdk/core.

All types are exported from @ai-employee-sdk/core as type-only exports.

import type { Tier, MembraneConfig, /* ... */ } from '@ai-employee-sdk/core';

Tier System

Tier

type Tier = 'auto' | 'draft' | 'confirm' | 'block';

TierPattern

interface TierPattern {
  /** Glob pattern: 'mcp_*', '*_dangerous', 'exactName' */
  match: string;
  tier: Tier;
  /** Human-readable reason for this pattern */
  description?: string;
}

TierResolution

interface TierResolution {
  tier: Tier;
  source: 'explicit' | 'resolve' | 'pattern' | 'default';
  description?: string;
  /** Index of matched pattern (only when source is 'pattern') */
  patternIndex?: number;
}

Membrane

MembraneConfig<TOOLS>

interface MembraneConfig<TOOLS extends Record<string, any> = Record<string, any>> {
  tools: TOOLS;
  tiers?: {
    auto?: string[];
    draft?: string[];
    confirm?: string[];
    block?: string[];
  };
  resolve?: (toolName: string) => Tier | undefined;
  patterns?: TierPattern[];
  default?: Tier; // Default: 'confirm'
}

MembraneResult<TOOLS>

interface MembraneResult<TOOLS extends Record<string, any> = Record<string, any>> {
  tools: TOOLS;
  prepareStep: PrepareStepFunction;
  onToolCallFinish: (event: {
    toolCall: { toolName: string; args: unknown };
    success?: boolean;
    output?: unknown;
    error?: unknown;
    stepNumber: number;
  }) => void;
  auditLog: AuditEntry[];
}

AuditEntry

interface AuditEntry {
  timestamp: number;
  toolName: string;
  input: unknown;
  output: unknown;
  tier: Tier;
  /** true for BLOCK tier tools */
  blocked?: boolean;
  stepNumber: number;
}

Memory

MemoryStore

interface MemoryStore {
  get<T = unknown>(key: string): Promise<T | null>;
  set<T = unknown>(key: string, value: T, ttlMs?: number): Promise<void>;
  list(prefix?: string): Promise<string[]>;
  delete(key: string): Promise<void>;
}

MemoryPrepareStepConfig

interface MemoryPrepareStepConfig {
  /** Max token budget for memory injection. Default: 2000 */
  maxTokenBudget?: number;
  /** Specific memory keys to inject. Overrides prefix listing. */
  memoryKeys?: string[];
  /** Prefix for memory keys in the store. Default: 'memory:' */
  prefix?: string;
}

Cost Tracking

ModelPricing

interface ModelPricing {
  /** Cost per 1M input tokens in USD */
  inputPerMToken: number;
  /** Cost per 1M output tokens in USD */
  outputPerMToken: number;
  /** Cost per 1M reasoning tokens (o3, etc.) */
  reasoningPerMToken?: number;
  /** Cost per 1M cached input tokens (Anthropic caching) */
  cachedInputPerMToken?: number;
}

CostTrackerConfig

interface CostTrackerConfig {
  /** Maximum budget in USD */
  budget: number;
  /** Pricing per model ID */
  pricing: Record<string, ModelPricing>;
}

CostTrackerResult

interface CostTrackerResult {
  onStepFinish: (event: any) => void;
  stopCondition: (options: { steps: any[] }) => boolean;
  snapshot: () => CostSnapshot;
  reset: () => void;
}

CostSnapshot

interface CostSnapshot {
  totalCostUsd: number;
  remainingUsd: number;
  totalInputTokens: number;
  totalOutputTokens: number;
  totalReasoningTokens: number;
  totalCachedInputTokens: number;
  steps: number;
  byModel: Record<string, {
    inputTokens: number;
    outputTokens: number;
    reasoningTokens: number;
    cachedInputTokens: number;
    costUsd: number;
  }>;
  budgetExhausted: boolean;
}

Stop Conditions

BudgetConfig

interface BudgetConfig {
  maxTokens?: number;
  maxCostUsd?: number;
  costPerInputToken?: number;
  costPerOutputToken?: number;
  pricing?: Record<string, ModelPricing>;
}

VelocityConfig

interface VelocityConfig {
  /** Max average tokens per step */
  maxAvgPerStep: number;
  /** Number of recent steps to consider. Default: all */
  windowSize?: number;
}

Interrupts

PendingApproval

interface PendingApproval {
  toolCallId: string;
  toolName: string;
  args: unknown;
  stepNumber: number;
}

InterruptDecision

interface InterruptDecision {
  toolCallId: string;
  action: 'approve' | 'deny';
  /** Modified args (only for approve) */
  editedArgs?: unknown;
}

InterruptHandle

interface InterruptHandle {
  /** UUID for KV key construction */
  id: string;
  /** ISO timestamp */
  createdAt: string;
  /** Full message history up to interruption */
  messages: any[];
  /** Tool calls awaiting decisions */
  pendingApprovals: PendingApproval[];
  /** All tool calls from the interrupted step */
  interruptedStepToolCalls: Array<{
    toolCallId: string;
    toolName: string;
    args: unknown;
  }>;
  /** Cumulative token usage for budget continuity */
  previousUsage: {
    inputTokens: number;
    outputTokens: number;
    totalTokens: number;
  };
}

Heartbeat

CheckWorkFn

type CheckWorkFn = () => Promise<string | null>;

HeartbeatConfig

interface HeartbeatConfig {
  checkWork: CheckWorkFn;
  state?: MemoryStore;
  /** Default: 5 */
  maxConsecutiveErrors?: number;
  signal?: AbortSignal;
}

HeartbeatResult

interface HeartbeatResult {
  tick: () => Promise<{ prompt: string; response: unknown } | null>;
  isRunning: () => boolean;
}

Audit Logger

AuditLoggerConfig

interface AuditLoggerConfig {
  onToolCall?: (entry: {
    toolName: string;
    input: unknown;
    stepNumber: number;
    timestamp: number;
  }) => void;
  onStep?: (entry: {
    stepNumber: number;
    finishReason: string;
    usage: { inputTokens: number; outputTokens: number; totalTokens: number };
    timestamp: number;
  }) => void;
}

AuditLoggerResult

interface AuditLoggerResult {
  onToolCallStart: (event: any) => void;
  onToolCallFinish: (event: any) => void;
  onStepFinish: (event: any) => void;
}

EmployeeAgent

EmployeeAgentConfig<TOOLS>

interface EmployeeAgentConfig<TOOLS extends Record<string, any> = Record<string, never>> {
  model: LanguageModel;
  instructions?: string;
  id?: string;
  tools?: TOOLS;
  /** Membrane config (tools passed separately via config.tools) */
  membrane?: Omit<MembraneConfig, 'tools'>;
  memory?: {
    store: MemoryStore;
    config?: MemoryPrepareStepConfig;
  };
  prepareStep?: PrepareStepFunction | PrepareStepFunction[];
  stopWhen?: StopCondition | StopCondition[];
  onStepFinish?: (event: any) => void;
  onFinish?: (event: any) => void;
  /** Default: 20 */
  maxSteps?: number;
}

On this page