{"version":3,"sources":["../src/schemas.ts","../src/wasm/index.ts","../src/wasm/loader.ts","../src/models.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Edgework SDK Zod Schemas\n *\n * Runtime validation schemas for SDK types.\n */\n\nimport { z } from 'zod';\n\n// Model architecture enum\nexport const ModelArchitectureSchema = z.enum([\n  'llama',\n  'mistral',\n  'qwen',\n  'smollm',\n  'phi',\n]);\n\n// Quantization type enum\nexport const QuantizationTypeSchema = z.enum([\n  'f32',\n  'f16',\n  'q8_0',\n  'q4_k',\n  'q4_0',\n  'q4_1',\n]);\n\n// Model metadata\nexport const ModelMetaSchema = z.object({\n  id: z.string(),\n  name: z.string(),\n  architecture: ModelArchitectureSchema,\n  version: z.string(),\n  vocabSize: z.number().int().positive(),\n  hiddenDim: z.number().int().positive(),\n  numLayers: z.number().int().positive(),\n  numHeads: z.number().int().positive(),\n  numKvHeads: z.number().int().positive().optional(),\n  intermediateDim: z.number().int().positive().optional(),\n  maxSeqLength: z.number().int().positive(),\n  ropeTheta: z.number().positive().optional(),\n  createdAt: z.string().datetime(),\n});\n\n// Tensor chunk\nexport const TensorChunkSchema = z.object({\n  id: z.string(),\n  modelId: z.string(),\n  tensorName: z.string(),\n  layerIndex: z.number().int().nullable(),\n  chunkIndex: z.number().int().nonnegative(),\n  totalChunks: z.number().int().positive(),\n  dtype: QuantizationTypeSchema,\n  shape: z.array(z.number().int().positive()),\n  offset: z.number().int().nonnegative(),\n  data: z.instanceof(ArrayBuffer),\n  hash: z.string(),\n});\n\n// Tokenizer data\nexport const TokenizerDataSchema = z.object({\n  modelId: z.string(),\n  vocab: z.instanceof(ArrayBuffer),\n  merges: z.instanceof(ArrayBuffer).optional(),\n  specialTokens: z.record(z.string(), z.number()),\n  chatTemplate: z.string().optional(),\n});\n\n// Sync progress\nexport const SyncProgressSchema = z.object({\n  modelId: z.string(),\n  tensorName: z.string(),\n  chunksDownloaded: z.number().int().nonnegative(),\n  totalChunks: z.number().int().positive(),\n  lastSync: z.string().datetime().optional(),\n});\n\n// Adapter type enum\nexport const AdapterTypeSchema = z.enum([\n  'reward_head',\n  'style_adapter',\n  'lora',\n]);\n\n// User adapter\nexport const UserAdapterSchema = z.object({\n  id: z.string(),\n  modelId: z.string(),\n  userId: z.string(),\n  adapterType: AdapterTypeSchema,\n  weights: z.instanceof(ArrayBuffer),\n  trainingExamples: z.number().int().nonnegative(),\n  lastUpdated: z.string().datetime(),\n});\n\n// Training log entry\nexport const TrainingLogEntrySchema = z.object({\n  id: z.number().int(),\n  adapterId: z.string(),\n  messageHash: z.string(),\n  feedback: z.number().min(-1).max(1),\n  createdAt: z.string().datetime(),\n});\n\n// Download status enum\nexport const DownloadStatusSchema = z.enum([\n  'downloading',\n  'verifying',\n  'ready',\n  'error',\n]);\n\n// Download progress\nexport const DownloadProgressSchema = z.object({\n  modelId: z.string(),\n  percent: z.number().min(0).max(100),\n  bytesDownloaded: z.number().int().nonnegative(),\n  totalBytes: z.number().int().positive(),\n  currentLayer: z.string().optional(),\n  layersComplete: z.number().int().nonnegative(),\n  totalLayers: z.number().int().positive(),\n  status: DownloadStatusSchema,\n  error: z.string().optional(),\n});\n\n// Storage backend enum\nexport const StorageBackendSchema = z.enum(['opfs', 'indexeddb', 'memory']);\n\n// Inference backend enum\nexport const InferenceBackendSchema = z.enum([\n  'webgpu',\n  'webnn',\n  'wasm',\n  'cpu',\n]);\n\n// Edgework options\nexport const EdgeworkOptionsSchema = z.object({\n  model: z.string(),\n  syncUrl: z.string().url().optional(),\n  onProgress: z\n    .function()\n    .args(DownloadProgressSchema)\n    .returns(z.void())\n    .optional(),\n  enableRLHF: z.boolean().optional().default(false),\n  communityParticipation: z.boolean().optional().default(false),\n  federatedSyncUrl: z.string().url().optional(),\n  trainingBatchSize: z.number().int().positive().optional().default(16),\n  trainingIdleFlushMs: z.number().int().positive().optional().default(45000),\n  cacheDir: z.string().optional(),\n  userId: z.string().optional(),\n  storageBackend: StorageBackendSchema.optional(),\n  inferenceBackend: InferenceBackendSchema.optional(),\n});\n\n// Generation options\nexport const GenerateOptionsSchema = z.object({\n  maxTokens: z.number().int().positive().max(4096).optional().default(256),\n  temperature: z.number().min(0).max(2).optional().default(0.7),\n  topP: z.number().min(0).max(1).optional().default(0.9),\n  topK: z.number().int().positive().optional().default(40),\n  stopSequences: z.array(z.string()).optional(),\n  stream: z.boolean().optional().default(false),\n});\n\n// Generation result\nexport const GenerateResultSchema = z.object({\n  text: z.string(),\n  tokens: z.array(z.number().int()),\n  tokenCount: z.number().int().nonnegative(),\n  durationMs: z.number().nonnegative(),\n  tokensPerSecond: z.number().nonnegative(),\n});\n\n// Chat message role enum\nexport const ChatRoleSchema = z.enum(['system', 'user', 'assistant']);\n\n// Chat message\nexport const ChatMessageSchema = z.object({\n  role: ChatRoleSchema,\n  content: z.string(),\n});\n\n// Chat messages array\nexport const ChatMessagesSchema = z.array(ChatMessageSchema);\n\n// RLHF feedback\nexport const RLHFFeedbackSchema = z.object({\n  messageHash: z.string(),\n  feedback: z.number().min(-1).max(1),\n  hiddenState: z.instanceof(Float32Array).optional(),\n});\n\n// Model status enum\nexport const ModelStatusSchema = z.enum([\n  'not_downloaded',\n  'downloading',\n  'ready',\n  'offline',\n  'error',\n]);\n\n// Engine info\nexport const EngineInfoSchema = z.object({\n  modelId: z.string(),\n  status: ModelStatusSchema,\n  backend: InferenceBackendSchema,\n  storageBackend: StorageBackendSchema,\n  progress: DownloadProgressSchema.optional(),\n  config: ModelMetaSchema,\n});\n\n// Layer weights\nexport const LayerWeightsSchema = z.object({\n  layerIndex: z.number().int().nonnegative(),\n  attnQ: z.instanceof(Float32Array),\n  attnK: z.instanceof(Float32Array),\n  attnV: z.instanceof(Float32Array),\n  attnOut: z.instanceof(Float32Array),\n  attnNorm: z.instanceof(Float32Array),\n  ffnGate: z.instanceof(Float32Array),\n  ffnUp: z.instanceof(Float32Array),\n  ffnDown: z.instanceof(Float32Array),\n  ffnNorm: z.instanceof(Float32Array),\n});\n\n// KV cache\nexport const KVCacheSchema = z.object({\n  keys: z.array(z.instanceof(Float32Array)),\n  values: z.array(z.instanceof(Float32Array)),\n  position: z.number().int().nonnegative(),\n  maxLength: z.number().int().positive(),\n});\n\n// Model config for known models\nexport const CogModelConfigSchema = z.object({\n  id: z.literal('cog-360m'),\n  name: z.literal('Cog'),\n  architecture: z.literal('smollm'),\n  version: z.string(),\n  vocabSize: z.literal(49152),\n  hiddenDim: z.literal(960),\n  numLayers: z.literal(32),\n  numHeads: z.literal(15),\n  numKvHeads: z.literal(5),\n  intermediateDim: z.literal(2560),\n  maxSeqLength: z.literal(2048),\n  ropeTheta: z.literal(10000),\n});\n\nexport const CyranoModelConfigSchema = z.object({\n  id: z.literal('cyrano-360m'),\n  name: z.literal('Cyrano'),\n  architecture: z.literal('smollm'),\n  version: z.string(),\n  vocabSize: z.literal(49152),\n  hiddenDim: z.literal(960),\n  numLayers: z.literal(32),\n  numHeads: z.literal(15),\n  numKvHeads: z.literal(5),\n  intermediateDim: z.literal(2560),\n  maxSeqLength: z.literal(2048),\n  ropeTheta: z.literal(10000),\n});\n\n// Type exports inferred from schemas\nexport type ModelArchitecture = z.infer<typeof ModelArchitectureSchema>;\nexport type QuantizationType = z.infer<typeof QuantizationTypeSchema>;\nexport type ModelMeta = z.infer<typeof ModelMetaSchema>;\nexport type TensorChunk = z.infer<typeof TensorChunkSchema>;\nexport type TokenizerData = z.infer<typeof TokenizerDataSchema>;\nexport type SyncProgress = z.infer<typeof SyncProgressSchema>;\nexport type AdapterType = z.infer<typeof AdapterTypeSchema>;\nexport type UserAdapter = z.infer<typeof UserAdapterSchema>;\nexport type TrainingLogEntry = z.infer<typeof TrainingLogEntrySchema>;\nexport type DownloadStatus = z.infer<typeof DownloadStatusSchema>;\nexport type DownloadProgress = z.infer<typeof DownloadProgressSchema>;\nexport type StorageBackend = z.infer<typeof StorageBackendSchema>;\nexport type InferenceBackend = z.infer<typeof InferenceBackendSchema>;\nexport type EdgeworkOptions = z.infer<typeof EdgeworkOptionsSchema>;\nexport type GenerateOptions = z.infer<typeof GenerateOptionsSchema>;\nexport type GenerateResult = z.infer<typeof GenerateResultSchema>;\nexport type ChatRole = z.infer<typeof ChatRoleSchema>;\nexport type ChatMessage = z.infer<typeof ChatMessageSchema>;\nexport type RLHFFeedback = z.infer<typeof RLHFFeedbackSchema>;\nexport type ModelStatus = z.infer<typeof ModelStatusSchema>;\nexport type EngineInfo = z.infer<typeof EngineInfoSchema>;\nexport type LayerWeights = z.infer<typeof LayerWeightsSchema>;\nexport type KVCache = z.infer<typeof KVCacheSchema>;\n\n// Validation helpers\nexport function validateModelMeta(data: unknown): ModelMeta {\n  return ModelMetaSchema.parse(data);\n}\n\nexport function validateGenerateOptions(data: unknown): GenerateOptions {\n  return GenerateOptionsSchema.parse(data);\n}\n\nexport function validateChatMessages(data: unknown): ChatMessage[] {\n  return ChatMessagesSchema.parse(data);\n}\n\nexport function validateEdgeworkOptions(data: unknown): EdgeworkOptions {\n  return EdgeworkOptionsSchema.parse(data);\n}\n\nexport function validateRLHFFeedback(data: unknown): RLHFFeedback {\n  return RLHFFeedbackSchema.parse(data);\n}\n\n// Safe parse variants that don't throw\nexport function safeParseModelMeta(data: unknown) {\n  return ModelMetaSchema.safeParse(data);\n}\n\nexport function safeParseGenerateOptions(data: unknown) {\n  return GenerateOptionsSchema.safeParse(data);\n}\n\nexport function safeParseChatMessages(data: unknown) {\n  return ChatMessagesSchema.safeParse(data);\n}\n\nexport function safeParseEdgeworkOptions(data: unknown) {\n  return EdgeworkOptionsSchema.safeParse(data);\n}\n\nexport function safeParseRLHFFeedback(data: unknown) {\n  return RLHFFeedbackSchema.safeParse(data);\n}\n","/**\n * WASM Module Exports\n *\n * Provides encrypted WASM loading, decryption, and streaming capabilities.\n */\n\nexport {\n  loadWasmCore,\n  loadWasmStreaming,\n  isWasmLoaded,\n  getWasmModule,\n  unloadWasm,\n  type WasmModule,\n  type EdgeworkCoreInstance,\n  type LoaderConfig,\n} from './loader';\n","/**\n * WASM Loader with Decryption\n *\n * Loads and decrypts the encrypted WASM core module.\n * Requires a valid license token from the oracle.\n */\n\n// Header structure:\n// bytes 0-7:   Magic \"EWASM001\"\n// bytes 8-11:  Original size (uint32 LE)\n// bytes 12-15: Encrypted size (uint32 LE)\n// bytes 16-47: Salt (32 bytes)\n// bytes 48-59: IV (12 bytes)\n// bytes 60-63: Reserved\n// bytes 64-79: Auth tag (16 bytes)\n// bytes 80+:   Encrypted data\n\nconst HEADER_SIZE = 64;\nconst AUTH_TAG_SIZE = 16;\nconst MAGIC = 'EWASM001';\n\n/**\n * WASM module instance\n */\nexport interface WasmModule {\n  init: (jwt: string) => Promise<unknown>;\n  is_licensed: () => boolean;\n  get_session: () => unknown;\n  EdgeworkCore: new () => EdgeworkCoreInstance;\n}\n\n/**\n * EdgeworkCore instance from WASM\n */\nexport interface EdgeworkCoreInstance {\n  get_router: () => unknown;\n  get_inference_client: (config: unknown) => unknown;\n  get_distributed_client: (config: unknown) => unknown;\n  get_gateway_client: (endpoint: string) => unknown;\n}\n\n/**\n * Loader configuration\n */\nexport interface LoaderConfig {\n  wasmUrl?: string;\n  oracleEndpoint?: string;\n  licenseToken?: string;\n}\n\n/**\n * Loader state\n */\ninterface LoaderState {\n  loaded: boolean;\n  module: WasmModule | null;\n  error: Error | null;\n}\n\nconst state: LoaderState = {\n  loaded: false,\n  module: null,\n  error: null,\n};\n\n/**\n * Derive decryption key from license token\n */\nasync function deriveKey(\n  licenseToken: string,\n  salt: Uint8Array\n): Promise<CryptoKey> {\n  const normalizedSalt = Uint8Array.from(salt).buffer;\n  // Import the license token as key material\n  const keyMaterial = await crypto.subtle.importKey(\n    'raw',\n    new TextEncoder().encode(licenseToken),\n    { name: 'PBKDF2' },\n    false,\n    ['deriveBits', 'deriveKey']\n  );\n\n  // Derive the actual key using PBKDF2\n  return crypto.subtle.deriveKey(\n    {\n      name: 'PBKDF2',\n      salt: normalizedSalt,\n      iterations: 100000,\n      hash: 'SHA-256',\n    },\n    keyMaterial,\n    { name: 'AES-GCM', length: 256 },\n    false,\n    ['decrypt']\n  );\n}\n\n/**\n * Decrypt WASM binary\n */\nasync function decryptWasm(\n  encryptedData: ArrayBuffer,\n  licenseToken: string\n): Promise<ArrayBuffer> {\n  const buffer = new Uint8Array(encryptedData);\n\n  // Verify magic\n  const magic = new TextDecoder().decode(buffer.slice(0, 8));\n  if (magic !== MAGIC) {\n    throw new Error('Invalid WASM format: missing magic header');\n  }\n\n  // Parse header\n  const view = new DataView(encryptedData);\n  const originalSize = view.getUint32(8, true);\n  const encryptedSize = view.getUint32(12, true);\n\n  // Extract components\n  const salt = buffer.slice(16, 48);\n  const iv = buffer.slice(48, 60);\n  const authTag = buffer.slice(HEADER_SIZE, HEADER_SIZE + AUTH_TAG_SIZE);\n  const ciphertext = buffer.slice(HEADER_SIZE + AUTH_TAG_SIZE);\n\n  // Verify sizes\n  if (ciphertext.length !== encryptedSize) {\n    throw new Error('Invalid WASM format: size mismatch');\n  }\n\n  // Derive key from license token\n  const key = await deriveKey(licenseToken, salt);\n\n  // Combine ciphertext + authTag for AES-GCM (Web Crypto expects them together)\n  const combined = new Uint8Array(ciphertext.length + AUTH_TAG_SIZE);\n  combined.set(ciphertext, 0);\n  combined.set(authTag, ciphertext.length);\n\n  // Decrypt\n  try {\n    const decrypted = await crypto.subtle.decrypt(\n      {\n        name: 'AES-GCM',\n        iv,\n        tagLength: AUTH_TAG_SIZE * 8,\n      },\n      key,\n      combined\n    );\n\n    // Verify decrypted size\n    if (decrypted.byteLength !== originalSize) {\n      throw new Error('Decryption failed: size mismatch');\n    }\n\n    return decrypted;\n  } catch (error) {\n    throw new Error('Decryption failed: invalid license token');\n  }\n}\n\n/**\n * Load WASM module from URL\n */\nasync function fetchWasm(url: string): Promise<ArrayBuffer> {\n  const response = await fetch(url);\n\n  if (!response.ok) {\n    throw new Error(`Failed to fetch WASM: ${response.status}`);\n  }\n\n  return response.arrayBuffer();\n}\n\n/**\n * Compile and instantiate WASM module\n */\nasync function instantiateWasm(wasmBytes: ArrayBuffer): Promise<WasmModule> {\n  // Create import object for WASM\n  const importObject = {\n    env: {\n      // Add any required imports here\n      memory: new WebAssembly.Memory({ initial: 256, maximum: 512 }),\n    },\n    wbg: {\n      // wasm-bindgen imports will be provided by the glue code\n    },\n  };\n\n  // Compile and instantiate. TS lib definitions differ across targets:\n  // instantiate() may resolve to an Instance or a { module, instance } pair.\n  type WasmInstantiateResult =\n    | WebAssembly.Instance\n    | WebAssembly.WebAssemblyInstantiatedSource;\n  const instantiateResult = (await WebAssembly.instantiate(\n    wasmBytes,\n    importObject\n  )) as WasmInstantiateResult;\n  const instance =\n    instantiateResult instanceof WebAssembly.Instance\n      ? instantiateResult\n      : instantiateResult.instance;\n\n  // The actual module interface is wrapped by wasm-bindgen glue code\n  // This is a simplified version - in production, use wasm-bindgen's generated loader\n  return instance.exports as unknown as WasmModule;\n}\n\n/**\n * Load the encrypted WASM core\n */\nexport async function loadWasmCore(config: LoaderConfig): Promise<WasmModule> {\n  if (state.loaded && state.module) {\n    return state.module;\n  }\n\n  if (!config.licenseToken) {\n    throw new Error('License token required to load WASM core');\n  }\n\n  const wasmUrl = config.wasmUrl || '/wasm/edgework_core.wasm.enc';\n\n  try {\n    // Fetch encrypted WASM\n    const encryptedWasm = await fetchWasm(wasmUrl);\n\n    // Check if encrypted (starts with EWASM001 magic)\n    const magic = new TextDecoder().decode(\n      new Uint8Array(encryptedWasm.slice(0, 8))\n    );\n    let wasmBytes: ArrayBuffer;\n\n    if (magic === MAGIC) {\n      // Decrypt\n      wasmBytes = await decryptWasm(encryptedWasm, config.licenseToken);\n    } else {\n      // Unencrypted (development mode)\n      wasmBytes = encryptedWasm;\n    }\n\n    // Instantiate\n    const module = await instantiateWasm(wasmBytes);\n\n    // Initialize with license\n    await module.init(config.licenseToken);\n\n    state.loaded = true;\n    state.module = module;\n\n    return module;\n  } catch (error) {\n    state.error = error instanceof Error ? error : new Error(String(error));\n    throw state.error;\n  }\n}\n\n/**\n * Check if WASM is loaded\n */\nexport function isWasmLoaded(): boolean {\n  return state.loaded;\n}\n\n/**\n * Get loaded WASM module\n */\nexport function getWasmModule(): WasmModule | null {\n  return state.module;\n}\n\n/**\n * Unload WASM module\n */\nexport function unloadWasm(): void {\n  state.loaded = false;\n  state.module = null;\n  state.error = null;\n}\n\n/**\n * Streaming WASM loader for CLI\n * Loads WASM in chunks from server, never fully cached on disk\n */\nexport async function loadWasmStreaming(\n  endpoint: string,\n  sessionToken: string,\n  functionNames: string[]\n): Promise<Map<string, (...args: unknown[]) => unknown>> {\n  const functions = new Map<string, (...args: unknown[]) => unknown>();\n\n  for (const funcName of functionNames) {\n    const response = await fetch(`${endpoint}/stream/${funcName}`, {\n      headers: {\n        Authorization: `Bearer ${sessionToken}`,\n      },\n    });\n\n    if (!response.ok) {\n      throw new Error(\n        `Failed to stream function ${funcName}: ${response.status}`\n      );\n    }\n\n    // Stream and compile the function chunk\n    const wasmChunk = await response.arrayBuffer();\n\n    // Implementation note: implementation, this would compile individual function modules\n    // Current behavior: we just track what was requested\n    functions.set(funcName, () => {\n      console.log(`Executing streamed function: ${funcName}`);\n    });\n  }\n\n  return functions;\n}\n","/**\n * Model Configurations Stubs\n */\n\nexport const COG_CONFIG = {\n  id: 'cog-360m',\n  architecture: 'smollm',\n  createdAt: '2025-01-01T00:00:00.000Z',\n  hiddenDim: 960,\n  intermediateDim: 2560,\n  maxSeqLength: 2048,\n  name: 'Cog',\n  numHeads: 15,\n  numKvHeads: 5,\n  numLayers: 32,\n  ropeTheta: 10000,\n  version: '0.1.0',\n  vocabSize: 49152,\n} as const;\n\nexport const CYRANO_CONFIG = {\n  id: 'cyrano-360m',\n  architecture: 'smollm',\n  createdAt: '2025-01-01T00:00:00.000Z',\n  hiddenDim: 960,\n  intermediateDim: 2560,\n  maxSeqLength: 2048,\n  name: 'Cyrano',\n  numHeads: 15,\n  numKvHeads: 5,\n  numLayers: 32,\n  ropeTheta: 10000,\n  version: '0.1.0',\n  vocabSize: 49152,\n} as const;\n\nexport const MODELS = ['cog-360m', 'cyrano-360m'];\n\nexport function getModelConfig(modelId: string) {\n  if (modelId === 'cog-360m') return COG_CONFIG;\n  if (modelId === 'cyrano-360m') return CYRANO_CONFIG;\n  return null;\n}\n\nexport const SYSTEM_PROMPTS = {\n  'cog-360m': 'You are Cog, a DevOps assistant.',\n  'cyrano-360m': 'You are Cyrano, an emotional intelligence expert.',\n};\n\nexport function getSystemPrompt(modelId: string) {\n  return SYSTEM_PROMPTS[modelId as keyof typeof SYSTEM_PROMPTS] || '';\n}\n\nexport const MODEL_SYNC_URLS = {\n  'cog-360m': 'https://models.affectively.ai/cog',\n  'cyrano-360m': 'https://models.affectively.ai/cyrano',\n};\n","/**\n * Edgework SDK\n *\n * Client-side AI inference with D1/Dash storage, WebGPU inference, and on-device RLHF.\n *\n * @example\n * ```typescript\n * import { Edgework } from '@affectively/edgework';\n *\n * // Initialize with a model\n * const ai = await Edgework.init({\n *   model: 'cyrano-360m',\n *   onProgress: (p) => console.log(`${p.percent}% downloaded`)\n * });\n *\n * // Generate text\n * const response = await ai.generate('How are you feeling today?');\n *\n * // Stream responses\n * for await (const token of ai.stream('Tell me a story')) {\n *   process.stdout.write(token);\n * }\n *\n * // Chat with context\n * const reply = await ai.chat([\n *   { role: 'user', content: 'I had a rough day' },\n * ]);\n * ```\n */\n\n// Re-export types (from types.ts only, schemas.ts exports its own versions)\nexport * from './types';\n\n// Re-export schema validators (not the types, which would conflict)\nexport {\n  // Schemas\n  ModelArchitectureSchema,\n  QuantizationTypeSchema,\n  ModelMetaSchema,\n  TensorChunkSchema,\n  TokenizerDataSchema,\n  SyncProgressSchema,\n  AdapterTypeSchema,\n  UserAdapterSchema,\n  TrainingLogEntrySchema,\n  DownloadStatusSchema,\n  DownloadProgressSchema,\n  StorageBackendSchema,\n  InferenceBackendSchema,\n  EdgeworkOptionsSchema,\n  GenerateOptionsSchema,\n  GenerateResultSchema,\n  ChatRoleSchema,\n  ChatMessageSchema,\n  ChatMessagesSchema,\n  RLHFFeedbackSchema,\n  ModelStatusSchema,\n  EngineInfoSchema,\n  LayerWeightsSchema,\n  KVCacheSchema,\n  CogModelConfigSchema,\n  CyranoModelConfigSchema,\n  // Validators\n  validateModelMeta,\n  validateGenerateOptions,\n  validateChatMessages,\n  validateEdgeworkOptions,\n  validateRLHFFeedback,\n  safeParseModelMeta,\n  safeParseGenerateOptions,\n  safeParseChatMessages,\n  safeParseEdgeworkOptions,\n  safeParseRLHFFeedback,\n} from './schemas';\n\n// Re-export modules\nexport {\n  OPFSStorage,\n  IndexedDBStorage,\n  MemoryStorage,\n  createStorage,\n  detectBestBackend as detectBestStorageBackend,\n} from './data/storage';\nexport type { StorageOptions } from './data/storage';\n\nexport {\n  WebGPUInference,\n  WASMInference,\n  createInferenceEngine,\n  detectBestBackend as detectBestInferenceBackend,\n  Tokenizer,\n  loadTokenizer,\n} from './compute/inference';\nexport type { InferenceOptions } from './compute/inference';\n\nexport { ModelSync, createModelSync, DEFAULT_SYNC_URLS } from './data/sync';\nexport type { SyncOptions } from './data/sync';\n\nexport { RewardModel, RLHFTrainer, FederatedSync } from './compute/rlhf';\n\nexport * as Auth from './auth';\n\n// Export Gateway Client\nexport * as Gateway from './compute/gateway';\n\n// Export Distributed Inference Client\nexport * as Distributed from './compute/distributed';\n\n// Export WASM loader\nexport * as Wasm from './wasm';\n\nexport {\n  COG_CONFIG,\n  CYRANO_CONFIG,\n  MODELS,\n  getModelConfig,\n  getSystemPrompt,\n  SYSTEM_PROMPTS,\n  MODEL_SYNC_URLS,\n} from './models';\n\n// Import for main class\nimport { createStorage as createStorageInternal } from './data/storage/factory';\nimport { createInferenceEngine as createInferenceEngineInternal } from './compute/inference/factory';\nimport { createModelSync as createModelSyncInternal } from './data/sync/factory';\nimport { RLHFTrainer as RLHFTrainerInternal } from './compute/rlhf/trainer';\nimport { FederatedSync } from './compute/rlhf/federated-sync';\nimport {\n  getModelConfig as getModelConfigInternal,\n  getSystemPrompt as getSystemPromptInternal,\n  MODEL_SYNC_URLS as MODEL_SYNC_URLS_INTERNAL,\n} from './models';\nimport type { BaseStorage } from './data/storage/base-storage';\nimport type { BaseInference } from './compute/inference/base-inference';\nimport type { ModelSync as ModelSyncType } from './data/sync/model-sync';\nimport type {\n  EdgeworkOptions,\n  GenerateOptions,\n  GenerateResult,\n  ChatMessage,\n  DownloadProgress,\n  EngineInfo,\n  RLHFFeedback,\n  Modality,\n  ModalityInferenceResult,\n  InferenceError,\n  ModalityTrainingSignal,\n  TrainingFlushResult,\n} from './types';\nimport { EdgeworkOptionsSchema } from './schemas';\n\n/**\n * Edgework - Main SDK class\n *\n * Provides a unified interface for client-side AI inference.\n */\nexport class Edgework {\n  private static readonly DEFAULT_TRAINING_BATCH_SIZE = 16;\n  private static readonly DEFAULT_TRAINING_IDLE_FLUSH_MS = 45_000;\n\n  private storage: BaseStorage;\n  private inference: BaseInference | null = null;\n  private sync: ModelSyncType | null = null;\n  private rlhfTrainer: RLHFTrainerInternal | null = null;\n  private modalityTrainers = new Map<Modality, RLHFTrainerInternal>();\n  private pendingSignals = new Map<Modality, ModalityTrainingSignal[]>();\n  private communityParticipation = false;\n  private idleFlushTimer: ReturnType<typeof setTimeout> | null = null;\n  private trainingBatchSize: number;\n  private trainingIdleFlushMs: number;\n  private modelId: string;\n  private systemPrompt: string;\n  private options: EdgeworkOptions;\n\n  private constructor(\n    storage: BaseStorage,\n    modelId: string,\n    options: EdgeworkOptions\n  ) {\n    this.storage = storage;\n    this.modelId = modelId;\n    this.options = options;\n    this.trainingBatchSize =\n      options.trainingBatchSize ?? Edgework.DEFAULT_TRAINING_BATCH_SIZE;\n    this.trainingIdleFlushMs =\n      options.trainingIdleFlushMs ?? Edgework.DEFAULT_TRAINING_IDLE_FLUSH_MS;\n    this.communityParticipation = options.communityParticipation ?? false;\n    this.systemPrompt = getSystemPromptInternal(modelId);\n  }\n\n  /**\n   * Initialize Edgework with a model\n   */\n  static async init(options: EdgeworkOptions): Promise<Edgework> {\n    // Validate options\n    const parsedOptions = EdgeworkOptionsSchema.parse(options);\n    if (!parsedOptions.model) {\n      throw new Error('Model is required');\n    }\n    const validated: EdgeworkOptions = {\n      ...parsedOptions,\n      model: parsedOptions.model,\n    };\n\n    // Create storage\n    const storage = await createStorageInternal({\n      backend: validated.storageBackend,\n    });\n\n    const edgework = new Edgework(storage, validated.model, validated);\n\n    // Check if model needs to be downloaded\n    const isComplete = await storage.isModelComplete(validated.model);\n\n    if (!isComplete) {\n      // Start sync\n      const syncUrl =\n        validated.syncUrl ??\n        MODEL_SYNC_URLS_INTERNAL[\n          validated.model as keyof typeof MODEL_SYNC_URLS_INTERNAL\n        ] ??\n        'https://models.affectively.ai';\n\n      edgework.sync = createModelSyncInternal(storage, {\n        syncUrl,\n        onProgress: validated.onProgress,\n      });\n\n      // Register model metadata if not present\n      const meta = await storage.getModelMeta(validated.model);\n      if (!meta) {\n        const config = getModelConfigInternal(validated.model);\n        if (config) {\n          await storage.setModelMeta(config);\n        }\n      }\n\n      // Start download\n      await edgework.sync.startSync(validated.model);\n    }\n\n    // Initialize inference engine\n    edgework.inference = await createInferenceEngineInternal(\n      storage,\n      validated.model,\n      {\n        backend: validated.inferenceBackend,\n      }\n    );\n\n    // Initialize RLHF if enabled\n    if (validated.enableRLHF) {\n      const config = getModelConfigInternal(validated.model);\n      if (config) {\n        const deviceId = validated.userId ?? edgework.generateDeviceId();\n        const federatedSync = validated.federatedSyncUrl\n          ? new FederatedSync({\n              hubUrl: validated.federatedSyncUrl,\n              modelId: validated.model,\n              deviceId,\n            })\n          : undefined;\n\n        edgework.rlhfTrainer = new RLHFTrainerInternal({\n          storage,\n          modelId: validated.model,\n          userId: deviceId,\n          hiddenDim: config.hiddenDim,\n          modality: 'text',\n          batchSize: edgework.trainingBatchSize,\n          communityParticipation: edgework.communityParticipation,\n          federatedSync,\n        });\n        await edgework.rlhfTrainer.initialize();\n        edgework.modalityTrainers.set('text', edgework.rlhfTrainer);\n      }\n    }\n\n    edgework.bindSessionFlushHooks();\n    return edgework;\n  }\n\n  /**\n   * Get an existing Edgework instance (assumes model is already downloaded)\n   */\n  static async get(modelId: string): Promise<Edgework> {\n    const storage = await createStorageInternal();\n    const edgework = new Edgework(storage, modelId, { model: modelId });\n\n    // Initialize inference engine\n    edgework.inference = await createInferenceEngineInternal(storage, modelId);\n\n    return edgework;\n  }\n\n  /**\n   * Generate text from a prompt\n   */\n  async generate(\n    prompt: string,\n    options: GenerateOptions = {}\n  ): Promise<GenerateResult> {\n    if (!this.inference) {\n      throw new Error('Inference engine not initialized');\n    }\n\n    // Prepend system prompt\n    const fullPrompt = this.systemPrompt\n      ? `${this.systemPrompt}\\n\\nUser: ${prompt}\\nAssistant:`\n      : prompt;\n\n    return this.inference.generate(fullPrompt, options);\n  }\n\n  /**\n   * Stream tokens from a prompt\n   */\n  async *stream(\n    prompt: string,\n    options: GenerateOptions = {}\n  ): AsyncGenerator<string, void, unknown> {\n    if (!this.inference) {\n      throw new Error('Inference engine not initialized');\n    }\n\n    const fullPrompt = this.systemPrompt\n      ? `${this.systemPrompt}\\n\\nUser: ${prompt}\\nAssistant:`\n      : prompt;\n\n    yield* this.inference.stream(fullPrompt, options);\n  }\n\n  /**\n   * Chat with conversation history\n   */\n  async chat(\n    messages: ChatMessage[],\n    options: GenerateOptions = {}\n  ): Promise<GenerateResult> {\n    if (!this.inference) {\n      throw new Error('Inference engine not initialized');\n    }\n\n    // Add system message if not present\n    const fullMessages: ChatMessage[] =\n      messages[0]?.role === 'system'\n        ? messages\n        : [{ role: 'system', content: this.systemPrompt }, ...messages];\n\n    return this.inference.chat(fullMessages, options);\n  }\n\n  /**\n   * Get embeddings for text\n   */\n  async embed(text: string): Promise<Float32Array> {\n    if (!this.inference) {\n      throw new Error('Inference engine not initialized');\n    }\n    return this.inference.embed(text);\n  }\n\n  /**\n   * Provide feedback for RLHF (thumbs up/down)\n   */\n  async feedback(\n    messageHash: string,\n    rating: 'positive' | 'negative'\n  ): Promise<void> {\n    if (!this.rlhfTrainer) {\n      throw new Error('RLHF not enabled');\n    }\n\n    const hiddenState = this.inference?.getLastHiddenState();\n    const feedback: RLHFFeedback = {\n      messageHash,\n      feedback: rating === 'positive' ? 1.0 : -1.0,\n      hiddenState: hiddenState ?? undefined,\n    };\n\n    await this.rlhfTrainer.recordFeedback(feedback);\n  }\n\n  /**\n   * Unified modality inference API.\n   */\n  async infer(\n    modality: Modality,\n    input: unknown,\n    options: GenerateOptions = {}\n  ): Promise<ModalityInferenceResult | InferenceError> {\n    const startedAt = Date.now();\n    try {\n      if (!this.inference) {\n        return this.createInferenceError(\n          modality,\n          'MODEL_NOT_READY',\n          'Inference engine not initialized',\n          5_000\n        );\n      }\n\n      if (modality === 'text') {\n        if (typeof input !== 'string' || input.trim().length === 0) {\n          return this.createInferenceError(\n            modality,\n            'MODEL_UNAVAILABLE',\n            'Text modality requires a non-empty string input'\n          );\n        }\n\n        const result = await this.generate(input, options);\n        return {\n          modality,\n          modelId: this.modelId,\n          modelVersion: 'local-v1',\n          output: {\n            text: result.text,\n            tokenCount: result.tokenCount,\n            tokensPerSecond: result.tokensPerSecond,\n          },\n          durationMs: result.durationMs,\n        };\n      }\n\n      if (modality === 'embeddings') {\n        if (typeof input !== 'string' || input.trim().length === 0) {\n          return this.createInferenceError(\n            modality,\n            'MODEL_UNAVAILABLE',\n            'Embeddings modality requires a non-empty string input'\n          );\n        }\n\n        const embedding = await this.embed(input);\n        return {\n          modality,\n          modelId: this.modelId,\n          modelVersion: 'local-v1',\n          output: Array.from(embedding),\n          durationMs: Date.now() - startedAt,\n        };\n      }\n\n      return this.createInferenceError(\n        modality,\n        'MODEL_NOT_READY',\n        `${modality} modality is not yet available in this SDK build`,\n        30_000\n      );\n    } catch (error) {\n      return this.createInferenceError(\n        modality,\n        'MODEL_UNAVAILABLE',\n        error instanceof Error ? error.message : 'Unknown inference error'\n      );\n    }\n  }\n\n  /**\n   * Record a modality-specific training signal for micro-batch training.\n   */\n  async recordSignal(\n    modality: Modality,\n    signal: ModalityTrainingSignal\n  ): Promise<void> {\n    const queue = this.pendingSignals.get(modality) ?? [];\n    queue.push(signal);\n    this.pendingSignals.set(modality, queue);\n\n    if (queue.length >= this.trainingBatchSize) {\n      await this.flushTraining(modality);\n      return;\n    }\n\n    this.scheduleIdleFlush();\n  }\n\n  /**\n   * Flush pending local training for one modality or all modalities.\n   */\n  async flushTraining(modality?: Modality): Promise<TrainingFlushResult> {\n    const targetModalities: Modality[] = modality\n      ? [modality]\n      : ([\n          'text',\n          'stt',\n          'tts',\n          'translation',\n          'embeddings',\n          'classification',\n          'image',\n        ] as Modality[]);\n    const startedAt = new Date().toISOString();\n    let trainedExamples = 0;\n    let pendingExamples = 0;\n    let communitySyncAttempted = false;\n    let communitySyncApplied = false;\n\n    for (const target of targetModalities) {\n      const trainer = this.modalityTrainers.get(target);\n      const signals = this.pendingSignals.get(target) ?? [];\n      if (!trainer || signals.length === 0) {\n        pendingExamples += signals.length;\n        continue;\n      }\n\n      const before = trainer.getStats().examples;\n\n      for (const signal of signals) {\n        const hiddenState =\n          signal.hiddenState ??\n          this.inference?.getLastHiddenState() ??\n          undefined;\n        if (!hiddenState) {\n          continue;\n        }\n\n        const feedbackValue =\n          typeof signal.feedback === 'number' ? signal.feedback : 1;\n        const feedback: RLHFFeedback = {\n          messageHash:\n            signal.messageHash ||\n            `${target}-${Date.now()}-${Math.random()\n              .toString(36)\n              .slice(2, 10)}`,\n          feedback: Math.max(-1, Math.min(1, feedbackValue)),\n          hiddenState,\n        };\n        await trainer.recordFeedback(feedback);\n      }\n\n      await trainer.train();\n      this.pendingSignals.set(target, []);\n\n      if (this.communityParticipation) {\n        communitySyncAttempted = true;\n        await trainer.syncUpdates();\n        communitySyncApplied = true;\n      }\n\n      const after = trainer.getStats().examples;\n      trainedExamples += Math.max(0, after - before);\n    }\n\n    this.clearIdleFlushTimer();\n\n    return {\n      modality: modality ?? 'all',\n      trainedExamples,\n      pendingExamples,\n      communitySyncAttempted,\n      communitySyncApplied,\n      flushedAt: startedAt,\n    };\n  }\n\n  /**\n   * Enable or disable community update sharing.\n   */\n  async setCommunityParticipation(enabled: boolean): Promise<void> {\n    this.communityParticipation = enabled;\n    for (const trainer of this.modalityTrainers.values()) {\n      trainer.setCommunityParticipation(enabled);\n    }\n  }\n\n  /**\n   * Get model status and info\n   */\n  get status(): EngineInfo | null {\n    return this.inference?.getInfo() ?? null;\n  }\n\n  /**\n   * Get download progress\n   */\n  get progress(): DownloadProgress | null {\n    return this.sync?.getProgress() ?? null;\n  }\n\n  /**\n   * Check if model is ready for inference\n   */\n  get isReady(): boolean {\n    return this.inference?.getInfo().status === 'ready';\n  }\n\n  /**\n   * Get RLHF training stats\n   */\n  get rlhfStats(): { examples: number; lastTrained?: string } | null {\n    return this.rlhfTrainer?.getStats() ?? null;\n  }\n\n  /**\n   * Generate a unique device ID for RLHF\n   */\n  private generateDeviceId(): string {\n    if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n      return crypto.randomUUID();\n    }\n    // Fallback for older environments\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n      const r = (Math.random() * 16) | 0;\n      const v = c === 'x' ? r : (r & 0x3) | 0x8;\n      return v.toString(16);\n    });\n  }\n\n  private scheduleIdleFlush(): void {\n    if (this.idleFlushTimer) {\n      return;\n    }\n    this.idleFlushTimer = setTimeout(() => {\n      this.idleFlushTimer = null;\n      void this.flushTraining();\n    }, this.trainingIdleFlushMs);\n  }\n\n  private clearIdleFlushTimer(): void {\n    if (!this.idleFlushTimer) {\n      return;\n    }\n    clearTimeout(this.idleFlushTimer);\n    this.idleFlushTimer = null;\n  }\n\n  private bindSessionFlushHooks(): void {\n    if (\n      typeof window !== 'undefined' &&\n      typeof window.addEventListener === 'function'\n    ) {\n      window.addEventListener('beforeunload', () => {\n        void this.flushTraining();\n      });\n    }\n\n    const runtime = globalThis as {\n      process?: { on?: (event: string, cb: () => void) => void };\n    };\n    if (runtime.process && typeof runtime.process.on === 'function') {\n      runtime.process.on('beforeExit', () => {\n        void this.flushTraining();\n      });\n    }\n  }\n\n  private createInferenceError(\n    modality: Modality,\n    code: InferenceError['code'],\n    message: string,\n    retryAfterMs?: number\n  ): InferenceError {\n    return {\n      code,\n      message,\n      modality,\n      modelId: this.modelId,\n      modelVersion: 'local-v1',\n      retryAfterMs,\n    };\n  }\n}\n\n// Default export\nexport default Edgework;\n"]}