@kb-labs/core-platform 1.0.0 → 1.2.0

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.
Files changed (29) hide show
  1. package/dist/adapters/index.d.cts +5 -5
  2. package/dist/adapters/index.d.ts +5 -5
  3. package/dist/artifacts-CrJhdBm-.d.cts +74 -0
  4. package/dist/artifacts-CrJhdBm-.d.ts +74 -0
  5. package/dist/{artifacts-BUghvkUU.d.cts → database-CJ5eZJB8.d.ts} +61 -14
  6. package/dist/{artifacts-Bd-1UVTw.d.ts → database-DUeYQUg-.d.cts} +61 -14
  7. package/dist/index.d.cts +10 -8
  8. package/dist/index.d.ts +10 -8
  9. package/dist/{artifacts-DrVnkLzu.d.cts → invoke-BzOIin5Z.d.cts} +427 -74
  10. package/dist/{artifacts-DrVnkLzu.d.ts → invoke-BzOIin5Z.d.ts} +427 -74
  11. package/dist/{log-reader-uOHBLBax.d.ts → log-reader-B8HGaAKp.d.ts} +1 -1
  12. package/dist/{log-reader-BVohbSMB.d.cts → log-reader-DwHla8Sz.d.cts} +1 -1
  13. package/dist/noop/adapters/index.d.cts +16 -63
  14. package/dist/noop/adapters/index.d.ts +16 -63
  15. package/dist/noop/index.cjs +34 -33
  16. package/dist/noop/index.cjs.map +1 -1
  17. package/dist/noop/index.d.cts +4 -4
  18. package/dist/noop/index.d.ts +4 -4
  19. package/dist/noop/index.js +33 -33
  20. package/dist/noop/index.js.map +1 -1
  21. package/dist/serializable/index.cjs.map +1 -1
  22. package/dist/serializable/index.d.cts +2 -0
  23. package/dist/serializable/index.d.ts +2 -0
  24. package/dist/serializable/index.js.map +1 -1
  25. package/dist/{snapshot-provider--COac4P-.d.ts → snapshot-provider-BeZmFkse.d.cts} +49 -99
  26. package/dist/{snapshot-provider-nE9wuc1C.d.cts → snapshot-provider-CNO_x3lV.d.ts} +49 -99
  27. package/package.json +14 -14
  28. package/dist/database-DGV6a1nj.d.cts +0 -427
  29. package/dist/database-DGV6a1nj.d.ts +0 -427
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/noop/adapters/analytics.ts","../../src/noop/adapters/vector-store.ts","../../src/noop/adapters/llm.ts","../../src/noop/adapters/embeddings.ts","../../src/noop/adapters/cache.ts","../../src/noop/adapters/config.ts","../../src/noop/adapters/storage.ts","../../src/noop/adapters/logger.ts","../../src/noop/adapters/event-bus.ts","../../src/noop/adapters/invoke.ts","../../src/noop/adapters/artifacts.ts","../../src/noop/noop-platform.ts","../../src/noop/core/workflow.ts","../../src/noop/core/jobs.ts","../../src/noop/core/cron.ts","../../src/noop/core/resources.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module @kb-labs/core-platform/noop/adapters/analytics\n * NoOp analytics implementation.\n */\n\nimport type { IAnalytics } from '../../adapters/analytics.js';\n\n/**\n * NoOp analytics - does nothing, safe for testing and development.\n */\nexport class NoOpAnalytics implements IAnalytics {\n async track(_event: string, _properties?: Record<string, unknown>): Promise<void> {\n // No-op\n }\n\n async identify(_userId: string, _traits?: Record<string, unknown>): Promise<void> {\n // No-op\n }\n\n async flush(): Promise<void> {\n // No-op\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/vector-store\n * In-memory vector store implementation.\n */\n\nimport type {\n IVectorStore,\n VectorRecord,\n VectorSearchResult,\n VectorFilter,\n} from '../../adapters/vector-store.js';\n\n/**\n * Simple cosine similarity calculation.\n */\nfunction cosineSimilarity(a: number[], b: number[]): number {\n if (a.length !== b.length) {return 0;}\n\n let dotProduct = 0;\n let normA = 0;\n let normB = 0;\n\n for (let i = 0; i < a.length; i++) {\n const aVal = a[i] ?? 0;\n const bVal = b[i] ?? 0;\n dotProduct += aVal * bVal;\n normA += aVal * aVal;\n normB += bVal * bVal;\n }\n\n const denominator = Math.sqrt(normA) * Math.sqrt(normB);\n return denominator === 0 ? 0 : dotProduct / denominator;\n}\n\n/**\n * Check if record matches filter.\n */\nfunction matchesFilter(record: VectorRecord, filter: VectorFilter): boolean {\n const value = record.metadata?.[filter.field];\n\n switch (filter.operator) {\n case 'eq':\n return value === filter.value;\n case 'ne':\n return value !== filter.value;\n case 'gt':\n return typeof value === 'number' && value > (filter.value as number);\n case 'gte':\n return typeof value === 'number' && value >= (filter.value as number);\n case 'lt':\n return typeof value === 'number' && value < (filter.value as number);\n case 'lte':\n return typeof value === 'number' && value <= (filter.value as number);\n case 'in':\n return Array.isArray(filter.value) && filter.value.includes(value);\n case 'nin':\n return Array.isArray(filter.value) && !filter.value.includes(value);\n default:\n return true;\n }\n}\n\n/**\n * In-memory vector store.\n * Suitable for testing and development.\n */\nexport class MemoryVectorStore implements IVectorStore {\n private vectors = new Map<string, VectorRecord>();\n\n async search(\n query: number[],\n limit: number,\n filter?: VectorFilter\n ): Promise<VectorSearchResult[]> {\n const results: VectorSearchResult[] = [];\n\n for (const record of this.vectors.values()) {\n if (filter && !matchesFilter(record, filter)) {\n continue;\n }\n\n const score = cosineSimilarity(query, record.vector);\n results.push({\n id: record.id,\n score,\n metadata: record.metadata,\n });\n }\n\n return results\n .sort((a, b) => b.score - a.score)\n .slice(0, limit);\n }\n\n async upsert(vectors: VectorRecord[]): Promise<void> {\n for (const vector of vectors) {\n this.vectors.set(vector.id, vector);\n }\n }\n\n async delete(ids: string[]): Promise<void> {\n for (const id of ids) {\n this.vectors.delete(id);\n }\n }\n\n async count(): Promise<number> {\n return this.vectors.size;\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/llm\n * Mock LLM implementation.\n */\n\nimport type {\n ILLM,\n LLMOptions,\n LLMResponse,\n LLMProtocolCapabilities,\n} from '../../adapters/llm.js';\n\n/**\n * Mock LLM that returns placeholder responses.\n * Useful for testing without API calls.\n */\nexport class MockLLM implements ILLM {\n getProtocolCapabilities(): LLMProtocolCapabilities {\n return {\n cache: { supported: false },\n stream: { supported: true },\n };\n }\n\n async complete(prompt: string, options?: LLMOptions): Promise<LLMResponse> {\n const content = `[Mock LLM Response] Received prompt of ${prompt.length} characters.`;\n\n return {\n content,\n usage: {\n promptTokens: Math.ceil(prompt.length / 4),\n completionTokens: Math.ceil(content.length / 4),\n },\n model: options?.model ?? 'mock-model',\n };\n }\n\n async *stream(prompt: string, options?: LLMOptions): AsyncIterable<string> {\n const response = `[Mock LLM Stream] Received prompt of ${prompt.length} characters.`;\n const words = response.split(' ');\n\n for (const word of words) {\n yield word + ' ';\n await new Promise((resolve) => {\n setTimeout(resolve, 50);\n });\n }\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/embeddings\n * Mock embeddings implementation.\n */\n\nimport type { IEmbeddings } from '../../adapters/embeddings.js';\n\n/**\n * Mock embeddings that generates deterministic vectors based on text hash.\n * Useful for testing without API calls.\n */\nexport class MockEmbeddings implements IEmbeddings {\n readonly dimensions = 1536;\n\n /**\n * Simple hash function for deterministic embedding generation.\n */\n private hash(text: string): number {\n let hash = 0;\n for (let i = 0; i < text.length; i++) {\n const char = text.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return hash;\n }\n\n /**\n * Generate a deterministic vector based on text.\n */\n private generateVector(text: string): number[] {\n const seed = this.hash(text);\n const vector: number[] = [];\n\n for (let i = 0; i < this.dimensions; i++) {\n // Use seeded pseudo-random to generate consistent vectors\n const value = Math.sin(seed * (i + 1)) * 0.5;\n vector.push(value);\n }\n\n // Normalize the vector\n const magnitude = Math.sqrt(vector.reduce((sum, v) => sum + v * v, 0));\n return vector.map((v) => v / magnitude);\n }\n\n async embed(text: string): Promise<number[]> {\n return this.generateVector(text);\n }\n\n async embedBatch(texts: string[]): Promise<number[][]> {\n return texts.map((text) => this.generateVector(text));\n }\n\n /**\n * Get the dimensions of the embeddings.\n * This method is needed for IPC/Unix Socket transport to access the dimensions property.\n */\n async getDimensions(): Promise<number> {\n return this.dimensions;\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/cache\n * In-memory cache implementation.\n */\n\nimport type { ICache } from '../../adapters/cache.js';\n\ninterface CacheEntry<T> {\n value: T;\n expiresAt: number | null;\n}\n\ninterface SortedSetMember {\n score: number;\n member: string;\n}\n\n/**\n * In-memory cache with TTL support.\n * Useful for testing and local development.\n */\nexport class MemoryCache implements ICache {\n private store = new Map<string, CacheEntry<unknown>>();\n private sortedSets = new Map<string, SortedSetMember[]>();\n\n async get<T>(key: string): Promise<T | null> {\n const entry = this.store.get(key) as CacheEntry<T> | undefined;\n\n if (!entry) {\n return null;\n }\n\n // Check expiration\n if (entry.expiresAt !== null && Date.now() > entry.expiresAt) {\n this.store.delete(key);\n return null;\n }\n\n return entry.value;\n }\n\n async set<T>(key: string, value: T, ttl?: number): Promise<void> {\n const expiresAt = ttl ? Date.now() + ttl : null;\n this.store.set(key, { value, expiresAt });\n }\n\n async delete(key: string): Promise<void> {\n this.store.delete(key);\n }\n\n async clear(pattern?: string): Promise<void> {\n if (!pattern) {\n this.store.clear();\n return;\n }\n\n // Simple glob pattern matching (supports * wildcard)\n const regex = new RegExp('^' + pattern.replace(/\\*/g, '.*') + '$');\n for (const key of this.store.keys()) {\n if (regex.test(key)) {\n this.store.delete(key);\n }\n }\n }\n\n // ═══════════════════════════════════════════════════════════════════════\n // Sorted Set Operations\n // ═══════════════════════════════════════════════════════════════════════\n\n async zadd(key: string, score: number, member: string): Promise<void> {\n let set = this.sortedSets.get(key);\n if (!set) {\n set = [];\n this.sortedSets.set(key, set);\n }\n\n // Remove existing member if present\n const existingIndex = set.findIndex(m => m.member === member);\n if (existingIndex !== -1) {\n set.splice(existingIndex, 1);\n }\n\n // Add new member and sort by score\n set.push({ score, member });\n set.sort((a, b) => a.score - b.score);\n }\n\n async zrangebyscore(key: string, min: number, max: number): Promise<string[]> {\n const set = this.sortedSets.get(key);\n if (!set) {\n return [];\n }\n\n return set\n .filter(m => m.score >= min && m.score <= max)\n .map(m => m.member);\n }\n\n async zrem(key: string, member: string): Promise<void> {\n const set = this.sortedSets.get(key);\n if (!set) {\n return;\n }\n\n const index = set.findIndex(m => m.member === member);\n if (index !== -1) {\n set.splice(index, 1);\n }\n\n // Clean up empty sets\n if (set.length === 0) {\n this.sortedSets.delete(key);\n }\n }\n\n // ═══════════════════════════════════════════════════════════════════════\n // Atomic Operations\n // ═══════════════════════════════════════════════════════════════════════\n\n async setIfNotExists<T>(key: string, value: T, ttl?: number): Promise<boolean> {\n // Check if key already exists\n if (this.store.has(key)) {\n return false;\n }\n\n // Key doesn't exist, set it\n await this.set(key, value, ttl);\n return true;\n }\n\n /**\n * Get the current number of entries (for testing).\n */\n get size(): number {\n return this.store.size;\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/config\n * NoOp config implementation.\n */\n\nimport type { IConfig } from '../../adapters/config.js';\n\n/**\n * NoOp config - returns undefined for all queries.\n * Safe fallback when no config is loaded.\n */\nexport class NoOpConfig implements IConfig {\n async getConfig(_productId: string, _profileId?: string): Promise<any> {\n return undefined;\n }\n\n async getRawConfig(): Promise<any> {\n return undefined;\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/storage\n * In-memory storage implementation.\n */\n\nimport type { IStorage, StorageMetadata } from '../../adapters/storage.js';\n\n/**\n * In-memory storage for testing and local development.\n * Data is lost when the process exits.\n */\nexport class MemoryStorage implements IStorage {\n private store = new Map<string, Buffer>();\n\n async read(path: string): Promise<Buffer | null> {\n return this.store.get(path) ?? null;\n }\n\n async write(path: string, data: Buffer): Promise<void> {\n this.store.set(path, data);\n }\n\n async delete(path: string): Promise<void> {\n this.store.delete(path);\n }\n\n async list(prefix: string): Promise<string[]> {\n const results: string[] = [];\n for (const key of this.store.keys()) {\n if (key.startsWith(prefix)) {\n results.push(key);\n }\n }\n return results.sort();\n }\n\n async exists(path: string): Promise<boolean> {\n return this.store.has(path);\n }\n\n /**\n * Get file metadata.\n * Optional method - implements IStorage.stat().\n */\n async stat(path: string): Promise<StorageMetadata | null> {\n const data = this.store.get(path);\n if (!data) {return null;}\n\n return {\n path,\n size: data.byteLength,\n lastModified: new Date().toISOString(),\n contentType: 'application/octet-stream',\n };\n }\n\n /**\n * Copy file.\n * Optional method - implements IStorage.copy().\n */\n async copy(sourcePath: string, destPath: string): Promise<void> {\n const data = this.store.get(sourcePath);\n if (!data) {\n throw new Error(`Source file not found: ${sourcePath}`);\n }\n // Copy buffer (create new instance)\n this.store.set(destPath, Buffer.from(data));\n }\n\n /**\n * Move file.\n * Optional method - implements IStorage.move().\n */\n async move(sourcePath: string, destPath: string): Promise<void> {\n const data = this.store.get(sourcePath);\n if (!data) {\n throw new Error(`Source file not found: ${sourcePath}`);\n }\n this.store.set(destPath, data);\n this.store.delete(sourcePath);\n }\n\n /**\n * List files with metadata.\n * Optional method - implements IStorage.listWithMetadata().\n */\n async listWithMetadata(prefix: string): Promise<StorageMetadata[]> {\n const results: StorageMetadata[] = [];\n for (const [path, data] of this.store.entries()) {\n if (path.startsWith(prefix)) {\n results.push({\n path,\n size: data.byteLength,\n lastModified: new Date().toISOString(),\n contentType: 'application/octet-stream',\n });\n }\n }\n return results.sort((a, b) => a.path.localeCompare(b.path));\n }\n\n /**\n * Get the current number of stored files (for testing).\n */\n get size(): number {\n return this.store.size;\n }\n\n /**\n * Clear all storage (for testing).\n */\n clear(): void {\n this.store.clear();\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/logger\n * Console-based logger implementation.\n */\n\nimport type { ILogger } from '../../adapters/logger.js';\n\n/**\n * Log level type.\n */\ntype LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug' | 'trace';\n\n/**\n * Simple console logger with log level support.\n * Respects KB_LOG_LEVEL environment variable.\n * Outputs to console.log/warn/error/debug with JSON metadata.\n */\nexport class ConsoleLogger implements ILogger {\n private bindings: Record<string, unknown>;\n private level: LogLevel;\n\n constructor(bindings: Record<string, unknown> = {}, level?: LogLevel) {\n this.bindings = bindings;\n // Read from env or use provided level (default: 'info')\n this.level = level ?? (process.env.KB_LOG_LEVEL as LogLevel) ?? 'info';\n }\n\n private shouldLog(messageLevel: LogLevel): boolean {\n const levels: Record<LogLevel, number> = {\n silent: 0,\n error: 1,\n warn: 2,\n info: 3,\n debug: 4,\n trace: 5,\n };\n\n const currentLevel = levels[this.level] ?? 3; // Default to info\n const targetLevel = levels[messageLevel] ?? 3;\n\n return targetLevel <= currentLevel;\n }\n\n private formatMeta(meta?: Record<string, unknown>): string {\n const combined = { ...this.bindings, ...meta };\n if (Object.keys(combined).length === 0) {\n return '';\n }\n return ' ' + JSON.stringify(combined);\n }\n\n info(message: string, meta?: Record<string, unknown>): void {\n if (this.shouldLog('info')) {\n console.log(`[INFO] ${message}${this.formatMeta(meta)}`);\n }\n }\n\n warn(message: string, meta?: Record<string, unknown>): void {\n if (this.shouldLog('warn')) {\n console.warn(`[WARN] ${message}${this.formatMeta(meta)}`);\n }\n }\n\n error(message: string, error?: Error, meta?: Record<string, unknown>): void {\n if (this.shouldLog('error')) {\n const errorMeta = error\n ? { ...meta, error: { message: error.message, stack: error.stack } }\n : meta;\n console.error(`[ERROR] ${message}${this.formatMeta(errorMeta)}`);\n }\n }\n\n fatal(message: string, error?: Error, meta?: Record<string, unknown>): void {\n if (this.shouldLog('error')) {\n const errorMeta = error\n ? { ...meta, error: { message: error.message, stack: error.stack } }\n : meta;\n console.error(`[FATAL] ${message}${this.formatMeta(errorMeta)}`);\n }\n }\n\n debug(message: string, meta?: Record<string, unknown>): void {\n if (this.shouldLog('debug')) {\n console.debug(`[DEBUG] ${message}${this.formatMeta(meta)}`);\n }\n }\n\n trace(message: string, meta?: Record<string, unknown>): void {\n if (this.shouldLog('trace')) {\n console.debug(`[TRACE] ${message}${this.formatMeta(meta)}`);\n }\n }\n\n child(bindings: Record<string, unknown>): ILogger {\n // Child logger inherits parent's level\n return new ConsoleLogger({ ...this.bindings, ...bindings }, this.level);\n }\n}\n\n/**\n * Silent logger that does nothing.\n * Useful for tests where you want to suppress all logging.\n */\nexport class NoOpLogger implements ILogger {\n info(_message: string, _meta?: Record<string, unknown>): void {\n // No-op\n }\n\n warn(_message: string, _meta?: Record<string, unknown>): void {\n // No-op\n }\n\n error(_message: string, _error?: Error, _meta?: Record<string, unknown>): void {\n // No-op\n }\n\n fatal(_message: string, _error?: Error, _meta?: Record<string, unknown>): void {\n // No-op\n }\n\n debug(_message: string, _meta?: Record<string, unknown>): void {\n // No-op\n }\n\n trace(_message: string, _meta?: Record<string, unknown>): void {\n // No-op\n }\n\n child(_bindings: Record<string, unknown>): ILogger {\n return this;\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/event-bus\n * In-memory event bus implementation.\n */\n\nimport type { IEventBus, EventHandler, Unsubscribe } from '../../adapters/event-bus.js';\n\n/**\n * In-memory event bus using Map of handlers.\n * Events are processed synchronously in order of subscription.\n */\nexport class MemoryEventBus implements IEventBus {\n private handlers = new Map<string, Set<EventHandler<unknown>>>();\n\n async publish<T>(topic: string, event: T): Promise<void> {\n const topicHandlers = this.handlers.get(topic);\n if (!topicHandlers) {\n return;\n }\n\n // Execute all handlers (in parallel for better performance)\n const promises = Array.from(topicHandlers).map((handler) =>\n handler(event).catch((err) => {\n console.error(`[EventBus] Handler error for topic \"${topic}\":`, err);\n })\n );\n\n await Promise.all(promises);\n }\n\n subscribe<T>(topic: string, handler: EventHandler<T>): Unsubscribe {\n let topicHandlers = this.handlers.get(topic);\n if (!topicHandlers) {\n topicHandlers = new Set();\n this.handlers.set(topic, topicHandlers);\n }\n\n topicHandlers.add(handler as EventHandler<unknown>);\n\n // Return unsubscribe function\n return () => {\n topicHandlers!.delete(handler as EventHandler<unknown>);\n if (topicHandlers!.size === 0) {\n this.handlers.delete(topic);\n }\n };\n }\n\n /**\n * Get the number of topics with subscribers (for testing).\n */\n get topicCount(): number {\n return this.handlers.size;\n }\n\n /**\n * Get the total number of handlers across all topics (for testing).\n */\n get handlerCount(): number {\n let count = 0;\n for (const handlers of this.handlers.values()) {\n count += handlers.size;\n }\n return count;\n }\n\n /**\n * Clear all subscriptions (for testing).\n */\n clear(): void {\n this.handlers.clear();\n }\n}\n\n/**\n * No-op event bus that does nothing.\n * Useful when event processing is not needed.\n */\nexport class NoOpEventBus implements IEventBus {\n async publish<T>(_topic: string, _event: T): Promise<void> {\n // No-op\n }\n\n subscribe<T>(_topic: string, _handler: EventHandler<T>): Unsubscribe {\n // Return no-op unsubscribe\n return () => {};\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/invoke\n * NoOp implementation of IInvoke.\n */\n\nimport type { IInvoke, InvokeRequest, InvokeResponse } from '../../adapters/invoke.js';\n\n/**\n * NoOp invoke implementation.\n * Returns error for all calls - invoke requires runtime to be configured.\n */\nexport class NoOpInvoke implements IInvoke {\n async call<T = unknown>(_request: InvokeRequest): Promise<InvokeResponse<T>> {\n return {\n success: false,\n error: 'Invoke not configured. Inter-plugin calls are not available.',\n };\n }\n\n async isAvailable(_pluginId: string, _command?: string): Promise<boolean> {\n return false;\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/artifacts\n * In-memory implementation of IArtifacts.\n */\n\nimport type {\n IArtifacts,\n ArtifactMeta,\n ArtifactWriteOptions,\n} from '../../adapters/artifacts.js';\n\n/**\n * In-memory artifacts storage.\n * Useful for testing and development.\n */\nexport class MemoryArtifacts implements IArtifacts {\n private store = new Map<string, { data: unknown; meta: ArtifactMeta }>();\n\n async write(\n key: string,\n data: unknown,\n options?: ArtifactWriteOptions\n ): Promise<void> {\n const now = new Date();\n const meta: ArtifactMeta = {\n key,\n contentType: options?.contentType ?? 'application/json',\n size: JSON.stringify(data).length,\n createdAt: this.store.get(key)?.meta.createdAt ?? now,\n updatedAt: now,\n metadata: options?.metadata,\n };\n this.store.set(key, { data, meta });\n }\n\n async read<T = unknown>(key: string): Promise<T | null> {\n const entry = this.store.get(key);\n return entry ? (entry.data as T) : null;\n }\n\n async exists(key: string): Promise<boolean> {\n return this.store.has(key);\n }\n\n async delete(key: string): Promise<void> {\n this.store.delete(key);\n }\n\n async list(prefix: string): Promise<ArtifactMeta[]> {\n const results: ArtifactMeta[] = [];\n for (const [key, entry] of this.store) {\n if (key.startsWith(prefix)) {\n results.push(entry.meta);\n }\n }\n return results;\n }\n\n async getMeta(key: string): Promise<ArtifactMeta | null> {\n const entry = this.store.get(key);\n return entry?.meta ?? null;\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/noop-platform\n * Factory for a fully no-op platform object.\n *\n * Assembles all existing no-op adapter implementations into a single object\n * that satisfies PlatformServices (plugin-contracts) structurally.\n *\n * Use in:\n * - Worker subprocess fallback (no IPC socket available)\n * - Tests that don't need real platform services\n *\n * @example\n * import { createNoOpPlatform } from '@kb-labs/core-platform/noop';\n * const platform = createNoOpPlatform();\n */\n\nimport { NoOpLogger } from './adapters/logger.js';\nimport { MockLLM } from './adapters/llm.js';\nimport { MemoryCache } from './adapters/cache.js';\nimport { MockEmbeddings } from './adapters/embeddings.js';\nimport { MemoryVectorStore } from './adapters/vector-store.js';\nimport { MemoryStorage } from './adapters/storage.js';\nimport { NoOpAnalytics } from './adapters/analytics.js';\nimport { NoOpEventBus } from './adapters/event-bus.js';\nimport type { ILogReader, LogCapabilities } from '../adapters/log-reader.js';\n\nconst noOpLogReader: ILogReader = {\n query: async () => ({ logs: [], total: 0, hasMore: false, source: 'buffer' as const }),\n getById: async () => null,\n search: async () => ({ logs: [], total: 0, hasMore: false }),\n subscribe: () => () => {},\n getStats: async () => ({}),\n getCapabilities: (): LogCapabilities => ({\n hasBuffer: false,\n hasPersistence: false,\n hasSearch: false,\n hasStreaming: false,\n }),\n};\n\nexport function createNoOpPlatform() {\n return {\n logger: new NoOpLogger(),\n llm: new MockLLM(),\n cache: new MemoryCache(),\n embeddings: new MockEmbeddings(),\n vectorStore: new MemoryVectorStore(),\n storage: new MemoryStorage(),\n analytics: new NoOpAnalytics(),\n eventBus: new NoOpEventBus(),\n logs: noOpLogReader,\n };\n}\n","/**\n * @module @kb-labs/core-platform/noop/core/workflow\n * NoOp workflow engine implementation.\n */\n\nimport type {\n IWorkflowEngine,\n WorkflowOptions,\n WorkflowRun,\n WorkflowFilter,\n} from '../../core/workflow.js';\n\n/**\n * NoOp workflow engine that throws errors.\n * Workflows are critical core features - use real implementation.\n */\nexport class NoOpWorkflowEngine implements IWorkflowEngine {\n async execute(\n _workflowId: string,\n _input: unknown,\n _options?: WorkflowOptions\n ): Promise<WorkflowRun> {\n throw new Error(\n 'Workflow engine not configured. Initialize platform with core-runtime.'\n );\n }\n\n async getStatus(_runId: string): Promise<WorkflowRun | null> {\n throw new Error(\n 'Workflow engine not configured. Initialize platform with core-runtime.'\n );\n }\n\n async cancel(_runId: string): Promise<void> {\n throw new Error(\n 'Workflow engine not configured. Initialize platform with core-runtime.'\n );\n }\n\n async retry(_runId: string, _fromStep?: string): Promise<WorkflowRun> {\n throw new Error(\n 'Workflow engine not configured. Initialize platform with core-runtime.'\n );\n }\n\n async list(_filter?: WorkflowFilter): Promise<WorkflowRun[]> {\n throw new Error(\n 'Workflow engine not configured. Initialize platform with core-runtime.'\n );\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/core/jobs\n * NoOp job scheduler implementation.\n */\n\nimport type {\n IJobScheduler,\n JobDefinition,\n JobHandle,\n JobFilter,\n CronExpression,\n} from '../../core/jobs.js';\n\n/**\n * NoOp job scheduler that executes jobs synchronously.\n * Useful for testing without background processing.\n */\nexport class NoOpJobScheduler implements IJobScheduler {\n private jobs = new Map<string, JobHandle>();\n private idCounter = 0;\n\n async submit(job: JobDefinition): Promise<JobHandle> {\n const id = `noop-job-${++this.idCounter}`;\n const handle: JobHandle = {\n id,\n type: job.type,\n tenantId: job.tenantId ?? 'default',\n status: 'completed',\n createdAt: new Date(),\n startedAt: new Date(),\n completedAt: new Date(),\n };\n\n this.jobs.set(id, handle);\n return handle;\n }\n\n async schedule(\n job: JobDefinition,\n _schedule: CronExpression | Date\n ): Promise<JobHandle> {\n // In NoOp mode, scheduled jobs are just submitted immediately\n return this.submit(job);\n }\n\n async cancel(jobId: string): Promise<boolean> {\n const job = this.jobs.get(jobId);\n if (!job) {\n return false;\n }\n\n job.status = 'cancelled';\n return true;\n }\n\n async getStatus(jobId: string): Promise<JobHandle | null> {\n return this.jobs.get(jobId) ?? null;\n }\n\n async list(filter?: JobFilter): Promise<JobHandle[]> {\n let results = Array.from(this.jobs.values());\n\n if (filter?.type) {\n results = results.filter((j) => j.type === filter.type);\n }\n if (filter?.status) {\n results = results.filter((j) => j.status === filter.status);\n }\n if (filter?.tenantId) {\n results = results.filter((j) => j.tenantId === filter.tenantId);\n }\n\n return results;\n }\n\n /**\n * Clear all jobs (for testing).\n */\n clear(): void {\n this.jobs.clear();\n this.idCounter = 0;\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/core/cron\n * NoOp cron manager implementation.\n */\n\nimport type {\n ICronManager,\n CronJob,\n CronHandler,\n} from '../../core/cron.js';\nimport type { CronExpression } from '../../core/jobs.js';\n\ninterface CronEntry {\n id: string;\n schedule: CronExpression;\n handler: CronHandler;\n status: 'active' | 'paused';\n lastRun?: Date;\n runCount: number;\n}\n\n/**\n * NoOp cron manager that stores registrations but doesn't schedule.\n * Use trigger() to manually execute cron jobs in tests.\n */\nexport class NoOpCronManager implements ICronManager {\n private cronJobs = new Map<string, CronEntry>();\n\n register(id: string, schedule: CronExpression, handler: CronHandler): void {\n this.cronJobs.set(id, {\n id,\n schedule,\n handler,\n status: 'active',\n runCount: 0,\n });\n }\n\n unregister(id: string): void {\n this.cronJobs.delete(id);\n }\n\n list(): CronJob[] {\n return Array.from(this.cronJobs.values()).map((entry) => ({\n id: entry.id,\n schedule: entry.schedule,\n status: entry.status,\n lastRun: entry.lastRun,\n nextRun: undefined, // NoOp doesn't calculate next run\n runCount: entry.runCount,\n }));\n }\n\n async trigger(id: string): Promise<void> {\n const entry = this.cronJobs.get(id);\n if (!entry) {\n throw new Error(`Cron job not found: ${id}`);\n }\n\n if (entry.status === 'paused') {\n throw new Error(`Cron job is paused: ${id}`);\n }\n\n const now = new Date();\n\n // Execute the handler\n await entry.handler({\n jobId: id,\n scheduledAt: now,\n executedAt: now,\n runCount: entry.runCount + 1,\n });\n\n entry.lastRun = now;\n entry.runCount++;\n }\n\n pause(id: string): void {\n const entry = this.cronJobs.get(id);\n if (entry) {\n entry.status = 'paused';\n }\n }\n\n resume(id: string): void {\n const entry = this.cronJobs.get(id);\n if (entry) {\n entry.status = 'active';\n }\n }\n\n /**\n * Clear all cron jobs (for testing).\n */\n clear(): void {\n this.cronJobs.clear();\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/core/resources\n * NoOp resource manager implementation.\n */\n\nimport type {\n IResourceManager,\n ResourceType,\n ResourceSlot,\n ResourceAvailability,\n TenantQuotas,\n} from '../../core/resources.js';\n\n/**\n * Default unlimited quotas for NoOp mode.\n */\nconst UNLIMITED_QUOTAS: TenantQuotas = {\n maxConcurrentWorkflows: Number.MAX_SAFE_INTEGER,\n maxConcurrentJobs: Number.MAX_SAFE_INTEGER,\n maxQueuedJobs: Number.MAX_SAFE_INTEGER,\n apiRequestsPerMinute: Number.MAX_SAFE_INTEGER,\n llmTokensPerDay: Number.MAX_SAFE_INTEGER,\n storageBytes: Number.MAX_SAFE_INTEGER,\n};\n\n/**\n * NoOp resource manager that always allows resource acquisition.\n * No actual quota enforcement - useful for testing.\n */\nexport class NoOpResourceManager implements IResourceManager {\n private quotas = new Map<string, TenantQuotas>();\n private slots = new Map<string, ResourceSlot>();\n private idCounter = 0;\n\n async acquireSlot(\n resource: ResourceType,\n tenantId: string,\n timeout?: number\n ): Promise<ResourceSlot | null> {\n const slot: ResourceSlot = {\n id: `noop-slot-${++this.idCounter}`,\n resource,\n tenantId,\n acquiredAt: new Date(),\n expiresAt: timeout ? new Date(Date.now() + timeout) : undefined,\n };\n\n this.slots.set(slot.id, slot);\n return slot;\n }\n\n async releaseSlot(slot: ResourceSlot): Promise<void> {\n this.slots.delete(slot.id);\n }\n\n async getAvailability(\n resource: ResourceType,\n tenantId?: string\n ): Promise<ResourceAvailability> {\n const usedSlots = Array.from(this.slots.values()).filter(\n (s) =>\n s.resource === resource && (!tenantId || s.tenantId === tenantId)\n );\n\n return {\n resource,\n total: Number.MAX_SAFE_INTEGER,\n used: usedSlots.length,\n available: Number.MAX_SAFE_INTEGER,\n queueLength: 0,\n };\n }\n\n async setQuota(tenantId: string, quotas: Partial<TenantQuotas>): Promise<void> {\n const existing = this.quotas.get(tenantId) ?? { ...UNLIMITED_QUOTAS };\n this.quotas.set(tenantId, { ...existing, ...quotas });\n }\n\n async getQuota(tenantId: string): Promise<TenantQuotas> {\n return this.quotas.get(tenantId) ?? { ...UNLIMITED_QUOTAS };\n }\n\n /**\n * Get the current number of active slots (for testing).\n */\n get activeSlotCount(): number {\n return this.slots.size;\n }\n\n /**\n * Clear all slots and quotas (for testing).\n */\n clear(): void {\n this.slots.clear();\n this.quotas.clear();\n this.idCounter = 0;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/noop/adapters/analytics.ts","../../src/noop/adapters/vector-store.ts","../../src/noop/adapters/llm.ts","../../src/noop/adapters/embeddings.ts","../../src/noop/adapters/cache.ts","../../src/noop/adapters/config.ts","../../src/noop/adapters/storage.ts","../../src/noop/adapters/logger.ts","../../src/noop/adapters/event-bus.ts","../../src/noop/adapters/invoke.ts","../../src/noop/adapters/database.ts","../../src/noop/noop-platform.ts","../../src/noop/core/workflow.ts","../../src/noop/core/jobs.ts","../../src/noop/core/cron.ts","../../src/noop/core/resources.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module @kb-labs/core-platform/noop/adapters/analytics\n * NoOp analytics implementation.\n */\n\nimport type { IAnalytics } from '../../adapters/analytics.js';\n\n/**\n * NoOp analytics - does nothing, safe for testing and development.\n */\nexport class NoOpAnalytics implements IAnalytics {\n async track(_event: string, _properties?: Record<string, unknown>): Promise<void> {\n // No-op\n }\n\n async identify(_userId: string, _traits?: Record<string, unknown>): Promise<void> {\n // No-op\n }\n\n async flush(): Promise<void> {\n // No-op\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/vector-store\n * In-memory vector store implementation.\n */\n\nimport type {\n IVectorStore,\n VectorRecord,\n VectorSearchResult,\n VectorFilter,\n} from '../../adapters/vector-store.js';\n\n/**\n * Simple cosine similarity calculation.\n */\nfunction cosineSimilarity(a: number[], b: number[]): number {\n if (a.length !== b.length) {return 0;}\n\n let dotProduct = 0;\n let normA = 0;\n let normB = 0;\n\n for (let i = 0; i < a.length; i++) {\n const aVal = a[i] ?? 0;\n const bVal = b[i] ?? 0;\n dotProduct += aVal * bVal;\n normA += aVal * aVal;\n normB += bVal * bVal;\n }\n\n const denominator = Math.sqrt(normA) * Math.sqrt(normB);\n return denominator === 0 ? 0 : dotProduct / denominator;\n}\n\n/**\n * Check if record matches filter.\n */\nfunction matchesFilter(record: VectorRecord, filter: VectorFilter): boolean {\n const value = record.metadata?.[filter.field];\n\n switch (filter.operator) {\n case 'eq':\n return value === filter.value;\n case 'ne':\n return value !== filter.value;\n case 'gt':\n return typeof value === 'number' && value > (filter.value as number);\n case 'gte':\n return typeof value === 'number' && value >= (filter.value as number);\n case 'lt':\n return typeof value === 'number' && value < (filter.value as number);\n case 'lte':\n return typeof value === 'number' && value <= (filter.value as number);\n case 'in':\n return Array.isArray(filter.value) && filter.value.includes(value);\n case 'nin':\n return Array.isArray(filter.value) && !filter.value.includes(value);\n default:\n return true;\n }\n}\n\n/**\n * In-memory vector store.\n * Suitable for testing and development.\n */\nexport class MemoryVectorStore implements IVectorStore {\n private vectors = new Map<string, VectorRecord>();\n\n async search(\n query: number[],\n limit: number,\n filter?: VectorFilter\n ): Promise<VectorSearchResult[]> {\n const results: VectorSearchResult[] = [];\n\n for (const record of this.vectors.values()) {\n if (filter && !matchesFilter(record, filter)) {\n continue;\n }\n\n const score = cosineSimilarity(query, record.vector);\n results.push({\n id: record.id,\n score,\n metadata: record.metadata,\n });\n }\n\n return results\n .sort((a, b) => b.score - a.score)\n .slice(0, limit);\n }\n\n async upsert(vectors: VectorRecord[]): Promise<void> {\n for (const vector of vectors) {\n this.vectors.set(vector.id, vector);\n }\n }\n\n async delete(ids: string[]): Promise<void> {\n for (const id of ids) {\n this.vectors.delete(id);\n }\n }\n\n async count(): Promise<number> {\n return this.vectors.size;\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/llm\n * Mock LLM implementation.\n */\n\nimport type {\n ILLM,\n LLMOptions,\n LLMResponse,\n LLMProtocolCapabilities,\n} from '../../adapters/llm.js';\n\n/**\n * Mock LLM that returns placeholder responses.\n * Useful for testing without API calls.\n */\nexport class MockLLM implements ILLM {\n getProtocolCapabilities(): LLMProtocolCapabilities {\n return {\n cache: { supported: false },\n stream: { supported: true },\n };\n }\n\n async complete(prompt: string, options?: LLMOptions): Promise<LLMResponse> {\n const content = `[Mock LLM Response] Received prompt of ${prompt.length} characters.`;\n\n return {\n content,\n usage: {\n promptTokens: Math.ceil(prompt.length / 4),\n completionTokens: Math.ceil(content.length / 4),\n },\n model: options?.model ?? 'mock-model',\n };\n }\n\n async *stream(prompt: string, options?: LLMOptions): AsyncIterable<string> {\n const response = `[Mock LLM Stream] Received prompt of ${prompt.length} characters.`;\n const words = response.split(' ');\n\n for (const word of words) {\n yield word + ' ';\n await new Promise((resolve) => {\n setTimeout(resolve, 50);\n });\n }\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/embeddings\n * Mock embeddings implementation.\n */\n\nimport type { IEmbeddings } from '../../adapters/embeddings.js';\n\n/**\n * Mock embeddings that generates deterministic vectors based on text hash.\n * Useful for testing without API calls.\n */\nexport class MockEmbeddings implements IEmbeddings {\n readonly dimensions = 1536;\n\n /**\n * Simple hash function for deterministic embedding generation.\n */\n private hash(text: string): number {\n let hash = 0;\n for (let i = 0; i < text.length; i++) {\n const char = text.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return hash;\n }\n\n /**\n * Generate a deterministic vector based on text.\n */\n private generateVector(text: string): number[] {\n const seed = this.hash(text);\n const vector: number[] = [];\n\n for (let i = 0; i < this.dimensions; i++) {\n // Use seeded pseudo-random to generate consistent vectors\n const value = Math.sin(seed * (i + 1)) * 0.5;\n vector.push(value);\n }\n\n // Normalize the vector\n const magnitude = Math.sqrt(vector.reduce((sum, v) => sum + v * v, 0));\n return vector.map((v) => v / magnitude);\n }\n\n async embed(text: string): Promise<number[]> {\n return this.generateVector(text);\n }\n\n async embedBatch(texts: string[]): Promise<number[][]> {\n return texts.map((text) => this.generateVector(text));\n }\n\n /**\n * Get the dimensions of the embeddings.\n * This method is needed for IPC/Unix Socket transport to access the dimensions property.\n */\n async getDimensions(): Promise<number> {\n return this.dimensions;\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/cache\n * In-memory cache implementation.\n */\n\nimport type { ICache } from '../../adapters/cache.js';\n\ninterface CacheEntry<T> {\n value: T;\n expiresAt: number | null;\n}\n\ninterface SortedSetMember {\n score: number;\n member: string;\n}\n\n/**\n * In-memory cache with TTL support.\n * Useful for testing and local development.\n */\nexport class MemoryCache implements ICache {\n private store = new Map<string, CacheEntry<unknown>>();\n private sortedSets = new Map<string, SortedSetMember[]>();\n\n async get<T>(key: string): Promise<T | null> {\n const entry = this.store.get(key) as CacheEntry<T> | undefined;\n\n if (!entry) {\n return null;\n }\n\n // Check expiration\n if (entry.expiresAt !== null && Date.now() > entry.expiresAt) {\n this.store.delete(key);\n return null;\n }\n\n return entry.value;\n }\n\n async set<T>(key: string, value: T, ttl?: number): Promise<void> {\n const expiresAt = ttl ? Date.now() + ttl : null;\n this.store.set(key, { value, expiresAt });\n }\n\n async delete(key: string): Promise<void> {\n this.store.delete(key);\n }\n\n async clear(pattern?: string): Promise<void> {\n if (!pattern) {\n this.store.clear();\n return;\n }\n\n // Simple glob pattern matching (supports * wildcard)\n const regex = new RegExp('^' + pattern.replace(/\\*/g, '.*') + '$');\n for (const key of this.store.keys()) {\n if (regex.test(key)) {\n this.store.delete(key);\n }\n }\n }\n\n // ═══════════════════════════════════════════════════════════════════════\n // Sorted Set Operations\n // ═══════════════════════════════════════════════════════════════════════\n\n async zadd(key: string, score: number, member: string): Promise<void> {\n let set = this.sortedSets.get(key);\n if (!set) {\n set = [];\n this.sortedSets.set(key, set);\n }\n\n // Remove existing member if present\n const existingIndex = set.findIndex(m => m.member === member);\n if (existingIndex !== -1) {\n set.splice(existingIndex, 1);\n }\n\n // Add new member and sort by score\n set.push({ score, member });\n set.sort((a, b) => a.score - b.score);\n }\n\n async zrangebyscore(key: string, min: number, max: number): Promise<string[]> {\n const set = this.sortedSets.get(key);\n if (!set) {\n return [];\n }\n\n return set\n .filter(m => m.score >= min && m.score <= max)\n .map(m => m.member);\n }\n\n async zrem(key: string, member: string): Promise<void> {\n const set = this.sortedSets.get(key);\n if (!set) {\n return;\n }\n\n const index = set.findIndex(m => m.member === member);\n if (index !== -1) {\n set.splice(index, 1);\n }\n\n // Clean up empty sets\n if (set.length === 0) {\n this.sortedSets.delete(key);\n }\n }\n\n // ═══════════════════════════════════════════════════════════════════════\n // Atomic Operations\n // ═══════════════════════════════════════════════════════════════════════\n\n async setIfNotExists<T>(key: string, value: T, ttl?: number): Promise<boolean> {\n // Check if key already exists\n if (this.store.has(key)) {\n return false;\n }\n\n // Key doesn't exist, set it\n await this.set(key, value, ttl);\n return true;\n }\n\n /**\n * Get the current number of entries (for testing).\n */\n get size(): number {\n return this.store.size;\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/config\n * NoOp config implementation.\n */\n\nimport type { IConfig } from '../../adapters/config.js';\n\n/**\n * NoOp config - returns undefined for all queries.\n * Safe fallback when no config is loaded.\n */\nexport class NoOpConfig implements IConfig {\n async getConfig(_productId: string, _profileId?: string): Promise<any> {\n return undefined;\n }\n\n async getRawConfig(): Promise<any> {\n return undefined;\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/storage\n * In-memory storage implementation.\n */\n\nimport type { IStorage, StorageMetadata } from '../../adapters/storage.js';\n\n/**\n * In-memory storage for testing and local development.\n * Data is lost when the process exits.\n */\nexport class MemoryStorage implements IStorage {\n private store = new Map<string, Buffer>();\n\n async read(path: string): Promise<Buffer | null> {\n return this.store.get(path) ?? null;\n }\n\n async write(path: string, data: Buffer): Promise<void> {\n this.store.set(path, data);\n }\n\n async delete(path: string): Promise<void> {\n this.store.delete(path);\n }\n\n async list(prefix: string): Promise<string[]> {\n const results: string[] = [];\n for (const key of this.store.keys()) {\n if (key.startsWith(prefix)) {\n results.push(key);\n }\n }\n return results.sort();\n }\n\n async exists(path: string): Promise<boolean> {\n return this.store.has(path);\n }\n\n /**\n * Get file metadata.\n * Optional method - implements IStorage.stat().\n */\n async stat(path: string): Promise<StorageMetadata | null> {\n const data = this.store.get(path);\n if (!data) {return null;}\n\n return {\n path,\n size: data.byteLength,\n lastModified: new Date().toISOString(),\n contentType: 'application/octet-stream',\n };\n }\n\n /**\n * Copy file.\n * Optional method - implements IStorage.copy().\n */\n async copy(sourcePath: string, destPath: string): Promise<void> {\n const data = this.store.get(sourcePath);\n if (!data) {\n throw new Error(`Source file not found: ${sourcePath}`);\n }\n // Copy buffer (create new instance)\n this.store.set(destPath, Buffer.from(data));\n }\n\n /**\n * Move file.\n * Optional method - implements IStorage.move().\n */\n async move(sourcePath: string, destPath: string): Promise<void> {\n const data = this.store.get(sourcePath);\n if (!data) {\n throw new Error(`Source file not found: ${sourcePath}`);\n }\n this.store.set(destPath, data);\n this.store.delete(sourcePath);\n }\n\n /**\n * List files with metadata.\n * Optional method - implements IStorage.listWithMetadata().\n */\n async listWithMetadata(prefix: string): Promise<StorageMetadata[]> {\n const results: StorageMetadata[] = [];\n for (const [path, data] of this.store.entries()) {\n if (path.startsWith(prefix)) {\n results.push({\n path,\n size: data.byteLength,\n lastModified: new Date().toISOString(),\n contentType: 'application/octet-stream',\n });\n }\n }\n return results.sort((a, b) => a.path.localeCompare(b.path));\n }\n\n /**\n * Get the current number of stored files (for testing).\n */\n get size(): number {\n return this.store.size;\n }\n\n /**\n * Clear all storage (for testing).\n */\n clear(): void {\n this.store.clear();\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/logger\n * Console-based logger implementation.\n */\n\nimport type { ILogger } from '../../adapters/logger.js';\n\n/**\n * Log level type.\n */\ntype LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug' | 'trace';\n\n/**\n * Simple console logger with log level support.\n * Respects KB_LOG_LEVEL environment variable.\n * Outputs to console.log/warn/error/debug with JSON metadata.\n */\nexport class ConsoleLogger implements ILogger {\n private bindings: Record<string, unknown>;\n private level: LogLevel;\n\n constructor(bindings: Record<string, unknown> = {}, level?: LogLevel) {\n this.bindings = bindings;\n // Read from env or use provided level (default: 'info')\n this.level = level ?? (process.env.KB_LOG_LEVEL as LogLevel) ?? 'info';\n }\n\n private shouldLog(messageLevel: LogLevel): boolean {\n const levels: Record<LogLevel, number> = {\n silent: 0,\n error: 1,\n warn: 2,\n info: 3,\n debug: 4,\n trace: 5,\n };\n\n const currentLevel = levels[this.level] ?? 3; // Default to info\n const targetLevel = levels[messageLevel] ?? 3;\n\n return targetLevel <= currentLevel;\n }\n\n private formatMeta(meta?: Record<string, unknown>): string {\n const combined = { ...this.bindings, ...meta };\n if (Object.keys(combined).length === 0) {\n return '';\n }\n return ' ' + JSON.stringify(combined);\n }\n\n info(message: string, meta?: Record<string, unknown>): void {\n if (this.shouldLog('info')) {\n console.log(`[INFO] ${message}${this.formatMeta(meta)}`);\n }\n }\n\n warn(message: string, meta?: Record<string, unknown>): void {\n if (this.shouldLog('warn')) {\n console.warn(`[WARN] ${message}${this.formatMeta(meta)}`);\n }\n }\n\n error(message: string, error?: Error, meta?: Record<string, unknown>): void {\n if (this.shouldLog('error')) {\n const errorMeta = error\n ? { ...meta, error: { message: error.message, stack: error.stack } }\n : meta;\n console.error(`[ERROR] ${message}${this.formatMeta(errorMeta)}`);\n }\n }\n\n fatal(message: string, error?: Error, meta?: Record<string, unknown>): void {\n if (this.shouldLog('error')) {\n const errorMeta = error\n ? { ...meta, error: { message: error.message, stack: error.stack } }\n : meta;\n console.error(`[FATAL] ${message}${this.formatMeta(errorMeta)}`);\n }\n }\n\n debug(message: string, meta?: Record<string, unknown>): void {\n if (this.shouldLog('debug')) {\n console.debug(`[DEBUG] ${message}${this.formatMeta(meta)}`);\n }\n }\n\n trace(message: string, meta?: Record<string, unknown>): void {\n if (this.shouldLog('trace')) {\n console.debug(`[TRACE] ${message}${this.formatMeta(meta)}`);\n }\n }\n\n child(bindings: Record<string, unknown>): ILogger {\n // Child logger inherits parent's level\n return new ConsoleLogger({ ...this.bindings, ...bindings }, this.level);\n }\n}\n\n/**\n * Silent logger that does nothing.\n * Useful for tests where you want to suppress all logging.\n */\nexport class NoOpLogger implements ILogger {\n info(_message: string, _meta?: Record<string, unknown>): void {\n // No-op\n }\n\n warn(_message: string, _meta?: Record<string, unknown>): void {\n // No-op\n }\n\n error(_message: string, _error?: Error, _meta?: Record<string, unknown>): void {\n // No-op\n }\n\n fatal(_message: string, _error?: Error, _meta?: Record<string, unknown>): void {\n // No-op\n }\n\n debug(_message: string, _meta?: Record<string, unknown>): void {\n // No-op\n }\n\n trace(_message: string, _meta?: Record<string, unknown>): void {\n // No-op\n }\n\n child(_bindings: Record<string, unknown>): ILogger {\n return this;\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/event-bus\n * In-memory event bus implementation.\n */\n\nimport type { IEventBus, EventHandler, Unsubscribe } from '../../adapters/event-bus.js';\n\n/**\n * In-memory event bus using Map of handlers.\n * Events are processed synchronously in order of subscription.\n */\nexport class MemoryEventBus implements IEventBus {\n private handlers = new Map<string, Set<EventHandler<unknown>>>();\n\n async publish<T>(topic: string, event: T): Promise<void> {\n const topicHandlers = this.handlers.get(topic);\n if (!topicHandlers) {\n return;\n }\n\n // Execute all handlers (in parallel for better performance)\n const promises = Array.from(topicHandlers).map((handler) =>\n handler(event).catch((err) => {\n console.error(`[EventBus] Handler error for topic \"${topic}\":`, err);\n })\n );\n\n await Promise.all(promises);\n }\n\n subscribe<T>(topic: string, handler: EventHandler<T>): Unsubscribe {\n let topicHandlers = this.handlers.get(topic);\n if (!topicHandlers) {\n topicHandlers = new Set();\n this.handlers.set(topic, topicHandlers);\n }\n\n topicHandlers.add(handler as EventHandler<unknown>);\n\n // Return unsubscribe function\n return () => {\n topicHandlers!.delete(handler as EventHandler<unknown>);\n if (topicHandlers!.size === 0) {\n this.handlers.delete(topic);\n }\n };\n }\n\n /**\n * Get the number of topics with subscribers (for testing).\n */\n get topicCount(): number {\n return this.handlers.size;\n }\n\n /**\n * Get the total number of handlers across all topics (for testing).\n */\n get handlerCount(): number {\n let count = 0;\n for (const handlers of this.handlers.values()) {\n count += handlers.size;\n }\n return count;\n }\n\n /**\n * Clear all subscriptions (for testing).\n */\n clear(): void {\n this.handlers.clear();\n }\n}\n\n/**\n * No-op event bus that does nothing.\n * Useful when event processing is not needed.\n */\nexport class NoOpEventBus implements IEventBus {\n async publish<T>(_topic: string, _event: T): Promise<void> {\n // No-op\n }\n\n subscribe<T>(_topic: string, _handler: EventHandler<T>): Unsubscribe {\n // Return no-op unsubscribe\n return () => {};\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/invoke\n * NoOp implementation of IInvoke.\n */\n\nimport type { IInvoke, InvokeRequest, InvokeResponse } from '../../adapters/invoke.js';\n\n/**\n * NoOp invoke implementation.\n * Returns error for all calls - invoke requires runtime to be configured.\n */\nexport class NoOpInvoke implements IInvoke {\n async call<T = unknown>(_request: InvokeRequest): Promise<InvokeResponse<T>> {\n return {\n success: false,\n error: 'Invoke not configured. Inter-plugin calls are not available.',\n };\n }\n\n async isAvailable(_pluginId: string, _command?: string): Promise<boolean> {\n return false;\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/adapters/database\n * NoOp database implementations for testing.\n *\n * These adapters throw errors when called - they exist only to satisfy\n * type requirements when database access is not configured.\n */\n\nimport type {\n ISQLDatabase,\n SQLQueryResult,\n SQLTransaction,\n IDocumentDatabase,\n BaseDocument,\n DocumentFilter,\n DocumentUpdate,\n FindOptions,\n IKeyValueDatabase,\n ITimeSeriesDatabase,\n TimeSeriesPoint,\n IDatabaseProvider,\n} from '../../adapters/database.js';\n\n// ============================================================================\n// SQL DATABASE (NoOp)\n// ============================================================================\n\n/**\n * NoOp SQL database - throws on all operations.\n * Used when SQL database is not configured.\n */\nexport class NoOpSQLDatabase implements ISQLDatabase {\n async query<T = unknown>(_sql: string, _params?: unknown[]): Promise<SQLQueryResult<T>> {\n throw new Error('SQL database not configured');\n }\n\n async transaction(): Promise<SQLTransaction> {\n throw new Error('SQL database not configured');\n }\n\n async close(): Promise<void> {\n // NoOp - nothing to close\n }\n}\n\n// ============================================================================\n// DOCUMENT DATABASE (NoOp)\n// ============================================================================\n\n/**\n * NoOp document database - throws on all operations.\n * Used when document database is not configured.\n */\nexport class NoOpDocumentDatabase implements IDocumentDatabase {\n async find<T extends BaseDocument>(\n _collection: string,\n _filter: DocumentFilter<T>,\n _options?: FindOptions\n ): Promise<T[]> {\n throw new Error('Document database not configured');\n }\n\n async findById<T extends BaseDocument>(_collection: string, _id: string): Promise<T | null> {\n throw new Error('Document database not configured');\n }\n\n async insertOne<T extends BaseDocument>(\n _collection: string,\n _document: Omit<T, 'id' | 'createdAt' | 'updatedAt'>\n ): Promise<T> {\n throw new Error('Document database not configured');\n }\n\n async updateMany<T extends BaseDocument>(\n _collection: string,\n _filter: DocumentFilter<T>,\n _update: DocumentUpdate<T>\n ): Promise<number> {\n throw new Error('Document database not configured');\n }\n\n async updateById<T extends BaseDocument>(\n _collection: string,\n _id: string,\n _update: DocumentUpdate<T>\n ): Promise<T | null> {\n throw new Error('Document database not configured');\n }\n\n async deleteMany<T extends BaseDocument>(_collection: string, _filter: DocumentFilter<T>): Promise<number> {\n throw new Error('Document database not configured');\n }\n\n async deleteById(_collection: string, _id: string): Promise<boolean> {\n throw new Error('Document database not configured');\n }\n\n async count<T extends BaseDocument>(_collection: string, _filter: DocumentFilter<T>): Promise<number> {\n throw new Error('Document database not configured');\n }\n\n async close(): Promise<void> {\n // NoOp - nothing to close\n }\n}\n\n// ============================================================================\n// KEY-VALUE DATABASE (NoOp)\n// ============================================================================\n\n/**\n * NoOp key-value database - throws on all operations.\n * Used when KV database is not configured.\n */\nexport class NoOpKVDatabase implements IKeyValueDatabase {\n async get(_key: string): Promise<string | null> {\n throw new Error('Key-value database not configured');\n }\n\n async set(_key: string, _value: string, _ttlMs?: number): Promise<void> {\n throw new Error('Key-value database not configured');\n }\n\n async delete(_key: string): Promise<boolean> {\n throw new Error('Key-value database not configured');\n }\n\n async exists(_key: string): Promise<boolean> {\n throw new Error('Key-value database not configured');\n }\n\n async keys(_pattern: string): Promise<string[]> {\n throw new Error('Key-value database not configured');\n }\n\n async close(): Promise<void> {\n // NoOp - nothing to close\n }\n}\n\n// ============================================================================\n// TIME-SERIES DATABASE (NoOp)\n// ============================================================================\n\n/**\n * NoOp time-series database - throws on all operations.\n * Used when time-series database is not configured.\n */\nexport class NoOpTimeSeriesDatabase implements ITimeSeriesDatabase {\n async write(_metric: string, _point: TimeSeriesPoint): Promise<void> {\n throw new Error('Time-series database not configured');\n }\n\n async writeBatch(_metric: string, _points: TimeSeriesPoint[]): Promise<void> {\n throw new Error('Time-series database not configured');\n }\n\n async query(\n _metric: string,\n _startTime: number,\n _endTime: number,\n _tags?: Record<string, string>\n ): Promise<TimeSeriesPoint[]> {\n throw new Error('Time-series database not configured');\n }\n\n async close(): Promise<void> {\n // NoOp - nothing to close\n }\n}\n\n// ============================================================================\n// DATABASE PROVIDER (NoOp)\n// ============================================================================\n\n/**\n * NoOp database provider - returns NoOp adapters for all database types.\n * Used when databases are not configured.\n */\nexport class NoOpDatabaseProvider implements IDatabaseProvider {\n async getSQLDatabase(_name: string): Promise<ISQLDatabase> {\n return new NoOpSQLDatabase();\n }\n\n async getDocumentDatabase(_name: string): Promise<IDocumentDatabase> {\n return new NoOpDocumentDatabase();\n }\n\n async getKeyValueDatabase(_name: string): Promise<IKeyValueDatabase> {\n return new NoOpKVDatabase();\n }\n\n async getTimeSeriesDatabase(_name: string): Promise<ITimeSeriesDatabase> {\n return new NoOpTimeSeriesDatabase();\n }\n\n async close(): Promise<void> {\n // NoOp - nothing to close\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/noop-platform\n * Factory for a fully no-op platform object.\n *\n * Assembles all existing no-op adapter implementations into a single object\n * that satisfies PlatformServices (plugin-contracts) structurally.\n *\n * Use in:\n * - Worker subprocess fallback (no IPC socket available)\n * - Tests that don't need real platform services\n *\n * @example\n * import { createNoOpPlatform } from '@kb-labs/core-platform/noop';\n * const platform = createNoOpPlatform();\n */\n\nimport { NoOpLogger } from './adapters/logger.js';\nimport { MockLLM } from './adapters/llm.js';\nimport { MemoryCache } from './adapters/cache.js';\nimport { MockEmbeddings } from './adapters/embeddings.js';\nimport { MemoryVectorStore } from './adapters/vector-store.js';\nimport { MemoryStorage } from './adapters/storage.js';\nimport { NoOpAnalytics } from './adapters/analytics.js';\nimport { NoOpEventBus } from './adapters/event-bus.js';\nimport type { ILogReader, LogCapabilities } from '../adapters/log-reader.js';\n\nconst noOpLogReader: ILogReader = {\n query: async () => ({ logs: [], total: 0, hasMore: false, source: 'buffer' as const }),\n getById: async () => null,\n search: async () => ({ logs: [], total: 0, hasMore: false }),\n subscribe: () => () => {},\n getStats: async () => ({}),\n getCapabilities: (): LogCapabilities => ({\n hasBuffer: false,\n hasPersistence: false,\n hasSearch: false,\n hasStreaming: false,\n }),\n};\n\nexport function createNoOpPlatform() {\n return {\n logger: new NoOpLogger(),\n llm: new MockLLM(),\n cache: new MemoryCache(),\n embeddings: new MockEmbeddings(),\n vectorStore: new MemoryVectorStore(),\n storage: new MemoryStorage(),\n analytics: new NoOpAnalytics(),\n eventBus: new NoOpEventBus(),\n logs: noOpLogReader,\n };\n}\n","/**\n * @module @kb-labs/core-platform/noop/core/workflow\n * NoOp workflow engine implementation.\n */\n\nimport type {\n IWorkflowEngine,\n WorkflowOptions,\n WorkflowRun,\n WorkflowFilter,\n} from '../../core/workflow.js';\n\n/**\n * NoOp workflow engine that throws errors.\n * Workflows are critical core features - use real implementation.\n */\nexport class NoOpWorkflowEngine implements IWorkflowEngine {\n async execute(\n _workflowId: string,\n _input: unknown,\n _options?: WorkflowOptions\n ): Promise<WorkflowRun> {\n throw new Error(\n 'Workflow engine not configured. Initialize platform with core-runtime.'\n );\n }\n\n async getStatus(_runId: string): Promise<WorkflowRun | null> {\n throw new Error(\n 'Workflow engine not configured. Initialize platform with core-runtime.'\n );\n }\n\n async cancel(_runId: string): Promise<void> {\n throw new Error(\n 'Workflow engine not configured. Initialize platform with core-runtime.'\n );\n }\n\n async retry(_runId: string, _fromStep?: string): Promise<WorkflowRun> {\n throw new Error(\n 'Workflow engine not configured. Initialize platform with core-runtime.'\n );\n }\n\n async list(_filter?: WorkflowFilter): Promise<WorkflowRun[]> {\n throw new Error(\n 'Workflow engine not configured. Initialize platform with core-runtime.'\n );\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/core/jobs\n * NoOp job scheduler implementation.\n */\n\nimport type {\n IJobScheduler,\n JobDefinition,\n JobHandle,\n JobFilter,\n CronExpression,\n} from '../../core/jobs.js';\n\n/**\n * NoOp job scheduler that executes jobs synchronously.\n * Useful for testing without background processing.\n */\nexport class NoOpJobScheduler implements IJobScheduler {\n private jobs = new Map<string, JobHandle>();\n private idCounter = 0;\n\n async submit(job: JobDefinition): Promise<JobHandle> {\n const id = `noop-job-${++this.idCounter}`;\n const handle: JobHandle = {\n id,\n type: job.type,\n tenantId: job.tenantId ?? 'default',\n status: 'completed',\n createdAt: new Date(),\n startedAt: new Date(),\n completedAt: new Date(),\n };\n\n this.jobs.set(id, handle);\n return handle;\n }\n\n async schedule(\n job: JobDefinition,\n _schedule: CronExpression | Date\n ): Promise<JobHandle> {\n // In NoOp mode, scheduled jobs are just submitted immediately\n return this.submit(job);\n }\n\n async cancel(jobId: string): Promise<boolean> {\n const job = this.jobs.get(jobId);\n if (!job) {\n return false;\n }\n\n job.status = 'cancelled';\n return true;\n }\n\n async getStatus(jobId: string): Promise<JobHandle | null> {\n return this.jobs.get(jobId) ?? null;\n }\n\n async list(filter?: JobFilter): Promise<JobHandle[]> {\n let results = Array.from(this.jobs.values());\n\n if (filter?.type) {\n results = results.filter((j) => j.type === filter.type);\n }\n if (filter?.status) {\n results = results.filter((j) => j.status === filter.status);\n }\n if (filter?.tenantId) {\n results = results.filter((j) => j.tenantId === filter.tenantId);\n }\n\n return results;\n }\n\n /**\n * Clear all jobs (for testing).\n */\n clear(): void {\n this.jobs.clear();\n this.idCounter = 0;\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/core/cron\n * NoOp cron manager implementation.\n */\n\nimport type {\n ICronManager,\n CronJob,\n CronHandler,\n} from '../../core/cron.js';\nimport type { CronExpression } from '../../core/jobs.js';\n\ninterface CronEntry {\n id: string;\n schedule: CronExpression;\n handler: CronHandler;\n status: 'active' | 'paused';\n lastRun?: Date;\n runCount: number;\n}\n\n/**\n * NoOp cron manager that stores registrations but doesn't schedule.\n * Use trigger() to manually execute cron jobs in tests.\n */\nexport class NoOpCronManager implements ICronManager {\n private cronJobs = new Map<string, CronEntry>();\n\n register(id: string, schedule: CronExpression, handler: CronHandler): void {\n this.cronJobs.set(id, {\n id,\n schedule,\n handler,\n status: 'active',\n runCount: 0,\n });\n }\n\n unregister(id: string): void {\n this.cronJobs.delete(id);\n }\n\n list(): CronJob[] {\n return Array.from(this.cronJobs.values()).map((entry) => ({\n id: entry.id,\n schedule: entry.schedule,\n status: entry.status,\n lastRun: entry.lastRun,\n nextRun: undefined, // NoOp doesn't calculate next run\n runCount: entry.runCount,\n }));\n }\n\n async trigger(id: string): Promise<void> {\n const entry = this.cronJobs.get(id);\n if (!entry) {\n throw new Error(`Cron job not found: ${id}`);\n }\n\n if (entry.status === 'paused') {\n throw new Error(`Cron job is paused: ${id}`);\n }\n\n const now = new Date();\n\n // Execute the handler\n await entry.handler({\n jobId: id,\n scheduledAt: now,\n executedAt: now,\n runCount: entry.runCount + 1,\n });\n\n entry.lastRun = now;\n entry.runCount++;\n }\n\n pause(id: string): void {\n const entry = this.cronJobs.get(id);\n if (entry) {\n entry.status = 'paused';\n }\n }\n\n resume(id: string): void {\n const entry = this.cronJobs.get(id);\n if (entry) {\n entry.status = 'active';\n }\n }\n\n /**\n * Clear all cron jobs (for testing).\n */\n clear(): void {\n this.cronJobs.clear();\n }\n}\n","/**\n * @module @kb-labs/core-platform/noop/core/resources\n * NoOp resource manager implementation.\n */\n\nimport type {\n IResourceManager,\n ResourceType,\n ResourceSlot,\n ResourceAvailability,\n TenantQuotas,\n} from '../../core/resources.js';\n\n/**\n * Default unlimited quotas for NoOp mode.\n */\nconst UNLIMITED_QUOTAS: TenantQuotas = {\n maxConcurrentWorkflows: Number.MAX_SAFE_INTEGER,\n maxConcurrentJobs: Number.MAX_SAFE_INTEGER,\n maxQueuedJobs: Number.MAX_SAFE_INTEGER,\n apiRequestsPerMinute: Number.MAX_SAFE_INTEGER,\n llmTokensPerDay: Number.MAX_SAFE_INTEGER,\n storageBytes: Number.MAX_SAFE_INTEGER,\n};\n\n/**\n * NoOp resource manager that always allows resource acquisition.\n * No actual quota enforcement - useful for testing.\n */\nexport class NoOpResourceManager implements IResourceManager {\n private quotas = new Map<string, TenantQuotas>();\n private slots = new Map<string, ResourceSlot>();\n private idCounter = 0;\n\n async acquireSlot(\n resource: ResourceType,\n tenantId: string,\n timeout?: number\n ): Promise<ResourceSlot | null> {\n const slot: ResourceSlot = {\n id: `noop-slot-${++this.idCounter}`,\n resource,\n tenantId,\n acquiredAt: new Date(),\n expiresAt: timeout ? new Date(Date.now() + timeout) : undefined,\n };\n\n this.slots.set(slot.id, slot);\n return slot;\n }\n\n async releaseSlot(slot: ResourceSlot): Promise<void> {\n this.slots.delete(slot.id);\n }\n\n async getAvailability(\n resource: ResourceType,\n tenantId?: string\n ): Promise<ResourceAvailability> {\n const usedSlots = Array.from(this.slots.values()).filter(\n (s) =>\n s.resource === resource && (!tenantId || s.tenantId === tenantId)\n );\n\n return {\n resource,\n total: Number.MAX_SAFE_INTEGER,\n used: usedSlots.length,\n available: Number.MAX_SAFE_INTEGER,\n queueLength: 0,\n };\n }\n\n async setQuota(tenantId: string, quotas: Partial<TenantQuotas>): Promise<void> {\n const existing = this.quotas.get(tenantId) ?? { ...UNLIMITED_QUOTAS };\n this.quotas.set(tenantId, { ...existing, ...quotas });\n }\n\n async getQuota(tenantId: string): Promise<TenantQuotas> {\n return this.quotas.get(tenantId) ?? { ...UNLIMITED_QUOTAS };\n }\n\n /**\n * Get the current number of active slots (for testing).\n */\n get activeSlotCount(): number {\n return this.slots.size;\n }\n\n /**\n * Clear all slots and quotas (for testing).\n */\n clear(): void {\n this.slots.clear();\n this.quotas.clear();\n this.idCounter = 0;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/serializable/types.ts","../../src/serializable/serializer.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @module @kb-labs/core-platform/serializable\n * IPC serialization types for cross-process adapter communication.\n *\n * This module defines the protocol for serializing adapter method calls\n * and responses across process boundaries using IPC (Inter-Process Communication).\n *\n * @example\n * ```typescript\n * import { AdapterCall, AdapterResponse } from '@kb-labs/core-platform/serializable';\n *\n * const call: AdapterCall = {\n * type: 'adapter:call',\n * requestId: 'uuid-123',\n * adapter: 'vectorStore',\n * method: 'search',\n * args: [[0.1, 0.2, 0.3], 10],\n * timeout: 30000,\n * };\n * ```\n */\n\n/**\n * Special type for serialized Buffer instances.\n * Buffers are converted to base64 strings for transmission.\n */\nexport interface SerializableBuffer {\n __type: 'Buffer';\n data: string; // base64 encoded\n}\n\n/**\n * Special type for serialized Date instances.\n * Dates are converted to ISO 8601 strings for transmission.\n */\nexport interface SerializableDate {\n __type: 'Date';\n iso: string; // ISO 8601 format\n}\n\n/**\n * Special type for serialized Error instances.\n * Errors are converted to structured objects with name, message, stack, and optional code.\n */\nexport interface SerializableError {\n __type: 'Error';\n name: string;\n message: string;\n stack?: string;\n code?: string;\n}\n\n/**\n * Values that can be safely serialized over IPC/network.\n *\n * Supports:\n * - Primitives: null, boolean, number, string\n * - Special types: Buffer, Date, Error\n * - Collections: Array, Object\n *\n * Does NOT support:\n * - Functions\n * - Symbols (except as object keys after serialization)\n * - WeakMap/WeakSet\n * - Circular references (will be detected and throw error)\n */\nexport type SerializableValue =\n | null\n | boolean\n | number\n | string\n | SerializableBuffer\n | SerializableDate\n | SerializableError\n | SerializableArray\n | SerializableObject;\n\n/**\n * Serializable array - all elements must be SerializableValue\n */\nexport type SerializableArray = SerializableValue[];\n\n/**\n * Serializable object - all values must be SerializableValue\n */\nexport type SerializableObject = { [key: string]: SerializableValue };\n\n/**\n * Adapter types supported by the IPC protocol.\n *\n * These correspond to the adapters available in PlatformContainer:\n * - vectorStore: IVectorStore\n * - cache: ICache\n * - llm: ILLM\n * - embeddings: IEmbeddings\n * - storage: IStorage\n * - logger: ILogger\n * - analytics: IAnalytics\n * - eventBus: IEventBus\n * - invoke: IInvoke\n * - artifacts: IArtifacts\n */\nexport type AdapterType =\n | 'vectorStore'\n | 'cache'\n | 'config'\n | 'llm'\n | 'embeddings'\n | 'storage'\n | 'logger'\n | 'analytics'\n | 'eventBus'\n | 'invoke'\n | 'artifacts'\n | 'database.document'\n | 'database.sql';\n\n/**\n * Execution context for adapter calls.\n *\n * Used for tracing, debugging, security validation, and metrics.\n * All fields are optional to maintain backward compatibility.\n */\nexport interface AdapterCallContext {\n /** Trace ID for distributed tracing (spans entire CLI → Worker → Adapter → Service flow) */\n traceId?: string;\n /** Session ID for user session tracking */\n sessionId?: string;\n /** Plugin ID making the adapter call */\n pluginId?: string;\n /** Workspace ID for multi-tenant scenarios */\n workspaceId?: string;\n /** Tenant ID for multi-tenant quota enforcement */\n tenantId?: string;\n /** Plugin permissions snapshot (for adapter-level validation) */\n permissions?: {\n /** Allowed adapter access (e.g., ['vectorStore', 'cache']) */\n adapters?: string[];\n /** Allowed storage paths (e.g., ['.kb/**', 'docs/**']) */\n storagePaths?: string[];\n /** Allowed network hosts (e.g., ['api.openai.com']) */\n networkHosts?: string[];\n };\n}\n\n/**\n * IPC protocol version.\n *\n * Version history:\n * - v1: Initial implementation (requestId, adapter, method, args, timeout)\n * - v2: Added context (traceId, pluginId, sessionId, tenantId, permissions)\n *\n * When making breaking changes:\n * 1. Increment version\n * 2. Update IPCServer to handle both old and new versions\n * 3. Update ADR-0038 with migration guide\n */\nexport const IPC_PROTOCOL_VERSION = 2;\n\n/**\n * Adapter method call that can be sent over IPC.\n *\n * Represents a request from child process to parent process\n * to execute a method on an adapter.\n *\n * @example\n * ```typescript\n * const call: AdapterCall = {\n * version: 2,\n * type: 'adapter:call',\n * requestId: 'uuid-123',\n * adapter: 'vectorStore',\n * method: 'search',\n * args: [[0.1, 0.2, 0.3], 10, { collectionId: 'docs' }],\n * timeout: 30000,\n * context: {\n * traceId: 'trace-abc',\n * pluginId: '@kb-labs/mind',\n * sessionId: 'session-xyz',\n * },\n * };\n * ```\n */\nexport interface AdapterCall {\n /** Protocol version for backward compatibility */\n version: number;\n type: 'adapter:call';\n /** Unique request ID to match with response */\n requestId: string;\n /** Adapter to call */\n adapter: AdapterType;\n /** Method name to call on adapter */\n method: string;\n /** Serialized method arguments */\n args: SerializableValue[];\n /** Optional timeout in milliseconds (default: 30000) */\n timeout?: number;\n /** Optional execution context for tracing, debugging, security (v2+) */\n context?: AdapterCallContext;\n}\n\n/**\n * Response from adapter method call.\n *\n * Represents a response from parent process back to child process\n * after executing an adapter method.\n *\n * Either `result` or `error` will be present, never both.\n *\n * @example Success:\n * ```typescript\n * const response: AdapterResponse = {\n * type: 'adapter:response',\n * requestId: 'uuid-123',\n * result: [{ id: '1', score: 0.95, metadata: {} }],\n * };\n * ```\n *\n * @example Error:\n * ```typescript\n * const response: AdapterResponse = {\n * type: 'adapter:response',\n * requestId: 'uuid-123',\n * error: {\n * __type: 'Error',\n * name: 'VectorStoreError',\n * message: 'Collection not found',\n * stack: '...',\n * },\n * };\n * ```\n */\nexport interface AdapterResponse {\n type: 'adapter:response';\n /** Request ID this response corresponds to */\n requestId: string;\n /** Serialized result (if successful) */\n result?: SerializableValue;\n /** Serialized error (if failed) */\n error?: SerializableError;\n}\n\n/**\n * All possible IPC messages.\n *\n * Child → Parent: AdapterCall\n * Parent → Child: AdapterResponse\n */\nexport type IPCMessage = AdapterCall | AdapterResponse;\n\n/**\n * Type guard to check if message is an AdapterCall.\n *\n * Supports both v1 (no version field) and v2+ (with version field)\n * for backward compatibility.\n */\nexport function isAdapterCall(msg: unknown): msg is AdapterCall {\n if (\n typeof msg !== 'object' ||\n msg === null ||\n (msg as any).type !== 'adapter:call' ||\n typeof (msg as any).requestId !== 'string' ||\n typeof (msg as any).adapter !== 'string' ||\n typeof (msg as any).method !== 'string' ||\n !Array.isArray((msg as any).args)\n ) {\n return false;\n }\n\n // If version field is present, it must be a number\n if ('version' in (msg as any) && typeof (msg as any).version !== 'number') {\n return false;\n }\n\n // v1 messages (no version field) are auto-upgraded to v2 by adding version: 1\n if (!('version' in (msg as any))) {\n (msg as any).version = 1; // Auto-upgrade legacy messages\n }\n\n return true;\n}\n\n/**\n * Type guard to check if message is an AdapterResponse.\n */\nexport function isAdapterResponse(msg: unknown): msg is AdapterResponse {\n return (\n typeof msg === 'object' &&\n msg !== null &&\n (msg as any).type === 'adapter:response' &&\n typeof (msg as any).requestId === 'string'\n );\n}\n\n/**\n * Error thrown when serialization fails.\n */\nexport class SerializationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'SerializationError';\n }\n}\n\n/**\n * Error thrown when deserialization fails.\n */\nexport class DeserializationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'DeserializationError';\n }\n}\n","/**\n * @module @kb-labs/core-platform/serializable\n * Serializer for cross-process communication.\n *\n * Handles serialization/deserialization of complex types:\n * - Buffer (to/from base64)\n * - Date (to/from ISO 8601)\n * - Error (with stack traces)\n * - Circular reference detection\n *\n * @example\n * ```typescript\n * import { serialize, deserialize } from '@kb-labs/core-platform/serializable';\n *\n * const data = {\n * buffer: Buffer.from('hello'),\n * date: new Date(),\n * error: new Error('test'),\n * nested: { values: [1, 2, 3] },\n * };\n *\n * const serialized = serialize(data);\n * const deserialized = deserialize(serialized);\n * ```\n */\n\nimport type {\n SerializableValue,\n SerializableBuffer,\n SerializableDate,\n SerializableError,\n SerializableArray,\n SerializableObject} from './types';\nimport {\n SerializationError,\n DeserializationError,\n} from './types';\n\n/**\n * Serialize value for IPC transmission.\n *\n * Handles special types:\n * - Buffer → base64 string\n * - Date → ISO 8601 string\n * - Error → structured object with stack\n * - Detects and throws on circular references\n *\n * @param value - Value to serialize\n * @returns Serialized value safe for JSON transmission\n * @throws SerializationError if value contains unsupported types or circular refs\n *\n * @example\n * ```typescript\n * const result = serialize({\n * buf: Buffer.from('hello'),\n * date: new Date('2025-01-01'),\n * error: new Error('test'),\n * });\n * // result = {\n * // buf: { __type: 'Buffer', data: 'aGVsbG8=' },\n * // date: { __type: 'Date', iso: '2025-01-01T00:00:00.000Z' },\n * // error: { __type: 'Error', name: 'Error', message: 'test', stack: '...' },\n * // }\n * ```\n */\nexport function serialize(value: unknown): SerializableValue {\n const seen = new WeakSet<object>();\n return serializeValue(value, seen);\n}\n\n/**\n * Internal serialization with circular reference tracking.\n */\nfunction serializeValue(value: unknown, seen: WeakSet<object>): SerializableValue {\n // Primitives\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string') {\n return value;\n }\n\n // Check for circular references\n if (typeof value === 'object') {\n if (seen.has(value)) {\n throw new SerializationError('Circular reference detected');\n }\n seen.add(value);\n }\n\n // Buffer → base64\n if (Buffer.isBuffer(value)) {\n return {\n __type: 'Buffer',\n data: value.toString('base64'),\n } as SerializableBuffer;\n }\n\n // Date → ISO string\n if (value instanceof Date) {\n if (isNaN(value.getTime())) {\n throw new SerializationError('Cannot serialize invalid Date');\n }\n return {\n __type: 'Date',\n iso: value.toISOString(),\n } as SerializableDate;\n }\n\n // Error → structured\n if (value instanceof Error) {\n return {\n __type: 'Error',\n name: value.name,\n message: value.message,\n stack: value.stack,\n code: (value as any).code,\n } as SerializableError;\n }\n\n // Array\n if (Array.isArray(value)) {\n return value.map((item) => serializeValue(item, seen)) as SerializableArray;\n }\n\n // Plain object\n if (typeof value === 'object' && value.constructor === Object) {\n const result: SerializableObject = {};\n for (const [key, val] of Object.entries(value)) {\n result[key] = serializeValue(val, seen);\n }\n return result;\n }\n\n // Unsupported type\n throw new SerializationError(\n `Cannot serialize type: ${typeof value} (constructor: ${value.constructor?.name || 'unknown'})`\n );\n}\n\n/**\n * Deserialize value from IPC transmission.\n *\n * Reconstructs special types:\n * - base64 string → Buffer\n * - ISO 8601 string → Date\n * - structured object → Error (with stack)\n *\n * @param value - Serialized value\n * @returns Original value reconstructed from serialization\n * @throws DeserializationError if value format is invalid\n *\n * @example\n * ```typescript\n * const serialized = {\n * buf: { __type: 'Buffer', data: 'aGVsbG8=' },\n * date: { __type: 'Date', iso: '2025-01-01T00:00:00.000Z' },\n * error: { __type: 'Error', name: 'Error', message: 'test' },\n * };\n *\n * const result = deserialize(serialized);\n * // result = {\n * // buf: Buffer.from('hello'),\n * // date: new Date('2025-01-01'),\n * // error: Error('test'),\n * // }\n * ```\n */\nexport function deserialize(value: SerializableValue): unknown {\n // Primitives\n if (value === null) {\n return null;\n }\n\n if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string') {\n return value;\n }\n\n // Must be object/array at this point\n if (typeof value !== 'object') {\n throw new DeserializationError(`Invalid serialized value type: ${typeof value}`);\n }\n\n // Check for special types\n const obj = value as any;\n\n // Buffer\n if (obj.__type === 'Buffer') {\n if (typeof obj.data !== 'string') {\n throw new DeserializationError('Invalid SerializableBuffer: missing or invalid data field');\n }\n try {\n return Buffer.from(obj.data, 'base64');\n } catch (error) {\n throw new DeserializationError(`Failed to decode Buffer: ${error}`);\n }\n }\n\n // Date\n if (obj.__type === 'Date') {\n if (typeof obj.iso !== 'string') {\n throw new DeserializationError('Invalid SerializableDate: missing or invalid iso field');\n }\n const date = new Date(obj.iso);\n if (isNaN(date.getTime())) {\n throw new DeserializationError(`Invalid ISO date string: ${obj.iso}`);\n }\n return date;\n }\n\n // Error\n if (obj.__type === 'Error') {\n if (typeof obj.message !== 'string') {\n throw new DeserializationError('Invalid SerializableError: missing or invalid message field');\n }\n const error = new Error(obj.message);\n if (typeof obj.name === 'string') {\n error.name = obj.name;\n }\n if (typeof obj.stack === 'string') {\n error.stack = obj.stack;\n }\n if (obj.code !== undefined) {\n (error as any).code = obj.code;\n }\n return error;\n }\n\n // Array\n if (Array.isArray(value)) {\n return value.map((item) => deserialize(item));\n }\n\n // Plain object\n const result: any = {};\n for (const [key, val] of Object.entries(value)) {\n result[key] = deserialize(val);\n }\n return result;\n}\n\n/**\n * Serialize multiple values (convenience for adapter method args).\n *\n * @example\n * ```typescript\n * const args = serializeArgs([\n * Buffer.from('hello'),\n * new Date(),\n * { nested: { value: 42 } },\n * ]);\n * ```\n */\nexport function serializeArgs(args: unknown[]): SerializableValue[] {\n return args.map((arg) => serialize(arg));\n}\n\n/**\n * Deserialize multiple values (convenience for adapter method args).\n *\n * @example\n * ```typescript\n * const args = deserializeArgs([\n * { __type: 'Buffer', data: 'aGVsbG8=' },\n * { __type: 'Date', iso: '2025-01-01T00:00:00.000Z' },\n * { nested: { value: 42 } },\n * ]);\n * ```\n */\nexport function deserializeArgs(args: SerializableValue[]): unknown[] {\n return args.map((arg) => deserialize(arg));\n}\n"]}
1
+ {"version":3,"sources":["../../src/serializable/types.ts","../../src/serializable/serializer.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @module @kb-labs/core-platform/serializable\n * IPC serialization types for cross-process adapter communication.\n *\n * This module defines the protocol for serializing adapter method calls\n * and responses across process boundaries using IPC (Inter-Process Communication).\n *\n * @example\n * ```typescript\n * import { AdapterCall, AdapterResponse } from '@kb-labs/core-platform/serializable';\n *\n * const call: AdapterCall = {\n * type: 'adapter:call',\n * requestId: 'uuid-123',\n * adapter: 'vectorStore',\n * method: 'search',\n * args: [[0.1, 0.2, 0.3], 10],\n * timeout: 30000,\n * };\n * ```\n */\n\n/**\n * Special type for serialized Buffer instances.\n * Buffers are converted to base64 strings for transmission.\n */\nexport interface SerializableBuffer {\n __type: 'Buffer';\n data: string; // base64 encoded\n}\n\n/**\n * Special type for serialized Date instances.\n * Dates are converted to ISO 8601 strings for transmission.\n */\nexport interface SerializableDate {\n __type: 'Date';\n iso: string; // ISO 8601 format\n}\n\n/**\n * Special type for serialized Error instances.\n * Errors are converted to structured objects with name, message, stack, and optional code.\n */\nexport interface SerializableError {\n __type: 'Error';\n name: string;\n message: string;\n stack?: string;\n code?: string;\n}\n\n/**\n * Values that can be safely serialized over IPC/network.\n *\n * Supports:\n * - Primitives: null, boolean, number, string\n * - Special types: Buffer, Date, Error\n * - Collections: Array, Object\n *\n * Does NOT support:\n * - Functions\n * - Symbols (except as object keys after serialization)\n * - WeakMap/WeakSet\n * - Circular references (will be detected and throw error)\n */\nexport type SerializableValue =\n | null\n | boolean\n | number\n | string\n | SerializableBuffer\n | SerializableDate\n | SerializableError\n | SerializableArray\n | SerializableObject;\n\n/**\n * Serializable array - all elements must be SerializableValue\n */\nexport type SerializableArray = SerializableValue[];\n\n/**\n * Serializable object - all values must be SerializableValue\n */\nexport type SerializableObject = { [key: string]: SerializableValue };\n\n/**\n * Adapter types supported by the IPC protocol.\n *\n * These correspond to the adapters available in PlatformContainer:\n * - vectorStore: IVectorStore\n * - cache: ICache\n * - llm: ILLM\n * - embeddings: IEmbeddings\n * - storage: IStorage\n * - logger: ILogger\n * - analytics: IAnalytics\n * - eventBus: IEventBus\n * - invoke: IInvoke\n * - artifacts: IArtifacts\n */\nexport type AdapterType =\n | 'vectorStore'\n | 'cache'\n | 'config'\n | 'llm'\n | 'embeddings'\n | 'storage'\n | 'logger'\n | 'analytics'\n | 'eventBus'\n | 'invoke'\n | 'artifacts'\n | 'database.document'\n | 'database.sql';\n\n/**\n * Execution context for adapter calls.\n *\n * Used for tracing, debugging, security validation, and metrics.\n * All fields are optional to maintain backward compatibility.\n */\nexport interface AdapterCallContext {\n /** Trace ID for distributed tracing (spans entire CLI → Worker → Adapter → Service flow) */\n traceId?: string;\n /** Session ID for user session tracking */\n sessionId?: string;\n /** Plugin ID making the adapter call */\n pluginId?: string;\n /** Workspace ID for multi-tenant scenarios */\n workspaceId?: string;\n /** Tenant ID for multi-tenant quota enforcement */\n tenantId?: string;\n /** Plugin permissions snapshot (for adapter-level validation) */\n permissions?: {\n /** Allowed adapter access (e.g., ['vectorStore', 'cache']) */\n adapters?: string[];\n /** Allowed storage paths (e.g., ['.kb/**', 'docs/**']) */\n storagePaths?: string[];\n /** Allowed network hosts (e.g., ['api.openai.com']) */\n networkHosts?: string[];\n };\n /** Socket auth token for parent-side IPC authorization */\n authToken?: string;\n}\n\n/**\n * IPC protocol version.\n *\n * Version history:\n * - v1: Initial implementation (requestId, adapter, method, args, timeout)\n * - v2: Added context (traceId, pluginId, sessionId, tenantId, permissions)\n *\n * When making breaking changes:\n * 1. Increment version\n * 2. Update IPCServer to handle both old and new versions\n * 3. Update ADR-0038 with migration guide\n */\nexport const IPC_PROTOCOL_VERSION = 2;\n\n/**\n * Adapter method call that can be sent over IPC.\n *\n * Represents a request from child process to parent process\n * to execute a method on an adapter.\n *\n * @example\n * ```typescript\n * const call: AdapterCall = {\n * version: 2,\n * type: 'adapter:call',\n * requestId: 'uuid-123',\n * adapter: 'vectorStore',\n * method: 'search',\n * args: [[0.1, 0.2, 0.3], 10, { collectionId: 'docs' }],\n * timeout: 30000,\n * context: {\n * traceId: 'trace-abc',\n * pluginId: '@kb-labs/mind',\n * sessionId: 'session-xyz',\n * },\n * };\n * ```\n */\nexport interface AdapterCall {\n /** Protocol version for backward compatibility */\n version: number;\n type: 'adapter:call';\n /** Unique request ID to match with response */\n requestId: string;\n /** Adapter to call */\n adapter: AdapterType;\n /** Method name to call on adapter */\n method: string;\n /** Serialized method arguments */\n args: SerializableValue[];\n /** Optional timeout in milliseconds (default: 30000) */\n timeout?: number;\n /** Optional execution context for tracing, debugging, security (v2+) */\n context?: AdapterCallContext;\n}\n\n/**\n * Response from adapter method call.\n *\n * Represents a response from parent process back to child process\n * after executing an adapter method.\n *\n * Either `result` or `error` will be present, never both.\n *\n * @example Success:\n * ```typescript\n * const response: AdapterResponse = {\n * type: 'adapter:response',\n * requestId: 'uuid-123',\n * result: [{ id: '1', score: 0.95, metadata: {} }],\n * };\n * ```\n *\n * @example Error:\n * ```typescript\n * const response: AdapterResponse = {\n * type: 'adapter:response',\n * requestId: 'uuid-123',\n * error: {\n * __type: 'Error',\n * name: 'VectorStoreError',\n * message: 'Collection not found',\n * stack: '...',\n * },\n * };\n * ```\n */\nexport interface AdapterResponse {\n type: 'adapter:response';\n /** Request ID this response corresponds to */\n requestId: string;\n /** Serialized result (if successful) */\n result?: SerializableValue;\n /** Serialized error (if failed) */\n error?: SerializableError;\n}\n\n/**\n * All possible IPC messages.\n *\n * Child → Parent: AdapterCall\n * Parent → Child: AdapterResponse\n */\nexport type IPCMessage = AdapterCall | AdapterResponse;\n\n/**\n * Type guard to check if message is an AdapterCall.\n *\n * Supports both v1 (no version field) and v2+ (with version field)\n * for backward compatibility.\n */\nexport function isAdapterCall(msg: unknown): msg is AdapterCall {\n if (\n typeof msg !== 'object' ||\n msg === null ||\n (msg as any).type !== 'adapter:call' ||\n typeof (msg as any).requestId !== 'string' ||\n typeof (msg as any).adapter !== 'string' ||\n typeof (msg as any).method !== 'string' ||\n !Array.isArray((msg as any).args)\n ) {\n return false;\n }\n\n // If version field is present, it must be a number\n if ('version' in (msg as any) && typeof (msg as any).version !== 'number') {\n return false;\n }\n\n // v1 messages (no version field) are auto-upgraded to v2 by adding version: 1\n if (!('version' in (msg as any))) {\n (msg as any).version = 1; // Auto-upgrade legacy messages\n }\n\n return true;\n}\n\n/**\n * Type guard to check if message is an AdapterResponse.\n */\nexport function isAdapterResponse(msg: unknown): msg is AdapterResponse {\n return (\n typeof msg === 'object' &&\n msg !== null &&\n (msg as any).type === 'adapter:response' &&\n typeof (msg as any).requestId === 'string'\n );\n}\n\n/**\n * Error thrown when serialization fails.\n */\nexport class SerializationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'SerializationError';\n }\n}\n\n/**\n * Error thrown when deserialization fails.\n */\nexport class DeserializationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'DeserializationError';\n }\n}\n","/**\n * @module @kb-labs/core-platform/serializable\n * Serializer for cross-process communication.\n *\n * Handles serialization/deserialization of complex types:\n * - Buffer (to/from base64)\n * - Date (to/from ISO 8601)\n * - Error (with stack traces)\n * - Circular reference detection\n *\n * @example\n * ```typescript\n * import { serialize, deserialize } from '@kb-labs/core-platform/serializable';\n *\n * const data = {\n * buffer: Buffer.from('hello'),\n * date: new Date(),\n * error: new Error('test'),\n * nested: { values: [1, 2, 3] },\n * };\n *\n * const serialized = serialize(data);\n * const deserialized = deserialize(serialized);\n * ```\n */\n\nimport type {\n SerializableValue,\n SerializableBuffer,\n SerializableDate,\n SerializableError,\n SerializableArray,\n SerializableObject} from './types';\nimport {\n SerializationError,\n DeserializationError,\n} from './types';\n\n/**\n * Serialize value for IPC transmission.\n *\n * Handles special types:\n * - Buffer → base64 string\n * - Date → ISO 8601 string\n * - Error → structured object with stack\n * - Detects and throws on circular references\n *\n * @param value - Value to serialize\n * @returns Serialized value safe for JSON transmission\n * @throws SerializationError if value contains unsupported types or circular refs\n *\n * @example\n * ```typescript\n * const result = serialize({\n * buf: Buffer.from('hello'),\n * date: new Date('2025-01-01'),\n * error: new Error('test'),\n * });\n * // result = {\n * // buf: { __type: 'Buffer', data: 'aGVsbG8=' },\n * // date: { __type: 'Date', iso: '2025-01-01T00:00:00.000Z' },\n * // error: { __type: 'Error', name: 'Error', message: 'test', stack: '...' },\n * // }\n * ```\n */\nexport function serialize(value: unknown): SerializableValue {\n const seen = new WeakSet<object>();\n return serializeValue(value, seen);\n}\n\n/**\n * Internal serialization with circular reference tracking.\n */\nfunction serializeValue(value: unknown, seen: WeakSet<object>): SerializableValue {\n // Primitives\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string') {\n return value;\n }\n\n // Check for circular references\n if (typeof value === 'object') {\n if (seen.has(value)) {\n throw new SerializationError('Circular reference detected');\n }\n seen.add(value);\n }\n\n // Buffer → base64\n if (Buffer.isBuffer(value)) {\n return {\n __type: 'Buffer',\n data: value.toString('base64'),\n } as SerializableBuffer;\n }\n\n // Date → ISO string\n if (value instanceof Date) {\n if (isNaN(value.getTime())) {\n throw new SerializationError('Cannot serialize invalid Date');\n }\n return {\n __type: 'Date',\n iso: value.toISOString(),\n } as SerializableDate;\n }\n\n // Error → structured\n if (value instanceof Error) {\n return {\n __type: 'Error',\n name: value.name,\n message: value.message,\n stack: value.stack,\n code: (value as any).code,\n } as SerializableError;\n }\n\n // Array\n if (Array.isArray(value)) {\n return value.map((item) => serializeValue(item, seen)) as SerializableArray;\n }\n\n // Plain object\n if (typeof value === 'object' && value.constructor === Object) {\n const result: SerializableObject = {};\n for (const [key, val] of Object.entries(value)) {\n result[key] = serializeValue(val, seen);\n }\n return result;\n }\n\n // Unsupported type\n throw new SerializationError(\n `Cannot serialize type: ${typeof value} (constructor: ${value.constructor?.name || 'unknown'})`\n );\n}\n\n/**\n * Deserialize value from IPC transmission.\n *\n * Reconstructs special types:\n * - base64 string → Buffer\n * - ISO 8601 string → Date\n * - structured object → Error (with stack)\n *\n * @param value - Serialized value\n * @returns Original value reconstructed from serialization\n * @throws DeserializationError if value format is invalid\n *\n * @example\n * ```typescript\n * const serialized = {\n * buf: { __type: 'Buffer', data: 'aGVsbG8=' },\n * date: { __type: 'Date', iso: '2025-01-01T00:00:00.000Z' },\n * error: { __type: 'Error', name: 'Error', message: 'test' },\n * };\n *\n * const result = deserialize(serialized);\n * // result = {\n * // buf: Buffer.from('hello'),\n * // date: new Date('2025-01-01'),\n * // error: Error('test'),\n * // }\n * ```\n */\nexport function deserialize(value: SerializableValue): unknown {\n // Primitives\n if (value === null) {\n return null;\n }\n\n if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string') {\n return value;\n }\n\n // Must be object/array at this point\n if (typeof value !== 'object') {\n throw new DeserializationError(`Invalid serialized value type: ${typeof value}`);\n }\n\n // Check for special types\n const obj = value as any;\n\n // Buffer\n if (obj.__type === 'Buffer') {\n if (typeof obj.data !== 'string') {\n throw new DeserializationError('Invalid SerializableBuffer: missing or invalid data field');\n }\n try {\n return Buffer.from(obj.data, 'base64');\n } catch (error) {\n throw new DeserializationError(`Failed to decode Buffer: ${error}`);\n }\n }\n\n // Date\n if (obj.__type === 'Date') {\n if (typeof obj.iso !== 'string') {\n throw new DeserializationError('Invalid SerializableDate: missing or invalid iso field');\n }\n const date = new Date(obj.iso);\n if (isNaN(date.getTime())) {\n throw new DeserializationError(`Invalid ISO date string: ${obj.iso}`);\n }\n return date;\n }\n\n // Error\n if (obj.__type === 'Error') {\n if (typeof obj.message !== 'string') {\n throw new DeserializationError('Invalid SerializableError: missing or invalid message field');\n }\n const error = new Error(obj.message);\n if (typeof obj.name === 'string') {\n error.name = obj.name;\n }\n if (typeof obj.stack === 'string') {\n error.stack = obj.stack;\n }\n if (obj.code !== undefined) {\n (error as any).code = obj.code;\n }\n return error;\n }\n\n // Array\n if (Array.isArray(value)) {\n return value.map((item) => deserialize(item));\n }\n\n // Plain object\n const result: any = {};\n for (const [key, val] of Object.entries(value)) {\n result[key] = deserialize(val);\n }\n return result;\n}\n\n/**\n * Serialize multiple values (convenience for adapter method args).\n *\n * @example\n * ```typescript\n * const args = serializeArgs([\n * Buffer.from('hello'),\n * new Date(),\n * { nested: { value: 42 } },\n * ]);\n * ```\n */\nexport function serializeArgs(args: unknown[]): SerializableValue[] {\n return args.map((arg) => serialize(arg));\n}\n\n/**\n * Deserialize multiple values (convenience for adapter method args).\n *\n * @example\n * ```typescript\n * const args = deserializeArgs([\n * { __type: 'Buffer', data: 'aGVsbG8=' },\n * { __type: 'Date', iso: '2025-01-01T00:00:00.000Z' },\n * { nested: { value: 42 } },\n * ]);\n * ```\n */\nexport function deserializeArgs(args: SerializableValue[]): unknown[] {\n return args.map((arg) => deserialize(arg));\n}\n"]}
@@ -113,6 +113,8 @@ interface AdapterCallContext {
113
113
  /** Allowed network hosts (e.g., ['api.openai.com']) */
114
114
  networkHosts?: string[];
115
115
  };
116
+ /** Socket auth token for parent-side IPC authorization */
117
+ authToken?: string;
116
118
  }
117
119
  /**
118
120
  * IPC protocol version.
@@ -113,6 +113,8 @@ interface AdapterCallContext {
113
113
  /** Allowed network hosts (e.g., ['api.openai.com']) */
114
114
  networkHosts?: string[];
115
115
  };
116
+ /** Socket auth token for parent-side IPC authorization */
117
+ authToken?: string;
116
118
  }
117
119
  /**
118
120
  * IPC protocol version.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/serializable/types.ts","../../src/serializable/serializer.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module @kb-labs/core-platform/serializable\n * IPC serialization types for cross-process adapter communication.\n *\n * This module defines the protocol for serializing adapter method calls\n * and responses across process boundaries using IPC (Inter-Process Communication).\n *\n * @example\n * ```typescript\n * import { AdapterCall, AdapterResponse } from '@kb-labs/core-platform/serializable';\n *\n * const call: AdapterCall = {\n * type: 'adapter:call',\n * requestId: 'uuid-123',\n * adapter: 'vectorStore',\n * method: 'search',\n * args: [[0.1, 0.2, 0.3], 10],\n * timeout: 30000,\n * };\n * ```\n */\n\n/**\n * Special type for serialized Buffer instances.\n * Buffers are converted to base64 strings for transmission.\n */\nexport interface SerializableBuffer {\n __type: 'Buffer';\n data: string; // base64 encoded\n}\n\n/**\n * Special type for serialized Date instances.\n * Dates are converted to ISO 8601 strings for transmission.\n */\nexport interface SerializableDate {\n __type: 'Date';\n iso: string; // ISO 8601 format\n}\n\n/**\n * Special type for serialized Error instances.\n * Errors are converted to structured objects with name, message, stack, and optional code.\n */\nexport interface SerializableError {\n __type: 'Error';\n name: string;\n message: string;\n stack?: string;\n code?: string;\n}\n\n/**\n * Values that can be safely serialized over IPC/network.\n *\n * Supports:\n * - Primitives: null, boolean, number, string\n * - Special types: Buffer, Date, Error\n * - Collections: Array, Object\n *\n * Does NOT support:\n * - Functions\n * - Symbols (except as object keys after serialization)\n * - WeakMap/WeakSet\n * - Circular references (will be detected and throw error)\n */\nexport type SerializableValue =\n | null\n | boolean\n | number\n | string\n | SerializableBuffer\n | SerializableDate\n | SerializableError\n | SerializableArray\n | SerializableObject;\n\n/**\n * Serializable array - all elements must be SerializableValue\n */\nexport type SerializableArray = SerializableValue[];\n\n/**\n * Serializable object - all values must be SerializableValue\n */\nexport type SerializableObject = { [key: string]: SerializableValue };\n\n/**\n * Adapter types supported by the IPC protocol.\n *\n * These correspond to the adapters available in PlatformContainer:\n * - vectorStore: IVectorStore\n * - cache: ICache\n * - llm: ILLM\n * - embeddings: IEmbeddings\n * - storage: IStorage\n * - logger: ILogger\n * - analytics: IAnalytics\n * - eventBus: IEventBus\n * - invoke: IInvoke\n * - artifacts: IArtifacts\n */\nexport type AdapterType =\n | 'vectorStore'\n | 'cache'\n | 'config'\n | 'llm'\n | 'embeddings'\n | 'storage'\n | 'logger'\n | 'analytics'\n | 'eventBus'\n | 'invoke'\n | 'artifacts'\n | 'database.document'\n | 'database.sql';\n\n/**\n * Execution context for adapter calls.\n *\n * Used for tracing, debugging, security validation, and metrics.\n * All fields are optional to maintain backward compatibility.\n */\nexport interface AdapterCallContext {\n /** Trace ID for distributed tracing (spans entire CLI → Worker → Adapter → Service flow) */\n traceId?: string;\n /** Session ID for user session tracking */\n sessionId?: string;\n /** Plugin ID making the adapter call */\n pluginId?: string;\n /** Workspace ID for multi-tenant scenarios */\n workspaceId?: string;\n /** Tenant ID for multi-tenant quota enforcement */\n tenantId?: string;\n /** Plugin permissions snapshot (for adapter-level validation) */\n permissions?: {\n /** Allowed adapter access (e.g., ['vectorStore', 'cache']) */\n adapters?: string[];\n /** Allowed storage paths (e.g., ['.kb/**', 'docs/**']) */\n storagePaths?: string[];\n /** Allowed network hosts (e.g., ['api.openai.com']) */\n networkHosts?: string[];\n };\n}\n\n/**\n * IPC protocol version.\n *\n * Version history:\n * - v1: Initial implementation (requestId, adapter, method, args, timeout)\n * - v2: Added context (traceId, pluginId, sessionId, tenantId, permissions)\n *\n * When making breaking changes:\n * 1. Increment version\n * 2. Update IPCServer to handle both old and new versions\n * 3. Update ADR-0038 with migration guide\n */\nexport const IPC_PROTOCOL_VERSION = 2;\n\n/**\n * Adapter method call that can be sent over IPC.\n *\n * Represents a request from child process to parent process\n * to execute a method on an adapter.\n *\n * @example\n * ```typescript\n * const call: AdapterCall = {\n * version: 2,\n * type: 'adapter:call',\n * requestId: 'uuid-123',\n * adapter: 'vectorStore',\n * method: 'search',\n * args: [[0.1, 0.2, 0.3], 10, { collectionId: 'docs' }],\n * timeout: 30000,\n * context: {\n * traceId: 'trace-abc',\n * pluginId: '@kb-labs/mind',\n * sessionId: 'session-xyz',\n * },\n * };\n * ```\n */\nexport interface AdapterCall {\n /** Protocol version for backward compatibility */\n version: number;\n type: 'adapter:call';\n /** Unique request ID to match with response */\n requestId: string;\n /** Adapter to call */\n adapter: AdapterType;\n /** Method name to call on adapter */\n method: string;\n /** Serialized method arguments */\n args: SerializableValue[];\n /** Optional timeout in milliseconds (default: 30000) */\n timeout?: number;\n /** Optional execution context for tracing, debugging, security (v2+) */\n context?: AdapterCallContext;\n}\n\n/**\n * Response from adapter method call.\n *\n * Represents a response from parent process back to child process\n * after executing an adapter method.\n *\n * Either `result` or `error` will be present, never both.\n *\n * @example Success:\n * ```typescript\n * const response: AdapterResponse = {\n * type: 'adapter:response',\n * requestId: 'uuid-123',\n * result: [{ id: '1', score: 0.95, metadata: {} }],\n * };\n * ```\n *\n * @example Error:\n * ```typescript\n * const response: AdapterResponse = {\n * type: 'adapter:response',\n * requestId: 'uuid-123',\n * error: {\n * __type: 'Error',\n * name: 'VectorStoreError',\n * message: 'Collection not found',\n * stack: '...',\n * },\n * };\n * ```\n */\nexport interface AdapterResponse {\n type: 'adapter:response';\n /** Request ID this response corresponds to */\n requestId: string;\n /** Serialized result (if successful) */\n result?: SerializableValue;\n /** Serialized error (if failed) */\n error?: SerializableError;\n}\n\n/**\n * All possible IPC messages.\n *\n * Child → Parent: AdapterCall\n * Parent → Child: AdapterResponse\n */\nexport type IPCMessage = AdapterCall | AdapterResponse;\n\n/**\n * Type guard to check if message is an AdapterCall.\n *\n * Supports both v1 (no version field) and v2+ (with version field)\n * for backward compatibility.\n */\nexport function isAdapterCall(msg: unknown): msg is AdapterCall {\n if (\n typeof msg !== 'object' ||\n msg === null ||\n (msg as any).type !== 'adapter:call' ||\n typeof (msg as any).requestId !== 'string' ||\n typeof (msg as any).adapter !== 'string' ||\n typeof (msg as any).method !== 'string' ||\n !Array.isArray((msg as any).args)\n ) {\n return false;\n }\n\n // If version field is present, it must be a number\n if ('version' in (msg as any) && typeof (msg as any).version !== 'number') {\n return false;\n }\n\n // v1 messages (no version field) are auto-upgraded to v2 by adding version: 1\n if (!('version' in (msg as any))) {\n (msg as any).version = 1; // Auto-upgrade legacy messages\n }\n\n return true;\n}\n\n/**\n * Type guard to check if message is an AdapterResponse.\n */\nexport function isAdapterResponse(msg: unknown): msg is AdapterResponse {\n return (\n typeof msg === 'object' &&\n msg !== null &&\n (msg as any).type === 'adapter:response' &&\n typeof (msg as any).requestId === 'string'\n );\n}\n\n/**\n * Error thrown when serialization fails.\n */\nexport class SerializationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'SerializationError';\n }\n}\n\n/**\n * Error thrown when deserialization fails.\n */\nexport class DeserializationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'DeserializationError';\n }\n}\n","/**\n * @module @kb-labs/core-platform/serializable\n * Serializer for cross-process communication.\n *\n * Handles serialization/deserialization of complex types:\n * - Buffer (to/from base64)\n * - Date (to/from ISO 8601)\n * - Error (with stack traces)\n * - Circular reference detection\n *\n * @example\n * ```typescript\n * import { serialize, deserialize } from '@kb-labs/core-platform/serializable';\n *\n * const data = {\n * buffer: Buffer.from('hello'),\n * date: new Date(),\n * error: new Error('test'),\n * nested: { values: [1, 2, 3] },\n * };\n *\n * const serialized = serialize(data);\n * const deserialized = deserialize(serialized);\n * ```\n */\n\nimport type {\n SerializableValue,\n SerializableBuffer,\n SerializableDate,\n SerializableError,\n SerializableArray,\n SerializableObject} from './types';\nimport {\n SerializationError,\n DeserializationError,\n} from './types';\n\n/**\n * Serialize value for IPC transmission.\n *\n * Handles special types:\n * - Buffer → base64 string\n * - Date → ISO 8601 string\n * - Error → structured object with stack\n * - Detects and throws on circular references\n *\n * @param value - Value to serialize\n * @returns Serialized value safe for JSON transmission\n * @throws SerializationError if value contains unsupported types or circular refs\n *\n * @example\n * ```typescript\n * const result = serialize({\n * buf: Buffer.from('hello'),\n * date: new Date('2025-01-01'),\n * error: new Error('test'),\n * });\n * // result = {\n * // buf: { __type: 'Buffer', data: 'aGVsbG8=' },\n * // date: { __type: 'Date', iso: '2025-01-01T00:00:00.000Z' },\n * // error: { __type: 'Error', name: 'Error', message: 'test', stack: '...' },\n * // }\n * ```\n */\nexport function serialize(value: unknown): SerializableValue {\n const seen = new WeakSet<object>();\n return serializeValue(value, seen);\n}\n\n/**\n * Internal serialization with circular reference tracking.\n */\nfunction serializeValue(value: unknown, seen: WeakSet<object>): SerializableValue {\n // Primitives\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string') {\n return value;\n }\n\n // Check for circular references\n if (typeof value === 'object') {\n if (seen.has(value)) {\n throw new SerializationError('Circular reference detected');\n }\n seen.add(value);\n }\n\n // Buffer → base64\n if (Buffer.isBuffer(value)) {\n return {\n __type: 'Buffer',\n data: value.toString('base64'),\n } as SerializableBuffer;\n }\n\n // Date → ISO string\n if (value instanceof Date) {\n if (isNaN(value.getTime())) {\n throw new SerializationError('Cannot serialize invalid Date');\n }\n return {\n __type: 'Date',\n iso: value.toISOString(),\n } as SerializableDate;\n }\n\n // Error → structured\n if (value instanceof Error) {\n return {\n __type: 'Error',\n name: value.name,\n message: value.message,\n stack: value.stack,\n code: (value as any).code,\n } as SerializableError;\n }\n\n // Array\n if (Array.isArray(value)) {\n return value.map((item) => serializeValue(item, seen)) as SerializableArray;\n }\n\n // Plain object\n if (typeof value === 'object' && value.constructor === Object) {\n const result: SerializableObject = {};\n for (const [key, val] of Object.entries(value)) {\n result[key] = serializeValue(val, seen);\n }\n return result;\n }\n\n // Unsupported type\n throw new SerializationError(\n `Cannot serialize type: ${typeof value} (constructor: ${value.constructor?.name || 'unknown'})`\n );\n}\n\n/**\n * Deserialize value from IPC transmission.\n *\n * Reconstructs special types:\n * - base64 string → Buffer\n * - ISO 8601 string → Date\n * - structured object → Error (with stack)\n *\n * @param value - Serialized value\n * @returns Original value reconstructed from serialization\n * @throws DeserializationError if value format is invalid\n *\n * @example\n * ```typescript\n * const serialized = {\n * buf: { __type: 'Buffer', data: 'aGVsbG8=' },\n * date: { __type: 'Date', iso: '2025-01-01T00:00:00.000Z' },\n * error: { __type: 'Error', name: 'Error', message: 'test' },\n * };\n *\n * const result = deserialize(serialized);\n * // result = {\n * // buf: Buffer.from('hello'),\n * // date: new Date('2025-01-01'),\n * // error: Error('test'),\n * // }\n * ```\n */\nexport function deserialize(value: SerializableValue): unknown {\n // Primitives\n if (value === null) {\n return null;\n }\n\n if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string') {\n return value;\n }\n\n // Must be object/array at this point\n if (typeof value !== 'object') {\n throw new DeserializationError(`Invalid serialized value type: ${typeof value}`);\n }\n\n // Check for special types\n const obj = value as any;\n\n // Buffer\n if (obj.__type === 'Buffer') {\n if (typeof obj.data !== 'string') {\n throw new DeserializationError('Invalid SerializableBuffer: missing or invalid data field');\n }\n try {\n return Buffer.from(obj.data, 'base64');\n } catch (error) {\n throw new DeserializationError(`Failed to decode Buffer: ${error}`);\n }\n }\n\n // Date\n if (obj.__type === 'Date') {\n if (typeof obj.iso !== 'string') {\n throw new DeserializationError('Invalid SerializableDate: missing or invalid iso field');\n }\n const date = new Date(obj.iso);\n if (isNaN(date.getTime())) {\n throw new DeserializationError(`Invalid ISO date string: ${obj.iso}`);\n }\n return date;\n }\n\n // Error\n if (obj.__type === 'Error') {\n if (typeof obj.message !== 'string') {\n throw new DeserializationError('Invalid SerializableError: missing or invalid message field');\n }\n const error = new Error(obj.message);\n if (typeof obj.name === 'string') {\n error.name = obj.name;\n }\n if (typeof obj.stack === 'string') {\n error.stack = obj.stack;\n }\n if (obj.code !== undefined) {\n (error as any).code = obj.code;\n }\n return error;\n }\n\n // Array\n if (Array.isArray(value)) {\n return value.map((item) => deserialize(item));\n }\n\n // Plain object\n const result: any = {};\n for (const [key, val] of Object.entries(value)) {\n result[key] = deserialize(val);\n }\n return result;\n}\n\n/**\n * Serialize multiple values (convenience for adapter method args).\n *\n * @example\n * ```typescript\n * const args = serializeArgs([\n * Buffer.from('hello'),\n * new Date(),\n * { nested: { value: 42 } },\n * ]);\n * ```\n */\nexport function serializeArgs(args: unknown[]): SerializableValue[] {\n return args.map((arg) => serialize(arg));\n}\n\n/**\n * Deserialize multiple values (convenience for adapter method args).\n *\n * @example\n * ```typescript\n * const args = deserializeArgs([\n * { __type: 'Buffer', data: 'aGVsbG8=' },\n * { __type: 'Date', iso: '2025-01-01T00:00:00.000Z' },\n * { nested: { value: 42 } },\n * ]);\n * ```\n */\nexport function deserializeArgs(args: SerializableValue[]): unknown[] {\n return args.map((arg) => deserialize(arg));\n}\n"]}
1
+ {"version":3,"sources":["../../src/serializable/types.ts","../../src/serializable/serializer.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module @kb-labs/core-platform/serializable\n * IPC serialization types for cross-process adapter communication.\n *\n * This module defines the protocol for serializing adapter method calls\n * and responses across process boundaries using IPC (Inter-Process Communication).\n *\n * @example\n * ```typescript\n * import { AdapterCall, AdapterResponse } from '@kb-labs/core-platform/serializable';\n *\n * const call: AdapterCall = {\n * type: 'adapter:call',\n * requestId: 'uuid-123',\n * adapter: 'vectorStore',\n * method: 'search',\n * args: [[0.1, 0.2, 0.3], 10],\n * timeout: 30000,\n * };\n * ```\n */\n\n/**\n * Special type for serialized Buffer instances.\n * Buffers are converted to base64 strings for transmission.\n */\nexport interface SerializableBuffer {\n __type: 'Buffer';\n data: string; // base64 encoded\n}\n\n/**\n * Special type for serialized Date instances.\n * Dates are converted to ISO 8601 strings for transmission.\n */\nexport interface SerializableDate {\n __type: 'Date';\n iso: string; // ISO 8601 format\n}\n\n/**\n * Special type for serialized Error instances.\n * Errors are converted to structured objects with name, message, stack, and optional code.\n */\nexport interface SerializableError {\n __type: 'Error';\n name: string;\n message: string;\n stack?: string;\n code?: string;\n}\n\n/**\n * Values that can be safely serialized over IPC/network.\n *\n * Supports:\n * - Primitives: null, boolean, number, string\n * - Special types: Buffer, Date, Error\n * - Collections: Array, Object\n *\n * Does NOT support:\n * - Functions\n * - Symbols (except as object keys after serialization)\n * - WeakMap/WeakSet\n * - Circular references (will be detected and throw error)\n */\nexport type SerializableValue =\n | null\n | boolean\n | number\n | string\n | SerializableBuffer\n | SerializableDate\n | SerializableError\n | SerializableArray\n | SerializableObject;\n\n/**\n * Serializable array - all elements must be SerializableValue\n */\nexport type SerializableArray = SerializableValue[];\n\n/**\n * Serializable object - all values must be SerializableValue\n */\nexport type SerializableObject = { [key: string]: SerializableValue };\n\n/**\n * Adapter types supported by the IPC protocol.\n *\n * These correspond to the adapters available in PlatformContainer:\n * - vectorStore: IVectorStore\n * - cache: ICache\n * - llm: ILLM\n * - embeddings: IEmbeddings\n * - storage: IStorage\n * - logger: ILogger\n * - analytics: IAnalytics\n * - eventBus: IEventBus\n * - invoke: IInvoke\n * - artifacts: IArtifacts\n */\nexport type AdapterType =\n | 'vectorStore'\n | 'cache'\n | 'config'\n | 'llm'\n | 'embeddings'\n | 'storage'\n | 'logger'\n | 'analytics'\n | 'eventBus'\n | 'invoke'\n | 'artifacts'\n | 'database.document'\n | 'database.sql';\n\n/**\n * Execution context for adapter calls.\n *\n * Used for tracing, debugging, security validation, and metrics.\n * All fields are optional to maintain backward compatibility.\n */\nexport interface AdapterCallContext {\n /** Trace ID for distributed tracing (spans entire CLI → Worker → Adapter → Service flow) */\n traceId?: string;\n /** Session ID for user session tracking */\n sessionId?: string;\n /** Plugin ID making the adapter call */\n pluginId?: string;\n /** Workspace ID for multi-tenant scenarios */\n workspaceId?: string;\n /** Tenant ID for multi-tenant quota enforcement */\n tenantId?: string;\n /** Plugin permissions snapshot (for adapter-level validation) */\n permissions?: {\n /** Allowed adapter access (e.g., ['vectorStore', 'cache']) */\n adapters?: string[];\n /** Allowed storage paths (e.g., ['.kb/**', 'docs/**']) */\n storagePaths?: string[];\n /** Allowed network hosts (e.g., ['api.openai.com']) */\n networkHosts?: string[];\n };\n /** Socket auth token for parent-side IPC authorization */\n authToken?: string;\n}\n\n/**\n * IPC protocol version.\n *\n * Version history:\n * - v1: Initial implementation (requestId, adapter, method, args, timeout)\n * - v2: Added context (traceId, pluginId, sessionId, tenantId, permissions)\n *\n * When making breaking changes:\n * 1. Increment version\n * 2. Update IPCServer to handle both old and new versions\n * 3. Update ADR-0038 with migration guide\n */\nexport const IPC_PROTOCOL_VERSION = 2;\n\n/**\n * Adapter method call that can be sent over IPC.\n *\n * Represents a request from child process to parent process\n * to execute a method on an adapter.\n *\n * @example\n * ```typescript\n * const call: AdapterCall = {\n * version: 2,\n * type: 'adapter:call',\n * requestId: 'uuid-123',\n * adapter: 'vectorStore',\n * method: 'search',\n * args: [[0.1, 0.2, 0.3], 10, { collectionId: 'docs' }],\n * timeout: 30000,\n * context: {\n * traceId: 'trace-abc',\n * pluginId: '@kb-labs/mind',\n * sessionId: 'session-xyz',\n * },\n * };\n * ```\n */\nexport interface AdapterCall {\n /** Protocol version for backward compatibility */\n version: number;\n type: 'adapter:call';\n /** Unique request ID to match with response */\n requestId: string;\n /** Adapter to call */\n adapter: AdapterType;\n /** Method name to call on adapter */\n method: string;\n /** Serialized method arguments */\n args: SerializableValue[];\n /** Optional timeout in milliseconds (default: 30000) */\n timeout?: number;\n /** Optional execution context for tracing, debugging, security (v2+) */\n context?: AdapterCallContext;\n}\n\n/**\n * Response from adapter method call.\n *\n * Represents a response from parent process back to child process\n * after executing an adapter method.\n *\n * Either `result` or `error` will be present, never both.\n *\n * @example Success:\n * ```typescript\n * const response: AdapterResponse = {\n * type: 'adapter:response',\n * requestId: 'uuid-123',\n * result: [{ id: '1', score: 0.95, metadata: {} }],\n * };\n * ```\n *\n * @example Error:\n * ```typescript\n * const response: AdapterResponse = {\n * type: 'adapter:response',\n * requestId: 'uuid-123',\n * error: {\n * __type: 'Error',\n * name: 'VectorStoreError',\n * message: 'Collection not found',\n * stack: '...',\n * },\n * };\n * ```\n */\nexport interface AdapterResponse {\n type: 'adapter:response';\n /** Request ID this response corresponds to */\n requestId: string;\n /** Serialized result (if successful) */\n result?: SerializableValue;\n /** Serialized error (if failed) */\n error?: SerializableError;\n}\n\n/**\n * All possible IPC messages.\n *\n * Child → Parent: AdapterCall\n * Parent → Child: AdapterResponse\n */\nexport type IPCMessage = AdapterCall | AdapterResponse;\n\n/**\n * Type guard to check if message is an AdapterCall.\n *\n * Supports both v1 (no version field) and v2+ (with version field)\n * for backward compatibility.\n */\nexport function isAdapterCall(msg: unknown): msg is AdapterCall {\n if (\n typeof msg !== 'object' ||\n msg === null ||\n (msg as any).type !== 'adapter:call' ||\n typeof (msg as any).requestId !== 'string' ||\n typeof (msg as any).adapter !== 'string' ||\n typeof (msg as any).method !== 'string' ||\n !Array.isArray((msg as any).args)\n ) {\n return false;\n }\n\n // If version field is present, it must be a number\n if ('version' in (msg as any) && typeof (msg as any).version !== 'number') {\n return false;\n }\n\n // v1 messages (no version field) are auto-upgraded to v2 by adding version: 1\n if (!('version' in (msg as any))) {\n (msg as any).version = 1; // Auto-upgrade legacy messages\n }\n\n return true;\n}\n\n/**\n * Type guard to check if message is an AdapterResponse.\n */\nexport function isAdapterResponse(msg: unknown): msg is AdapterResponse {\n return (\n typeof msg === 'object' &&\n msg !== null &&\n (msg as any).type === 'adapter:response' &&\n typeof (msg as any).requestId === 'string'\n );\n}\n\n/**\n * Error thrown when serialization fails.\n */\nexport class SerializationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'SerializationError';\n }\n}\n\n/**\n * Error thrown when deserialization fails.\n */\nexport class DeserializationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'DeserializationError';\n }\n}\n","/**\n * @module @kb-labs/core-platform/serializable\n * Serializer for cross-process communication.\n *\n * Handles serialization/deserialization of complex types:\n * - Buffer (to/from base64)\n * - Date (to/from ISO 8601)\n * - Error (with stack traces)\n * - Circular reference detection\n *\n * @example\n * ```typescript\n * import { serialize, deserialize } from '@kb-labs/core-platform/serializable';\n *\n * const data = {\n * buffer: Buffer.from('hello'),\n * date: new Date(),\n * error: new Error('test'),\n * nested: { values: [1, 2, 3] },\n * };\n *\n * const serialized = serialize(data);\n * const deserialized = deserialize(serialized);\n * ```\n */\n\nimport type {\n SerializableValue,\n SerializableBuffer,\n SerializableDate,\n SerializableError,\n SerializableArray,\n SerializableObject} from './types';\nimport {\n SerializationError,\n DeserializationError,\n} from './types';\n\n/**\n * Serialize value for IPC transmission.\n *\n * Handles special types:\n * - Buffer → base64 string\n * - Date → ISO 8601 string\n * - Error → structured object with stack\n * - Detects and throws on circular references\n *\n * @param value - Value to serialize\n * @returns Serialized value safe for JSON transmission\n * @throws SerializationError if value contains unsupported types or circular refs\n *\n * @example\n * ```typescript\n * const result = serialize({\n * buf: Buffer.from('hello'),\n * date: new Date('2025-01-01'),\n * error: new Error('test'),\n * });\n * // result = {\n * // buf: { __type: 'Buffer', data: 'aGVsbG8=' },\n * // date: { __type: 'Date', iso: '2025-01-01T00:00:00.000Z' },\n * // error: { __type: 'Error', name: 'Error', message: 'test', stack: '...' },\n * // }\n * ```\n */\nexport function serialize(value: unknown): SerializableValue {\n const seen = new WeakSet<object>();\n return serializeValue(value, seen);\n}\n\n/**\n * Internal serialization with circular reference tracking.\n */\nfunction serializeValue(value: unknown, seen: WeakSet<object>): SerializableValue {\n // Primitives\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string') {\n return value;\n }\n\n // Check for circular references\n if (typeof value === 'object') {\n if (seen.has(value)) {\n throw new SerializationError('Circular reference detected');\n }\n seen.add(value);\n }\n\n // Buffer → base64\n if (Buffer.isBuffer(value)) {\n return {\n __type: 'Buffer',\n data: value.toString('base64'),\n } as SerializableBuffer;\n }\n\n // Date → ISO string\n if (value instanceof Date) {\n if (isNaN(value.getTime())) {\n throw new SerializationError('Cannot serialize invalid Date');\n }\n return {\n __type: 'Date',\n iso: value.toISOString(),\n } as SerializableDate;\n }\n\n // Error → structured\n if (value instanceof Error) {\n return {\n __type: 'Error',\n name: value.name,\n message: value.message,\n stack: value.stack,\n code: (value as any).code,\n } as SerializableError;\n }\n\n // Array\n if (Array.isArray(value)) {\n return value.map((item) => serializeValue(item, seen)) as SerializableArray;\n }\n\n // Plain object\n if (typeof value === 'object' && value.constructor === Object) {\n const result: SerializableObject = {};\n for (const [key, val] of Object.entries(value)) {\n result[key] = serializeValue(val, seen);\n }\n return result;\n }\n\n // Unsupported type\n throw new SerializationError(\n `Cannot serialize type: ${typeof value} (constructor: ${value.constructor?.name || 'unknown'})`\n );\n}\n\n/**\n * Deserialize value from IPC transmission.\n *\n * Reconstructs special types:\n * - base64 string → Buffer\n * - ISO 8601 string → Date\n * - structured object → Error (with stack)\n *\n * @param value - Serialized value\n * @returns Original value reconstructed from serialization\n * @throws DeserializationError if value format is invalid\n *\n * @example\n * ```typescript\n * const serialized = {\n * buf: { __type: 'Buffer', data: 'aGVsbG8=' },\n * date: { __type: 'Date', iso: '2025-01-01T00:00:00.000Z' },\n * error: { __type: 'Error', name: 'Error', message: 'test' },\n * };\n *\n * const result = deserialize(serialized);\n * // result = {\n * // buf: Buffer.from('hello'),\n * // date: new Date('2025-01-01'),\n * // error: Error('test'),\n * // }\n * ```\n */\nexport function deserialize(value: SerializableValue): unknown {\n // Primitives\n if (value === null) {\n return null;\n }\n\n if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string') {\n return value;\n }\n\n // Must be object/array at this point\n if (typeof value !== 'object') {\n throw new DeserializationError(`Invalid serialized value type: ${typeof value}`);\n }\n\n // Check for special types\n const obj = value as any;\n\n // Buffer\n if (obj.__type === 'Buffer') {\n if (typeof obj.data !== 'string') {\n throw new DeserializationError('Invalid SerializableBuffer: missing or invalid data field');\n }\n try {\n return Buffer.from(obj.data, 'base64');\n } catch (error) {\n throw new DeserializationError(`Failed to decode Buffer: ${error}`);\n }\n }\n\n // Date\n if (obj.__type === 'Date') {\n if (typeof obj.iso !== 'string') {\n throw new DeserializationError('Invalid SerializableDate: missing or invalid iso field');\n }\n const date = new Date(obj.iso);\n if (isNaN(date.getTime())) {\n throw new DeserializationError(`Invalid ISO date string: ${obj.iso}`);\n }\n return date;\n }\n\n // Error\n if (obj.__type === 'Error') {\n if (typeof obj.message !== 'string') {\n throw new DeserializationError('Invalid SerializableError: missing or invalid message field');\n }\n const error = new Error(obj.message);\n if (typeof obj.name === 'string') {\n error.name = obj.name;\n }\n if (typeof obj.stack === 'string') {\n error.stack = obj.stack;\n }\n if (obj.code !== undefined) {\n (error as any).code = obj.code;\n }\n return error;\n }\n\n // Array\n if (Array.isArray(value)) {\n return value.map((item) => deserialize(item));\n }\n\n // Plain object\n const result: any = {};\n for (const [key, val] of Object.entries(value)) {\n result[key] = deserialize(val);\n }\n return result;\n}\n\n/**\n * Serialize multiple values (convenience for adapter method args).\n *\n * @example\n * ```typescript\n * const args = serializeArgs([\n * Buffer.from('hello'),\n * new Date(),\n * { nested: { value: 42 } },\n * ]);\n * ```\n */\nexport function serializeArgs(args: unknown[]): SerializableValue[] {\n return args.map((arg) => serialize(arg));\n}\n\n/**\n * Deserialize multiple values (convenience for adapter method args).\n *\n * @example\n * ```typescript\n * const args = deserializeArgs([\n * { __type: 'Buffer', data: 'aGVsbG8=' },\n * { __type: 'Date', iso: '2025-01-01T00:00:00.000Z' },\n * { nested: { value: 42 } },\n * ]);\n * ```\n */\nexport function deserializeArgs(args: SerializableValue[]): unknown[] {\n return args.map((arg) => deserialize(arg));\n}\n"]}