@kb-labs/core-runtime 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.
- package/dist/index.cjs +17 -27
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +40 -8
- package/dist/index.d.ts +40 -8
- package/dist/index.js +18 -28
- package/dist/index.js.map +1 -1
- package/package.json +20 -20
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/services/hybrid-log-reader.ts","../src/container.ts","../src/discover-adapters.ts","../src/transport/transport.ts","../src/transport/timeout-config.ts","../src/transport/unix-socket-transport.ts","../src/proxy/remote-adapter.ts","../src/transport/bulk-transfer.ts","../src/proxy/vector-store-proxy.ts","../src/proxy/cache-proxy.ts","../src/proxy/config-proxy.ts","../src/proxy/llm-proxy.ts","../src/proxy/embeddings-proxy.ts","../src/proxy/storage-proxy.ts","../src/adapters/config-adapter.ts","../src/ipc/unix-socket-server.ts","../src/index.ts","../src/loader.ts","../src/analytics-context.ts","../src/adapter-loader.ts","../src/environment-lease-store.ts","../src/environment-manager.ts","../src/workspace-manager.ts","../src/snapshot-manager.ts","../src/run-executor.ts","../src/run-orchestrator.ts","../src/wrappers/default-execution-policy-llm.ts","../src/core/resource-manager.ts","../src/core/job-scheduler.ts","../src/core/cron-manager.ts","../src/core/workflow-engine.ts","../src/proxy/sql-database-proxy.ts","../src/proxy/document-database-proxy.ts","../src/proxy/create-proxy-platform.ts","../src/monitoring.ts","../src/use-cases/start-full-cycle.ts"],"names":["PlatformContainer","platform","NoOpAnalytics","MemoryVectorStore","MockLLM","MockEmbeddings","MemoryCache","NoOpConfig","MemoryStorage","ConsoleLogger","MemoryEventBus","NoOpInvoke","MemoryArtifacts","NoOpWorkflowEngine","NoOpJobScheduler","NoOpCronManager","NoOpResourceManager","fs","pathToFileURL","path","glob","net","isAdapterResponse","RemoteAdapter","randomUUID","IPC_PROTOCOL_VERSION","serialize","deserialize","tmpdir","join","writeFile","readFile","unlink","unlinkSync","VectorStoreProxy","CacheProxy","LLMProxy","EmbeddingsProxy","StorageProxy","fs2","net2","os","execSync","AnalyticsLLM","AnalyticsEmbeddings","AnalyticsVectorStore","AnalyticsCache","AnalyticsStorage","InMemoryRateLimitBackend","ResourceBroker","createQueuedLLM","createQueuedEmbeddings","createQueuedVectorStore","UnixSocketTransport","ConfigProxy","discoverAdapters","ConfigAdapter","createUnixSocketServer"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @module @kb-labs/core-runtime/services/hybrid-log-reader\n * Hybrid log reader adapter implementation.\n *\n * Strategy:\n * 1. If persistence available → use it (complete historical data)\n * 2. If only buffer available → use it (recent logs only)\n * 3. Graceful degradation if neither available\n */\n\nimport type {\n ILogReader,\n ILogPersistence,\n ILogBuffer,\n LogRecord,\n LogQuery,\n LogQueryOptions,\n LogQueryResult,\n LogSearchOptions,\n LogSearchResult,\n LogStats,\n LogCapabilities,\n} from '@kb-labs/core-platform';\n\n/**\n * Hybrid log query service.\n *\n * Automatically selects best backend:\n * - Persistence (if available): complete historical data with FTS\n * - Buffer (if available): recent logs only, fast access\n * - Neither: throws descriptive error\n *\n * @example\n * ```typescript\n * const service = new HybridLogReader(persistence, buffer);\n *\n * // Query logs (uses persistence if available)\n * const result = await service.query({ level: 'error' });\n *\n * // Subscribe to real-time stream (uses buffer)\n * const unsubscribe = service.subscribe((log) => console.log(log));\n * ```\n */\nexport class HybridLogReader implements ILogReader {\n constructor(\n private persistence?: ILogPersistence,\n private buffer?: ILogBuffer\n ) {}\n\n /**\n * Query logs with filters and pagination.\n *\n * Strategy:\n * 1. Prefer persistence (complete data)\n * 2. Fallback to buffer (limited data)\n * 3. Error if neither available\n */\n async query(\n filters: LogQuery,\n options: LogQueryOptions = {}\n ): Promise<LogQueryResult> {\n // Strategy 1: Use persistence if available (preferred)\n if (this.persistence) {\n const result = await this.persistence.query(filters, {\n limit: options.limit,\n offset: options.offset,\n sortBy: options.sortBy,\n sortOrder: options.sortOrder,\n });\n\n return {\n logs: result.logs,\n total: result.total,\n hasMore: result.hasMore,\n source: 'persistence',\n };\n }\n\n // Strategy 2: Fallback to buffer (limited data)\n if (this.buffer) {\n return this.queryFromBuffer(filters, options);\n }\n\n // Strategy 3: No storage available\n throw new Error(\n 'No log storage backend available. Configure logPersistence or logRingBuffer in kb.config.json'\n );\n }\n\n /**\n * Get single log by ID.\n *\n * Searches persistence first (complete data), then buffer.\n */\n async getById(id: string): Promise<LogRecord | null> {\n // Try persistence first (complete data)\n if (this.persistence) {\n return this.persistence.getById(id);\n }\n\n // Fallback to buffer (recent logs only)\n if (this.buffer) {\n const logs = this.buffer.query({});\n return logs.find((log) => log.id === id) ?? null;\n }\n\n return null;\n }\n\n /**\n * Full-text search logs.\n *\n * Uses persistence FTS if available, otherwise simple text matching in buffer.\n */\n async search(\n searchText: string,\n options: LogSearchOptions = {}\n ): Promise<LogSearchResult> {\n // Use persistence FTS if available\n if (this.persistence) {\n return this.persistence.search(searchText, {\n limit: options.limit,\n offset: options.offset,\n });\n }\n\n // Fallback: simple text matching in buffer\n if (this.buffer) {\n return this.searchInBuffer(searchText, options);\n }\n\n throw new Error(\n 'No log storage backend available. Configure logPersistence or logRingBuffer in kb.config.json'\n );\n }\n\n /**\n * Subscribe to real-time log stream.\n *\n * Requires ring buffer. Throws error if not available.\n */\n subscribe(\n callback: (log: LogRecord) => void,\n filters?: LogQuery\n ): () => void {\n if (!this.buffer) {\n throw new Error(\n 'Real-time streaming requires ring buffer. Enable streaming in kb.config.json: ' +\n '{ \"platform\": { \"adapters\": { \"logRingBuffer\": \"@kb-labs/adapters-log-ringbuffer\" } } }'\n );\n }\n\n // Subscribe to buffer with optional filters\n return this.buffer.subscribe((log) => {\n // Apply filters if provided\n if (filters) {\n if (filters.level && log.level !== filters.level) {return;}\n if (filters.source && log.source !== filters.source) {return;}\n if (filters.from !== undefined && log.timestamp < filters.from) {return;}\n if (filters.to !== undefined && log.timestamp > filters.to) {return;}\n }\n callback(log);\n });\n }\n\n /**\n * Get combined statistics from both backends.\n */\n async getStats(): Promise<LogStats> {\n const stats: LogStats = {};\n\n // Get buffer stats if available\n if (this.buffer) {\n const raw = this.buffer.getStats();\n stats.buffer = {\n size: raw.total,\n maxSize: raw.bufferSize,\n oldestTimestamp: raw.oldestTimestamp,\n newestTimestamp: raw.newestTimestamp,\n };\n }\n\n // Get persistence stats if available\n if (this.persistence) {\n stats.persistence = await this.persistence.getStats();\n }\n\n return stats;\n }\n\n /**\n * Check which backends and features are available.\n */\n getCapabilities(): LogCapabilities {\n return {\n hasBuffer: !!this.buffer,\n hasPersistence: !!this.persistence,\n hasSearch: !!this.persistence, // FTS only in persistence\n hasStreaming: !!this.buffer, // Streaming only in buffer\n };\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // PRIVATE HELPERS\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Query logs from ring buffer (fallback implementation).\n * @private\n */\n private queryFromBuffer(\n filters: LogQuery,\n options: LogQueryOptions\n ): LogQueryResult {\n if (!this.buffer) {\n throw new Error('Buffer not available');\n }\n\n // Query all matching logs from buffer\n const allLogs = this.buffer.query(filters);\n\n // Apply sorting\n const sortBy = options.sortBy ?? 'timestamp';\n const sortOrder = options.sortOrder ?? 'desc';\n\n const sortedLogs = [...allLogs].sort((a, b) => {\n let comparison = 0;\n\n if (sortBy === 'timestamp') {\n comparison = a.timestamp - b.timestamp;\n } else if (sortBy === 'level') {\n const levelOrder = { trace: 0, debug: 1, info: 2, warn: 3, error: 4, fatal: 5 };\n comparison = levelOrder[a.level] - levelOrder[b.level];\n }\n\n return sortOrder === 'asc' ? comparison : -comparison;\n });\n\n // Apply pagination\n const limit = options.limit ?? 100;\n const offset = options.offset ?? 0;\n const paginatedLogs = sortedLogs.slice(offset, offset + limit);\n\n return {\n logs: paginatedLogs,\n total: sortedLogs.length,\n hasMore: offset + paginatedLogs.length < sortedLogs.length,\n source: 'buffer',\n };\n }\n\n /**\n * Search logs in ring buffer (simple text matching).\n * @private\n */\n private searchInBuffer(\n searchText: string,\n options: LogSearchOptions\n ): LogSearchResult {\n if (!this.buffer) {\n throw new Error('Buffer not available');\n }\n\n // Get all logs from buffer\n const allLogs = this.buffer.query({});\n\n // Simple case-insensitive text matching\n const searchLower = searchText.toLowerCase();\n const filtered = allLogs.filter((log) =>\n log.message.toLowerCase().includes(searchLower)\n );\n\n // Apply pagination\n const limit = options.limit ?? 100;\n const offset = options.offset ?? 0;\n const paginated = filtered.slice(offset, offset + limit);\n\n return {\n logs: paginated,\n total: filtered.length,\n hasMore: offset + paginated.length < filtered.length,\n };\n }\n}\n","/**\n * @module @kb-labs/core-runtime/container\n * Platform DI container.\n */\n\nimport type {\n IAnalytics,\n IVectorStore,\n ILLM,\n IEmbeddings,\n ICache,\n IConfig,\n IStorage,\n ILogger,\n IEventBus,\n IInvoke,\n IArtifacts,\n IWorkflowEngine,\n IJobScheduler,\n ICronManager,\n IResourceManager,\n IExecutionBackend,\n ILogReader,\n ILogPersistence,\n} from '@kb-labs/core-platform';\n\nimport type { IResourceBroker } from '@kb-labs/core-resource-broker';\nimport type { EnvironmentManager } from './environment-manager.js';\nimport type { WorkspaceManager } from './workspace-manager.js';\nimport type { SnapshotManager } from './snapshot-manager.js';\nimport type { RunExecutor } from './run-executor.js';\nimport type { RunOrchestrator } from './run-orchestrator.js';\n\nimport {\n NoOpAnalytics,\n MemoryVectorStore,\n MockLLM,\n MockEmbeddings,\n MemoryCache,\n NoOpConfig,\n MemoryStorage,\n ConsoleLogger,\n MemoryEventBus,\n NoOpInvoke,\n MemoryArtifacts,\n NoOpWorkflowEngine,\n NoOpJobScheduler,\n NoOpCronManager,\n NoOpResourceManager,\n} from '@kb-labs/core-platform/noop';\n\nimport { HybridLogReader } from './services/hybrid-log-reader.js';\n\n/**\n * Core adapter types (known at compile time).\n * These are the primary adapters that plugins see.\n */\nexport interface CoreAdapterTypes {\n analytics: IAnalytics;\n vectorStore: IVectorStore;\n llm: ILLM;\n embeddings: IEmbeddings;\n cache: ICache;\n config: IConfig;\n storage: IStorage;\n logger: ILogger;\n eventBus: IEventBus;\n invoke: IInvoke;\n artifacts: IArtifacts;\n}\n\n/**\n * All adapter types (core + extensions).\n * Extensions can be any type, not known at compile time.\n */\nexport type AdapterTypes = CoreAdapterTypes & {\n [key: string]: unknown;\n};\n\n/**\n * Platform lifecycle phase.\n */\nexport type PlatformLifecyclePhase =\n | 'start'\n | 'ready'\n | 'beforeShutdown'\n | 'shutdown';\n\n/**\n * Platform lifecycle event context.\n */\nexport interface PlatformLifecycleContext {\n phase: PlatformLifecyclePhase;\n cwd?: string;\n isChildProcess?: boolean;\n reason?: string;\n error?: unknown;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Platform lifecycle hooks.\n */\nexport interface PlatformLifecycleHooks {\n onStart?(context: PlatformLifecycleContext): void | Promise<void>;\n onReady?(context: PlatformLifecycleContext): void | Promise<void>;\n onBeforeShutdown?(context: PlatformLifecycleContext): void | Promise<void>;\n onShutdown?(context: PlatformLifecycleContext): void | Promise<void>;\n onError?(\n error: unknown,\n phase: PlatformLifecyclePhase,\n context: PlatformLifecycleContext\n ): void | Promise<void>;\n}\n\n/**\n * Platform DI container.\n * Provides access to all platform services through lazy-loaded getters.\n */\nexport class PlatformContainer {\n private adapters = new Map<string, unknown>();\n private lifecycleHooks = new Map<string, PlatformLifecycleHooks>();\n private initialized = false;\n\n // ═══════════════════════════════════════════════════════════════════════════\n // ADAPTERS (replaceable via kb.config.json)\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Set an adapter instance.\n *\n * Supports both core adapters (type-safe) and extension adapters (generic).\n *\n * @example\n * ```typescript\n * // Core adapter (type-safe)\n * platform.setAdapter('logger', pinoLogger); // Type: ILogger\n *\n * // Extension adapter (requires explicit type)\n * platform.setAdapter('logRingBuffer', ringBuffer); // Type: LogRingBufferAdapter\n * ```\n *\n * @param key - Adapter key\n * @param instance - Adapter instance\n */\n setAdapter<K extends keyof CoreAdapterTypes>(key: K, instance: CoreAdapterTypes[K]): void;\n setAdapter<T = unknown>(key: string, instance: T): void;\n setAdapter(key: string, instance: unknown): void {\n this.adapters.set(key, instance);\n }\n\n /**\n * Get an adapter instance.\n *\n * Two overloads:\n * 1. Core adapters (logger, db, etc.) - type-safe, returns typed instance\n * 2. Extension adapters (logRingBuffer, logPersistence, etc.) - generic, requires explicit type\n *\n * @example\n * ```typescript\n * // Core adapter (type-safe)\n * const logger = platform.getAdapter('logger'); // ILogger | undefined\n *\n * // Extension adapter (requires explicit type)\n * const buffer = platform.getAdapter<ILogRingBuffer>('logRingBuffer');\n * ```\n *\n * @param key - Adapter key\n */\n getAdapter<K extends keyof CoreAdapterTypes>(key: K): CoreAdapterTypes[K] | undefined;\n getAdapter<T = unknown>(key: string): T | undefined;\n getAdapter(key: string): unknown | undefined {\n return this.adapters.get(key);\n }\n\n /**\n * Check if an adapter is explicitly configured (not using fallback).\n *\n * @example\n * ```typescript\n * // Core adapter\n * if (platform.hasAdapter('logger')) { ... }\n *\n * // Extension adapter\n * if (platform.hasAdapter('logRingBuffer')) { ... }\n * ```\n *\n * @param key - Adapter key\n */\n hasAdapter<K extends keyof CoreAdapterTypes>(key: K): boolean;\n hasAdapter(key: string): boolean;\n hasAdapter(key: string): boolean {\n return this.adapters.has(key);\n }\n\n /**\n * List all adapter names.\n * Useful for debugging and discovery.\n */\n listAdapters(): string[] {\n return Array.from(this.adapters.keys());\n }\n\n /**\n * Register platform lifecycle hooks.\n * If hooks with this id already exist, they are replaced.\n */\n registerLifecycleHooks(id: string, hooks: PlatformLifecycleHooks): void {\n this.lifecycleHooks.set(id, hooks);\n }\n\n /**\n * Unregister platform lifecycle hooks by id.\n */\n unregisterLifecycleHooks(id: string): void {\n this.lifecycleHooks.delete(id);\n }\n\n /**\n * List registered lifecycle hook ids.\n */\n listLifecycleHookIds(): string[] {\n return Array.from(this.lifecycleHooks.keys());\n }\n\n /**\n * Emit lifecycle phase to registered hooks.\n */\n async emitLifecyclePhase(\n phase: PlatformLifecyclePhase,\n context: Omit<PlatformLifecycleContext, 'phase'> = {}\n ): Promise<void> {\n const event: PlatformLifecycleContext = { phase, ...context };\n const hookEntries = Array.from(this.lifecycleHooks.entries());\n\n for (const [hookId, hooks] of hookEntries) {\n let phaseHandler: ((ctx: PlatformLifecycleContext) => void | Promise<void>) | undefined;\n switch (phase) {\n case 'start':\n phaseHandler = hooks.onStart;\n break;\n case 'ready':\n phaseHandler = hooks.onReady;\n break;\n case 'beforeShutdown':\n phaseHandler = hooks.onBeforeShutdown;\n break;\n case 'shutdown':\n phaseHandler = hooks.onShutdown;\n break;\n }\n\n if (!phaseHandler) {\n continue;\n }\n\n try {\n await phaseHandler(event);\n } catch (hookError) {\n this.logger.warn('Platform lifecycle hook failed', {\n hookId,\n phase,\n error: hookError instanceof Error ? hookError.message : String(hookError),\n });\n\n if (hooks.onError) {\n try {\n await hooks.onError(hookError, phase, event);\n } catch (onErrorFailure) {\n this.logger.warn('Platform lifecycle onError hook failed', {\n hookId,\n phase,\n error: onErrorFailure instanceof Error ? onErrorFailure.message : String(onErrorFailure),\n });\n }\n }\n }\n }\n }\n\n /**\n * Emit lifecycle error to registered onError hooks.\n */\n async emitLifecycleError(\n error: unknown,\n phase: PlatformLifecyclePhase,\n context: Omit<PlatformLifecycleContext, 'phase'> = {}\n ): Promise<void> {\n const event: PlatformLifecycleContext = { phase, ...context, error };\n\n for (const [hookId, hooks] of this.lifecycleHooks.entries()) {\n if (!hooks.onError) {\n continue;\n }\n\n try {\n await hooks.onError(error, phase, event);\n } catch (onErrorFailure) {\n this.logger.warn('Platform lifecycle onError hook failed', {\n hookId,\n phase,\n error: onErrorFailure instanceof Error ? onErrorFailure.message : String(onErrorFailure),\n });\n }\n }\n }\n\n /**\n * Check if a service is explicitly configured (not using fallback).\n * @param service - Service name (e.g., 'llm', 'vectorStore', 'workflows')\n * @returns true if service is configured, false if using NoOp/fallback\n */\n isConfigured(service: string): boolean {\n // Check if it's an adapter\n if (this.adapters.has(service)) {\n return true;\n }\n // Check core features\n if (this.initialized) {\n const coreFeatures = ['workflows', 'jobScheduler', 'cron', 'resources', 'jobs'];\n if (coreFeatures.includes(service)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Get list of all configured services (adapters + core features).\n * Used for validating plugin platform requirements.\n */\n getConfiguredServices(): Set<string> {\n const services = new Set<string>();\n\n // Adapters\n for (const key of this.adapters.keys()) {\n services.add(key);\n }\n\n // Core features (always available after init)\n if (this.initialized) {\n services.add('workflows');\n services.add('jobScheduler');\n services.add('cron');\n services.add('resources');\n }\n\n // Resource broker (if initialized)\n if (this._resourceBroker) {\n services.add('resourceBroker');\n }\n\n if (this._environmentManager) {\n services.add('environmentManager');\n }\n if (this._workspaceManager) {\n services.add('workspaceManager');\n }\n if (this._snapshotManager) {\n services.add('snapshotManager');\n }\n if (this._runExecutor) {\n services.add('runExecutor');\n }\n if (this._runOrchestrator) {\n services.add('runOrchestrator');\n }\n\n return services;\n }\n\n /** Analytics adapter (fallback: NoOpAnalytics) */\n get analytics(): IAnalytics {\n return (this.adapters.get('analytics') as IAnalytics) ?? new NoOpAnalytics();\n }\n\n /** Vector store adapter (fallback: MemoryVectorStore) */\n get vectorStore(): IVectorStore {\n return (this.adapters.get('vectorStore') as IVectorStore) ?? new MemoryVectorStore();\n }\n\n /** LLM adapter (fallback: MockLLM) */\n get llm(): ILLM {\n return (this.adapters.get('llm') as ILLM) ?? new MockLLM();\n }\n\n /** Embeddings adapter (fallback: MockEmbeddings) */\n get embeddings(): IEmbeddings {\n return (this.adapters.get('embeddings') as IEmbeddings) ?? new MockEmbeddings();\n }\n\n /** Cache adapter (fallback: MemoryCache) */\n get cache(): ICache {\n return (this.adapters.get('cache') as ICache) ?? new MemoryCache();\n }\n\n /** Config adapter (fallback: NoOpConfig) */\n get config(): IConfig {\n return (this.adapters.get('config') as IConfig) ?? new NoOpConfig();\n }\n\n /** Storage adapter (fallback: MemoryStorage) */\n get storage(): IStorage {\n return (this.adapters.get('storage') as IStorage) ?? new MemoryStorage();\n }\n\n /** Logger adapter (fallback: ConsoleLogger) */\n get logger(): ILogger {\n return (this.adapters.get('logger') as ILogger) ?? new ConsoleLogger();\n }\n\n /** Event bus adapter (fallback: MemoryEventBus) */\n get eventBus(): IEventBus {\n return (this.adapters.get('eventBus') as IEventBus) ?? new MemoryEventBus();\n }\n\n /** Inter-plugin invocation adapter (fallback: NoOpInvoke) */\n get invoke(): IInvoke {\n return (this.adapters.get('invoke') as IInvoke) ?? new NoOpInvoke();\n }\n\n /** Artifact storage adapter (fallback: MemoryArtifacts) */\n get artifacts(): IArtifacts {\n return (this.adapters.get('artifacts') as IArtifacts) ?? new MemoryArtifacts();\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // SERVICES (derived from adapters, lazy-initialized)\n // ═══════════════════════════════════════════════════════════════════════════\n\n private _logQueryService?: ILogReader;\n\n /**\n * Unified log query service.\n * Automatically uses configured backends (logPersistence, logRingBuffer).\n *\n * @example\n * ```typescript\n * // Query logs\n * const result = await platform.logs.query({ level: 'error' });\n *\n * // Get log by ID\n * const log = await platform.logs.getById('log-123');\n *\n * // Full-text search\n * const results = await platform.logs.search('authentication failed');\n *\n * // Subscribe to real-time stream\n * const unsubscribe = platform.logs.subscribe((log) => console.log(log));\n * ```\n */\n get logs(): ILogReader {\n if (!this._logQueryService) {\n const persistence = this.getAdapter<ILogPersistence>('logPersistence');\n const buffer = this.logger.getLogBuffer?.();\n\n this._logQueryService = new HybridLogReader(persistence, buffer);\n }\n return this._logQueryService!;\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // CORE FEATURES (built-in, initialized during platform init)\n // ═══════════════════════════════════════════════════════════════════════════\n\n private _workflows?: IWorkflowEngine;\n private _jobs?: IJobScheduler;\n private _cron?: ICronManager;\n private _resources?: IResourceManager;\n private _resourceBroker?: IResourceBroker;\n private _socketServer?: { getSocketPath(): string };\n private _executionBackend?: IExecutionBackend;\n private _environmentManager?: EnvironmentManager;\n private _workspaceManager?: WorkspaceManager;\n private _snapshotManager?: SnapshotManager;\n private _runExecutor?: RunExecutor;\n private _runOrchestrator?: RunOrchestrator;\n\n /** Workflow engine (throws if not initialized) */\n get workflows(): IWorkflowEngine {\n if (!this._workflows) {\n // Return NoOp if not initialized for graceful degradation\n return new NoOpWorkflowEngine();\n }\n return this._workflows;\n }\n\n /** Job scheduler (throws if not initialized) */\n get jobs(): IJobScheduler {\n if (!this._jobs) {\n return new NoOpJobScheduler();\n }\n return this._jobs;\n }\n\n /** Cron manager (throws if not initialized) */\n get cron(): ICronManager {\n if (!this._cron) {\n return new NoOpCronManager();\n }\n return this._cron;\n }\n\n /** Resource manager (throws if not initialized) */\n get resources(): IResourceManager {\n if (!this._resources) {\n return new NoOpResourceManager();\n }\n return this._resources;\n }\n\n /**\n * Resource broker for rate limiting, queueing, and retry.\n * @throws Error if not initialized\n */\n get resourceBroker(): IResourceBroker {\n if (!this._resourceBroker) {\n throw new Error('ResourceBroker not initialized. Call initPlatform() first.');\n }\n return this._resourceBroker;\n }\n\n /**\n * Check if resource broker is initialized.\n */\n get hasResourceBroker(): boolean {\n return this._resourceBroker !== undefined;\n }\n\n /**\n * Initialize core features.\n * Called internally by initPlatform().\n */\n initCoreFeatures(\n workflows: IWorkflowEngine,\n jobs: IJobScheduler,\n cron: ICronManager,\n resources: IResourceManager\n ): void {\n this._workflows = workflows;\n this._jobs = jobs;\n this._cron = cron;\n this._resources = resources;\n this.initialized = true;\n }\n\n /**\n * Initialize resource broker.\n * Called internally by initPlatform().\n */\n initResourceBroker(broker: IResourceBroker): void {\n this._resourceBroker = broker;\n }\n\n /**\n * Initialize Unix socket server.\n * Called internally by initPlatform() in parent process.\n */\n initSocketServer(server: { getSocketPath(): string }): void {\n this._socketServer = server;\n }\n\n /**\n * Get socket path for IPC communication.\n * Returns undefined if not running in parent process.\n */\n getSocketPath(): string | undefined {\n return this._socketServer?.getSocketPath();\n }\n\n /**\n * Initialize execution backend.\n * Called internally by initPlatform() AFTER adapters, BEFORE core features.\n *\n * @param backend - ExecutionBackend instance (from @kb-labs/plugin-execution)\n */\n initExecutionBackend(backend: IExecutionBackend): void {\n if (this._executionBackend) {\n this.logger.warn('ExecutionBackend already initialized, replacing');\n }\n this._executionBackend = backend;\n this.logger.debug('ExecutionBackend initialized', {\n mode: backend.constructor.name,\n });\n }\n\n /**\n * Get execution backend.\n * Returns the initialized backend or throws if not initialized.\n *\n * @throws Error if ExecutionBackend not initialized via initPlatform()\n * @returns ExecutionBackend instance\n */\n get executionBackend(): IExecutionBackend {\n if (!this._executionBackend) {\n throw new Error(\n 'ExecutionBackend not initialized. ' +\n 'Call initPlatform() with execution config to initialize ExecutionBackend.'\n );\n }\n return this._executionBackend;\n }\n\n /**\n * Check if execution backend is initialized.\n */\n get hasExecutionBackend(): boolean {\n return !!this._executionBackend;\n }\n\n /**\n * Initialize orchestration services.\n * Called internally by initPlatform() after ExecutionBackend init.\n */\n initOrchestrationServices(\n environmentManager: EnvironmentManager,\n runExecutor: RunExecutor,\n runOrchestrator: RunOrchestrator\n ): void {\n this._environmentManager = environmentManager;\n this._runExecutor = runExecutor;\n this._runOrchestrator = runOrchestrator;\n }\n\n /**\n * Initialize infrastructure capability services.\n * Called internally by initPlatform().\n */\n initCapabilityServices(\n workspaceManager: WorkspaceManager,\n snapshotManager: SnapshotManager\n ): void {\n this._workspaceManager = workspaceManager;\n this._snapshotManager = snapshotManager;\n }\n\n /**\n * Environment manager service.\n */\n get environmentManager(): EnvironmentManager {\n if (!this._environmentManager) {\n throw new Error(\n 'EnvironmentManager not initialized. Call initPlatform() first.'\n );\n }\n return this._environmentManager;\n }\n\n /**\n * Workspace manager service.\n */\n get workspaceManager(): WorkspaceManager {\n if (!this._workspaceManager) {\n throw new Error(\n 'WorkspaceManager not initialized. Call initPlatform() first.'\n );\n }\n return this._workspaceManager;\n }\n\n /**\n * Snapshot manager service.\n */\n get snapshotManager(): SnapshotManager {\n if (!this._snapshotManager) {\n throw new Error(\n 'SnapshotManager not initialized. Call initPlatform() first.'\n );\n }\n return this._snapshotManager;\n }\n\n /**\n * Run executor service.\n */\n get runExecutor(): RunExecutor {\n if (!this._runExecutor) {\n throw new Error('RunExecutor not initialized. Call initPlatform() first.');\n }\n return this._runExecutor;\n }\n\n /**\n * Run orchestrator service.\n */\n get runOrchestrator(): RunOrchestrator {\n if (!this._runOrchestrator) {\n throw new Error(\n 'RunOrchestrator not initialized. Call initPlatform() first.'\n );\n }\n return this._runOrchestrator;\n }\n\n /**\n * Check if platform is initialized.\n */\n get isInitialized(): boolean {\n return this.initialized;\n }\n\n /**\n * Reset platform to initial state.\n * Clears all adapters and core features.\n * Used primarily for testing.\n */\n reset(): void {\n this.adapters.clear();\n this.lifecycleHooks.clear();\n this._workflows = undefined;\n this._jobs = undefined;\n this._cron = undefined;\n this._resources = undefined;\n this._resourceBroker = undefined;\n this._socketServer = undefined;\n this._executionBackend = undefined;\n this._environmentManager = undefined;\n this._workspaceManager = undefined;\n this._snapshotManager = undefined;\n this._runExecutor = undefined;\n this._runOrchestrator = undefined;\n this.initialized = false;\n }\n\n /**\n * Shutdown platform gracefully.\n * Closes all resources, stops workers, cleanup.\n */\n async shutdown(): Promise<void> {\n await this.emitLifecyclePhase('beforeShutdown', {\n reason: 'platform.shutdown',\n metadata: {\n adapterCount: this.adapters.size,\n hasExecutionBackend: !!this._executionBackend,\n },\n });\n\n // Shutdown execution backend (closes worker pool)\n if (this._executionBackend) {\n try {\n await this._executionBackend.shutdown();\n } catch (error) {\n this.logger.warn('ExecutionBackend shutdown failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n if (this._environmentManager) {\n try {\n await this._environmentManager.shutdown();\n } catch (error) {\n this.logger.warn('EnvironmentManager shutdown failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n if (this._workspaceManager) {\n try {\n await this._workspaceManager.shutdown();\n } catch (error) {\n this.logger.warn('WorkspaceManager shutdown failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n if (this._snapshotManager) {\n try {\n await this._snapshotManager.shutdown();\n } catch (error) {\n this.logger.warn('SnapshotManager shutdown failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Gracefully close adapters that expose close()/dispose()/shutdown()\n for (const [adapterId, adapter] of this.adapters.entries()) {\n if (!adapter || adapter === this._executionBackend) {\n continue;\n }\n\n const candidate = adapter as {\n close?: () => Promise<void> | void;\n dispose?: () => Promise<void> | void;\n shutdown?: () => Promise<void> | void;\n };\n\n try {\n if (typeof candidate.close === 'function') {\n await candidate.close.call(adapter);\n } else if (typeof candidate.dispose === 'function') {\n await candidate.dispose.call(adapter);\n } else if (typeof candidate.shutdown === 'function') {\n await candidate.shutdown.call(adapter);\n }\n } catch (error) {\n this.logger.warn('Adapter shutdown failed', {\n adapterId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // TODO: Shutdown other resources (workflows, jobs, cron, etc.)\n await this.emitLifecyclePhase('shutdown', {\n reason: 'platform.shutdown',\n metadata: {\n adapterCount: this.adapters.size,\n },\n });\n }\n}\n\n/**\n * Cross-realm Symbol for platform singleton.\n *\n * Uses Symbol.for() which creates a GLOBAL symbol that works across:\n * - CJS (require('@kb-labs/core-runtime'))\n * - ESM (import '@kb-labs/core-runtime')\n * - Worker Threads (sandbox workers)\n *\n * Symbol.for() is the standard way to create cross-realm symbols:\n * - React uses Symbol.for('react.element')\n * - Redux uses Symbol.for('redux.observable')\n * - This is NOT a hack - it's official JavaScript API\n *\n * Storage: We use `process` instead of `globalThis` because:\n * - `globalThis` is DIFFERENT between CJS and ESM module realms\n * - `process` is the ONLY object shared across all module types in Node.js\n * - This ensures true singleton behavior across the entire Node.js process\n */\nconst PLATFORM_SINGLETON_KEY = Symbol.for('kb.platform');\n\n/**\n * Type augmentation for process to track platform singleton.\n * This makes TypeScript aware of our platform storage.\n */\ndeclare global {\n var __KB_PLATFORM_SINGLETON__: PlatformContainer | undefined;\n}\n\n// Helper to access the singleton via Symbol.for()\nfunction getPlatformFromProcess(): PlatformContainer | undefined {\n return (process as any)[PLATFORM_SINGLETON_KEY];\n}\n\nfunction setPlatformInProcess(platform: PlatformContainer): void {\n (process as any)[PLATFORM_SINGLETON_KEY] = platform;\n}\n\n/**\n * Global platform container singleton.\n *\n * Uses Symbol.for() + process for TRUE cross-realm singleton:\n * - Works across CJS (CLI bin.cjs) and ESM (sandbox workers)\n * - All worker threads share the same process object\n * - Each Docker container gets its own process (correct isolation!)\n *\n * This ensures:\n * ✅ One QdrantVectorStore instance per Node.js process\n * ✅ One Logger instance per Node.js process\n * ✅ One Analytics adapter per Node.js process\n * ✅ All sandbox workers share adapters (resource efficiency)\n * ✅ Docker containers are isolated (security for paranoid mode)\n */\nexport const platform: PlatformContainer = (() => {\n // Check if singleton already exists\n const existing = getPlatformFromProcess();\n\n if (existing && typeof existing.setAdapter === 'function' && typeof existing.getAdapter === 'function') {\n return existing;\n }\n\n // Create new singleton and store in process\n const newPlatform = new PlatformContainer();\n setPlatformInProcess(newPlatform);\n return newPlatform;\n})();\n","/**\n * @module @kb-labs/core-runtime/discover-adapters\n * Auto-discovery of adapters from workspace packages.\n *\n * Similar to CLI plugin discovery, this scans kb-labs-adapters/packages/*\n * and loads adapters by file path (not package name).\n */\n\nimport { promises as fs } from 'node:fs';\nimport { pathToFileURL } from 'node:url';\nimport path from 'node:path';\nimport { glob } from 'glob';\n\n/**\n * Discovered adapter info\n */\nexport interface DiscoveredAdapter {\n /** Package name (e.g., \"@kb-labs/adapters-openai\") */\n packageName: string;\n /** Absolute path to package root */\n pkgRoot: string;\n /** Adapter factory function */\n createAdapter: (config?: any) => any;\n /** Adapter module (full exports) */\n module: any;\n}\n\n/**\n * Read package.json at given path\n */\nasync function readPackageJson(pkgPath: string): Promise<any> {\n try {\n const content = await fs.readFile(pkgPath, 'utf8');\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n\n/**\n * Load adapter module by file path (ESM import)\n */\nasync function loadAdapterModule(distPath: string): Promise<any> {\n const fileUrl = pathToFileURL(distPath).href;\n return import(fileUrl);\n}\n\n/**\n * Check if package is an adapter (has @kb-labs/adapters-* name)\n */\nfunction isAdapterPackage(pkg: any): boolean {\n return pkg?.name?.startsWith('@kb-labs/adapters-');\n}\n\n/**\n * Discover adapters from workspace packages.\n * Scans kb-labs-adapters/packages/* and loads built adapters.\n *\n * @param cwd - Workspace root directory\n * @returns Map of package names to adapter info\n *\n * @example\n * ```typescript\n * const adapters = await discoverAdapters('/Users/kb-labs');\n * const openai = adapters.get('@kb-labs/adapters-openai');\n * if (openai) {\n * const llm = openai.createAdapter({ model: 'gpt-4' });\n * }\n * ```\n */\nexport async function discoverAdapters(cwd: string): Promise<Map<string, DiscoveredAdapter>> {\n const discovered = new Map<string, DiscoveredAdapter>();\n\n // Scan kb-labs-adapters/packages/*\n const adaptersBase = path.join(cwd, 'kb-labs-adapters', 'packages');\n\n try {\n // Check if kb-labs-adapters exists\n await fs.access(adaptersBase);\n } catch {\n // kb-labs-adapters not found, return empty map\n return discovered;\n }\n\n // Find all package.json files\n const pkgPattern = path.join(adaptersBase, '*/package.json');\n const pkgFiles = await glob(pkgPattern, {\n cwd: adaptersBase,\n absolute: false,\n });\n\n // Load each adapter package\n for (const pkgFile of pkgFiles) {\n const pkgPath = path.join(adaptersBase, pkgFile);\n const pkgRoot = path.dirname(pkgPath);\n const pkg = await readPackageJson(pkgPath);\n\n if (!pkg || !isAdapterPackage(pkg)) {\n continue;\n }\n\n // Find main export (dist/index.js)\n const distPath = path.join(pkgRoot, pkg.main || 'dist/index.js');\n\n try {\n // Check if dist exists (package must be built)\n await fs.access(distPath);\n\n // Load module\n const module = await loadAdapterModule(distPath);\n\n // Check for createAdapter export\n if (typeof module.createAdapter !== 'function') {\n // Skip adapters without createAdapter export (e.g., pino-http is a helper, not an adapter)\n continue;\n }\n\n discovered.set(pkg.name, {\n packageName: pkg.name,\n pkgRoot,\n createAdapter: module.createAdapter,\n module,\n });\n } catch {\n // Silently skip adapters that fail to load (likely not built yet)\n }\n }\n\n return discovered;\n}\n\n/**\n * Resolve adapter path - tries discovery first, falls back to package name import.\n *\n * @param adapterPath - Package name or file path\n * @param cwd - Workspace root directory\n * @returns Adapter factory function\n *\n * @example\n * ```typescript\n * // Try to discover first (workspace)\n * const adapter = await resolveAdapter('@kb-labs/adapters-openai', cwd);\n *\n * // Falls back to dynamic import if not found in workspace\n * const adapter = await resolveAdapter('@kb-labs/adapters-openai', cwd);\n * ```\n */\nexport async function resolveAdapter(\n adapterPath: string,\n cwd: string\n): Promise<((config?: any) => any) | null> {\n // Try workspace discovery first\n const discovered = await discoverAdapters(cwd);\n\n // Check for subpath exports (e.g., \"@kb-labs/adapters-openai/embeddings\")\n const basePkgName = adapterPath.split('/').slice(0, 2).join('/'); // \"@kb-labs/adapters-openai\"\n const subpath = adapterPath.includes('/') ? adapterPath.split('/').slice(2).join('/') : null; // \"embeddings\"\n\n const adapter = discovered.get(basePkgName);\n\n if (adapter && subpath) {\n // Load subpath export from workspace adapter\n const subpathFile = path.join(adapter.pkgRoot, 'dist', `${subpath}.js`);\n try {\n await fs.access(subpathFile);\n const module = await loadAdapterModule(subpathFile);\n if (typeof module.createAdapter === 'function') {\n return module.createAdapter;\n }\n if (typeof module.default === 'function') {\n return module.default;\n }\n } catch {\n // Silently skip subpath that fails to load\n }\n } else if (adapter) {\n return adapter.createAdapter;\n }\n\n // Fallback: try dynamic import (for npm-installed adapters)\n try {\n const module = await import(adapterPath);\n if (typeof module.createAdapter === 'function') {\n return module.createAdapter;\n }\n if (typeof module.default === 'function') {\n return module.default;\n }\n return null;\n } catch {\n return null;\n }\n}\n","/**\n * @module @kb-labs/core-runtime/transport\n * Abstract transport layer for cross-process adapter communication.\n *\n * Provides a transport-agnostic interface for sending adapter calls\n * between parent and child processes. Implementations can use:\n * - IPC (process.send/process.on('message'))\n * - HTTP REST API\n * - Docker exec\n * - gRPC\n * - WebSockets\n *\n * @example\n * ```typescript\n * import { ITransport, IPCTransport } from '@kb-labs/core-runtime/transport';\n *\n * const transport: ITransport = new IPCTransport();\n * const response = await transport.send({\n * type: 'adapter:call',\n * requestId: 'uuid-123',\n * adapter: 'vectorStore',\n * method: 'search',\n * args: [[0.1, 0.2, 0.3], 10],\n * });\n * ```\n */\n\nimport type { AdapterCall, AdapterResponse } from '@kb-labs/core-platform/serializable';\n\n/**\n * Transport configuration options.\n */\nexport interface TransportConfig {\n /**\n * Default timeout for adapter calls in milliseconds.\n * @default 30000 (30 seconds)\n */\n timeout?: number;\n\n /**\n * Number of retry attempts for transient errors.\n * @default 0 (no retries)\n */\n retries?: number;\n\n /**\n * Delay between retry attempts in milliseconds.\n * @default 1000 (1 second)\n */\n retryDelay?: number;\n\n /**\n * Exponential backoff multiplier for retries.\n * @default 2 (doubles delay each retry)\n */\n backoffMultiplier?: number;\n}\n\n/**\n * Abstract transport for sending adapter calls.\n *\n * Implementations must handle:\n * - Reliable message delivery\n * - Timeout enforcement\n * - Error propagation\n * - Resource cleanup\n *\n * Thread-safety: Implementations must be safe to call concurrently\n * from multiple async contexts.\n */\nexport interface ITransport {\n /**\n * Send adapter call and await response.\n *\n * @param call - Adapter method call to send\n * @returns Response with result or error\n * @throws TransportError if communication fails\n * @throws TimeoutError if timeout exceeded\n * @throws SerializationError if message cannot be serialized\n *\n * @example\n * ```typescript\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: 5000,\n * };\n *\n * const response = await transport.send(call);\n * if (response.error) {\n * throw deserialize(response.error);\n * }\n * return deserialize(response.result);\n * ```\n */\n send(call: AdapterCall): Promise<AdapterResponse>;\n\n /**\n * Close transport and cleanup resources.\n *\n * After close():\n * - No new calls can be sent\n * - Pending calls are rejected with TransportError\n * - Listeners/connections are cleaned up\n *\n * @example\n * ```typescript\n * await transport.close();\n * // All pending calls rejected\n * // transport.send() will throw TransportError\n * ```\n */\n close(): Promise<void>;\n\n /**\n * Check if transport is closed.\n */\n isClosed(): boolean;\n}\n\n/**\n * Base error for transport failures.\n */\nexport class TransportError extends Error {\n public override readonly cause?: Error;\n\n constructor(message: string, cause?: Error) {\n super(message);\n this.name = 'TransportError';\n this.cause = cause;\n if (cause) {\n this.stack = `${this.stack}\\nCaused by: ${cause.stack}`;\n }\n }\n}\n\n/**\n * Error thrown when adapter call times out.\n */\nexport class TimeoutError extends TransportError {\n public readonly timeoutMs: number;\n\n constructor(message: string, timeoutMs: number) {\n super(message);\n this.name = 'TimeoutError';\n this.timeoutMs = timeoutMs;\n }\n}\n\n/**\n * Error thrown when circuit breaker is open.\n */\nexport class CircuitOpenError extends TransportError {\n constructor(message: string) {\n super(message);\n this.name = 'CircuitOpenError';\n }\n}\n\n/**\n * Check if error is retryable (transient failure).\n *\n * Retryable errors:\n * - Network timeouts (TimeoutError)\n * - Connection errors (ECONNRESET, ECONNREFUSED, ETIMEDOUT)\n * - Temporary server errors (503 Service Unavailable)\n *\n * Non-retryable errors:\n * - Invalid requests (400 Bad Request)\n * - Authentication failures (401, 403)\n * - Not found (404)\n * - Application errors from adapter (e.g., VectorStoreError)\n *\n * @param error - Error to check\n * @returns true if error should be retried\n */\nexport function isRetryableError(error: Error): boolean {\n // Timeout errors are retryable\n if (error instanceof TimeoutError) {\n return true;\n }\n\n // Circuit breaker open is NOT retryable (wait for half-open state)\n if (error instanceof CircuitOpenError) {\n return false;\n }\n\n // Check error code for network errors\n const code = (error as any).code;\n if (code) {\n const retryableCodes = [\n 'ECONNRESET', // Connection reset\n 'ECONNREFUSED', // Connection refused\n 'ETIMEDOUT', // Operation timed out\n 'ENOTFOUND', // DNS lookup failed\n 'EAI_AGAIN', // DNS temporary failure\n ];\n return retryableCodes.includes(code);\n }\n\n // Check HTTP status for server errors\n const status = (error as any).status || (error as any).statusCode;\n if (status) {\n // 503 Service Unavailable is retryable\n // 429 Too Many Requests is retryable\n return status === 503 || status === 429;\n }\n\n // Default: not retryable\n return false;\n}\n\n/**\n * Internal pending request tracking.\n * Used by transport implementations to match responses with requests.\n */\nexport interface PendingRequest {\n resolve: (response: AdapterResponse) => void;\n reject: (error: Error) => void;\n timer: NodeJS.Timeout;\n}\n","/**\n * @module @kb-labs/core-runtime/transport/timeout-config\n * Declarative timeout configuration for adapter operations.\n *\n * Different adapter operations have different performance characteristics:\n * - Fast operations (cache, simple queries): 5-30s\n * - Medium operations (embeddings, search): 30-60s\n * - Slow operations (bulk upsert, batch embeddings): 60-180s\n *\n * These timeouts account for:\n * 1. Network latency (Unix Socket is fast, but operation itself may be slow)\n * 2. Backend processing time (Qdrant upsert, OpenAI API calls)\n * 3. Safety margin (P95 latency + buffer)\n *\n * @example\n * ```typescript\n * import { getOperationTimeout } from './timeout-config';\n *\n * const timeout = getOperationTimeout('vectorStore', 'upsert');\n * // Returns 120000 (2 minutes)\n * ```\n */\n\n/**\n * Timeout configuration map.\n * Key format: \"adapter.method\" or \"adapter.*\" for wildcard.\n */\nexport const OPERATION_TIMEOUTS: Record<string, number> = {\n // === VectorStore operations ===\n // Bulk upsert is slow (Qdrant indexing overhead)\n 'vectorStore.upsert': 120_000, // 2 minutes\n\n // Search operations - medium latency\n 'vectorStore.search': 30_000, // 30 seconds\n 'vectorStore.hybridSearch': 45_000, // 45 seconds (BM25 + vector)\n\n // Bulk retrieval - potentially large result sets\n 'vectorStore.get': 120_000, // 2 minutes (retrieving many vectors)\n 'vectorStore.query': 120_000, // 2 minutes (metadata filtering + retrieval)\n\n // Collection management - fast\n 'vectorStore.createCollection': 15_000,\n 'vectorStore.deleteCollection': 15_000,\n 'vectorStore.collectionExists': 5_000,\n\n // === Embeddings operations ===\n // Single embed - OpenAI API latency\n 'embeddings.embed': 30_000, // 30 seconds\n\n // Batch embeddings - OpenAI processes in parallel, but may rate limit\n 'embeddings.embedBatch': 120_000, // 2 minutes\n\n // Dimension check - fast property access\n 'embeddings.getDimensions': 5_000,\n\n // === LLM operations ===\n // Text generation - depends on output length\n 'llm.generate': 90_000, // 1.5 minutes\n 'llm.generateStream': 120_000, // 2 minutes (streaming may take longer)\n\n // === Cache operations ===\n // Cache is fast (Redis or in-memory)\n 'cache.get': 5_000,\n 'cache.set': 5_000,\n 'cache.delete': 5_000,\n 'cache.clear': 10_000,\n 'cache.has': 5_000,\n\n // === Storage operations ===\n // File I/O - medium latency\n 'storage.read': 15_000,\n 'storage.write': 30_000,\n 'storage.delete': 10_000,\n 'storage.exists': 5_000,\n 'storage.list': 20_000,\n\n // === Wildcard defaults ===\n // Default timeout for any vectorStore operation not listed above\n 'vectorStore.*': 60_000,\n\n // Default timeout for any embeddings operation\n 'embeddings.*': 60_000,\n\n // Default timeout for any LLM operation\n 'llm.*': 90_000,\n\n // Default timeout for any cache operation\n 'cache.*': 10_000,\n\n // Default timeout for any storage operation\n 'storage.*': 30_000,\n\n // === Global fallback ===\n // Used when no specific rule matches\n '*': 30_000, // 30 seconds default\n};\n\n/**\n * Get timeout for a specific adapter operation.\n *\n * Priority:\n * 1. Explicit \"adapter.method\" match\n * 2. Wildcard \"adapter.*\" match\n * 3. Global \"*\" fallback\n *\n * @param adapter - Adapter name (e.g., \"vectorStore\", \"embeddings\")\n * @param method - Method name (e.g., \"upsert\", \"search\")\n * @returns Timeout in milliseconds\n *\n * @example\n * ```typescript\n * getOperationTimeout('vectorStore', 'upsert'); // 120000\n * getOperationTimeout('vectorStore', 'unknownMethod'); // 60000 (wildcard)\n * getOperationTimeout('unknownAdapter', 'unknownMethod'); // 30000 (fallback)\n * ```\n */\nexport function getOperationTimeout(adapter: string, method: string): number {\n // Try exact match first\n const exactKey = `${adapter}.${method}`;\n if (exactKey in OPERATION_TIMEOUTS) {\n return OPERATION_TIMEOUTS[exactKey]!;\n }\n\n // Try adapter wildcard\n const wildcardKey = `${adapter}.*`;\n if (wildcardKey in OPERATION_TIMEOUTS) {\n return OPERATION_TIMEOUTS[wildcardKey]!;\n }\n\n // Global fallback\n return OPERATION_TIMEOUTS['*']!;\n}\n\n/**\n * Get timeout for an adapter call with priority chain:\n * 1. Explicit call.timeout (highest priority)\n * 2. Config timeout from transport\n * 3. Operation-specific timeout\n * 4. Global fallback (lowest priority)\n *\n * @param call - Adapter call with optional timeout\n * @param configTimeout - Transport-level default timeout\n * @returns Final timeout to use in milliseconds\n *\n * @example\n * ```typescript\n * // Explicit timeout takes priority\n * selectTimeout({ adapter: 'vectorStore', method: 'upsert', timeout: 60000 }, 30000);\n * // Returns 60000\n *\n * // Config timeout takes priority over operation timeout\n * selectTimeout({ adapter: 'vectorStore', method: 'upsert' }, 90000);\n * // Returns 90000\n *\n * // Operation timeout used when no explicit override\n * selectTimeout({ adapter: 'vectorStore', method: 'upsert' }, undefined);\n * // Returns 120000\n * ```\n */\nexport function selectTimeout(\n call: { adapter: string; method: string; timeout?: number },\n configTimeout?: number\n): number {\n // Priority 1: Explicit call timeout\n if (call.timeout !== undefined) {\n return call.timeout;\n }\n\n // Priority 2: Transport config timeout\n if (configTimeout !== undefined) {\n return configTimeout;\n }\n\n // Priority 3: Operation-specific timeout\n return getOperationTimeout(call.adapter, call.method);\n}\n","/**\n * @module @kb-labs/core-runtime/transport\n * Unix Domain Socket transport for high-throughput IPC.\n *\n * Unix sockets provide 100-1000x better performance than process.send()\n * for large messages (>16KB), making them ideal for bulk operations like\n * VectorStore upsert with thousands of vectors.\n *\n * @example\n * ```typescript\n * import { UnixSocketTransport } from '@kb-labs/core-runtime/transport';\n *\n * // In child process\n * const transport = new UnixSocketTransport({ socketPath: '/tmp/kb-ipc.sock' });\n * const response = await transport.send(call);\n * await transport.close();\n * ```\n */\n\nimport * as net from 'net';\nimport type { AdapterCall, AdapterResponse } from '@kb-labs/core-platform/serializable';\nimport { isAdapterResponse } from '@kb-labs/core-platform/serializable';\nimport {\n type ITransport,\n type TransportConfig,\n type PendingRequest,\n TransportError,\n TimeoutError,\n} from './transport.js';\nimport { selectTimeout } from './timeout-config.js';\n\n/**\n * Configuration for Unix Socket transport.\n */\nexport interface UnixSocketConfig extends TransportConfig {\n /** Path to Unix socket file (default: /tmp/kb-ipc.sock) */\n socketPath?: string;\n /** Reconnect on disconnect (default: true) */\n autoReconnect?: boolean;\n /** Max reconnect attempts (default: 3) */\n maxReconnectAttempts?: number;\n}\n\n/**\n * Unix Domain Socket transport for high-performance IPC.\n *\n * Features:\n * - 100-1000x faster than process.send() for large messages\n * - No backpressure issues (TCP flow control handles it)\n * - Auto-reconnect on connection loss\n * - Message framing with newline delimiter\n *\n * Performance:\n * - process.send(): ~16KB buffer, 250-300s for 40MB\n * - Unix socket: ~1-2 GB/s throughput, <1s for 40MB\n */\nexport class UnixSocketTransport implements ITransport {\n private socket: net.Socket | null = null;\n private pending = new Map<string, PendingRequest>();\n private closed = false;\n private connecting = false;\n private buffer = '';\n private reconnectAttempts = 0;\n\n constructor(private config: UnixSocketConfig = {}) {}\n\n /**\n * Connect to Unix socket server.\n * Called lazily on first send() or explicitly.\n */\n async connect(): Promise<void> {\n if (this.socket && !this.socket.destroyed) {\n return; // Already connected\n }\n\n if (this.connecting) {\n // Wait for existing connection attempt\n await new Promise((resolve) => {\n setTimeout(resolve, 100);\n });\n return this.connect();\n }\n\n this.connecting = true;\n\n return new Promise((resolve, reject) => {\n const socketPath = this.config.socketPath ?? '/tmp/kb-ipc.sock';\n\n this.socket = net.connect(socketPath);\n\n this.socket.on('connect', () => {\n this.connecting = false;\n this.reconnectAttempts = 0;\n resolve();\n });\n\n this.socket.on('error', (error) => {\n this.connecting = false;\n\n // Try reconnect if enabled\n const maxAttempts = this.config.maxReconnectAttempts ?? 3;\n if (this.config.autoReconnect !== false && this.reconnectAttempts < maxAttempts) {\n this.reconnectAttempts++;\n setTimeout(() => this.connect(), 1000 * this.reconnectAttempts);\n return;\n }\n\n reject(new TransportError(`Unix socket connection failed: ${error.message}`, error));\n });\n\n this.socket.on('data', (data) => {\n this.handleData(data);\n });\n\n this.socket.on('close', () => {\n if (!this.closed && this.config.autoReconnect !== false) {\n // Unexpected close, try reconnect\n setTimeout(() => this.connect(), 1000);\n }\n });\n });\n }\n\n async send(call: AdapterCall): Promise<AdapterResponse> {\n if (this.closed) {\n throw new TransportError('Transport is closed');\n }\n\n // Ensure connected\n await this.connect();\n\n if (!this.socket || this.socket.destroyed) {\n throw new TransportError('Socket not available');\n }\n\n // Smart timeout selection based on operation type\n const timeout = selectTimeout(call, this.config.timeout);\n\n return new Promise((resolve, reject) => {\n // Create timeout timer\n const timer = setTimeout(() => {\n this.pending.delete(call.requestId);\n reject(new TimeoutError(`Adapter call timed out after ${timeout}ms`, timeout));\n }, timeout);\n\n // Store pending request\n this.pending.set(call.requestId, { resolve, reject, timer });\n\n // Send via Unix socket (newline-delimited JSON)\n const message = JSON.stringify(call) + '\\n';\n\n const written = this.socket!.write(message, 'utf8', (error) => {\n if (error) {\n const pending = this.pending.get(call.requestId);\n if (pending) {\n clearTimeout(pending.timer);\n this.pending.delete(call.requestId);\n reject(new TransportError(`Failed to write to socket: ${error.message}`, error));\n }\n }\n });\n\n // Unix sockets handle backpressure via TCP flow control\n // If write() returns false, 'drain' event will fire when ready\n if (!written) {\n this.socket!.once('drain', () => {\n // Socket ready for more data (TCP handled backpressure)\n });\n }\n });\n }\n\n /**\n * Handle incoming data from Unix socket.\n * Messages are newline-delimited JSON.\n */\n private handleData(data: Buffer): void {\n this.buffer += data.toString('utf8');\n\n // Process all complete messages (newline-delimited)\n let newlineIndex: number;\n while ((newlineIndex = this.buffer.indexOf('\\n')) !== -1) {\n const line = this.buffer.slice(0, newlineIndex);\n this.buffer = this.buffer.slice(newlineIndex + 1);\n\n if (line.trim().length === 0) {\n continue;\n }\n\n try {\n const msg = JSON.parse(line);\n this.handleMessage(msg);\n } catch {\n // Ignore parse errors - corrupt message or incomplete fragment\n }\n }\n }\n\n private handleMessage(msg: unknown): void {\n // Ignore non-response messages\n if (!isAdapterResponse(msg)) {\n return;\n }\n\n // Find pending request\n const pending = this.pending.get(msg.requestId);\n if (!pending) {\n // Response for unknown request (may have timed out)\n return;\n }\n\n // Clear timeout and remove from pending\n clearTimeout(pending.timer);\n this.pending.delete(msg.requestId);\n\n // Resolve with response\n pending.resolve(msg);\n }\n\n async close(): Promise<void> {\n if (this.closed) {\n return;\n }\n\n this.closed = true;\n\n // Close socket\n if (this.socket) {\n this.socket.destroy();\n this.socket = null;\n }\n\n // Reject all pending requests\n for (const [requestId, pending] of this.pending) {\n clearTimeout(pending.timer);\n pending.reject(new TransportError('Transport closed'));\n }\n this.pending.clear();\n }\n\n isClosed(): boolean {\n return this.closed;\n }\n}\n\n/**\n * Create UnixSocketTransport with configuration.\n *\n * @example\n * ```typescript\n * import { createUnixSocketTransport } from '@kb-labs/core-runtime/transport';\n *\n * const transport = createUnixSocketTransport({\n * socketPath: '/tmp/kb-ipc.sock',\n * timeout: 60000,\n * });\n * ```\n */\nexport function createUnixSocketTransport(config?: UnixSocketConfig): UnixSocketTransport {\n return new UnixSocketTransport(config);\n}\n","/**\n * @module @kb-labs/core-runtime/proxy\n * Generic base class for remote adapter proxies.\n *\n * This class provides the foundation for all IPC proxy adapters.\n * It handles serialization, transport, and error propagation automatically.\n *\n * @example\n * ```typescript\n * import { RemoteAdapter } from '@kb-labs/core-runtime/proxy';\n * import type { IVectorStore } from '@kb-labs/core-platform';\n *\n * class VectorStoreProxy extends RemoteAdapter<IVectorStore> implements IVectorStore {\n * constructor(transport: ITransport) {\n * super('vectorStore', transport);\n * }\n *\n * async search(query: number[], limit: number): Promise<VectorSearchResult[]> {\n * return this.callRemote('search', [query, limit]) as Promise<VectorSearchResult[]>;\n * }\n * }\n * ```\n */\n\nimport { randomUUID } from 'crypto';\nimport type { ITransport } from '../transport/transport';\nimport type { AdapterCall, AdapterType, AdapterCallContext } from '@kb-labs/core-platform/serializable';\nimport { serialize, deserialize, IPC_PROTOCOL_VERSION } from '@kb-labs/core-platform/serializable';\n\n/**\n * Generic base class for remote adapter proxies.\n *\n * Automatically handles:\n * - Method call serialization\n * - Transport communication\n * - Response deserialization\n * - Error propagation\n * - Context propagation (traceId, pluginId, etc.)\n *\n * Type parameter T should be the adapter interface (e.g., IVectorStore).\n */\nexport abstract class RemoteAdapter<T> {\n private context?: AdapterCallContext;\n\n /**\n * Create a remote adapter proxy.\n *\n * @param adapterName - Name of the adapter (e.g., 'vectorStore', 'cache')\n * @param transport - Transport layer for IPC communication\n * @param context - Optional execution context for tracing/debugging\n */\n constructor(\n private readonly adapterName: AdapterType,\n private readonly transport: ITransport,\n context?: AdapterCallContext\n ) {\n this.context = context;\n }\n\n /**\n * Set execution context for this adapter.\n * Context is included in all subsequent adapter calls for tracing/debugging.\n *\n * @param context - Execution context (traceId, pluginId, sessionId, etc.)\n *\n * @example\n * ```typescript\n * proxy.setContext({\n * traceId: 'trace-abc',\n * pluginId: '@kb-labs/mind',\n * sessionId: 'session-xyz',\n * });\n * ```\n */\n setContext(context: AdapterCallContext): void {\n this.context = context;\n }\n\n /**\n * Get current execution context.\n */\n getContext(): AdapterCallContext | undefined {\n return this.context;\n }\n\n /**\n * Call a method on the remote adapter (in parent process).\n *\n * This method:\n * 1. Generates a unique request ID\n * 2. Serializes the method arguments\n * 3. Sends the call via transport\n * 4. Waits for response\n * 5. Deserializes and returns the result (or throws error)\n *\n * @param method - Method name to call on the adapter\n * @param args - Method arguments (will be serialized)\n * @param timeout - Optional timeout in milliseconds (overrides transport default)\n * @returns Promise resolving to deserialized result\n * @throws Error if remote method throws or communication fails\n *\n * @example\n * ```typescript\n * // In VectorStoreProxy.search():\n * return this.callRemote('search', [query, limit, filter]);\n *\n * // With custom timeout for bulk operations:\n * return this.callRemote('upsert', [vectors], 120000); // 2 min timeout\n * ```\n */\n protected async callRemote(method: string, args: unknown[], timeout?: number): Promise<unknown> {\n // Generate unique request ID\n const requestId = randomUUID();\n\n // Create adapter call message with context (if available)\n const call: AdapterCall = {\n version: IPC_PROTOCOL_VERSION, // Protocol version for backward compatibility\n type: 'adapter:call',\n requestId,\n adapter: this.adapterName,\n method,\n args: args.map((arg) => serialize(arg)),\n timeout, // Optional timeout for this specific call\n context: this.context, // Include execution context for tracing/debugging\n };\n\n // Send via transport and await response\n const response = await this.transport.send(call);\n\n // Check for error in response\n if (response.error) {\n // Deserialize and throw error from parent\n throw deserialize(response.error);\n }\n\n // Deserialize and return result (or undefined for void methods)\n return response.result !== undefined ? deserialize(response.result) : undefined;\n }\n\n /**\n * Get the adapter name this proxy represents.\n */\n protected getAdapterName(): AdapterType {\n return this.adapterName;\n }\n\n /**\n * Get the transport used by this proxy.\n * Useful for advanced use cases (e.g., checking if transport is closed).\n */\n protected getTransport(): ITransport {\n return this.transport;\n }\n}\n","/**\n * @module @kb-labs/core-runtime/transport/bulk-transfer\n * Smart IPC transfer: inline for small payloads, temp files for large payloads.\n *\n * Problem:\n * - Unix Socket IPC has backpressure issues with large JSON payloads (>100KB)\n * - Serializing 50 vectors × 1536 floats causes 120s+ timeout\n *\n * Solution:\n * - Small payloads (< 1MB): inline JSON through IPC\n * - Large payloads (> 1MB): write to temp file, send only file ID through IPC\n *\n * Performance:\n * - Inline: ~1ms IPC overhead\n * - Temp file: ~50ms write + 1ms IPC + 30ms read = ~81ms total\n * - Qdrant upsert: 77ms\n * - Total: ~158ms per batch (vs 120s+ timeout)\n */\n\nimport { writeFile, readFile, unlink } from 'fs/promises';\nimport { unlinkSync } from 'fs';\nimport { tmpdir } from 'os';\nimport { join } from 'path';\n\n/**\n * Transfer protocol: inline JSON or temp file reference\n */\nexport interface BulkTransfer {\n type: 'inline' | 'file';\n payload: string; // JSON string if inline, absolute temp file path if file\n}\n\n/**\n * Configuration for bulk transfer behavior\n */\nexport interface BulkTransferOptions {\n /** Threshold: payloads larger than this use temp files (default: 1MB) */\n maxInlineSize: number;\n /** Directory for temp files (default: os.tmpdir()) */\n tempDir: string;\n}\n\n/**\n * Helper for smart IPC transfer with automatic inline/file decision\n */\nexport class BulkTransferHelper {\n /** Map of temp file IDs to file paths (for cleanup) */\n private static tempFiles = new Map<string, string>();\n\n /** Default options */\n private static defaultOptions: BulkTransferOptions = {\n maxInlineSize: 1_000_000, // 1MB\n tempDir: tmpdir(),\n };\n\n /**\n * Serialize data: inline for small, temp file for large\n *\n * @example\n * ```typescript\n * const transfer = await BulkTransferHelper.serialize(vectors, {\n * maxInlineSize: 1_000_000,\n * tempDir: '/tmp'\n * });\n *\n * if (transfer.type === 'inline') {\n * console.log('Using inline IPC');\n * } else {\n * console.log('Using temp file:', transfer.payload); // Absolute path like '/tmp/bulk-123.json'\n * }\n * ```\n */\n static async serialize<T>(\n data: T,\n options: Partial<BulkTransferOptions> = {}\n ): Promise<BulkTransfer> {\n const opts = { ...this.defaultOptions, ...options };\n const json = JSON.stringify(data);\n\n // Small payload: use inline IPC (fast path)\n if (json.length < opts.maxInlineSize) {\n return { type: 'inline', payload: json };\n }\n\n // Large payload: write to temp file (avoid IPC backpressure)\n const tempId = `bulk-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n const tempPath = join(opts.tempDir, `${tempId}.json`);\n\n await writeFile(tempPath, json, 'utf8');\n this.tempFiles.set(tempPath, tempPath); // Store by path for cleanup\n\n return { type: 'file', payload: tempPath }; // Return absolute path, not ID\n }\n\n /**\n * Deserialize from inline JSON or temp file\n *\n * @example\n * ```typescript\n * const transfer = { type: 'file', payload: '/tmp/bulk-123.json' };\n * const data = await BulkTransferHelper.deserialize<VectorRecord[]>(transfer);\n * ```\n */\n static async deserialize<T>(transfer: BulkTransfer): Promise<T> {\n if (transfer.type === 'inline') {\n return JSON.parse(transfer.payload);\n }\n\n // transfer.payload is now absolute temp file path (cross-process compatible)\n const tempPath = transfer.payload;\n\n try {\n const json = await readFile(tempPath, 'utf8');\n return JSON.parse(json);\n } finally {\n // Cleanup immediately after read\n await unlink(tempPath).catch(() => {\n // Ignore errors (file might already be deleted)\n });\n this.tempFiles.delete(tempPath); // Remove from cleanup map if exists\n }\n }\n\n /**\n * Check if object is a BulkTransfer\n */\n static isBulkTransfer(obj: unknown): obj is BulkTransfer {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'type' in obj &&\n 'payload' in obj &&\n (obj.type === 'inline' || obj.type === 'file')\n );\n }\n\n /**\n * Cleanup all temp files (call on process exit)\n */\n static async cleanup(): Promise<void> {\n const cleanupPromises = Array.from(this.tempFiles.values()).map((path) =>\n unlink(path).catch(() => {\n // Ignore errors\n })\n );\n await Promise.all(cleanupPromises);\n this.tempFiles.clear();\n }\n\n /**\n * Get statistics about temp files\n */\n static getStats(): { tempFilesCount: number; tempFilePaths: string[] } {\n return {\n tempFilesCount: this.tempFiles.size,\n tempFilePaths: Array.from(this.tempFiles.values()),\n };\n }\n}\n\n// Cleanup on process exit\nprocess.on('exit', () => {\n // Sync cleanup (process.on('exit') doesn't support async)\n for (const path of BulkTransferHelper.getStats().tempFilePaths) {\n try {\n unlinkSync(path);\n } catch {\n // Ignore\n }\n }\n});\n\n// Cleanup on uncaught errors\nprocess.on('uncaughtException', async (error) => {\n console.error('[BulkTransferHelper] Uncaught exception, cleaning up temp files:', error);\n await BulkTransferHelper.cleanup();\n process.exit(1);\n});\n\nprocess.on('SIGINT', async () => {\n console.log('[BulkTransferHelper] SIGINT received, cleaning up temp files');\n await BulkTransferHelper.cleanup();\n process.exit(0);\n});\n\nprocess.on('SIGTERM', async () => {\n console.log('[BulkTransferHelper] SIGTERM received, cleaning up temp files');\n await BulkTransferHelper.cleanup();\n process.exit(0);\n});\n","/**\n * @module @kb-labs/core-runtime/proxy\n * IPC proxy for IVectorStore adapter.\n *\n * This proxy forwards all vector store operations to the parent process\n * via IPC. The parent process owns the real QdrantVectorStore instance.\n *\n * Benefits:\n * - Single QdrantVectorStore instance (shared across all sandbox workers)\n * - Reduced memory usage (no duplicate connections)\n * - Reduced connection count (5 instead of 250 for 50 workers)\n *\n * @example\n * ```typescript\n * import { VectorStoreProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * // In child process (sandbox worker)\n * const transport = createIPCTransport();\n * const vectorStore = new VectorStoreProxy(transport);\n *\n * // Use like normal IVectorStore\n * const results = await vectorStore.search([0.1, 0.2, 0.3], 10);\n * ```\n */\n\nimport type {\n IVectorStore,\n VectorRecord,\n VectorSearchResult,\n VectorFilter,\n} from '@kb-labs/core-platform';\nimport type { ITransport } from '../transport/transport';\nimport { RemoteAdapter } from './remote-adapter';\nimport { BulkTransferHelper } from '../transport/bulk-transfer';\nimport { tmpdir } from 'os';\n\n/**\n * IPC proxy for IVectorStore adapter.\n *\n * All method calls are forwarded to the parent process via IPC.\n * The parent process executes the call on the real vector store\n * (e.g., QdrantVectorStore) and returns the result.\n *\n * From the caller's perspective, this behaves identically to a\n * local vector store - the IPC layer is completely transparent.\n */\nexport class VectorStoreProxy extends RemoteAdapter<IVectorStore> implements IVectorStore {\n // Timeout for bulk operations that may trigger IPC backpressure\n private static readonly BULK_OPERATION_TIMEOUT = 120_000; // 2 minutes\n\n // BulkTransfer configuration\n private readonly bulkTransferOptions = {\n maxInlineSize: 1_000_000, // 1MB threshold\n tempDir: process.env.KB_TEMP_DIR ?? tmpdir(),\n };\n\n /**\n * Create a vector store proxy.\n *\n * @param transport - IPC transport to communicate with parent\n */\n constructor(transport: ITransport) {\n super('vectorStore', transport);\n }\n\n /**\n * Search for similar vectors.\n *\n * @param query - Query embedding vector\n * @param limit - Maximum number of results\n * @param filter - Optional metadata filter\n * @returns Promise resolving to search results\n */\n async search(\n query: number[],\n limit: number,\n filter?: VectorFilter\n ): Promise<VectorSearchResult[]> {\n return (await this.callRemote('search', [query, limit, filter])) as VectorSearchResult[];\n }\n\n /**\n * Insert or update vectors.\n * Uses BulkTransfer for large payloads to avoid IPC backpressure.\n *\n * @param vectors - Vector records to upsert\n */\n async upsert(vectors: VectorRecord[]): Promise<void> {\n // Smart serialization: inline for small, temp file for large\n const transfer = await BulkTransferHelper.serialize(vectors, this.bulkTransferOptions);\n await this.callRemote('upsert', [transfer], VectorStoreProxy.BULK_OPERATION_TIMEOUT);\n }\n\n /**\n * Delete vectors by IDs.\n * Uses extended timeout for bulk deletions.\n *\n * @param ids - Vector IDs to delete\n */\n async delete(ids: string[]): Promise<void> {\n await this.callRemote('delete', [ids], VectorStoreProxy.BULK_OPERATION_TIMEOUT);\n }\n\n /**\n * Upsert vectors with chunk metadata (used by Mind RAG).\n * Uses extended timeout for bulk operations.\n *\n * @param scope - Scope ID\n * @param vectors - Vector records to upsert\n */\n async upsertChunks(scope: string, vectors: VectorRecord[]): Promise<void> {\n await this.callRemote('upsertChunks', [scope, vectors], VectorStoreProxy.BULK_OPERATION_TIMEOUT);\n }\n\n /**\n * Count total vectors in collection.\n *\n * @returns Promise resolving to vector count\n */\n async count(): Promise<number> {\n return (await this.callRemote('count', [])) as number;\n }\n\n /**\n * Get vectors by IDs.\n * IDs argument is usually small, passed directly through IPC.\n * Uses BulkTransfer only for large result sets.\n *\n * @param ids - Vector IDs to retrieve\n * @returns Promise resolving to vector records\n */\n async get(ids: string[]): Promise<VectorRecord[]> {\n // Small IDs array - pass directly (no BulkTransfer for argument)\n const resultTransfer = await this.callRemote('get', [ids], VectorStoreProxy.BULK_OPERATION_TIMEOUT);\n\n // Large result - deserialize if it's BulkTransfer\n if (BulkTransferHelper.isBulkTransfer(resultTransfer)) {\n return BulkTransferHelper.deserialize<VectorRecord[]>(resultTransfer);\n }\n return resultTransfer as VectorRecord[];\n }\n\n /**\n * Query vectors by metadata filter.\n * Filter argument is small, passed directly through IPC.\n * Uses BulkTransfer only for potentially large result sets.\n *\n * @param filter - Metadata filter to apply\n * @returns Promise resolving to matching vector records\n */\n async query(filter: VectorFilter): Promise<VectorRecord[]> {\n // Small filter - pass directly (no BulkTransfer for argument)\n const resultTransfer = await this.callRemote('query', [filter], VectorStoreProxy.BULK_OPERATION_TIMEOUT);\n\n // Large result - deserialize if it's BulkTransfer\n if (BulkTransferHelper.isBulkTransfer(resultTransfer)) {\n return BulkTransferHelper.deserialize<VectorRecord[]>(resultTransfer);\n }\n return resultTransfer as VectorRecord[];\n }\n\n /**\n * Clear all vectors from collection.\n * Uses extended timeout for bulk deletion.\n */\n async clear(): Promise<void> {\n await this.callRemote('clear', [], VectorStoreProxy.BULK_OPERATION_TIMEOUT);\n }\n\n /**\n * Initialize the vector store.\n * Called during platform initialization.\n */\n async initialize(): Promise<void> {\n await this.callRemote('initialize', []);\n }\n\n /**\n * Close connections and cleanup resources.\n */\n async close(): Promise<void> {\n await this.callRemote('close', []);\n }\n}\n\n/**\n * Create a VectorStore proxy with IPC transport.\n *\n * @param transport - IPC transport to use\n * @returns VectorStore proxy instance\n *\n * @example\n * ```typescript\n * import { createVectorStoreProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * const transport = createIPCTransport();\n * const vectorStore = createVectorStoreProxy(transport);\n * ```\n */\nexport function createVectorStoreProxy(transport: ITransport): VectorStoreProxy {\n return new VectorStoreProxy(transport);\n}\n","/**\n * @module @kb-labs/core-runtime/proxy\n * IPC proxy for ICache adapter.\n *\n * This proxy forwards all cache operations to the parent process via IPC.\n * The parent process owns the real cache adapter (e.g., RedisCacheAdapter).\n *\n * Benefits:\n * - Single cache instance (shared across all sandbox workers)\n * - Reduced memory usage (no duplicate Redis connections)\n * - Reduced connection count (5 instead of 250 for 50 workers)\n *\n * @example\n * ```typescript\n * import { CacheProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * // In child process (sandbox worker)\n * const transport = createIPCTransport();\n * const cache = new CacheProxy(transport);\n *\n * // Use like normal ICache\n * await cache.set('key', { foo: 'bar' }, 60000);\n * const value = await cache.get('key');\n * ```\n */\n\nimport type { ICache } from '@kb-labs/core-platform';\nimport type { ITransport } from '../transport/transport';\nimport { RemoteAdapter } from './remote-adapter';\n\n/**\n * IPC proxy for ICache adapter.\n *\n * All method calls are forwarded to the parent process via IPC.\n * The parent process executes the call on the real cache adapter\n * (e.g., RedisCacheAdapter) and returns the result.\n *\n * From the caller's perspective, this behaves identically to a\n * local cache - the IPC layer is completely transparent.\n */\nexport class CacheProxy extends RemoteAdapter<ICache> implements ICache {\n /**\n * Create a cache proxy.\n *\n * @param transport - IPC transport to communicate with parent\n */\n constructor(transport: ITransport) {\n super('cache', transport);\n }\n\n /**\n * Get a value from cache.\n *\n * @param key - Cache key\n * @returns Cached value or null if not found/expired\n */\n async get<T>(key: string): Promise<T | null> {\n return (await this.callRemote('get', [key])) as T | null;\n }\n\n /**\n * Set a value in cache.\n *\n * @param key - Cache key\n * @param value - Value to cache\n * @param ttl - Time to live in milliseconds (optional)\n */\n async set<T>(key: string, value: T, ttl?: number): Promise<void> {\n await this.callRemote('set', [key, value, ttl]);\n }\n\n /**\n * Delete a value from cache.\n *\n * @param key - Cache key\n */\n async delete(key: string): Promise<void> {\n await this.callRemote('delete', [key]);\n }\n\n /**\n * Clear cache entries matching a pattern.\n *\n * @param pattern - Glob pattern (e.g., 'user:*')\n */\n async clear(pattern?: string): Promise<void> {\n await this.callRemote('clear', [pattern]);\n }\n\n /**\n * Add member to sorted set with score.\n *\n * @param key - Sorted set key\n * @param score - Numeric score (typically timestamp)\n * @param member - Member to add\n */\n async zadd(key: string, score: number, member: string): Promise<void> {\n await this.callRemote('zadd', [key, score, member]);\n }\n\n /**\n * Get members from sorted set by score range.\n *\n * @param key - Sorted set key\n * @param min - Minimum score (inclusive)\n * @param max - Maximum score (inclusive)\n * @returns Array of members in score order\n */\n async zrangebyscore(key: string, min: number, max: number): Promise<string[]> {\n return (await this.callRemote('zrangebyscore', [key, min, max])) as string[];\n }\n\n /**\n * Remove member from sorted set.\n *\n * @param key - Sorted set key\n * @param member - Member to remove\n */\n async zrem(key: string, member: string): Promise<void> {\n await this.callRemote('zrem', [key, member]);\n }\n\n /**\n * Set key-value pair only if key does not exist (atomic operation).\n *\n * @param key - Cache key\n * @param value - Value to set\n * @param ttl - Time to live in milliseconds (optional)\n * @returns true if value was set, false if key already exists\n */\n async setIfNotExists<T>(key: string, value: T, ttl?: number): Promise<boolean> {\n return (await this.callRemote('setIfNotExists', [key, value, ttl])) as boolean;\n }\n}\n\n/**\n * Create a Cache proxy with IPC transport.\n *\n * @param transport - IPC transport to use\n * @returns Cache proxy instance\n *\n * @example\n * ```typescript\n * import { createCacheProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * const transport = createIPCTransport();\n * const cache = createCacheProxy(transport);\n * ```\n */\nexport function createCacheProxy(transport: ITransport): CacheProxy {\n return new CacheProxy(transport);\n}\n","/**\n * @module @kb-labs/core-runtime/proxy\n * IPC proxy for IConfig adapter.\n *\n * This proxy forwards all config operations to the parent process via IPC.\n * The parent process owns the real ConfigAdapter instance.\n *\n * Benefits:\n * - Single source of truth for config (loaded once in parent)\n * - No need to reload kb.config.json in child processes\n * - Automatic config updates propagate to all workers\n *\n * @example\n * ```typescript\n * import { ConfigProxy } from '@kb-labs/core-runtime';\n *\n * // In child process (sandbox worker)\n * const transport = createIPCTransport();\n * const config = new ConfigProxy(transport);\n *\n * // Use like normal IConfig\n * const mindConfig = await config.getConfig('mind');\n * ```\n */\n\nimport type { IConfig } from '@kb-labs/core-platform';\nimport type { ITransport } from '../transport/transport';\nimport { RemoteAdapter } from './remote-adapter';\n\n/**\n * IPC proxy for IConfig adapter.\n *\n * All method calls are forwarded to the parent process via IPC.\n * The parent process executes the call on the real ConfigAdapter\n * and returns the result.\n *\n * From the caller's perspective, this behaves identically to a\n * local config adapter - the IPC layer is completely transparent.\n */\nexport class ConfigProxy extends RemoteAdapter<IConfig> implements IConfig {\n /**\n * Create a config proxy.\n *\n * @param transport - IPC transport to communicate with parent\n */\n constructor(transport: ITransport) {\n super('config', transport);\n }\n\n /**\n * Get product-specific configuration.\n *\n * @param productId - Product identifier (e.g., 'mind', 'workflow', 'plugins')\n * @param profileId - Profile identifier (defaults to 'default' or KB_PROFILE env var)\n * @returns Promise resolving to product-specific config or undefined\n *\n * @example\n * ```typescript\n * const mindConfig = await config.getConfig('mind');\n * if (mindConfig?.scopes) {\n * // Use scopes\n * }\n * ```\n */\n async getConfig(productId: string, profileId?: string): Promise<any> {\n return (await this.callRemote('getConfig', [productId, profileId])) as any;\n }\n\n /**\n * Get raw kb.config.json data.\n *\n * @returns Promise resolving to raw config object or undefined\n *\n * @example\n * ```typescript\n * const rawConfig = await config.getRawConfig();\n * if (rawConfig) {\n * const allProfiles = rawConfig.profiles;\n * }\n * ```\n */\n async getRawConfig(): Promise<any> {\n return (await this.callRemote('getRawConfig', [])) as any;\n }\n}\n","/**\n * @module @kb-labs/core-runtime/proxy\n * IPC proxy for ILLM adapter.\n *\n * This proxy forwards all LLM operations to the parent process via IPC.\n * The parent process owns the real LLM adapter (e.g., OpenAILLM).\n *\n * Benefits:\n * - Single LLM instance (shared rate limiter across all workers)\n * - Reduced memory usage (no duplicate API clients)\n * - Centralized quota enforcement (tenant rate limits)\n *\n * Note: true token-by-token streaming is not supported over IPC.\n * This proxy falls back to complete() and emits a single chunk.\n *\n * @example\n * ```typescript\n * import { LLMProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * // In child process (sandbox worker)\n * const transport = createIPCTransport();\n * const llm = new LLMProxy(transport);\n *\n * // Use like normal ILLM\n * const response = await llm.complete('What is TypeScript?', {\n * model: 'gpt-4',\n * temperature: 0.7,\n * maxTokens: 500,\n * });\n * ```\n */\n\nimport type {\n ILLM,\n LLMOptions,\n LLMResponse,\n LLMMessage,\n LLMToolCallOptions,\n LLMToolCallResponse,\n LLMProtocolCapabilities,\n} from '@kb-labs/core-platform';\nimport type { ITransport } from '../transport/transport';\nimport { RemoteAdapter } from './remote-adapter';\n\n/**\n * IPC proxy for ILLM adapter.\n *\n * All method calls are forwarded to the parent process via IPC.\n * The parent process executes the call on the real LLM adapter\n * (e.g., OpenAILLM) and returns the result.\n *\n * **Limitation**: true token-by-token `stream()` is not supported over IPC.\n * Streaming requires bidirectional communication which is not\n * currently implemented. This proxy falls back to `complete()`.\n */\nexport class LLMProxy extends RemoteAdapter<ILLM> implements ILLM {\n /**\n * Create an LLM proxy.\n *\n * @param transport - IPC transport to communicate with parent\n */\n constructor(transport: ITransport) {\n super('llm', transport);\n }\n\n /**\n * Generate a completion for the given prompt.\n *\n * @param prompt - Text prompt\n * @param options - Optional generation options\n * @returns LLM response with content and token usage\n */\n async complete(prompt: string, options?: LLMOptions): Promise<LLMResponse> {\n return (await this.callRemote('complete', [prompt, options])) as LLMResponse;\n }\n\n getProtocolCapabilities(): LLMProtocolCapabilities {\n return {\n cache: { supported: false },\n stream: { supported: false },\n };\n }\n\n /**\n * Stream a completion for the given prompt.\n *\n * **Fallback over IPC**: Uses complete() and emits a single chunk.\n *\n * Streaming requires bidirectional communication which is not\n * currently implemented in the IPC protocol. This fallback preserves\n * API compatibility for callers expecting AsyncIterable<string>.\n *\n * @param prompt - Text prompt\n * @param options - Optional generation options\n * @returns Async iterable with a single chunk from complete()\n */\n async *stream(prompt: string, options?: LLMOptions): AsyncIterable<string> {\n console.warn('[LLMProxy] stream() fallback via complete() over IPC.');\n const response = await this.complete(prompt, options);\n if (response.content) {\n yield response.content;\n }\n }\n\n /**\n * Chat with native tool calling support.\n *\n * Forwards tool calling request to parent process via IPC.\n *\n * @param messages - Conversation history\n * @param options - Options including tools and tool choice\n * @returns LLM response with optional tool calls\n */\n async chatWithTools(\n messages: LLMMessage[],\n options: LLMToolCallOptions\n ): Promise<LLMToolCallResponse> {\n return (await this.callRemote('chatWithTools', [messages, options])) as LLMToolCallResponse;\n }\n}\n\n/**\n * Create an LLM proxy with IPC transport.\n *\n * @param transport - IPC transport to use\n * @returns LLM proxy instance\n *\n * @example\n * ```typescript\n * import { createLLMProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * const transport = createIPCTransport();\n * const llm = createLLMProxy(transport);\n * ```\n */\nexport function createLLMProxy(transport: ITransport): LLMProxy {\n return new LLMProxy(transport);\n}\n","/**\n * @module @kb-labs/core-runtime/proxy\n * IPC proxy for IEmbeddings adapter.\n *\n * This proxy forwards all embeddings operations to the parent process via IPC.\n * The parent process owns the real embeddings adapter (e.g., OpenAIEmbeddings).\n *\n * Benefits:\n * - Single embeddings instance (shared rate limiter across all workers)\n * - Reduced memory usage (no duplicate API clients)\n * - Centralized quota enforcement (tenant rate limits)\n *\n * @example\n * ```typescript\n * import { EmbeddingsProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * // In child process (sandbox worker)\n * const transport = createIPCTransport();\n * const embeddings = new EmbeddingsProxy(transport);\n *\n * // Use like normal IEmbeddings\n * const vector = await embeddings.embed('Hello world');\n * const vectors = await embeddings.embedBatch(['foo', 'bar', 'baz']);\n * console.log('Dimensions:', embeddings.dimensions); // 1536\n * ```\n */\n\nimport type { IEmbeddings } from '@kb-labs/core-platform';\nimport type { ITransport } from '../transport/transport';\nimport { RemoteAdapter } from './remote-adapter';\n\n/**\n * IPC proxy for IEmbeddings adapter.\n *\n * All method calls are forwarded to the parent process via IPC.\n * The parent process executes the call on the real embeddings adapter\n * (e.g., OpenAIEmbeddings) and returns the result.\n *\n * The `dimensions` property is fetched once during initialization\n * and cached locally for performance.\n */\nexport class EmbeddingsProxy extends RemoteAdapter<IEmbeddings> implements IEmbeddings {\n private _dimensions?: number;\n\n /**\n * Create an embeddings proxy.\n *\n * @param transport - IPC transport to communicate with parent\n * @param dimensions - Optional dimensions override (avoids IPC call)\n */\n constructor(transport: ITransport, dimensions?: number) {\n super('embeddings', transport);\n this._dimensions = dimensions;\n }\n\n /**\n * Generate embedding vector for a single text.\n *\n * @param text - Input text\n * @returns Embedding vector\n */\n async embed(text: string): Promise<number[]> {\n return (await this.callRemote('embed', [text])) as number[];\n }\n\n /**\n * Generate embedding vectors for multiple texts.\n *\n * @param texts - Array of input texts\n * @returns Array of embedding vectors (same order as input)\n */\n async embedBatch(texts: string[]): Promise<number[][]> {\n return (await this.callRemote('embedBatch', [texts])) as number[][];\n }\n\n /**\n * Dimension of the embedding vectors.\n *\n * This value is fetched once from the parent on first access\n * and cached locally for performance.\n */\n get dimensions(): number {\n if (this._dimensions === undefined) {\n throw new Error(\n 'EmbeddingsProxy dimensions not initialized. ' +\n 'Call getDimensions() first or pass dimensions to constructor.'\n );\n }\n return this._dimensions;\n }\n\n /**\n * Initialize dimensions by fetching from parent.\n *\n * This is called automatically by initPlatform() in child process.\n * If you create EmbeddingsProxy manually, call this method before\n * accessing the `dimensions` property.\n *\n * @returns Dimensions value\n *\n * @example\n * ```typescript\n * const proxy = new EmbeddingsProxy(transport);\n * await proxy.getDimensions(); // Fetch once\n * console.log(proxy.dimensions); // Now safe to access\n * ```\n */\n async getDimensions(): Promise<number> {\n if (this._dimensions === undefined) {\n // Fetch dimensions from parent via property access\n // We use a special 'getDimensions' method that the real adapter implements\n this._dimensions = (await this.callRemote('getDimensions', [])) as number;\n }\n return this._dimensions;\n }\n}\n\n/**\n * Create an Embeddings proxy with IPC transport.\n *\n * @param transport - IPC transport to use\n * @param dimensions - Optional dimensions override (avoids IPC call)\n * @returns Embeddings proxy instance\n *\n * @example\n * ```typescript\n * import { createEmbeddingsProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * const transport = createIPCTransport();\n * const embeddings = createEmbeddingsProxy(transport, 1536);\n * ```\n */\nexport function createEmbeddingsProxy(transport: ITransport, dimensions?: number): EmbeddingsProxy {\n return new EmbeddingsProxy(transport, dimensions);\n}\n","/**\n * @module @kb-labs/core-runtime/proxy\n * IPC proxy for IStorage adapter.\n *\n * This proxy forwards all storage operations to the parent process via IPC.\n * The parent process owns the real storage adapter (e.g., FilesystemStorageAdapter).\n *\n * Benefits:\n * - Single storage instance (consistent file access across all workers)\n * - Reduced memory usage (no duplicate file handles)\n * - No race conditions (centralized file access)\n *\n * Note: Buffer serialization is handled automatically by the IPC layer.\n *\n * @example\n * ```typescript\n * import { StorageProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * // In child process (sandbox worker)\n * const transport = createIPCTransport();\n * const storage = new StorageProxy(transport);\n *\n * // Use like normal IStorage\n * await storage.write('.kb/data.json', Buffer.from('{\"foo\":\"bar\"}'));\n * const data = await storage.read('.kb/data.json');\n * const files = await storage.list('.kb/');\n * ```\n */\n\nimport type { IStorage, StorageMetadata } from '@kb-labs/core-platform/adapters';\nimport type { ITransport } from '../transport/transport';\nimport { RemoteAdapter } from './remote-adapter';\n\n/**\n * IPC proxy for IStorage adapter.\n *\n * All method calls are forwarded to the parent process via IPC.\n * The parent process executes the call on the real storage adapter\n * (e.g., FilesystemStorageAdapter) and returns the result.\n *\n * Buffer serialization/deserialization is handled automatically\n * by the IPC serializer (Buffer → base64 → Buffer).\n */\nexport class StorageProxy extends RemoteAdapter<IStorage> implements IStorage {\n /**\n * Create a storage proxy.\n *\n * @param transport - IPC transport to communicate with parent\n */\n constructor(transport: ITransport) {\n super('storage', transport);\n }\n\n /**\n * Read file contents.\n *\n * @param path - File path\n * @returns File contents or null if not found\n */\n async read(path: string): Promise<Buffer | null> {\n return (await this.callRemote('read', [path])) as Buffer | null;\n }\n\n /**\n * Write file contents.\n *\n * @param path - File path\n * @param data - File contents\n */\n async write(path: string, data: Buffer): Promise<void> {\n await this.callRemote('write', [path, data]);\n }\n\n /**\n * Delete a file.\n *\n * @param path - File path\n */\n async delete(path: string): Promise<void> {\n await this.callRemote('delete', [path]);\n }\n\n /**\n * List files matching a prefix.\n *\n * @param prefix - Path prefix (e.g., 'docs/')\n * @returns Array of file paths\n */\n async list(prefix: string): Promise<string[]> {\n return (await this.callRemote('list', [prefix])) as string[];\n }\n\n /**\n * Check if a file exists.\n *\n * @param path - File path\n * @returns True if file exists, false otherwise\n */\n async exists(path: string): Promise<boolean> {\n return (await this.callRemote('exists', [path])) as boolean;\n }\n\n // ═══════════════════════════════════════════════════════════════════════\n // EXTENDED METHODS (optional - implements IStorage extended interface)\n // ═══════════════════════════════════════════════════════════════════════\n\n /**\n * Get file metadata.\n * Optional method - implements IStorage.stat().\n *\n * @param path - File path\n * @returns File metadata or null if not found\n */\n async stat?(path: string): Promise<StorageMetadata | null> {\n return (await this.callRemote('stat', [path])) as StorageMetadata | null;\n }\n\n /**\n * Copy file within storage.\n * Optional method - implements IStorage.copy().\n *\n * @param sourcePath - Source file path\n * @param destPath - Destination file path\n */\n async copy?(sourcePath: string, destPath: string): Promise<void> {\n await this.callRemote('copy', [sourcePath, destPath]);\n }\n\n /**\n * Move file within storage.\n * Optional method - implements IStorage.move().\n *\n * @param sourcePath - Source file path\n * @param destPath - Destination file path\n */\n async move?(sourcePath: string, destPath: string): Promise<void> {\n await this.callRemote('move', [sourcePath, destPath]);\n }\n\n /**\n * List files with metadata.\n * Optional method - implements IStorage.listWithMetadata().\n *\n * @param prefix - Path prefix (e.g., 'docs/')\n * @returns Array of file metadata\n */\n async listWithMetadata?(prefix: string): Promise<StorageMetadata[]> {\n return (await this.callRemote('listWithMetadata', [prefix])) as StorageMetadata[];\n }\n}\n\n/**\n * Create a Storage proxy with IPC transport.\n *\n * @param transport - IPC transport to use\n * @returns Storage proxy instance\n *\n * @example\n * ```typescript\n * import { createStorageProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * const transport = createIPCTransport();\n * const storage = createStorageProxy(transport);\n * ```\n */\nexport function createStorageProxy(transport: ITransport): StorageProxy {\n return new StorageProxy(transport);\n}\n","/**\n * @module @kb-labs/core-runtime/adapters/config-adapter\n * Real config adapter implementation (runs in parent process).\n */\n\nimport type { IConfig } from '@kb-labs/core-platform';\n\n/**\n * ConfigAdapter - Real implementation that accesses globalThis.__KB_RAW_CONFIG__.\n *\n * This adapter runs ONLY in the parent process (CLI bin).\n * Child processes use ConfigProxy which calls this via IPC.\n *\n * @example\n * ```typescript\n * // In parent process (loader.ts):\n * const configAdapter = new ConfigAdapter();\n * platform.setAdapter('config', configAdapter);\n *\n * // In command handler:\n * const mindConfig = await platform.config.getConfig('mind');\n * ```\n */\nexport class ConfigAdapter implements IConfig {\n /**\n * Get product-specific configuration.\n * Extracts configuration for a specific product from the global config.\n * Supports both Profiles v2 and legacy config structures.\n *\n * @param productId - Product identifier (e.g., 'mind', 'workflow', 'plugins')\n * @param profileId - Profile identifier (defaults to 'default' or KB_PROFILE env var)\n * @returns Product-specific config or undefined if not found\n *\n * @example\n * ```typescript\n * // Mind product\n * const mindConfig = await config.getConfig('mind');\n * if (mindConfig?.scopes) {\n * // Use scopes\n * }\n *\n * // Workflow product with explicit profile\n * const workflowConfig = await config.getConfig('workflow', 'production');\n * ```\n */\n async getConfig(productId: string, profileId?: string): Promise<any> {\n // Access rawConfig from globalThis (set by bootstrap.ts)\n const rawConfig = (globalThis as any).__KB_RAW_CONFIG__;\n\n if (!rawConfig) {\n return undefined;\n }\n\n const effectiveProfileId = profileId ?? process.env.KB_PROFILE ?? 'default';\n\n // Try profiles v2 structure first\n if (rawConfig.profiles && Array.isArray(rawConfig.profiles)) {\n const profile = rawConfig.profiles.find((p: any) => p.id === effectiveProfileId) ?? rawConfig.profiles[0];\n if (profile?.products?.[productId]) {\n return profile.products[productId];\n }\n }\n\n // Fallback to legacy structure\n // Map productId to legacy key (e.g., 'mind' → 'knowledge')\n const legacyKeyMap: Record<string, string> = {\n 'mind': 'knowledge',\n };\n\n const legacyKey = legacyKeyMap[productId] ?? productId;\n if (rawConfig[legacyKey]) {\n return rawConfig[legacyKey];\n }\n\n return undefined;\n }\n\n /**\n * Get raw kb.config.json data.\n * Returns the entire config object without any product/profile extraction.\n * Useful for custom config parsing or when you need access to multiple products.\n *\n * @returns Raw config object or undefined if not loaded\n *\n * @example\n * ```typescript\n * const rawConfig = await config.getRawConfig();\n * if (rawConfig) {\n * // Access any part of config\n * const allProfiles = rawConfig.profiles;\n * }\n * ```\n */\n async getRawConfig(): Promise<any> {\n return (globalThis as any).__KB_RAW_CONFIG__;\n }\n}\n","/**\n * @module @kb-labs/core-runtime/ipc\n * Unix Socket server for handling adapter calls from child processes.\n *\n * This server runs in the parent process (CLI bin) and listens for\n * adapter method calls from child processes (sandbox workers) via Unix sockets.\n *\n * Unix sockets provide 100-1000x better performance than process.send()\n * for large messages (>16KB), making them ideal for bulk operations.\n *\n * @example\n * ```typescript\n * import { UnixSocketServer } from '@kb-labs/core-runtime/ipc';\n * import { platform } from '@kb-labs/core-runtime';\n *\n * // In CLI bin after initPlatform()\n * const server = new UnixSocketServer(platform);\n * await server.start();\n *\n * // Server now handles all Unix socket adapter calls\n * ```\n */\n\nimport * as net from 'net';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport type { PlatformContainer } from '../container.js';\nimport type { AdapterCall, AdapterResponse } from '@kb-labs/core-platform/serializable';\nimport { serialize, deserialize, IPC_PROTOCOL_VERSION } from '@kb-labs/core-platform/serializable';\nimport { BulkTransferHelper } from '../transport/bulk-transfer.js';\n\nexport interface UnixSocketServerConfig {\n /** Path to Unix socket file (default: /tmp/kb-ipc.sock) */\n socketPath?: string;\n}\n\n/**\n * Unix Socket server for parent process.\n *\n * Responsibilities:\n * - Listen for adapter calls via Unix socket\n * - Validate and route calls to correct adapter\n * - Execute methods with deserialized arguments\n * - Serialize and send responses back\n * - Handle errors gracefully\n */\nexport class UnixSocketServer {\n private server: net.Server | null = null;\n private clients = new Set<net.Socket>();\n private socketPath: string;\n private started = false;\n\n /**\n * Create a Unix Socket server.\n *\n * @param platform - Platform container with real adapters\n * @param config - Server configuration\n */\n constructor(\n private readonly platform: PlatformContainer,\n config: UnixSocketServerConfig = {}\n ) {\n this.socketPath = config.socketPath ?? '/tmp/kb-ipc.sock';\n }\n\n /**\n * Get the socket path.\n * Used by parent process to pass to child processes via env var.\n */\n getSocketPath(): string {\n return this.socketPath;\n }\n\n /**\n * Start listening for connections.\n */\n async start(): Promise<void> {\n // Remove existing socket file if exists\n if (fs.existsSync(this.socketPath)) {\n fs.unlinkSync(this.socketPath);\n }\n\n return new Promise((resolve, reject) => {\n this.server = net.createServer((socket) => {\n this.handleClient(socket);\n });\n\n this.server.on('error', (error) => {\n reject(error);\n });\n\n this.server.listen(this.socketPath, () => {\n // Set socket permissions (readable/writable by all)\n fs.chmodSync(this.socketPath, 0o666);\n this.started = true;\n this.platform.logger.debug('UnixSocketServer started listening for adapter calls');\n resolve();\n });\n });\n }\n\n /**\n * Handle new client connection.\n */\n private handleClient(socket: net.Socket): void {\n this.clients.add(socket);\n\n let buffer = '';\n\n socket.on('data', (data) => {\n buffer += data.toString('utf8');\n\n // Process all complete messages (newline-delimited)\n let newlineIndex: number;\n while ((newlineIndex = buffer.indexOf('\\n')) !== -1) {\n const line = buffer.slice(0, newlineIndex);\n buffer = buffer.slice(newlineIndex + 1);\n\n if (line.trim().length === 0) {\n continue;\n }\n\n try {\n const call = JSON.parse(line) as AdapterCall;\n this.handleCall(socket, call);\n } catch (error) {\n console.error('[UnixSocketServer] Failed to parse message:', error);\n }\n }\n });\n\n socket.on('close', () => {\n this.clients.delete(socket);\n });\n\n socket.on('error', (error) => {\n console.error('[UnixSocketServer] Client socket error:', error);\n this.clients.delete(socket);\n });\n }\n\n /**\n * Handle adapter call from client.\n */\n private async handleCall(socket: net.Socket, call: AdapterCall): Promise<void> {\n // Check protocol version compatibility\n if (call.version !== IPC_PROTOCOL_VERSION) {\n console.error('[UnixSocketServer] Protocol version mismatch:', {\n received: call.version,\n expected: IPC_PROTOCOL_VERSION,\n adapter: call.adapter,\n method: call.method,\n note: 'Child process may be using outdated protocol. Consider rebuilding.',\n });\n }\n\n // Log context for debugging/tracing (if provided)\n if (call.context) {\n console.error('[UnixSocketServer] Adapter call context:', {\n version: call.version,\n traceId: call.context.traceId,\n pluginId: call.context.pluginId,\n sessionId: call.context.sessionId,\n tenantId: call.context.tenantId,\n adapter: call.adapter,\n method: call.method,\n });\n }\n\n try {\n // Get the adapter from platform\n const adapter = this.getAdapter(call.adapter);\n\n // Get the method on the adapter\n const method = (adapter as any)[call.method];\n\n if (typeof method !== 'function') {\n throw new Error(\n `Method '${call.method}' not found on adapter '${call.adapter}'. ` +\n `Available methods: ${Object.getOwnPropertyNames(Object.getPrototypeOf(adapter)).join(', ')}`\n );\n }\n\n // Deserialize arguments (handle BulkTransfer)\n const args = await Promise.all(\n call.args.map(async (arg) => {\n const deserialized = deserialize(arg);\n if (BulkTransferHelper.isBulkTransfer(deserialized)) {\n return BulkTransferHelper.deserialize(deserialized);\n }\n return deserialized;\n })\n );\n\n // Execute method on adapter\n const result = await method.apply(adapter, args);\n\n // Serialize result (handle BulkTransfer)\n let serializedResult;\n if (result !== undefined && result !== null && typeof result === 'object') {\n // For large results, use BulkTransfer\n const resultJson = JSON.stringify(result);\n if (resultJson.length > 1_000_000) {\n const transfer = await BulkTransferHelper.serialize(result, {\n maxInlineSize: 1_000_000,\n tempDir: process.env.KB_TEMP_DIR ?? os.tmpdir(),\n });\n serializedResult = serialize(transfer);\n } else {\n serializedResult = serialize(result);\n }\n } else {\n serializedResult = serialize(result);\n }\n\n // Send successful response\n const response: AdapterResponse = {\n type: 'adapter:response',\n requestId: call.requestId,\n result: serializedResult,\n };\n\n const message = JSON.stringify(response) + '\\n';\n socket.write(message, 'utf8');\n } catch (error) {\n // Serialize and send error response\n const response: AdapterResponse = {\n type: 'adapter:response',\n requestId: call.requestId,\n error: serialize(error) as any,\n };\n\n const message = JSON.stringify(response) + '\\n';\n socket.write(message, 'utf8');\n\n // Log error for debugging\n console.error(\n `[UnixSocketServer] Error handling adapter call: ${call.adapter}.${call.method}`,\n error\n );\n }\n }\n\n /**\n * Get adapter instance from platform container.\n *\n * @param name - Adapter name (e.g., 'vectorStore', 'cache')\n * @returns Adapter instance\n * @throws Error if adapter not found\n */\n private getAdapter(name: string): unknown {\n switch (name) {\n case 'vectorStore':\n return this.platform.vectorStore;\n case 'cache':\n return this.platform.cache;\n case 'config':\n return this.platform.config;\n case 'llm':\n return this.platform.llm;\n case 'embeddings':\n return this.platform.embeddings;\n case 'storage':\n return this.platform.storage;\n case 'logger':\n return this.platform.logger;\n case 'analytics':\n return this.platform.analytics;\n case 'eventBus':\n return this.platform.eventBus;\n case 'invoke':\n return this.platform.invoke;\n case 'artifacts':\n return this.platform.artifacts;\n default:\n throw new Error(\n `Unknown adapter: '${name}'. Valid adapters: vectorStore, cache, config, llm, embeddings, storage, logger, analytics, eventBus, invoke, artifacts`\n );\n }\n }\n\n /**\n * Stop server and close all connections.\n */\n async close(): Promise<void> {\n if (!this.started) {\n return;\n }\n\n // Close all client connections\n for (const client of this.clients) {\n client.destroy();\n }\n this.clients.clear();\n\n // Close server\n if (this.server) {\n await new Promise<void>((resolve) => {\n this.server!.close(() => {\n resolve();\n });\n });\n this.server = null;\n }\n\n // Remove socket file\n if (fs.existsSync(this.socketPath)) {\n fs.unlinkSync(this.socketPath);\n }\n\n this.started = false;\n console.error('[UnixSocketServer] Stopped listening for adapter calls');\n }\n\n /**\n * Check if server is started.\n */\n isStarted(): boolean {\n return this.started;\n }\n}\n\n/**\n * Create and start a Unix Socket server.\n *\n * Convenience function that creates the server and starts it immediately.\n *\n * @param platform - Platform container with real adapters\n * @param config - Server configuration\n * @returns Started Unix Socket server instance\n *\n * @example\n * ```typescript\n * import { createUnixSocketServer } from '@kb-labs/core-runtime/ipc';\n * import { platform } from '@kb-labs/core-runtime';\n *\n * const server = await createUnixSocketServer(platform);\n * // Server is now handling Unix socket calls\n * ```\n */\nexport async function createUnixSocketServer(\n platform: PlatformContainer,\n config?: UnixSocketServerConfig\n): Promise<UnixSocketServer> {\n const server = new UnixSocketServer(platform, config);\n await server.start();\n return server;\n}\n","/**\n * @module @kb-labs/core-runtime\n * DI Container + Core Features Implementations for KB Labs Platform.\n *\n * @example\n * ```typescript\n * import { initPlatform, platform } from '@kb-labs/core-runtime';\n *\n * // Initialize platform with adapters\n * await initPlatform({\n * adapters: {\n * analytics: '@kb-labs/analytics-adapter',\n * vectorStore: '@kb-labs/mind-qdrant',\n * },\n * });\n *\n * // Use platform services\n * await platform.analytics.track('event');\n * await platform.vectorStore.search([...]);\n * ```\n */\n\n// Container\nexport { PlatformContainer, platform } from './container.js';\nexport type {\n CoreAdapterTypes,\n AdapterTypes,\n PlatformLifecyclePhase,\n PlatformLifecycleContext,\n PlatformLifecycleHooks,\n} from './container.js';\n\n// Loader\nexport { initPlatform, resetPlatform } from './loader.js';\n\n// Adapter discovery (for testing/debugging)\nexport { discoverAdapters, resolveAdapter } from './discover-adapters.js';\nexport type { DiscoveredAdapter } from './discover-adapters.js';\n\n// Config types\nexport type {\n PlatformConfig,\n AdaptersConfig,\n CoreFeaturesConfig,\n ResourcesConfig,\n ResourceBrokerConfig,\n JobsConfig,\n WorkflowsConfig,\n ExecutionConfig,\n} from './config.js';\n\n// Analytics context\nexport { createAnalyticsContext } from './analytics-context.js';\n\n// Core feature implementations (for direct usage/extension)\nexport {\n ResourceManager,\n JobScheduler,\n CronManager,\n WorkflowEngine,\n} from './core/index.js';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// IPC & TRANSPORT (Re-exported from @kb-labs/core-ipc)\n// ═══════════════════════════════════════════════════════════════════════════\n\n// IPC Servers (Parent Process Side)\nexport { UnixSocketServer, type UnixSocketServerConfig, IPCServer, createIPCServer } from '@kb-labs/core-ipc';\n\n// Transport Layer (Child Process Side)\nexport {\n type ITransport,\n type TransportConfig,\n type PendingRequest,\n TransportError,\n TimeoutError,\n CircuitOpenError,\n isRetryableError,\n IPCTransport,\n createIPCTransport,\n UnixSocketTransport,\n createUnixSocketTransport,\n type UnixSocketConfig,\n} from '@kb-labs/core-ipc';\n\n// Bulk Transfer (Large Message Optimization)\nexport { BulkTransferHelper, type BulkTransfer, type BulkTransferOptions } from '@kb-labs/core-ipc';\n\n// Timeout Configuration\nexport { selectTimeout, getOperationTimeout, OPERATION_TIMEOUTS } from '@kb-labs/core-ipc';\n\n// Proxy adapters (child process)\nexport { RemoteAdapter } from './proxy/remote-adapter.js';\nexport { VectorStoreProxy, createVectorStoreProxy } from './proxy/vector-store-proxy.js';\nexport { CacheProxy, createCacheProxy } from './proxy/cache-proxy.js';\nexport { LLMProxy } from './proxy/llm-proxy.js';\nexport { EmbeddingsProxy } from './proxy/embeddings-proxy.js';\nexport { StorageProxy, createStorageProxy } from './proxy/storage-proxy.js';\nexport { SQLDatabaseProxy, createSQLDatabaseProxy } from './proxy/sql-database-proxy.js';\nexport { DocumentDatabaseProxy, createDocumentDatabaseProxy } from './proxy/document-database-proxy.js';\nexport {\n createProxyPlatform,\n closeProxyPlatform,\n type CreateProxyPlatformOptions\n} from './proxy/create-proxy-platform.js';\nexport { createNoOpPlatform } from '@kb-labs/core-platform/noop';\n\nexport type {\n ResourceManagerConfig,\n JobSchedulerConfig,\n JobHandler,\n WorkflowEngineConfig,\n WorkflowDefinition,\n WorkflowStepDefinition,\n WorkflowStepContext,\n} from './core/index.js';\n\n// Monitoring helpers\nexport {\n getMonitoringSnapshot,\n getDegradedStatus,\n type MonitoringSnapshot,\n type MonitoringOptions,\n type DegradedLevel,\n type DegradedStatus,\n type DegradedOptions,\n} from './monitoring.js';\n\n// Orchestration services\nexport { EnvironmentManager } from './environment-manager.js';\nexport { WorkspaceManager } from './workspace-manager.js';\nexport { SnapshotManager } from './snapshot-manager.js';\nexport { RunExecutor } from './run-executor.js';\nexport type { RunStepExecutionRequest } from './run-executor.js';\nexport { RunOrchestrator } from './run-orchestrator.js';\nexport type { StartFullCycleRequest } from './run-orchestrator.js';\n\n// Use-cases\nexport { startFullCycle } from './use-cases/start-full-cycle.js';\n","/**\n * @module @kb-labs/core-runtime/loader\n * Platform initialization and adapter loading.\n */\n\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { promises as fs } from 'node:fs';\nimport type { AdapterTypes, PlatformContainer } from './container.js';\nimport type { PlatformConfig, CoreFeaturesConfig, ResourceBrokerConfig, LLMAdapterOptions, AdapterValue } from './config.js';\nimport { platform } from './container.js';\nimport { resolveAdapter } from './discover-adapters.js';\nimport { createAnalyticsContext } from './analytics-context.js';\nimport { AdapterLoader } from './adapter-loader.js';\nimport type { AdapterConfig, LoadedAdapterModule } from './adapter-loader.js';\nimport { EnvironmentManager } from './environment-manager.js';\nimport { WorkspaceManager } from './workspace-manager.js';\nimport { SnapshotManager } from './snapshot-manager.js';\nimport { RunExecutor } from './run-executor.js';\nimport { RunOrchestrator } from './run-orchestrator.js';\nimport { createDefaultExecutionPolicyLLM } from './wrappers/default-execution-policy-llm.js';\n\nimport { ResourceManager } from './core/resource-manager.js';\nimport { JobScheduler } from './core/job-scheduler.js';\nimport { CronManager } from './core/cron-manager.js';\nimport { WorkflowEngine } from './core/workflow-engine.js';\n\n// Import analytics wrappers for transparent metrics collection\nimport {\n AnalyticsLLM,\n AnalyticsEmbeddings,\n AnalyticsVectorStore,\n AnalyticsCache,\n AnalyticsStorage,\n} from '@kb-labs/core-platform';\n\nimport {\n ResourceBroker,\n InMemoryRateLimitBackend,\n createQueuedLLM,\n createQueuedEmbeddings,\n createQueuedVectorStore,\n} from '@kb-labs/core-resource-broker';\nimport type { RateLimitBackend } from '@kb-labs/core-resource-broker';\n\n// Import ExecutionBackend type only (implementation loaded dynamically to break circular dependency)\n\n/**\n * Adapter factory function type.\n * Adapters should export a createAdapter function.\n */\ntype AdapterFactory<T> = (config?: unknown) => T | Promise<T>;\n\n/**\n * Normalize adapter value to array format.\n * - string → [string]\n * - string[] → string[]\n * - null/undefined → []\n *\n * @param value - Adapter value (string, string[], or null)\n * @returns Array of adapter package paths\n */\nfunction normalizeAdapterValue(value: AdapterValue | undefined): string[] {\n if (!value) {return [];}\n if (Array.isArray(value)) {return value;}\n return [value];\n}\n\n/**\n * Get primary adapter from value (first in array or single string).\n *\n * @param value - Adapter value\n * @returns Primary adapter package path or undefined\n */\nfunction getPrimaryAdapter(value: AdapterValue | undefined): string | undefined {\n if (!value) {return undefined;}\n if (Array.isArray(value)) {return value[0];}\n return value;\n}\n\n/**\n * Load an adapter from a package path.\n * Uses workspace discovery to load from file paths (kb-labs-adapters/*),\n * then falls back to dynamic import for npm-installed adapters.\n *\n * @param adapterPath - Package name (e.g., \"@kb-labs/adapters-openai\")\n * @param cwd - Workspace root directory\n * @returns Adapter instance or undefined if loading fails\n */\nasync function loadAdapter<T>(adapterPath: string, cwd: string, options?: unknown): Promise<T | undefined> {\n try {\n // Use resolveAdapter to try workspace discovery first, then npm\n const factory = await resolveAdapter(adapterPath, cwd);\n\n if (factory) {\n return await factory(options);\n }\n\n platform.logger.warn('Adapter has no createAdapter or default export', { adapterPath });\n return undefined;\n } catch (error) {\n platform.logger.warn('Failed to load adapter', {\n adapterPath,\n error: error instanceof Error ? error.message : String(error)\n });\n return undefined;\n }\n}\n\n\n/**\n * Wrap an adapter with analytics tracking.\n * Returns the wrapped adapter if analytics is available, otherwise returns the original adapter.\n *\n * @param key - Adapter type key\n * @param instance - Real adapter instance\n * @returns Wrapped adapter with analytics or original adapter\n */\nfunction wrapWithAnalytics<K extends keyof AdapterTypes>(\n key: K,\n instance: AdapterTypes[K]\n): AdapterTypes[K] {\n const analytics = platform.analytics;\n\n // If no analytics adapter, return original (graceful degradation)\n if (!analytics || analytics.constructor.name === 'NoOpAnalytics') {\n return instance;\n }\n\n // Wrap each adapter type with its corresponding analytics wrapper\n switch (key) {\n case 'llm':\n return new AnalyticsLLM(instance as any, analytics) as unknown as AdapterTypes[K];\n case 'embeddings':\n return new AnalyticsEmbeddings(instance as any, analytics) as unknown as AdapterTypes[K];\n case 'vectorStore':\n return new AnalyticsVectorStore(instance as any, analytics) as unknown as AdapterTypes[K];\n case 'cache':\n return new AnalyticsCache(instance as any, analytics) as unknown as AdapterTypes[K];\n case 'storage':\n return new AnalyticsStorage(instance as any, analytics) as unknown as AdapterTypes[K];\n default:\n // For adapters without analytics wrappers (config, etc.), return original\n return instance;\n }\n}\n\n/**\n * Initialize core features with real implementations.\n */\nfunction initializeCoreFeatures(\n container: PlatformContainer,\n config: CoreFeaturesConfig = {}\n): {\n workflows: any; // TODO: Re-enable when workflow-engine is ported to V3\n jobs: JobScheduler;\n cron: CronManager;\n resources: ResourceManager;\n} {\n // Create core features with proper dependencies\n const resources = new ResourceManager(\n container.cache,\n container.logger,\n config.resources\n );\n\n const jobs = new JobScheduler(\n resources,\n container.eventBus,\n container.logger,\n config.jobs\n );\n\n const cron = new CronManager(container.logger);\n\n const workflows = new WorkflowEngine(\n resources,\n container.storage,\n container.eventBus,\n container.logger,\n config.workflows\n );\n\n return { workflows, jobs, cron, resources };\n}\n\n/**\n * Initialize resource broker with queue and rate limiting.\n * Wraps existing adapters with Queued versions for transparent integration.\n * Plugins use useLLM(), useEmbeddings() as before - they don't know about queuing.\n */\nfunction initializeResourceBroker(\n container: PlatformContainer,\n config: ResourceBrokerConfig = {}\n): ResourceBroker {\n // Create backend (distributed or in-memory)\n let backend: RateLimitBackend;\n\n if (config.distributed) {\n // For distributed mode, we need StateBroker\n // This will be implemented when StateBroker is available\n platform.logger.warn('Distributed ResourceBroker not yet implemented, using InMemory');\n backend = new InMemoryRateLimitBackend();\n } else {\n backend = new InMemoryRateLimitBackend();\n }\n\n const broker = new ResourceBroker(backend);\n\n // Register LLM resource and wrap adapter\n if (container.hasAdapter('llm')) {\n const llmConfig = config.llm ?? {};\n const realLLM = container.llm; // Save reference to real adapter\n\n broker.register('llm', {\n rateLimits: llmConfig.rateLimits ?? 'openai-tier-1',\n maxRetries: llmConfig.maxRetries ?? 3,\n timeout: llmConfig.timeout ?? 60000,\n executor: async (operation: string, args: unknown[]) => {\n if (operation === 'complete') {\n return realLLM.complete(args[0] as string, args[1] as any);\n }\n throw new Error(`Unknown LLM operation: ${operation}`);\n },\n });\n\n // Replace adapter with Queued version - plugins see same interface\n const queuedLLM = createQueuedLLM(broker, realLLM);\n container.setAdapter('llm', queuedLLM);\n platform.logger.debug('ResourceBroker: LLM adapter wrapped with queue');\n }\n\n // Register Embeddings resource and wrap adapter\n if (container.hasAdapter('embeddings')) {\n const embeddingsConfig = config.embeddings ?? {};\n const realEmbeddings = container.embeddings; // Save reference to real adapter\n\n broker.register('embeddings', {\n rateLimits: embeddingsConfig.rateLimits ?? 'openai-tier-1',\n maxRetries: embeddingsConfig.maxRetries ?? 3,\n timeout: embeddingsConfig.timeout ?? 60000,\n executor: async (operation: string, args: unknown[]) => {\n if (operation === 'embed') {\n return realEmbeddings.embed(args[0] as string);\n }\n if (operation === 'embedBatch') {\n return realEmbeddings.embedBatch(args[0] as string[]);\n }\n throw new Error(`Unknown Embeddings operation: ${operation}`);\n },\n });\n\n // Replace adapter with Queued version - plugins see same interface\n const queuedEmbeddings = createQueuedEmbeddings(broker, realEmbeddings);\n container.setAdapter('embeddings', queuedEmbeddings);\n platform.logger.debug('ResourceBroker: Embeddings adapter wrapped with queue');\n }\n\n // Register VectorStore resource and wrap adapter\n if (container.hasAdapter('vectorStore')) {\n const vsConfig = config.vectorStore ?? {};\n const realVectorStore = container.vectorStore; // Save reference to real adapter\n\n broker.register('vectorStore', {\n rateLimits: vsConfig.maxConcurrent ? { maxConcurrentRequests: vsConfig.maxConcurrent } : {},\n maxRetries: vsConfig.maxRetries ?? 3,\n timeout: vsConfig.timeout ?? 30000,\n executor: async (operation: string, args: unknown[]) => {\n switch (operation) {\n case 'search':\n return realVectorStore.search(args[0] as number[], args[1] as number, args[2] as any);\n case 'upsert':\n return realVectorStore.upsert(args[0] as any[]);\n case 'delete':\n return realVectorStore.delete(args[0] as string[]);\n case 'count':\n return realVectorStore.count();\n case 'get':\n return realVectorStore.get?.(args[0] as string[]);\n case 'query':\n return realVectorStore.query?.(args[0] as any);\n default:\n throw new Error(`Unknown VectorStore operation: ${operation}`);\n }\n },\n });\n\n // Replace adapter with Queued version - plugins see same interface\n const queuedVectorStore = createQueuedVectorStore(broker, realVectorStore);\n container.setAdapter('vectorStore', queuedVectorStore);\n platform.logger.debug('ResourceBroker: VectorStore adapter wrapped with queue');\n }\n\n return broker;\n}\n\n/**\n * Initialize the platform with configuration.\n * Loads adapters and initializes core features.\n *\n * @param config - Platform configuration\n * @param cwd - Workspace root directory (defaults to process.cwd())\n * @returns Initialized platform container\n *\n * @example\n * ```typescript\n * await initPlatform({\n * adapters: {\n * analytics: '@kb-labs/analytics-adapter',\n * vectorStore: '@kb-labs/adapters-qdrant',\n * llm: '@kb-labs/adapters-openai',\n * },\n * core: {\n * resources: { defaultQuotas: { ... } },\n * jobs: { maxConcurrent: 10 },\n * },\n * });\n * ```\n */\nexport async function initPlatform(\n config: PlatformConfig = {},\n cwd: string = process.cwd(),\n uiProvider?: (hostType: string) => any\n): Promise<PlatformContainer> {\n\n // ✅ Idempotent: If already initialized, return existing singleton\n // This prevents duplicate adapter instances across CLI and sandbox processes\n platform.logger.debug(`initPlatform isInitialized=${platform.isInitialized} pid=${process.pid}`);\n\n if (platform.isInitialized) {\n platform.logger.debug(`initPlatform returning existing platform pid=${process.pid}`);\n return platform;\n }\n\n platform.logger.debug(`initPlatform initializing NEW platform pid=${process.pid}`);\n const { adapters = {}, adapterOptions = {}, core = {}, execution = {} } = config;\n\n // 🔍 Detect if running in child process (sandbox worker)\n const isChildProcess = !!process.send; // Has IPC channel = forked child\n const initStartedAt = Date.now();\n\n await platform.emitLifecyclePhase('start', {\n cwd,\n isChildProcess,\n metadata: {\n adapterKeys: Object.keys(adapters),\n hasExecutionConfig: Object.keys(execution).length > 0,\n pid: process.pid,\n },\n });\n\n try {\n if (isChildProcess) {\n // ══════════════════════════════════════════════════════════════════════\n // CHILD PROCESS (Sandbox Worker)\n // ══════════════════════════════════════════════════════════════════════\n // Create IPC proxy adapters that forward calls to parent process.\n // This eliminates adapter duplication - only parent has real adapters.\n\n platform.logger.debug('initPlatform child process detected - creating proxy adapters');\n\n // Use Unix Socket transport by default (100-1000x faster than IPC for large messages)\n const { UnixSocketTransport } = await import('./transport/unix-socket-transport.js');\n const { VectorStoreProxy } = await import('./proxy/vector-store-proxy.js');\n const { CacheProxy } = await import('./proxy/cache-proxy.js');\n const { ConfigProxy } = await import('./proxy/config-proxy.js');\n const { LLMProxy } = await import('./proxy/llm-proxy.js');\n const { EmbeddingsProxy } = await import('./proxy/embeddings-proxy.js');\n const { StorageProxy } = await import('./proxy/storage-proxy.js');\n\n // Create single transport for all adapters\n const transport = new UnixSocketTransport();\n platform.logger.debug('initPlatform using Unix Socket transport');\n\n // Create proxy adapters (replace real adapters with IPC proxies)\n if (adapters.vectorStore) {\n platform.setAdapter('vectorStore', new VectorStoreProxy(transport));\n platform.logger.debug('initPlatform created VectorStoreProxy');\n }\n\n if (adapters.cache) {\n platform.setAdapter('cache', new CacheProxy(transport));\n platform.logger.debug('initPlatform created CacheProxy');\n }\n\n // Config adapter is ALWAYS created (not optional like other adapters)\n platform.setAdapter('config', new ConfigProxy(transport));\n platform.logger.debug('initPlatform created ConfigProxy');\n\n // LLM proxy is ALWAYS created (parent may have real LLM even if not in child config)\n platform.setAdapter('llm', new LLMProxy(transport));\n platform.logger.debug('initPlatform created LLMProxy');\n\n if (adapters.embeddings) {\n const embeddingsProxy = new EmbeddingsProxy(transport);\n await embeddingsProxy.getDimensions(); // Initialize dimensions before use\n platform.setAdapter('embeddings', embeddingsProxy);\n platform.logger.debug('initPlatform created EmbeddingsProxy');\n }\n\n if (adapters.storage) {\n platform.setAdapter('storage', new StorageProxy(transport));\n platform.logger.debug('initPlatform created StorageProxy');\n }\n\n // ⚠️ CRITICAL: Do NOT create ExecutionBackend in child process!\n // Child processes ARE the workers - creating backend here would spawn infinite workers.\n // ExecutionBackend is ONLY created in parent process.\n\n // Core features are initialized normally (they don't duplicate resources)\n const coreFeatures = initializeCoreFeatures(platform, core);\n platform.initCoreFeatures(\n coreFeatures.workflows,\n coreFeatures.jobs,\n coreFeatures.cron,\n coreFeatures.resources\n );\n\n // Initialize ResourceBroker for queue and rate limiting\n const resourceBroker = initializeResourceBroker(platform, core.resourceBroker);\n platform.initResourceBroker(resourceBroker);\n platform.logger.debug('initPlatform initialized ResourceBroker');\n\n platform.logger.debug('initPlatform child process initialization complete');\n\n } else {\n // ══════════════════════════════════════════════════════════════════════\n // PARENT PROCESS (CLI bin)\n // ══════════════════════════════════════════════════════════════════════\n // Load real adapters (Qdrant, Redis, OpenAI, etc.)\n // Start IPC server to handle calls from child processes.\n\n platform.logger.debug('initPlatform parent process detected - loading real adapters');\n\n // Create analytics context for auto-enrichment (once per execution)\n const analyticsContext = await createAnalyticsContext(cwd);\n platform.logger.debug('initPlatform created analytics context', {\n product: analyticsContext.source.product,\n version: analyticsContext.source.version,\n actorType: analyticsContext.actor?.type,\n runId: analyticsContext.runId,\n });\n\n // Use AdapterLoader for dependency resolution and proper loading order\n const loader = new AdapterLoader();\n\n // Create runtime contexts registry\n // Adapters declare which contexts they need via manifest.contexts\n const runtimeContexts: Record<string, unknown> = {\n workspace: { cwd },\n analytics: analyticsContext,\n };\n\n // Module loader function - defined before loop so we can pre-load manifests\n const loadModule = async (modulePath: string): Promise<LoadedAdapterModule> => {\n try {\n const { discoverAdapters } = await import('./discover-adapters.js');\n const discovered = await discoverAdapters(cwd);\n\n // Parse module path into base package and subpath (same logic as resolveAdapter)\n const basePkgName = modulePath.split('/').slice(0, 2).join('/'); // \"@kb-labs/adapters-openai\"\n const subpath =\n modulePath.includes('/') && modulePath.split('/').length > 2\n ? modulePath.split('/').slice(2).join('/')\n : null; // \"embeddings\" or null\n\n const adapter = discovered.get(basePkgName);\n\n if (adapter && subpath) {\n // Load subpath export from workspace adapter\n const subpathFile = path.join(adapter.pkgRoot, 'dist', `${subpath}.js`);\n try {\n await fs.access(subpathFile);\n const module = await import(pathToFileURL(subpathFile).href);\n\n const factory = module.createAdapter || module.default;\n const manifest = module.manifest;\n\n if (!factory) {\n throw new Error(\n `Subpath ${modulePath} has no createAdapter or default export`\n );\n }\n\n if (!manifest) {\n throw new Error(\n `Subpath ${modulePath} has no manifest export`\n );\n }\n\n return { createAdapter: factory, manifest };\n } catch (err) {\n // Subpath file doesn't exist, try loading base package\n const baseModule = await import(\n pathToFileURL(\n path.join(adapter.pkgRoot, 'dist', 'index.js')\n ).href\n );\n\n const factory = baseModule.createAdapter || baseModule.default;\n const manifest = baseModule.manifest;\n\n if (!factory) {\n throw new Error(\n `Module ${modulePath} has no createAdapter or default export`\n );\n }\n\n if (!manifest) {\n throw new Error(\n `Module ${modulePath} has no manifest export`\n );\n }\n\n return { createAdapter: factory, manifest };\n }\n } else if (adapter) {\n // Load base package (no subpath)\n const module = await import(\n pathToFileURL(\n path.join(adapter.pkgRoot, 'dist', 'index.js')\n ).href\n );\n\n const factory = module.createAdapter || module.default;\n const manifest = module.manifest;\n\n if (!factory) {\n throw new Error(\n `Module ${modulePath} has no createAdapter or default export`\n );\n }\n\n if (!manifest) {\n throw new Error(\n `Module ${modulePath} has no manifest export`\n );\n }\n\n return { createAdapter: factory, manifest };\n } else {\n // Fallback to node_modules\n const module = await import(modulePath);\n\n const factory = module.createAdapter || module.default;\n const manifest = module.manifest;\n\n if (!factory) {\n throw new Error(\n `Module ${modulePath} has no createAdapter or default export`\n );\n }\n\n if (!manifest) {\n throw new Error(\n `Module ${modulePath} has no manifest export`\n );\n }\n\n return { createAdapter: factory, manifest };\n }\n } catch (error) {\n throw new Error(\n `Failed to load adapter module ${modulePath}: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n };\n\n // Build adapter configs for AdapterLoader\n // Supports both single adapter (string) and multi-adapter (string[]) config\n const adapterConfigs: Record<string, AdapterConfig> = {};\n\n // Track all available adapters for multi-adapter routing (LLM tier switching, etc.)\n const availableAdapters: Record<string, string[]> = {};\n\n for (const [name, adapterValue] of Object.entries(adapters)) {\n // Normalize to array and get primary adapter\n const adapterPackages = normalizeAdapterValue(adapterValue as AdapterValue);\n const primaryAdapter = getPrimaryAdapter(adapterValue as AdapterValue);\n\n if (!primaryAdapter) {continue;}\n\n // Store all available adapters for this type (used by LLMRouter, etc.)\n availableAdapters[name] = adapterPackages;\n\n try {\n // Pre-load module to access manifest (primary adapter only)\n const module = await loadModule(primaryAdapter);\n const baseOptions = (adapterOptions as Record<string, unknown>)[name] ?? {};\n\n // Inject requested contexts from manifest\n const requestedContexts = module.manifest.contexts ?? [];\n const contexts: Record<string, unknown> = {};\n\n for (const ctxName of requestedContexts) {\n if (runtimeContexts[ctxName]) {\n contexts[ctxName] = runtimeContexts[ctxName];\n }\n }\n\n adapterConfigs[name] = {\n module: primaryAdapter,\n // Merge contexts with user options (user options can override)\n config: { ...contexts, ...baseOptions },\n };\n\n // Log multi-adapter setup\n if (adapterPackages.length > 1) {\n platform.logger.debug(`initPlatform multi-adapter setup for ${name}`, {\n primary: primaryAdapter,\n available: adapterPackages,\n });\n }\n } catch (error) {\n throw error;\n }\n }\n\n // Load adapters with dependency resolution\n const loadedAdapters = await loader.loadAdapters(adapterConfigs, loadModule);\n\n // CRITICAL: Set analytics adapter FIRST (without wrapping) so wrapWithAnalytics() can use it\n if (loadedAdapters.has('analytics')) {\n platform.setAdapter('analytics', loadedAdapters.get('analytics') as any);\n platform.logger.debug('initPlatform loaded adapter: analytics → FileAnalytics (set early for wrapping)');\n }\n\n // Set adapters in platform (wrapped with analytics if available)\n // NOTE: LLM gets special handling - LLMRouter wraps AFTER ResourceBroker\n // Chain will be: LLMRouter → QueuedLLM → AnalyticsLLM → RawAdapter\n for (const [name, instance] of loadedAdapters.entries()) {\n // Skip analytics - already set above\n if (name === 'analytics') {\n continue;\n }\n\n // For LLM: only wrap with Analytics here, Router wrapping happens after ResourceBroker\n const wrappedInstance = wrapWithAnalytics(name as keyof AdapterTypes, instance as any);\n platform.setAdapter(name, wrappedInstance);\n\n const wrapperName = (wrappedInstance as any).constructor?.name ?? 'Unknown';\n const isWrapped = wrapperName.startsWith('Analytics');\n platform.logger.debug(\n `initPlatform loaded adapter: ${name} → ${(instance as any).constructor.name}${isWrapped ? ` (wrapped with ${wrapperName})` : ''}`\n );\n }\n\n // Get dependency graph for extension connection\n const graph = await loader.buildDependencyGraph(adapterConfigs, loadModule);\n loader.connectExtensions(loadedAdapters, graph);\n\n // Create ConfigAdapter (ALWAYS present, not loaded dynamically)\n try {\n const { ConfigAdapter } = await import('./adapters/config-adapter.js');\n platform.setAdapter('config', new ConfigAdapter());\n platform.logger.debug('initPlatform created ConfigAdapter');\n } catch (error) {\n platform.logger.warn('Failed to create ConfigAdapter, using NoOp fallback', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n // ══════════════════════════════════════════════════════════════════════\n // Initialize ExecutionBackend (AFTER adapters, BEFORE core features)\n // CRITICAL: ExecutionBackend is REQUIRED - all execution goes through it\n // ══════════════════════════════════════════════════════════════════════\n try {\n // Use dynamic import from plugin-execution-factory to eliminate circular dependency\n // plugin-execution-factory has no dependency on core-runtime\n const { createExecutionBackend } = await import('@kb-labs/plugin-execution-factory');\n\n // Map config types to backend options (explicit mapping, no type casts)\n const executionBackend = createExecutionBackend({\n platform: platform, // PlatformServices interface (adapters only)\n mode: execution.mode ?? 'auto',\n uiProvider, // Pass UI provider from caller (CLI, REST API, etc.)\n workerPool: execution.workerPool ? {\n min: execution.workerPool.min,\n max: execution.workerPool.max,\n maxRequestsPerWorker: execution.workerPool.maxRequestsPerWorker,\n maxUptimeMsPerWorker: execution.workerPool.maxUptimeMsPerWorker,\n maxConcurrentPerPlugin: execution.workerPool.maxConcurrentPerPlugin,\n warmup: execution.workerPool.warmup ? {\n mode: execution.workerPool.warmup.mode ?? 'none',\n topN: execution.workerPool.warmup.topN,\n maxHandlers: execution.workerPool.warmup.maxHandlers,\n } : undefined,\n } : undefined,\n remote: execution.remote ? {\n endpoint: execution.remote.endpoint ?? '',\n } : undefined,\n });\n\n platform.initExecutionBackend(executionBackend);\n\n platform.logger.debug('initPlatform initialized ExecutionBackend', {\n mode: execution.mode ?? 'auto',\n hasWorkerPool: !!execution.workerPool,\n configPath: 'platform.execution',\n });\n } catch (error) {\n // In test environment, @kb-labs/plugin-execution may not be available\n // Only warn if in test environment (NODE_ENV=test or vitest detected)\n const isTestEnv = process.env.NODE_ENV === 'test' || process.env.VITEST === 'true';\n\n if (isTestEnv) {\n platform.logger.warn('ExecutionBackend initialization failed in test environment', {\n error: error instanceof Error ? error.message : String(error),\n });\n } else {\n // In production/development, ExecutionBackend is REQUIRED\n platform.logger.error('ExecutionBackend initialization failed');\n throw error;\n }\n }\n\n // Initialize capability services (workspace/snapshot managers)\n try {\n const workspaceManager = new WorkspaceManager(platform);\n const snapshotManager = new SnapshotManager(platform);\n platform.initCapabilityServices(workspaceManager, snapshotManager);\n platform.registerLifecycleHooks('capability-managers', {\n onShutdown: async () => {\n await workspaceManager.shutdown();\n await snapshotManager.shutdown();\n },\n });\n\n platform.logger.debug('initPlatform initialized capability services', {\n hasWorkspaceProvider: workspaceManager.hasProvider(),\n hasSnapshotProvider: snapshotManager.hasProvider(),\n });\n } catch (error) {\n platform.logger.warn('Failed to initialize capability services, continuing without them', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n // Initialize orchestration services (environment manager + run executor/orchestrator)\n try {\n if (platform.hasExecutionBackend) {\n const environmentOptions = (adapterOptions.environment ?? {}) as Record<string, unknown>;\n const environmentManager = new EnvironmentManager(platform, {\n janitorIntervalMs: typeof environmentOptions.janitorIntervalMs === 'number'\n ? environmentOptions.janitorIntervalMs\n : undefined,\n janitorBatchSize: typeof environmentOptions.janitorBatchSize === 'number'\n ? environmentOptions.janitorBatchSize\n : undefined,\n });\n const runExecutor = new RunExecutor(platform.executionBackend, platform.logger);\n const runOrchestrator = new RunOrchestrator(\n environmentManager,\n runExecutor,\n platform.logger\n );\n\n platform.initOrchestrationServices(\n environmentManager,\n runExecutor,\n runOrchestrator\n );\n environmentManager.startJanitor();\n platform.registerLifecycleHooks('environment-manager', {\n onShutdown: async () => {\n await environmentManager.shutdown();\n },\n });\n\n platform.logger.debug('initPlatform initialized orchestration services', {\n hasEnvironmentProvider: environmentManager.hasProvider(),\n });\n }\n } catch (error) {\n platform.logger.warn('Failed to initialize orchestration services, continuing without them', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n // Initialize core features (gracefully degrade if workflow unavailable)\n try {\n const coreFeatures = initializeCoreFeatures(platform, core);\n platform.initCoreFeatures(\n coreFeatures.workflows,\n coreFeatures.jobs,\n coreFeatures.cron,\n coreFeatures.resources\n );\n platform.logger.debug('initPlatform initialized core features');\n } catch (error) {\n platform.logger.warn('Failed to initialize core features, continuing without them', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n // Initialize ResourceBroker for queue and rate limiting (optional)\n try {\n const resourceBroker = initializeResourceBroker(platform, core.resourceBroker);\n platform.initResourceBroker(resourceBroker);\n platform.logger.debug('initPlatform initialized ResourceBroker');\n } catch (error) {\n platform.logger.warn('Failed to initialize ResourceBroker, continuing without rate limiting', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n // ══════════════════════════════════════════════════════════════════════\n // Wrap LLM with Router (AFTER ResourceBroker)\n // Chain: LLMRouter → QueuedLLM → AnalyticsLLM → RawAdapter\n // This ensures useLLM({ tier }) can call resolve() on the outermost wrapper\n // ══════════════════════════════════════════════════════════════════════\n if (platform.hasAdapter('llm')) {\n const llmOptions = (adapterOptions.llm ?? {}) as LLMAdapterOptions;\n const executionDefaults = llmOptions.executionDefaults;\n const llmWithDefaults = createDefaultExecutionPolicyLLM(platform.llm, executionDefaults);\n\n if (llmWithDefaults !== platform.llm) {\n platform.setAdapter('llm', llmWithDefaults);\n platform.logger.debug('initPlatform applied centralized LLM execution defaults');\n }\n\n try {\n const { LLMRouter } = await import('@kb-labs/llm-router');\n\n // Get current LLM (already QueuedLLM → AnalyticsLLM → RawAdapter)\n const queuedLLM = llmWithDefaults;\n\n // Create adapter loader function for multi-adapter support\n // CRITICAL: Wrap loaded adapters with AnalyticsLLM for tracking\n const adapterLoader = async (adapterPackage: string): Promise<any> => {\n try {\n const module = await loadModule(adapterPackage);\n const loadedAdapter = await module.createAdapter(llmOptions, {});\n\n // Wrap with AnalyticsLLM if analytics is available\n const analytics = platform.analytics;\n const analyticsWrapped = analytics && analytics.constructor.name !== 'NoOpAnalytics'\n ? new AnalyticsLLM(loadedAdapter as any, analytics)\n : loadedAdapter;\n const wrappedAdapter = createDefaultExecutionPolicyLLM(\n analyticsWrapped as any,\n executionDefaults\n );\n\n platform.logger.debug(`LLMRouter loaded adapter: ${adapterPackage}`, {\n wrapped: wrappedAdapter !== loadedAdapter,\n });\n return wrappedAdapter;\n } catch (error) {\n platform.logger.warn(`Failed to load adapter ${adapterPackage}`, {\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n };\n\n // Build router config from adapter options\n const routerConfig = {\n defaultTier: llmOptions.defaultTier ?? llmOptions.tier ?? 'small',\n tierMapping: llmOptions.tierMapping,\n capabilities: llmOptions.capabilities,\n adapterLoader,\n };\n\n const llmRouter = new LLMRouter(\n queuedLLM,\n routerConfig,\n platform.logger\n );\n\n // Replace LLM adapter with Router-wrapped version\n platform.setAdapter('llm', llmRouter);\n\n const modelInfo = llmOptions.tierMapping\n ? `tierMapping with ${Object.keys(llmOptions.tierMapping).length} tiers`\n : `tier: ${routerConfig.defaultTier}`;\n\n const llmAdapters = availableAdapters['llm'] ?? [];\n if (llmAdapters.length > 1) {\n platform.logger.debug(`initPlatform LLM multi-adapter enabled`, {\n adapters: llmAdapters,\n primary: llmAdapters[0],\n });\n }\n\n platform.logger.debug(`initPlatform wrapped LLM with Router (${modelInfo})`);\n } catch (error) {\n // LLMRouter not available - keep QueuedLLM as is\n platform.logger.debug('LLMRouter not available, using QueuedLLM directly', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Start Unix Socket server to handle adapter calls from children (critical for V3 plugins)\n try {\n const { createUnixSocketServer } = await import('./ipc/unix-socket-server.js');\n const socketServer = await createUnixSocketServer(platform);\n platform.initSocketServer(socketServer);\n platform.logger.debug('initPlatform started Unix Socket server for child processes');\n } catch (error) {\n platform.logger.warn('Failed to start UnixSocketServer, V3 plugin execution will be unavailable', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n platform.logger.debug('initPlatform parent process initialization complete');\n }\n\n await platform.emitLifecyclePhase('ready', {\n cwd,\n isChildProcess,\n metadata: {\n adapterKeys: platform.listAdapters(),\n durationMs: Date.now() - initStartedAt,\n pid: process.pid,\n },\n });\n\n return platform;\n } catch (error) {\n await platform.emitLifecycleError(error, 'start', {\n cwd,\n isChildProcess,\n metadata: {\n adapterKeys: Object.keys(adapters),\n durationMs: Date.now() - initStartedAt,\n pid: process.pid,\n },\n });\n throw error;\n }\n}\n\n/**\n * Reset the platform to initial state (for testing).\n * Clears all adapters and core features.\n * Platform will use NoOp fallbacks until re-initialized.\n *\n * @example\n * ```typescript\n * // Before test\n * resetPlatform();\n * await initPlatform({ adapters: { llm: mockLLM } });\n *\n * // After test\n * resetPlatform();\n * ```\n */\nexport function resetPlatform(): void {\n platform.reset();\n}\n","/**\n * @module @kb-labs/core-runtime/analytics-context\n * Auto-detection of analytics context (source, actor, runId) for event enrichment.\n *\n * See ADR-0040: Analytics V1 Auto-Enrichment\n */\n\nimport { randomUUID } from 'node:crypto';\nimport { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { execSync } from 'node:child_process';\nimport type { AnalyticsContext } from '@kb-labs/core-platform/adapters';\nexport type { AnalyticsContext };\n\n/**\n * Create AnalyticsContext with auto-detection of source, actor, and runId.\n *\n * Detection logic:\n * - **Source**: Reads package.json from cwd for product name and version\n * - **Actor**: Detects from CI environment variables or git config\n * - CI mode: Checks CI=true, GITHUB_ACTIONS, GITLAB_CI, etc.\n * - User mode: Executes `git config user.name` and `git config user.email`\n * - **RunId**: Generates unique UUID per execution (correlates events in single CLI invocation)\n * - **Context**: Adds workspace path, git branch (if available)\n *\n * @param cwd - Workspace root directory\n * @returns AnalyticsContext with auto-populated metadata\n *\n * @example\n * ```typescript\n * const context = await createAnalyticsContext('/path/to/workspace');\n * // {\n * // source: { product: '@kb-labs/cli', version: '1.0.0' },\n * // runId: 'f47ac10b-58cc-4372-a567-0e02b2c3d479',\n * // actor: { type: 'user', id: 'user@example.com', name: 'John Doe' },\n * // ctx: { workspace: '/path/to/workspace', branch: 'main' }\n * // }\n * ```\n */\nexport async function createAnalyticsContext(cwd: string): Promise<AnalyticsContext> {\n // 1. Detect source from package.json\n const source = await detectSource(cwd);\n\n // 2. Detect actor from environment\n const actor = detectActor();\n\n // 3. Generate runId per execution\n const runId = randomUUID();\n\n // 4. Additional context\n const ctx = buildContext(cwd);\n\n return {\n source,\n runId,\n actor,\n ctx,\n };\n}\n\n/**\n * Detect source (product name and version) from package.json\n */\nasync function detectSource(cwd: string): Promise<{ product: string; version: string }> {\n try {\n const pkgPath = join(cwd, 'package.json');\n const pkgContent = await readFile(pkgPath, 'utf-8');\n const pkg = JSON.parse(pkgContent);\n\n return {\n product: pkg.name || 'kb-labs',\n version: pkg.version || '0.0.0',\n };\n } catch {\n // If package.json doesn't exist or is invalid, use defaults\n return {\n product: 'kb-labs',\n version: '0.0.0',\n };\n }\n}\n\n/**\n * Detect actor from environment (CI or user)\n */\nfunction detectActor(): AnalyticsContext['actor'] {\n // CI detection (GitHub Actions, GitLab CI, CircleCI, Jenkins, etc.)\n const isCI =\n process.env.CI === 'true' ||\n process.env.GITHUB_ACTIONS === 'true' ||\n process.env.GITLAB_CI === 'true' ||\n process.env.CIRCLECI === 'true' ||\n process.env.JENKINS_URL !== undefined ||\n process.env.TRAVIS === 'true';\n\n if (isCI) {\n return {\n type: 'ci',\n id:\n process.env.GITHUB_ACTOR ||\n process.env.GITLAB_USER_LOGIN ||\n process.env.CIRCLE_USERNAME ||\n process.env.BUILD_USER_ID ||\n 'ci-bot',\n name:\n process.env.GITHUB_ACTOR ||\n process.env.GITLAB_USER_NAME ||\n process.env.BUILD_USER ||\n 'CI Bot',\n };\n }\n\n // User detection from git config\n try {\n const gitUser = execSync('git config user.name', {\n encoding: 'utf-8',\n stdio: ['pipe', 'pipe', 'ignore'],\n }).trim();\n\n const gitEmail = execSync('git config user.email', {\n encoding: 'utf-8',\n stdio: ['pipe', 'pipe', 'ignore'],\n }).trim();\n\n return {\n type: 'user',\n id: gitEmail || undefined,\n name: gitUser || undefined,\n };\n } catch {\n // Git config not available, use minimal actor\n return {\n type: 'user',\n };\n }\n}\n\n/**\n * Build additional context (workspace, branch, etc.)\n */\nfunction buildContext(cwd: string): Record<string, string | number | boolean | null> {\n const ctx: Record<string, string | number | boolean | null> = {\n workspace: cwd,\n };\n\n // Add git branch if available\n try {\n const branch = execSync('git rev-parse --abbrev-ref HEAD', {\n encoding: 'utf-8',\n stdio: ['pipe', 'pipe', 'ignore'],\n }).trim();\n ctx.branch = branch;\n } catch {\n // Git not available, skip branch\n }\n\n return ctx;\n}\n","/**\n * @module @kb-labs/core-runtime/adapter-loader\n * Adapter dependency resolution and loading with topological sort.\n *\n * Implements ADR-0043: Adapter Manifest System\n */\n\nimport type { AdapterManifest, AdapterDependency } from '@kb-labs/core-platform';\n\n/**\n * Adapter configuration from kb.config.json\n */\nexport interface AdapterConfig {\n /** Package path (e.g., \"@kb-labs/adapters-pino\") */\n module: string;\n /** Adapter-specific configuration */\n config?: unknown;\n}\n\n/**\n * Loaded adapter module with manifest and factory\n */\nexport interface LoadedAdapterModule {\n /** Adapter manifest */\n manifest: AdapterManifest;\n /** Factory function to create adapter instance */\n createAdapter: (config: unknown, deps: Record<string, unknown>) => unknown | Promise<unknown>;\n}\n\n/**\n * Dependency graph node\n */\ninterface DependencyGraphNode {\n /** Adapter name (config key) */\n name: string;\n /** Adapter manifest */\n manifest: AdapterManifest;\n /** Loaded module */\n module: LoadedAdapterModule;\n /** Adapter configuration */\n config: unknown;\n /** Required dependencies (adapter names) */\n requiredDeps: string[];\n /** Optional dependencies (adapter names) */\n optionalDeps: string[];\n /** Incoming edge count (for Kahn's algorithm) */\n inDegree: number;\n}\n\n/**\n * Dependency graph for topological sort\n */\nexport class DependencyGraph {\n private nodes = new Map<string, DependencyGraphNode>();\n private edges = new Map<string, Set<string>>(); // from -> [to...]\n\n /**\n * Add node to graph\n */\n addNode(node: DependencyGraphNode): void {\n this.nodes.set(node.name, node);\n if (!this.edges.has(node.name)) {\n this.edges.set(node.name, new Set());\n }\n }\n\n /**\n * Add edge from dependency to dependent.\n * In topological sort, edge A -> B means A must come before B.\n * For adapters: db -> logPersistence means db must load before logPersistence.\n */\n addEdge(from: string, to: string): void {\n if (!this.edges.has(from)) {\n this.edges.set(from, new Set());\n }\n this.edges.get(from)!.add(to);\n\n // Increment in-degree of dependent node (target)\n const node = this.nodes.get(to);\n if (node) {\n node.inDegree++;\n }\n }\n\n /**\n * Get node by name\n */\n getNode(name: string): DependencyGraphNode | undefined {\n return this.nodes.get(name);\n }\n\n /**\n * Get all nodes\n */\n getAllNodes(): DependencyGraphNode[] {\n return Array.from(this.nodes.values());\n }\n\n /**\n * Get dependencies of a node\n */\n getDependencies(name: string): string[] {\n return Array.from(this.edges.get(name) ?? []);\n }\n\n /**\n * Topological sort using Kahn's algorithm.\n * Returns nodes in dependency order (dependencies before dependents).\n *\n * @throws Error if circular dependency detected\n */\n topologicalSort(): DependencyGraphNode[] {\n // Copy in-degrees (Kahn's algorithm mutates them)\n const inDegrees = new Map<string, number>();\n for (const node of this.nodes.values()) {\n inDegrees.set(node.name, node.inDegree);\n }\n\n // Queue of nodes with no incoming edges\n const queue: string[] = [];\n for (const [name, degree] of inDegrees.entries()) {\n if (degree === 0) {\n queue.push(name);\n }\n }\n\n const sorted: DependencyGraphNode[] = [];\n\n while (queue.length > 0) {\n const currentName = queue.shift()!;\n const currentNode = this.nodes.get(currentName)!;\n sorted.push(currentNode);\n\n // For each dependency of current node\n const deps = this.getDependencies(currentName);\n for (const depName of deps) {\n const depDegree = inDegrees.get(depName)!;\n inDegrees.set(depName, depDegree - 1);\n\n if (depDegree - 1 === 0) {\n queue.push(depName);\n }\n }\n }\n\n // If not all nodes processed, there's a cycle\n if (sorted.length !== this.nodes.size) {\n const remaining = Array.from(this.nodes.keys()).filter(\n (name) => !sorted.some((node) => node.name === name)\n );\n throw new Error(\n `Circular dependency detected in adapters: ${remaining.join(', ')}`\n );\n }\n\n return sorted;\n }\n}\n\n/**\n * Adapter loader with dependency resolution.\n *\n * Features:\n * - Topological sort for correct load order\n * - Circular dependency detection\n * - Extension connection after all adapters loaded\n * - Support for optional dependencies\n */\nexport class AdapterLoader {\n /**\n * Create rich missing-dependency error with runtime-token guidance.\n */\n private createMissingDependencyError(\n nodeName: string,\n depToken: string,\n graph: DependencyGraph\n ): Error {\n const nodes = graph.getAllNodes();\n const configuredTokens = nodes.map((n) => n.name);\n const matchingManifestIds = nodes\n .filter((n) => n.manifest.id === depToken)\n .map((n) => n.name);\n\n let message =\n `Adapter \"${nodeName}\" requires adapter \"${depToken}\" but it's not configured. ` +\n `Dependencies must reference runtime adapter tokens (config keys), not manifest.id.`;\n\n if (matchingManifestIds.length > 0) {\n message +=\n ` Token \"${depToken}\" matches manifest.id of configured adapter token(s): ` +\n `${matchingManifestIds.join(', ')}.`;\n }\n\n message += ` Configured tokens: ${configuredTokens.join(', ') || '(none)'}.`;\n return new Error(message);\n }\n\n /**\n * Build dependency graph from adapter configurations.\n *\n * @param configs - Adapter configurations from kb.config.json\n * @param loadModule - Function to load adapter module (for testing/mocking)\n * @returns Dependency graph\n */\n async buildDependencyGraph(\n configs: Record<string, AdapterConfig>,\n loadModule: (modulePath: string) => Promise<LoadedAdapterModule>\n ): Promise<DependencyGraph> {\n const graph = new DependencyGraph();\n\n // Step 1: Load all modules and create nodes\n for (const [name, config] of Object.entries(configs)) {\n const module = await loadModule(config.module);\n\n // Parse dependencies from manifest\n const requiredDeps = this.parseDependencies(module.manifest.requires?.adapters ?? []);\n const optionalDeps = module.manifest.optional?.adapters ?? [];\n\n graph.addNode({\n name,\n manifest: module.manifest,\n module,\n config: config.config,\n requiredDeps,\n optionalDeps,\n inDegree: 0, // Will be updated when edges are added\n });\n }\n\n // Step 2: Add edges (dependencies)\n for (const node of graph.getAllNodes()) {\n // Add edges for required dependencies\n for (const depId of node.requiredDeps) {\n const depNode = graph.getNode(depId);\n if (!depNode) {\n throw this.createMissingDependencyError(node.name, depId, graph);\n }\n // Edge from dependency to dependent (dependency must load first)\n // db -> logPersistence means db loads before logPersistence\n graph.addEdge(depId, node.name);\n }\n\n // Add edges for optional dependencies (if present)\n for (const depId of node.optionalDeps) {\n const depNode = graph.getNode(depId);\n if (depNode) {\n // Only add edge if optional dep exists\n graph.addEdge(depId, node.name);\n }\n // If optional dep missing, skip (no error)\n }\n }\n\n return graph;\n }\n\n /**\n * Parse adapter dependencies from manifest.\n * Handles both short form (string[]) and long form ({ id, alias }[]).\n */\n private parseDependencies(deps: AdapterDependency[]): string[] {\n return deps.map((dep) => {\n if (typeof dep === 'string') {\n return dep;\n }\n return dep.id;\n });\n }\n\n /**\n * Get dependency aliases for factory function.\n * Maps dependency IDs to their aliases (or ID if no alias).\n */\n private getDependencyAliases(\n manifest: AdapterManifest\n ): Map<string, string> {\n const aliases = new Map<string, string>();\n\n const deps = manifest.requires?.adapters ?? [];\n for (const dep of deps) {\n if (typeof dep === 'string') {\n aliases.set(dep, dep); // No alias, use ID\n } else {\n aliases.set(dep.id, dep.alias ?? dep.id);\n }\n }\n\n return aliases;\n }\n\n /**\n * Load adapters in dependency order.\n *\n * @param configs - Adapter configurations\n * @param loadModule - Function to load adapter module\n * @returns Map of adapter name to instance\n */\n async loadAdapters(\n configs: Record<string, AdapterConfig>,\n loadModule: (modulePath: string) => Promise<LoadedAdapterModule>\n ): Promise<Map<string, unknown>> {\n // Step 1: Build dependency graph\n const graph = await this.buildDependencyGraph(configs, loadModule);\n\n // Step 2: Topological sort\n const sorted = graph.topologicalSort();\n\n // Step 3: Load adapters in dependency order\n const adapters = new Map<string, unknown>();\n\n for (const node of sorted) {\n // Build deps object for factory function\n const deps: Record<string, unknown> = {};\n\n // Get dependency aliases\n const aliases = this.getDependencyAliases(node.manifest);\n\n // Add required dependencies\n for (const depId of node.requiredDeps) {\n const depInstance = adapters.get(depId);\n if (!depInstance) {\n throw new Error(\n `Internal error: Required dependency \"${depId}\" not loaded before \"${node.name}\"`\n );\n }\n const alias = aliases.get(depId) ?? depId;\n deps[alias] = depInstance;\n }\n\n // Add optional dependencies (if present)\n for (const depId of node.optionalDeps) {\n const depInstance = adapters.get(depId);\n if (depInstance) {\n const alias = aliases.get(depId) ?? depId;\n deps[alias] = depInstance;\n }\n // If optional dep missing, skip\n }\n\n // Create adapter instance\n const instance = await node.module.createAdapter(node.config, deps);\n adapters.set(node.name, instance);\n }\n\n return adapters;\n }\n\n /**\n * Connect extensions to core adapters.\n * Called after all adapters are loaded.\n *\n * Extensions are sorted by priority (higher first), then by registration order.\n *\n * @param adapters - Map of adapter name to instance\n * @param graph - Dependency graph with manifests\n */\n connectExtensions(\n adapters: Map<string, unknown>,\n graph: DependencyGraph\n ): void {\n // Collect all extensions\n const extensions: Array<{\n name: string;\n manifest: AdapterManifest;\n instance: unknown;\n priority: number;\n }> = [];\n\n for (const node of graph.getAllNodes()) {\n if (node.manifest.extends) {\n const instance = adapters.get(node.name);\n if (!instance) {continue;}\n\n extensions.push({\n name: node.name,\n manifest: node.manifest,\n instance,\n priority: node.manifest.extends.priority ?? 0,\n });\n }\n }\n\n // Sort by priority (higher first), then by name (stable sort)\n extensions.sort((a, b) => {\n if (a.priority !== b.priority) {\n return b.priority - a.priority; // Higher priority first\n }\n return a.name.localeCompare(b.name); // Alphabetical for same priority\n });\n\n // Connect each extension\n for (const ext of extensions) {\n const { adapter: targetName, hook, method } = ext.manifest.extends!;\n\n const target = adapters.get(targetName);\n if (!target) {\n console.warn(\n `[AdapterLoader] Extension \"${ext.name}\" cannot connect: target adapter \"${targetName}\" not found`\n );\n continue;\n }\n\n // Check if target has hook method\n if (typeof (target as any)[hook] !== 'function') {\n console.warn(\n `[AdapterLoader] Extension \"${ext.name}\" cannot connect: target \"${targetName}\" has no method \"${hook}\"`\n );\n continue;\n }\n\n // Check if extension has method\n if (typeof (ext.instance as any)[method] !== 'function') {\n console.warn(\n `[AdapterLoader] Extension \"${ext.name}\" cannot connect: extension has no method \"${method}\"`\n );\n continue;\n }\n\n // Connect: target.hook(extension.method)\n try {\n const extensionMethod = (ext.instance as any)[method].bind(ext.instance);\n (target as any)[hook](extensionMethod);\n\n console.log(\n `[AdapterLoader] Connected extension \"${ext.name}\" to \"${targetName}.${hook}\" (priority: ${ext.priority})`\n );\n } catch (error) {\n console.error(\n `[AdapterLoader] Failed to connect extension \"${ext.name}\":`,\n error\n );\n }\n }\n }\n}\n","/**\n * @module @kb-labs/core-runtime/environment-lease-store\n * SQL-backed persistence for environment leases and events.\n */\n\nimport type { ISQLDatabase } from '@kb-labs/core-platform/adapters';\n\nexport interface EnvironmentLeaseRow {\n environmentId: string;\n runId?: string;\n status: 'active' | 'terminated' | 'failed';\n provider: string;\n acquiredAt: string;\n expiresAt: string;\n releasedAt?: string | null;\n metadataJson?: string | null;\n}\n\nexport interface EnvironmentEventRow {\n id: string;\n environmentId: string;\n runId?: string;\n type: string;\n at: string;\n reason?: string;\n payloadJson?: string | null;\n}\n\n/**\n * SQL persistence helper for environment lifecycle.\n */\nexport class EnvironmentLeaseStore {\n private schemaReady = false;\n\n constructor(private readonly db: ISQLDatabase) {}\n\n /**\n * Ensure required schema exists.\n */\n async ensureSchema(): Promise<void> {\n if (this.schemaReady) {\n return;\n }\n\n const createLeasesSql = `\n CREATE TABLE IF NOT EXISTS environment_leases (\n environment_id TEXT PRIMARY KEY,\n run_id TEXT,\n status TEXT NOT NULL,\n provider TEXT NOT NULL,\n acquired_at TEXT NOT NULL,\n expires_at TEXT NOT NULL,\n released_at TEXT,\n metadata_json TEXT\n )\n `;\n\n const createEventsSql = `\n CREATE TABLE IF NOT EXISTS environment_events (\n id TEXT PRIMARY KEY,\n environment_id TEXT NOT NULL,\n run_id TEXT,\n type TEXT NOT NULL,\n at TEXT NOT NULL,\n reason TEXT,\n payload_json TEXT\n )\n `;\n\n if (typeof this.db.exec === 'function') {\n await this.db.exec(createLeasesSql);\n await this.db.exec(createEventsSql);\n } else {\n await this.db.query(createLeasesSql);\n await this.db.query(createEventsSql);\n }\n\n this.schemaReady = true;\n }\n\n /**\n * Upsert lease record.\n */\n async upsertLease(row: EnvironmentLeaseRow): Promise<void> {\n await this.ensureSchema();\n\n await this.db.query(\n `\n INSERT INTO environment_leases (\n environment_id,\n run_id,\n status,\n provider,\n acquired_at,\n expires_at,\n released_at,\n metadata_json\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(environment_id) DO UPDATE SET\n run_id = excluded.run_id,\n status = excluded.status,\n provider = excluded.provider,\n acquired_at = excluded.acquired_at,\n expires_at = excluded.expires_at,\n released_at = excluded.released_at,\n metadata_json = excluded.metadata_json\n `,\n [\n row.environmentId,\n row.runId ?? null,\n row.status,\n row.provider,\n row.acquiredAt,\n row.expiresAt,\n row.releasedAt ?? null,\n row.metadataJson ?? null,\n ]\n );\n }\n\n /**\n * Append event.\n */\n async appendEvent(row: EnvironmentEventRow): Promise<void> {\n await this.ensureSchema();\n\n await this.db.query(\n `\n INSERT INTO environment_events (\n id,\n environment_id,\n run_id,\n type,\n at,\n reason,\n payload_json\n ) VALUES (?, ?, ?, ?, ?, ?, ?)\n `,\n [\n row.id,\n row.environmentId,\n row.runId ?? null,\n row.type,\n row.at,\n row.reason ?? null,\n row.payloadJson ?? null,\n ]\n );\n }\n\n /**\n * Mark lease as terminated.\n */\n async markTerminated(environmentId: string, releasedAt: string, reason?: string): Promise<void> {\n await this.ensureSchema();\n\n await this.db.query(\n `\n UPDATE environment_leases\n SET status = 'terminated', released_at = ?\n WHERE environment_id = ?\n `,\n [releasedAt, environmentId]\n );\n\n if (reason) {\n await this.appendEvent({\n id: `${environmentId}-terminated-${Date.now()}`,\n environmentId,\n type: 'environment.terminated',\n at: releasedAt,\n reason,\n });\n }\n }\n\n /**\n * Find active leases that expired before given timestamp.\n */\n async findExpiredActiveLeases(nowIso: string, limit = 50): Promise<EnvironmentLeaseRow[]> {\n await this.ensureSchema();\n\n const result = await this.db.query<{\n environment_id: string;\n run_id: string | null;\n status: string;\n provider: string;\n acquired_at: string;\n expires_at: string;\n released_at: string | null;\n metadata_json: string | null;\n }>(\n `\n SELECT\n environment_id,\n run_id,\n status,\n provider,\n acquired_at,\n expires_at,\n released_at,\n metadata_json\n FROM environment_leases\n WHERE status = 'active' AND expires_at <= ?\n ORDER BY expires_at ASC\n LIMIT ?\n `,\n [nowIso, limit]\n );\n\n return result.rows.map((row) => ({\n environmentId: row.environment_id,\n runId: row.run_id ?? undefined,\n status: row.status as EnvironmentLeaseRow['status'],\n provider: row.provider,\n acquiredAt: row.acquired_at,\n expiresAt: row.expires_at,\n releasedAt: row.released_at,\n metadataJson: row.metadata_json,\n }));\n }\n}\n\n","/**\n * @module @kb-labs/core-runtime/environment-manager\n * Runtime manager for long-lived environment providers.\n */\n\nimport type {\n IEnvironmentProvider,\n CreateEnvironmentRequest,\n EnvironmentDescriptor,\n EnvironmentStatusResult,\n EnvironmentLease,\n} from '@kb-labs/core-platform';\nimport type { ISQLDatabase } from '@kb-labs/core-platform/adapters';\nimport { randomUUID } from 'node:crypto';\nimport type { PlatformContainer } from './container.js';\nimport { EnvironmentLeaseStore } from './environment-lease-store.js';\n\nexport interface EnvironmentManagerOptions {\n janitorIntervalMs?: number;\n janitorBatchSize?: number;\n}\n\n/**\n * Environment manager facade over `environment` adapter token.\n *\n * Keeps provider access in one place and centralizes diagnostics.\n */\nexport class EnvironmentManager {\n private readonly store?: EnvironmentLeaseStore;\n private readonly janitorIntervalMs: number;\n private readonly janitorBatchSize: number;\n private janitorTimer?: NodeJS.Timeout;\n\n constructor(\n private readonly platform: Pick<PlatformContainer, 'getAdapter' | 'logger'>,\n options: EnvironmentManagerOptions = {}\n ) {\n const db = this.platform.getAdapter<ISQLDatabase>('db');\n if (db) {\n this.store = new EnvironmentLeaseStore(db);\n }\n\n this.janitorIntervalMs = options.janitorIntervalMs ?? 60_000;\n this.janitorBatchSize = options.janitorBatchSize ?? 25;\n }\n\n /**\n * Check whether environment provider is configured.\n */\n hasProvider(): boolean {\n return !!this.platform.getAdapter<IEnvironmentProvider>('environment');\n }\n\n /**\n * Create environment using configured provider.\n */\n async createEnvironment(request: CreateEnvironmentRequest): Promise<EnvironmentDescriptor> {\n const provider = this.getProviderOrThrow();\n const environment = await provider.create(request);\n const now = new Date().toISOString();\n\n await this.safePersist(async () => this.persistLeaseState(environment, request.runId, 'active', now), {\n operation: 'persistLeaseState',\n environmentId: environment.environmentId,\n runId: request.runId,\n });\n await this.safePersist(async () => this.appendEvent({\n environmentId: environment.environmentId,\n runId: request.runId,\n type: 'environment.created',\n at: now,\n payload: {\n provider: environment.provider,\n status: environment.status,\n },\n }), {\n operation: 'appendEvent',\n environmentId: environment.environmentId,\n runId: request.runId,\n eventType: 'environment.created',\n });\n\n this.platform.logger.debug('Environment created', {\n environmentId: environment.environmentId,\n provider: environment.provider,\n status: environment.status,\n runId: request.runId,\n templateId: request.templateId,\n });\n\n return environment;\n }\n\n /**\n * Get environment status.\n */\n async getEnvironmentStatus(environmentId: string): Promise<EnvironmentStatusResult> {\n const provider = this.getProviderOrThrow();\n return provider.getStatus(environmentId);\n }\n\n /**\n * Destroy environment.\n */\n async destroyEnvironment(environmentId: string, reason?: string): Promise<void> {\n const provider = this.getProviderOrThrow();\n await provider.destroy(environmentId, reason);\n const now = new Date().toISOString();\n\n await this.safePersist(\n async () => this.store?.markTerminated(environmentId, now, reason),\n {\n operation: 'markTerminated',\n environmentId,\n reason,\n }\n );\n await this.safePersist(async () => this.appendEvent({\n environmentId,\n type: 'environment.destroyed',\n at: now,\n reason,\n }), {\n operation: 'appendEvent',\n environmentId,\n reason,\n eventType: 'environment.destroyed',\n });\n\n this.platform.logger.debug('Environment destroyed', {\n environmentId,\n reason,\n });\n }\n\n /**\n * Renew environment lease if provider supports it.\n */\n async renewEnvironmentLease(\n environmentId: string,\n ttlMs: number\n ): Promise<EnvironmentLease> {\n const provider = this.getProviderOrThrow();\n if (!provider.renewLease) {\n throw new Error('Configured environment provider does not support lease renewal');\n }\n const lease = await provider.renewLease(environmentId, ttlMs);\n const status = await this.getEnvironmentStatus(environmentId).catch(() => undefined);\n\n await this.safePersist(\n async () => this.persistLeaseState(\n {\n environmentId,\n provider: 'unknown',\n status: status?.status ?? 'ready',\n createdAt: lease.acquiredAt,\n updatedAt: new Date().toISOString(),\n lease,\n },\n lease.owner,\n 'active',\n new Date().toISOString()\n ),\n {\n operation: 'persistLeaseState',\n environmentId,\n runId: lease.owner,\n }\n );\n await this.safePersist(async () => this.appendEvent({\n environmentId,\n runId: lease.owner,\n type: 'environment.lease.renewed',\n at: new Date().toISOString(),\n payload: {\n expiresAt: lease.expiresAt,\n },\n }), {\n operation: 'appendEvent',\n environmentId,\n runId: lease.owner,\n eventType: 'environment.lease.renewed',\n });\n\n return lease;\n }\n\n /**\n * Start periodic cleanup for expired leases.\n */\n startJanitor(): void {\n if (!this.store || this.janitorTimer) {\n return;\n }\n\n this.janitorTimer = setInterval(() => {\n void this.cleanupExpiredLeases();\n }, this.janitorIntervalMs);\n\n this.janitorTimer.unref?.();\n this.platform.logger.debug('Environment janitor started', {\n intervalMs: this.janitorIntervalMs,\n batchSize: this.janitorBatchSize,\n });\n }\n\n /**\n * Stop janitor timer.\n */\n async shutdown(): Promise<void> {\n if (this.janitorTimer) {\n clearInterval(this.janitorTimer);\n this.janitorTimer = undefined;\n }\n }\n\n /**\n * Cleanup expired active leases.\n */\n async cleanupExpiredLeases(now: Date = new Date()): Promise<number> {\n if (!this.store) {\n return 0;\n }\n\n const expired = await this.store.findExpiredActiveLeases(\n now.toISOString(),\n this.janitorBatchSize\n );\n\n let cleaned = 0;\n for (const lease of expired) {\n try {\n await this.destroyEnvironment(lease.environmentId, 'lease_expired');\n cleaned++;\n } catch (error) {\n this.platform.logger.warn('Environment janitor failed to cleanup lease', {\n environmentId: lease.environmentId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n if (cleaned > 0) {\n this.platform.logger.debug('Environment janitor cleanup complete', {\n cleaned,\n });\n }\n\n return cleaned;\n }\n\n private getProviderOrThrow(): IEnvironmentProvider {\n const provider = this.platform.getAdapter<IEnvironmentProvider>('environment');\n if (!provider) {\n throw new Error(\n 'Environment provider not configured. ' +\n 'Configure platform.adapters.environment with an adapter implementing IEnvironmentProvider.'\n );\n }\n return provider;\n }\n\n private async persistLeaseState(\n environment: EnvironmentDescriptor,\n runId: string | undefined,\n status: 'active' | 'terminated' | 'failed',\n nowIso: string\n ): Promise<void> {\n if (!this.store) {\n return;\n }\n\n await this.store.upsertLease({\n environmentId: environment.environmentId,\n runId,\n status,\n provider: environment.provider,\n acquiredAt: environment.lease?.acquiredAt ?? environment.createdAt,\n expiresAt: environment.lease?.expiresAt ?? nowIso,\n metadataJson: environment.metadata\n ? JSON.stringify(environment.metadata)\n : null,\n releasedAt: status === 'active' ? null : nowIso,\n });\n }\n\n private async appendEvent(input: {\n environmentId: string;\n runId?: string;\n type: string;\n at: string;\n reason?: string;\n payload?: Record<string, unknown>;\n }): Promise<void> {\n if (!this.store) {\n return;\n }\n\n await this.store.appendEvent({\n id: randomUUID(),\n environmentId: input.environmentId,\n runId: input.runId,\n type: input.type,\n at: input.at,\n reason: input.reason,\n payloadJson: input.payload ? JSON.stringify(input.payload) : null,\n });\n }\n\n private async safePersist(\n operation: () => Promise<void | unknown>,\n context: Record<string, unknown>\n ): Promise<void> {\n try {\n await operation();\n } catch (error) {\n this.platform.logger.warn('Environment persistence operation failed', {\n ...context,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n}\n","/**\n * @module @kb-labs/core-runtime/workspace-manager\n * Runtime manager for workspace providers.\n */\n\nimport type {\n IWorkspaceProvider,\n MaterializeWorkspaceRequest,\n WorkspaceDescriptor,\n AttachWorkspaceRequest,\n WorkspaceAttachment,\n WorkspaceStatusResult,\n WorkspaceProviderCapabilities,\n} from '@kb-labs/core-platform';\nimport type { PlatformContainer } from './container.js';\n\nexport class WorkspaceManager {\n constructor(\n private readonly platform: Pick<PlatformContainer, 'getAdapter'>\n ) {}\n\n /**\n * Check whether workspace provider is configured.\n */\n hasProvider(): boolean {\n return !!this.platform.getAdapter<IWorkspaceProvider>('workspace');\n }\n\n /**\n * Materialize a workspace.\n */\n async materializeWorkspace(\n request: MaterializeWorkspaceRequest\n ): Promise<WorkspaceDescriptor> {\n const provider = this.getProviderOrThrow();\n return provider.materialize(request);\n }\n\n /**\n * Attach workspace to environment.\n */\n async attachWorkspace(\n request: AttachWorkspaceRequest\n ): Promise<WorkspaceAttachment> {\n const provider = this.getProviderOrThrow();\n return provider.attach(request);\n }\n\n /**\n * Release workspace attachment.\n */\n async releaseWorkspace(workspaceId: string, environmentId?: string): Promise<void> {\n const provider = this.getProviderOrThrow();\n await provider.release(workspaceId, environmentId);\n }\n\n /**\n * Get workspace lifecycle status.\n */\n async getWorkspaceStatus(workspaceId: string): Promise<WorkspaceStatusResult> {\n const provider = this.getProviderOrThrow();\n return provider.getStatus(workspaceId);\n }\n\n /**\n * Read provider capabilities.\n */\n getCapabilities(): WorkspaceProviderCapabilities {\n const provider = this.getProviderOrThrow();\n return provider.getCapabilities?.() ?? {};\n }\n\n /**\n * Shutdown manager resources (reserved for future internal workers).\n */\n async shutdown(): Promise<void> {\n // No background resources yet.\n }\n\n private getProviderOrThrow(): IWorkspaceProvider {\n const provider = this.platform.getAdapter<IWorkspaceProvider>('workspace');\n if (!provider) {\n throw new Error(\n 'Workspace provider not configured. ' +\n 'Configure platform.adapters.workspace with an adapter implementing IWorkspaceProvider.'\n );\n }\n return provider;\n }\n}\n","/**\n * @module @kb-labs/core-runtime/snapshot-manager\n * Runtime manager for snapshot providers.\n */\n\nimport type {\n ISnapshotProvider,\n CaptureSnapshotRequest,\n SnapshotDescriptor,\n RestoreSnapshotRequest,\n RestoreSnapshotResult,\n SnapshotStatusResult,\n SnapshotGarbageCollectRequest,\n SnapshotGarbageCollectResult,\n SnapshotProviderCapabilities,\n} from '@kb-labs/core-platform';\nimport type { PlatformContainer } from './container.js';\n\nexport class SnapshotManager {\n constructor(\n private readonly platform: Pick<PlatformContainer, 'getAdapter'>\n ) {}\n\n /**\n * Check whether snapshot provider is configured.\n */\n hasProvider(): boolean {\n return !!this.platform.getAdapter<ISnapshotProvider>('snapshot');\n }\n\n /**\n * Capture a new snapshot.\n */\n async captureSnapshot(\n request: CaptureSnapshotRequest\n ): Promise<SnapshotDescriptor> {\n const provider = this.getProviderOrThrow();\n return provider.capture(request);\n }\n\n /**\n * Restore an existing snapshot.\n */\n async restoreSnapshot(\n request: RestoreSnapshotRequest\n ): Promise<RestoreSnapshotResult> {\n const provider = this.getProviderOrThrow();\n return provider.restore(request);\n }\n\n /**\n * Read snapshot status.\n */\n async getSnapshotStatus(snapshotId: string): Promise<SnapshotStatusResult> {\n const provider = this.getProviderOrThrow();\n return provider.getStatus(snapshotId);\n }\n\n /**\n * Delete snapshot by id.\n */\n async deleteSnapshot(snapshotId: string): Promise<void> {\n const provider = this.getProviderOrThrow();\n await provider.delete(snapshotId);\n }\n\n /**\n * Run garbage collection if provider supports it.\n */\n async garbageCollectSnapshots(\n request: SnapshotGarbageCollectRequest = {}\n ): Promise<SnapshotGarbageCollectResult> {\n const provider = this.getProviderOrThrow();\n if (!provider.garbageCollect) {\n throw new Error('Configured snapshot provider does not support garbage collection');\n }\n return provider.garbageCollect(request);\n }\n\n /**\n * Read provider capabilities.\n */\n getCapabilities(): SnapshotProviderCapabilities {\n const provider = this.getProviderOrThrow();\n return provider.getCapabilities?.() ?? {};\n }\n\n /**\n * Shutdown manager resources (reserved for future internal workers).\n */\n async shutdown(): Promise<void> {\n // No background resources yet.\n }\n\n private getProviderOrThrow(): ISnapshotProvider {\n const provider = this.platform.getAdapter<ISnapshotProvider>('snapshot');\n if (!provider) {\n throw new Error(\n 'Snapshot provider not configured. ' +\n 'Configure platform.adapters.snapshot with an adapter implementing ISnapshotProvider.'\n );\n }\n return provider;\n }\n}\n","/**\n * @module @kb-labs/core-runtime/run-executor\n * Bridge between run orchestration and execution backend.\n */\n\nimport type {\n IExecutionBackend,\n ExecutionRequest,\n ExecutionResult,\n} from '@kb-labs/core-platform';\n\n/**\n * Request for run step execution.\n */\nexport interface RunStepExecutionRequest {\n runId: string;\n stepId: string;\n environmentId?: string;\n execution: ExecutionRequest;\n}\n\n/**\n * Run executor that enriches execution metadata with run/environment context.\n */\nexport class RunExecutor {\n constructor(\n private readonly executionBackend: IExecutionBackend,\n private readonly logger: { debug(message: string, meta?: Record<string, unknown>): void }\n ) {}\n\n /**\n * Execute one run step through the shared execution backend.\n */\n async executeStep(request: RunStepExecutionRequest): Promise<ExecutionResult> {\n const { runId, stepId, environmentId, execution } = request;\n\n const descriptor =\n execution.descriptor && typeof execution.descriptor === 'object'\n ? {\n ...(execution.descriptor as Record<string, unknown>),\n run: {\n runId,\n stepId,\n environmentId,\n },\n }\n : {\n run: {\n runId,\n stepId,\n environmentId,\n },\n };\n\n this.logger.debug('RunExecutor: executing step', {\n runId,\n stepId,\n environmentId,\n executionId: execution.executionId,\n pluginRoot: execution.pluginRoot,\n handlerRef: execution.handlerRef,\n });\n\n return this.executionBackend.execute({\n ...execution,\n descriptor,\n });\n }\n}\n\n","/**\n * @module @kb-labs/core-runtime/run-orchestrator\n * Minimal run state machine orchestration skeleton.\n */\n\nimport { randomUUID } from 'node:crypto';\nimport type {\n CreateEnvironmentRequest,\n CreateRunRequest,\n RunRecord,\n RunStatus,\n} from '@kb-labs/core-platform';\nimport type { RunStepExecutionRequest } from './run-executor.js';\nimport type { EnvironmentManager } from './environment-manager.js';\nimport type { RunExecutor } from './run-executor.js';\n\n/**\n * Full-cycle start request (MVP skeleton).\n */\nexport interface StartFullCycleRequest {\n run: CreateRunRequest;\n environment: CreateEnvironmentRequest;\n firstStep?: RunStepExecutionRequest['execution'];\n}\n\n/**\n * In-memory orchestrator skeleton for phase 2 wiring.\n */\nexport class RunOrchestrator {\n private readonly runs = new Map<string, RunRecord>();\n\n constructor(\n private readonly environmentManager: EnvironmentManager,\n private readonly runExecutor: RunExecutor,\n private readonly logger: { debug(message: string, meta?: Record<string, unknown>): void }\n ) {}\n\n /**\n * Create run record in memory.\n */\n createRun(input: CreateRunRequest): RunRecord {\n const now = new Date().toISOString();\n const run: RunRecord = {\n runId: randomUUID(),\n status: 'queued',\n taskRef: input.taskRef,\n templateId: input.templateId,\n actorId: input.actorId,\n tenantId: input.tenantId,\n metadata: input.metadata,\n createdAt: now,\n updatedAt: now,\n };\n\n this.runs.set(run.runId, run);\n return run;\n }\n\n /**\n * Read run from in-memory store.\n */\n getRun(runId: string): RunRecord | undefined {\n return this.runs.get(runId);\n }\n\n /**\n * Start minimal full-cycle flow.\n * queue -> provisioning -> executing -> completed/failed\n */\n async startFullCycle(request: StartFullCycleRequest): Promise<RunRecord> {\n const run = this.createRun(request.run);\n this.transition(run.runId, 'provisioning');\n\n try {\n const environment = await this.environmentManager.createEnvironment({\n ...request.environment,\n runId: request.environment.runId ?? run.runId,\n tenantId: request.environment.tenantId ?? request.run.tenantId,\n });\n\n run.environmentId = environment.environmentId;\n this.transition(run.runId, 'executing');\n\n if (request.firstStep) {\n await this.runExecutor.executeStep({\n runId: run.runId,\n stepId: 'step-1',\n environmentId: environment.environmentId,\n execution: request.firstStep,\n });\n }\n\n this.transition(run.runId, 'completed');\n return this.getRunOrThrow(run.runId);\n } catch (error) {\n this.transition(run.runId, 'failed');\n this.logger.debug('RunOrchestrator: run failed', {\n runId: run.runId,\n error: error instanceof Error ? error.message : String(error),\n });\n\n if (run.environmentId) {\n try {\n await this.environmentManager.destroyEnvironment(\n run.environmentId,\n 'run.failed'\n );\n } catch {\n // Best-effort cleanup for skeleton implementation.\n }\n }\n\n throw error;\n }\n }\n\n private transition(runId: string, to: RunStatus): void {\n const run = this.getRunOrThrow(runId);\n const now = new Date().toISOString();\n const from = run.status;\n\n run.status = to;\n run.updatedAt = now;\n if (!run.startedAt && to !== 'queued') {\n run.startedAt = now;\n }\n if (to === 'completed' || to === 'failed' || to === 'failed_by_review' || to === 'cancelled') {\n run.completedAt = now;\n }\n\n this.logger.debug('RunOrchestrator: transition', {\n runId,\n from,\n to,\n updatedAt: now,\n });\n }\n\n private getRunOrThrow(runId: string): RunRecord {\n const run = this.runs.get(runId);\n if (!run) {\n throw new Error(`Run not found: ${runId}`);\n }\n return run;\n }\n}\n\n","/**\n * @module @kb-labs/core-runtime/wrappers/default-execution-policy-llm\n * Centralized execution defaults wrapper for ILLM.\n */\n\nimport type {\n ILLM,\n LLMOptions,\n LLMResponse,\n LLMMessage,\n LLMToolCallOptions,\n LLMToolCallResponse,\n LLMExecutionPolicy,\n LLMProtocolCapabilities,\n} from '@kb-labs/core-platform';\n\nfunction mergeExecutionPolicy(\n defaults: LLMExecutionPolicy,\n local?: LLMExecutionPolicy\n): LLMExecutionPolicy {\n if (!local) {\n return defaults;\n }\n\n return {\n ...defaults,\n ...local,\n cache: { ...defaults.cache, ...local.cache },\n stream: { ...defaults.stream, ...local.stream },\n };\n}\n\nfunction withExecutionDefaults(\n options: LLMOptions | undefined,\n defaults: LLMExecutionPolicy\n): LLMOptions {\n return {\n ...(options ?? {}),\n execution: mergeExecutionPolicy(defaults, options?.execution),\n };\n}\n\nexport class DefaultExecutionPolicyLLM implements ILLM {\n constructor(\n private readonly realLLM: ILLM,\n private readonly defaults: LLMExecutionPolicy\n ) {}\n\n async complete(prompt: string, options?: LLMOptions): Promise<LLMResponse> {\n return this.realLLM.complete(prompt, withExecutionDefaults(options, this.defaults));\n }\n\n stream(prompt: string, options?: LLMOptions): AsyncIterable<string> {\n return this.realLLM.stream(prompt, withExecutionDefaults(options, this.defaults));\n }\n\n async getProtocolCapabilities(): Promise<LLMProtocolCapabilities> {\n if (!this.realLLM.getProtocolCapabilities) {\n return {\n cache: { supported: false },\n stream: { supported: true },\n };\n }\n return this.realLLM.getProtocolCapabilities();\n }\n\n async chatWithTools(\n messages: LLMMessage[],\n options: LLMToolCallOptions\n ): Promise<LLMToolCallResponse> {\n if (!this.realLLM.chatWithTools) {\n throw new Error('Underlying LLM does not support chatWithTools');\n }\n return this.realLLM.chatWithTools(\n messages,\n withExecutionDefaults(options, this.defaults) as LLMToolCallOptions\n );\n }\n}\n\nexport function createDefaultExecutionPolicyLLM(\n llm: ILLM,\n defaults?: LLMExecutionPolicy\n): ILLM {\n if (!defaults || Object.keys(defaults).length === 0) {\n return llm;\n }\n\n return new DefaultExecutionPolicyLLM(llm, defaults);\n}\n\n","/**\n * @module @kb-labs/core-runtime/core/resource-manager\n * In-memory resource manager with quota enforcement.\n */\n\nimport type {\n IResourceManager,\n ResourceType,\n ResourceSlot,\n ResourceAvailability,\n TenantQuotas,\n ILogger,\n ICache,\n} from '@kb-labs/core-platform';\n\n/**\n * Default quotas for tenants without explicit configuration.\n */\nconst DEFAULT_QUOTAS: TenantQuotas = {\n maxConcurrentWorkflows: 5,\n maxConcurrentJobs: 10,\n maxQueuedJobs: 100,\n apiRequestsPerMinute: 1000,\n llmTokensPerDay: 100000,\n storageBytes: 1024 * 1024 * 1024, // 1GB\n};\n\n/**\n * Resource limits per type mapped to quota fields.\n */\nconst RESOURCE_QUOTA_MAP: Record<ResourceType, keyof TenantQuotas> = {\n workflow: 'maxConcurrentWorkflows',\n job: 'maxConcurrentJobs',\n llm: 'apiRequestsPerMinute',\n embedding: 'apiRequestsPerMinute',\n api: 'apiRequestsPerMinute',\n};\n\nexport interface ResourceManagerConfig {\n /** Default quotas for new tenants */\n defaultQuotas?: Partial<TenantQuotas>;\n /** Slot expiration check interval in ms (default: 30000) */\n expirationCheckInterval?: number;\n}\n\n/**\n * In-memory resource manager with quota enforcement.\n * Tracks resource slots per tenant and enforces limits.\n */\nexport class ResourceManager implements IResourceManager {\n private slots = new Map<string, ResourceSlot>();\n private tenantSlots = new Map<string, Set<string>>();\n private quotas = new Map<string, TenantQuotas>();\n private defaultQuotas: TenantQuotas;\n private idCounter = 0;\n private expirationTimer?: ReturnType<typeof setInterval>;\n\n constructor(\n private cache: ICache,\n private logger: ILogger,\n config: ResourceManagerConfig = {}\n ) {\n this.defaultQuotas = { ...DEFAULT_QUOTAS, ...config.defaultQuotas };\n\n // Start expiration checker\n const interval = config.expirationCheckInterval ?? 30000;\n this.expirationTimer = setInterval(() => this.cleanupExpiredSlots(), interval);\n }\n\n /**\n * Acquire a resource slot for a tenant.\n * Returns null if quota exceeded.\n *\n * @param resource - Type of resource to acquire\n * @param tenantId - Tenant identifier\n * @param timeout - Optional slot expiration timeout in ms\n * @returns Resource slot if available, null if quota exceeded\n */\n async acquireSlot(\n resource: ResourceType,\n tenantId: string,\n timeout?: number\n ): Promise<ResourceSlot | null> {\n const quota = await this.getQuota(tenantId);\n const current = this.getResourceCount(resource, tenantId);\n const max = this.getMaxForResource(quota, resource);\n\n if (current >= max) {\n this.logger.warn('Resource quota exceeded', {\n resource,\n tenantId,\n current,\n max,\n });\n return null;\n }\n\n const slot: ResourceSlot = {\n id: `slot-${++this.idCounter}-${Date.now()}`,\n resource,\n tenantId,\n acquiredAt: new Date(),\n expiresAt: timeout ? new Date(Date.now() + timeout) : undefined,\n };\n\n // Store slot\n this.slots.set(slot.id, slot);\n\n // Track by tenant\n let tenantSet = this.tenantSlots.get(tenantId);\n if (!tenantSet) {\n tenantSet = new Set();\n this.tenantSlots.set(tenantId, tenantSet);\n }\n tenantSet.add(slot.id);\n\n this.logger.debug('Resource slot acquired', {\n slotId: slot.id,\n resource,\n tenantId,\n expiresAt: slot.expiresAt,\n });\n\n return slot;\n }\n\n /**\n * Release a previously acquired resource slot.\n * Frees up quota for the tenant.\n *\n * @param slot - Slot to release\n */\n async releaseSlot(slot: ResourceSlot): Promise<void> {\n if (!this.slots.has(slot.id)) {\n this.logger.warn('Attempted to release unknown slot', { slotId: slot.id });\n return;\n }\n\n this.slots.delete(slot.id);\n\n const tenantSet = this.tenantSlots.get(slot.tenantId);\n if (tenantSet) {\n tenantSet.delete(slot.id);\n if (tenantSet.size === 0) {\n this.tenantSlots.delete(slot.tenantId);\n }\n }\n\n this.logger.debug('Resource slot released', {\n slotId: slot.id,\n resource: slot.resource,\n tenantId: slot.tenantId,\n });\n }\n\n /**\n * Get resource availability statistics.\n * If tenantId provided, returns tenant-specific stats.\n * Otherwise, returns global platform stats.\n *\n * @param resource - Type of resource\n * @param tenantId - Optional tenant filter\n * @returns Resource availability stats\n */\n async getAvailability(\n resource: ResourceType,\n tenantId?: string\n ): Promise<ResourceAvailability> {\n if (tenantId) {\n const quota = await this.getQuota(tenantId);\n const max = this.getMaxForResource(quota, resource);\n const used = this.getResourceCount(resource, tenantId);\n\n return {\n resource,\n total: max,\n used,\n available: Math.max(0, max - used),\n queueLength: 0, // In-memory implementation doesn't queue\n };\n }\n\n // Global availability (all tenants)\n let totalUsed = 0;\n for (const slot of this.slots.values()) {\n if (slot.resource === resource) {\n totalUsed++;\n }\n }\n\n return {\n resource,\n total: Number.MAX_SAFE_INTEGER,\n used: totalUsed,\n available: Number.MAX_SAFE_INTEGER,\n queueLength: 0,\n };\n }\n\n /**\n * Set custom quotas for a tenant.\n * Merges with default quotas and persists to cache.\n *\n * @param tenantId - Tenant identifier\n * @param quotas - Partial quotas to update\n */\n async setQuota(tenantId: string, quotas: Partial<TenantQuotas>): Promise<void> {\n const existing = this.quotas.get(tenantId) ?? { ...this.defaultQuotas };\n const updated = { ...existing, ...quotas };\n this.quotas.set(tenantId, updated);\n\n // Optionally persist to cache for cross-process consistency\n await this.cache.set(`quota:${tenantId}`, updated);\n\n this.logger.info('Tenant quota updated', { tenantId, quotas: updated });\n }\n\n /**\n * Get quota configuration for a tenant.\n * Returns defaults if no custom quotas set.\n *\n * @param tenantId - Tenant identifier\n * @returns Tenant quota configuration\n */\n async getQuota(tenantId: string): Promise<TenantQuotas> {\n // Check local cache first\n const cached = this.quotas.get(tenantId);\n if (cached) {return cached;}\n\n // Try to load from cache\n const stored = await this.cache.get<TenantQuotas>(`quota:${tenantId}`);\n if (stored) {\n this.quotas.set(tenantId, stored);\n return stored;\n }\n\n // Return defaults\n return { ...this.defaultQuotas };\n }\n\n /**\n * Get count of active slots for a resource type and tenant.\n */\n private getResourceCount(resource: ResourceType, tenantId: string): number {\n const tenantSet = this.tenantSlots.get(tenantId);\n if (!tenantSet) {return 0;}\n\n let count = 0;\n for (const slotId of tenantSet) {\n const slot = this.slots.get(slotId);\n if (slot?.resource === resource) {\n count++;\n }\n }\n return count;\n }\n\n /**\n * Get max allowed for a resource type from quotas.\n */\n private getMaxForResource(quota: TenantQuotas, resource: ResourceType): number {\n const field = RESOURCE_QUOTA_MAP[resource];\n return quota[field] as number;\n }\n\n /**\n * Clean up expired slots.\n */\n private cleanupExpiredSlots(): void {\n const now = Date.now();\n const expired: ResourceSlot[] = [];\n\n for (const slot of this.slots.values()) {\n if (slot.expiresAt && slot.expiresAt.getTime() < now) {\n expired.push(slot);\n }\n }\n\n for (const slot of expired) {\n this.releaseSlot(slot);\n this.logger.debug('Expired slot cleaned up', { slotId: slot.id });\n }\n }\n\n /**\n * Stop the expiration timer (for cleanup).\n */\n dispose(): void {\n if (this.expirationTimer) {\n clearInterval(this.expirationTimer);\n this.expirationTimer = undefined;\n }\n }\n\n /**\n * Get current stats (for monitoring).\n */\n getStats(): {\n totalSlots: number;\n slotsByResource: Record<ResourceType, number>;\n tenantCount: number;\n } {\n const slotsByResource: Record<ResourceType, number> = {\n workflow: 0,\n job: 0,\n llm: 0,\n embedding: 0,\n api: 0,\n };\n\n for (const slot of this.slots.values()) {\n slotsByResource[slot.resource]++;\n }\n\n return {\n totalSlots: this.slots.size,\n slotsByResource,\n tenantCount: this.tenantSlots.size,\n };\n }\n}\n","/**\n * @module @kb-labs/core-runtime/core/job-scheduler\n * In-memory job scheduler with queue and execution.\n */\n\nimport type {\n IJobScheduler,\n JobDefinition,\n JobHandle,\n JobFilter,\n CronExpression,\n IResourceManager,\n IEventBus,\n ILogger,\n} from '@kb-labs/core-platform';\n\nexport interface JobSchedulerConfig {\n /** Maximum concurrent jobs globally (default: 10) */\n maxConcurrent?: number;\n /** Queue poll interval in ms (default: 1000) */\n pollInterval?: number;\n /** Default job timeout in ms (default: 300000 = 5min) */\n defaultTimeout?: number;\n}\n\n/**\n * Job handler function type.\n */\nexport type JobHandler = (payload: unknown) => Promise<unknown>;\n\n/**\n * Internal job representation with additional fields.\n */\ninterface InternalJob extends JobHandle {\n definition: JobDefinition;\n handler?: JobHandler;\n timeoutId?: ReturnType<typeof setTimeout>;\n}\n\n/**\n * In-memory job scheduler with queue processing.\n */\nexport class JobScheduler implements IJobScheduler {\n private jobs = new Map<string, InternalJob>();\n private queue: string[] = [];\n private handlers = new Map<string, JobHandler>();\n private running = new Set<string>();\n private idCounter = 0;\n private pollTimer?: ReturnType<typeof setInterval>;\n private readonly config: Required<JobSchedulerConfig>;\n\n constructor(\n private resources: IResourceManager,\n private events: IEventBus,\n private logger: ILogger,\n config: JobSchedulerConfig = {}\n ) {\n this.config = {\n maxConcurrent: config.maxConcurrent ?? 10,\n pollInterval: config.pollInterval ?? 1000,\n defaultTimeout: config.defaultTimeout ?? 300000,\n };\n\n // Start queue processor\n this.pollTimer = setInterval(() => this.processQueue(), this.config.pollInterval);\n }\n\n /**\n * Register a job handler for a job type.\n */\n registerHandler(type: string, handler: JobHandler): void {\n this.handlers.set(type, handler);\n this.logger.debug('Job handler registered', { type });\n }\n\n /**\n * Unregister a job handler.\n */\n unregisterHandler(type: string): void {\n this.handlers.delete(type);\n }\n\n async submit(job: JobDefinition): Promise<JobHandle> {\n const id = job.idempotencyKey ?? `job-${++this.idCounter}-${Date.now()}`;\n\n // Check for duplicate by idempotency key\n if (job.idempotencyKey && this.jobs.has(id)) {\n const existing = this.jobs.get(id)!;\n this.logger.debug('Duplicate job submission', { jobId: id, status: existing.status });\n return this.toHandle(existing);\n }\n\n const tenantId = job.tenantId ?? 'default';\n const now = new Date();\n\n const internalJob: InternalJob = {\n id,\n type: job.type,\n tenantId,\n status: 'pending',\n createdAt: now,\n definition: job,\n };\n\n this.jobs.set(id, internalJob);\n\n // If runAt is in the future, schedule for later\n if (job.runAt && job.runAt.getTime() > now.getTime()) {\n const delay = job.runAt.getTime() - now.getTime();\n setTimeout(() => this.enqueue(id), delay);\n this.logger.debug('Job scheduled for later', { jobId: id, runAt: job.runAt });\n } else {\n this.enqueue(id);\n }\n\n await this.events.publish('job.submitted', { jobId: id, type: job.type, tenantId });\n\n return this.toHandle(internalJob);\n }\n\n async schedule(\n job: JobDefinition,\n schedule: CronExpression | Date\n ): Promise<JobHandle> {\n // For Date, use runAt\n if (schedule instanceof Date) {\n return this.submit({ ...job, runAt: schedule });\n }\n\n // For cron expression, this should be handled by CronManager\n // Here we just submit immediately with a note\n this.logger.warn('Cron scheduling should use CronManager', {\n schedule,\n jobType: job.type,\n });\n return this.submit(job);\n }\n\n async cancel(jobId: string): Promise<boolean> {\n const job = this.jobs.get(jobId);\n if (!job) {return false;}\n\n if (job.status === 'completed' || job.status === 'failed') {\n return false; // Can't cancel finished jobs\n }\n\n // Clear timeout if running\n if (job.timeoutId) {\n clearTimeout(job.timeoutId);\n }\n\n job.status = 'cancelled';\n job.completedAt = new Date();\n\n // Remove from queue if pending\n const queueIndex = this.queue.indexOf(jobId);\n if (queueIndex !== -1) {\n this.queue.splice(queueIndex, 1);\n }\n\n // Remove from running\n this.running.delete(jobId);\n\n await this.events.publish('job.cancelled', { jobId, type: job.type });\n this.logger.info('Job cancelled', { jobId });\n\n return true;\n }\n\n async getStatus(jobId: string): Promise<JobHandle | null> {\n const job = this.jobs.get(jobId);\n return job ? this.toHandle(job) : 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 // Sort by creation time (newest first)\n results.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());\n\n // Apply pagination\n const offset = filter?.offset ?? 0;\n const limit = filter?.limit ?? 100;\n results = results.slice(offset, offset + limit);\n\n return results.map((j) => this.toHandle(j));\n }\n\n /**\n * Add job to queue.\n */\n private enqueue(jobId: string): void {\n const job = this.jobs.get(jobId);\n if (!job || job.status !== 'pending') {return;}\n\n // Insert by priority (higher priority = earlier in queue)\n const priority = job.definition.priority ?? 50;\n let insertIndex = this.queue.length;\n\n for (let i = 0; i < this.queue.length; i++) {\n const queuedJob = this.jobs.get(this.queue[i]!);\n const queuedPriority = queuedJob?.definition.priority ?? 50;\n if (priority > queuedPriority) {\n insertIndex = i;\n break;\n }\n }\n\n this.queue.splice(insertIndex, 0, jobId);\n this.logger.debug('Job enqueued', { jobId, queuePosition: insertIndex });\n }\n\n /**\n * Process queued jobs.\n */\n private async processQueue(): Promise<void> {\n // Check if we can run more jobs\n if (this.running.size >= this.config.maxConcurrent) {\n return;\n }\n\n // Get next job from queue\n while (this.queue.length > 0 && this.running.size < this.config.maxConcurrent) {\n const jobId = this.queue.shift();\n if (!jobId) {break;}\n\n const job = this.jobs.get(jobId);\n if (!job || job.status !== 'pending') {continue;}\n\n // Try to acquire resource slot\n const slot = await this.resources.acquireSlot('job', job.tenantId, this.config.defaultTimeout);\n if (!slot) {\n // Put back in queue\n this.queue.unshift(jobId);\n break;\n }\n\n // Start job execution\n this.executeJob(job, slot.id).catch((err) => {\n this.logger.error('Job execution error', err as Error, { jobId: job.id });\n });\n }\n }\n\n /**\n * Execute a single job.\n */\n private async executeJob(job: InternalJob, slotId: string): Promise<void> {\n job.status = 'running';\n job.startedAt = new Date();\n this.running.add(job.id);\n\n await this.events.publish('job.started', { jobId: job.id, type: job.type });\n this.logger.info('Job started', { jobId: job.id, type: job.type });\n\n // Set timeout\n const timeout = job.definition.timeout ?? this.config.defaultTimeout;\n job.timeoutId = setTimeout(() => {\n if (job.status === 'running') {\n job.status = 'failed';\n job.error = 'Job timeout';\n job.completedAt = new Date();\n this.running.delete(job.id);\n this.events.publish('job.failed', { jobId: job.id, error: 'timeout' });\n this.logger.warn('Job timed out', { jobId: job.id });\n }\n }, timeout);\n\n try {\n // Get handler\n const handler = this.handlers.get(job.type);\n if (!handler) {\n throw new Error(`No handler registered for job type: ${job.type}`);\n }\n\n // Execute\n const result = await handler(job.definition.payload);\n\n // Success\n if (job.timeoutId) {clearTimeout(job.timeoutId);}\n\n job.status = 'completed';\n job.result = result;\n job.completedAt = new Date();\n\n await this.events.publish('job.completed', {\n jobId: job.id,\n type: job.type,\n result,\n });\n this.logger.info('Job completed', { jobId: job.id, type: job.type });\n } catch (error) {\n if (job.timeoutId) {clearTimeout(job.timeoutId);}\n\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n // Check if should retry\n const maxRetries = job.definition.maxRetries ?? 3;\n const currentRetries = (job as unknown as { _retryCount?: number })._retryCount ?? 0;\n\n if (currentRetries < maxRetries) {\n // Retry\n (job as unknown as { _retryCount: number })._retryCount = currentRetries + 1;\n job.status = 'pending';\n job.startedAt = undefined;\n this.enqueue(job.id);\n\n this.logger.warn('Job failed, retrying', {\n jobId: job.id,\n attempt: currentRetries + 1,\n maxRetries,\n error: errorMessage,\n });\n } else {\n // Final failure\n job.status = 'failed';\n job.error = errorMessage;\n job.completedAt = new Date();\n\n await this.events.publish('job.failed', {\n jobId: job.id,\n type: job.type,\n error: errorMessage,\n });\n this.logger.error('Job failed', error as Error, { jobId: job.id });\n }\n } finally {\n this.running.delete(job.id);\n\n // Release resource slot\n await this.resources.releaseSlot({\n id: slotId,\n resource: 'job',\n tenantId: job.tenantId,\n acquiredAt: job.startedAt ?? new Date(),\n });\n }\n }\n\n /**\n * Convert internal job to public handle.\n */\n private toHandle(job: InternalJob): JobHandle {\n return {\n id: job.id,\n type: job.type,\n tenantId: job.tenantId,\n status: job.status,\n progress: job.progress,\n result: job.result,\n error: job.error,\n createdAt: job.createdAt,\n startedAt: job.startedAt,\n completedAt: job.completedAt,\n };\n }\n\n /**\n * Stop the scheduler (for cleanup).\n */\n dispose(): void {\n if (this.pollTimer) {\n clearInterval(this.pollTimer);\n this.pollTimer = undefined;\n }\n }\n\n /**\n * Get scheduler stats (for monitoring).\n */\n getStats(): {\n totalJobs: number;\n queueLength: number;\n runningCount: number;\n byStatus: Record<string, number>;\n } {\n const byStatus: Record<string, number> = {};\n\n for (const job of this.jobs.values()) {\n byStatus[job.status] = (byStatus[job.status] ?? 0) + 1;\n }\n\n return {\n totalJobs: this.jobs.size,\n queueLength: this.queue.length,\n runningCount: this.running.size,\n byStatus,\n };\n }\n}\n","/**\n * @module @kb-labs/core-runtime/core/cron-manager\n * Cron job manager with scheduling support.\n */\n\nimport type {\n ICronManager,\n CronJob,\n CronHandler,\n CronContext,\n ILogger,\n} from '@kb-labs/core-platform';\nimport type { CronExpression } from '@kb-labs/core-platform';\n\n/**\n * Internal cron job entry.\n */\ninterface CronEntry {\n id: string;\n schedule: CronExpression;\n handler: CronHandler;\n status: 'active' | 'paused';\n lastRun?: Date;\n nextRun?: Date;\n runCount: number;\n timerId?: ReturnType<typeof setTimeout>;\n}\n\n/**\n * Parse simple cron expressions.\n * Supports: @hourly, @daily, @weekly, @monthly, @yearly\n * And basic cron: \"* * * * *\" (minute hour day month weekday)\n */\nfunction parseNextRun(schedule: CronExpression, from: Date = new Date()): Date {\n const next = new Date(from);\n\n // Handle shortcuts\n switch (schedule) {\n case '@hourly':\n next.setHours(next.getHours() + 1);\n next.setMinutes(0);\n next.setSeconds(0);\n next.setMilliseconds(0);\n return next;\n\n case '@daily':\n case '@midnight':\n next.setDate(next.getDate() + 1);\n next.setHours(0);\n next.setMinutes(0);\n next.setSeconds(0);\n next.setMilliseconds(0);\n return next;\n\n case '@weekly':\n next.setDate(next.getDate() + (7 - next.getDay()));\n next.setHours(0);\n next.setMinutes(0);\n next.setSeconds(0);\n next.setMilliseconds(0);\n return next;\n\n case '@monthly':\n next.setMonth(next.getMonth() + 1);\n next.setDate(1);\n next.setHours(0);\n next.setMinutes(0);\n next.setSeconds(0);\n next.setMilliseconds(0);\n return next;\n\n case '@yearly':\n case '@annually':\n next.setFullYear(next.getFullYear() + 1);\n next.setMonth(0);\n next.setDate(1);\n next.setHours(0);\n next.setMinutes(0);\n next.setSeconds(0);\n next.setMilliseconds(0);\n return next;\n }\n\n // Parse standard cron expression (simplified)\n const parts = schedule.split(' ');\n if (parts.length === 5) {\n const [minute, hour] = parts;\n\n // Handle \"*/N\" interval syntax\n if (minute?.startsWith('*/')) {\n const interval = parseInt(minute.substring(2), 10);\n if (!isNaN(interval)) {\n next.setMinutes(next.getMinutes() + interval);\n next.setSeconds(0);\n next.setMilliseconds(0);\n return next;\n }\n }\n\n // Simple case: specific minute and hour\n const targetMinute = minute === '*' ? next.getMinutes() : parseInt(minute ?? '0', 10);\n const targetHour = hour === '*' ? next.getHours() : parseInt(hour ?? '0', 10);\n\n if (!isNaN(targetMinute) && !isNaN(targetHour)) {\n next.setHours(targetHour);\n next.setMinutes(targetMinute);\n next.setSeconds(0);\n next.setMilliseconds(0);\n\n // If already passed, move to next day\n if (next <= from) {\n next.setDate(next.getDate() + 1);\n }\n return next;\n }\n }\n\n // Fallback: 1 hour from now\n next.setHours(next.getHours() + 1);\n return next;\n}\n\n/**\n * In-memory cron manager with scheduling.\n */\nexport class CronManager implements ICronManager {\n private jobs = new Map<string, CronEntry>();\n\n constructor(private logger: ILogger) {}\n\n register(id: string, schedule: CronExpression, handler: CronHandler): void {\n // Unregister if exists\n if (this.jobs.has(id)) {\n this.unregister(id);\n }\n\n const nextRun = parseNextRun(schedule);\n const entry: CronEntry = {\n id,\n schedule,\n handler,\n status: 'active',\n nextRun,\n runCount: 0,\n };\n\n this.jobs.set(id, entry);\n this.scheduleNext(entry);\n\n this.logger.info('Cron job registered', {\n id,\n schedule,\n nextRun: nextRun.toISOString(),\n });\n }\n\n unregister(id: string): void {\n const entry = this.jobs.get(id);\n if (!entry) {return;}\n\n if (entry.timerId) {\n clearTimeout(entry.timerId);\n }\n\n this.jobs.delete(id);\n this.logger.info('Cron job unregistered', { id });\n }\n\n list(): CronJob[] {\n return Array.from(this.jobs.values()).map((entry) => ({\n id: entry.id,\n schedule: entry.schedule,\n status: entry.status,\n lastRun: entry.lastRun,\n nextRun: entry.nextRun,\n runCount: entry.runCount,\n }));\n }\n\n async trigger(id: string): Promise<void> {\n const entry = this.jobs.get(id);\n if (!entry) {\n throw new Error(`Cron job not found: ${id}`);\n }\n\n await this.executeJob(entry);\n }\n\n pause(id: string): void {\n const entry = this.jobs.get(id);\n if (!entry) {return;}\n\n if (entry.timerId) {\n clearTimeout(entry.timerId);\n entry.timerId = undefined;\n }\n\n entry.status = 'paused';\n this.logger.info('Cron job paused', { id });\n }\n\n resume(id: string): void {\n const entry = this.jobs.get(id);\n if (!entry || entry.status !== 'paused') {return;}\n\n entry.status = 'active';\n entry.nextRun = parseNextRun(entry.schedule);\n this.scheduleNext(entry);\n\n this.logger.info('Cron job resumed', { id, nextRun: entry.nextRun });\n }\n\n /**\n * Schedule the next execution of a cron job.\n */\n private scheduleNext(entry: CronEntry): void {\n if (entry.status !== 'active' || !entry.nextRun) {return;}\n\n const delay = Math.max(0, entry.nextRun.getTime() - Date.now());\n\n entry.timerId = setTimeout(async () => {\n if (entry.status !== 'active') {return;}\n\n try {\n await this.executeJob(entry);\n } catch (error) {\n this.logger.error('Cron job execution failed', error as Error, {\n id: entry.id,\n });\n }\n\n // Schedule next run\n entry.nextRun = parseNextRun(entry.schedule);\n this.scheduleNext(entry);\n }, delay);\n }\n\n /**\n * Execute a cron job.\n */\n private async executeJob(entry: CronEntry): Promise<void> {\n const now = new Date();\n\n const context: CronContext = {\n jobId: entry.id,\n scheduledAt: entry.nextRun ?? now,\n executedAt: now,\n runCount: entry.runCount + 1,\n };\n\n this.logger.debug('Executing cron job', { id: entry.id, runCount: context.runCount });\n\n await entry.handler(context);\n\n entry.lastRun = now;\n entry.runCount++;\n\n this.logger.debug('Cron job executed', {\n id: entry.id,\n runCount: entry.runCount,\n });\n }\n\n /**\n * Stop all cron jobs (for cleanup).\n */\n dispose(): void {\n for (const entry of this.jobs.values()) {\n if (entry.timerId) {\n clearTimeout(entry.timerId);\n }\n }\n this.jobs.clear();\n }\n\n /**\n * Get stats (for monitoring).\n */\n getStats(): {\n totalJobs: number;\n activeJobs: number;\n pausedJobs: number;\n } {\n let active = 0;\n let paused = 0;\n\n for (const entry of this.jobs.values()) {\n if (entry.status === 'active') {active++;}\n else {paused++;}\n }\n\n return {\n totalJobs: this.jobs.size,\n activeJobs: active,\n pausedJobs: paused,\n };\n }\n}\n","/**\n * @module @kb-labs/core-runtime/core/workflow-engine\n * In-memory workflow engine with step execution.\n */\n\nimport type {\n IWorkflowEngine,\n WorkflowOptions,\n WorkflowRun,\n WorkflowStepRun,\n WorkflowFilter,\n RetryPolicy,\n IResourceManager,\n IStorage,\n IEventBus,\n ILogger,\n} from '@kb-labs/core-platform';\n\nexport interface WorkflowEngineConfig {\n /** Maximum concurrent workflows globally (default: 5) */\n maxConcurrent?: number;\n /** Default workflow timeout in ms (default: 300000 = 5min) */\n defaultTimeout?: number;\n}\n\n/**\n * Workflow definition (registered workflows).\n */\nexport interface WorkflowDefinition {\n id: string;\n name: string;\n steps: WorkflowStepDefinition[];\n}\n\n/**\n * Workflow step definition.\n */\nexport interface WorkflowStepDefinition {\n id: string;\n name: string;\n handler: (input: unknown, context: WorkflowStepContext) => Promise<unknown>;\n continueOnError?: boolean;\n timeout?: number;\n}\n\n/**\n * Context passed to step handlers.\n */\nexport interface WorkflowStepContext {\n workflowId: string;\n runId: string;\n stepId: string;\n tenantId: string;\n previousStepOutput?: unknown;\n}\n\n/**\n * Internal workflow run representation.\n */\ninterface InternalWorkflowRun extends WorkflowRun {\n definition: WorkflowDefinition;\n options: WorkflowOptions;\n timeoutId?: ReturnType<typeof setTimeout>;\n}\n\n/**\n * In-memory workflow engine.\n */\nexport class WorkflowEngine implements IWorkflowEngine {\n private runs = new Map<string, InternalWorkflowRun>();\n private definitions = new Map<string, WorkflowDefinition>();\n private running = new Set<string>();\n private idCounter = 0;\n private readonly config: Required<WorkflowEngineConfig>;\n\n constructor(\n private resources: IResourceManager,\n private storage: IStorage,\n private events: IEventBus,\n private logger: ILogger,\n config: WorkflowEngineConfig = {}\n ) {\n this.config = {\n maxConcurrent: config.maxConcurrent ?? 5,\n defaultTimeout: config.defaultTimeout ?? 300000,\n };\n }\n\n /**\n * Register a workflow definition.\n */\n registerWorkflow(definition: WorkflowDefinition): void {\n this.definitions.set(definition.id, definition);\n this.logger.info('Workflow registered', {\n workflowId: definition.id,\n steps: definition.steps.length,\n });\n }\n\n /**\n * Unregister a workflow definition.\n */\n unregisterWorkflow(workflowId: string): void {\n this.definitions.delete(workflowId);\n }\n\n async execute(\n workflowId: string,\n input: unknown,\n options?: WorkflowOptions\n ): Promise<WorkflowRun> {\n const definition = this.definitions.get(workflowId);\n if (!definition) {\n throw new Error(`Workflow not found: ${workflowId}`);\n }\n\n const tenantId = options?.tenantId ?? 'default';\n const timeout = options?.timeout ?? this.config.defaultTimeout;\n\n // Try to acquire resource slot\n const slot = await this.resources.acquireSlot('workflow', tenantId, timeout);\n if (!slot) {\n throw new Error(`Workflow quota exceeded for tenant: ${tenantId}`);\n }\n\n const runId = `run-${++this.idCounter}-${Date.now()}`;\n const now = new Date();\n\n const run: InternalWorkflowRun = {\n id: runId,\n workflowId,\n tenantId,\n status: 'running',\n input,\n startedAt: now,\n steps: [],\n definition,\n options: options ?? {},\n };\n\n this.runs.set(runId, run);\n this.running.add(runId);\n\n // Set timeout\n run.timeoutId = setTimeout(() => {\n if (run.status === 'running') {\n this.failRun(run, 'Workflow timeout');\n }\n }, timeout);\n\n await this.events.publish('workflow.started', {\n runId,\n workflowId,\n tenantId,\n });\n\n this.logger.info('Workflow started', { runId, workflowId, tenantId });\n\n // Execute steps\n try {\n let previousOutput: unknown = input;\n\n for (const stepDef of definition.steps) {\n if (run.status !== 'running') {break;}\n\n const stepRun = await this.executeStep(run, stepDef, previousOutput);\n run.steps.push(stepRun);\n\n if (stepRun.status === 'failed' && !stepDef.continueOnError) {\n throw new Error(`Step ${stepDef.id} failed: ${stepRun.error}`);\n }\n\n previousOutput = stepRun.output;\n }\n\n // Success\n if (run.timeoutId) {clearTimeout(run.timeoutId);}\n\n run.status = 'completed';\n run.output = previousOutput;\n run.completedAt = new Date();\n\n await this.events.publish('workflow.completed', {\n runId,\n workflowId,\n output: run.output,\n });\n\n this.logger.info('Workflow completed', { runId, workflowId });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.failRun(run, errorMessage);\n\n // Handle retry policy\n if (options?.retryPolicy) {\n await this.scheduleRetry(run, options.retryPolicy);\n }\n } finally {\n this.running.delete(runId);\n\n // Release resource slot\n await this.resources.releaseSlot(slot);\n\n // Persist run to storage\n await this.persistRun(run);\n }\n\n return this.toPublicRun(run);\n }\n\n async getStatus(runId: string): Promise<WorkflowRun | null> {\n // Check memory first\n const run = this.runs.get(runId);\n if (run) {return this.toPublicRun(run);}\n\n // Try to load from storage\n const stored = await this.storage.read(`workflows/${runId}.json`);\n if (stored) {\n try {\n return JSON.parse(stored.toString()) as WorkflowRun;\n } catch {\n return null;\n }\n }\n\n return null;\n }\n\n async cancel(runId: string): Promise<void> {\n const run = this.runs.get(runId);\n if (!run) {\n throw new Error(`Workflow run not found: ${runId}`);\n }\n\n if (run.status !== 'running' && run.status !== 'pending') {\n throw new Error(`Cannot cancel workflow in status: ${run.status}`);\n }\n\n if (run.timeoutId) {clearTimeout(run.timeoutId);}\n\n run.status = 'cancelled';\n run.completedAt = new Date();\n\n this.running.delete(runId);\n\n await this.events.publish('workflow.cancelled', {\n runId,\n workflowId: run.workflowId,\n });\n\n this.logger.info('Workflow cancelled', { runId });\n }\n\n async retry(runId: string, fromStep?: string): Promise<WorkflowRun> {\n const originalRun = this.runs.get(runId);\n if (!originalRun) {\n throw new Error(`Workflow run not found: ${runId}`);\n }\n\n // Find step to retry from\n let input = originalRun.input;\n const definition = originalRun.definition;\n\n if (fromStep) {\n const stepIndex = definition.steps.findIndex((s) => s.id === fromStep);\n if (stepIndex === -1) {\n throw new Error(`Step not found: ${fromStep}`);\n }\n\n // Use previous step's output as input\n if (stepIndex > 0 && originalRun.steps[stepIndex - 1]) {\n input = originalRun.steps[stepIndex - 1]!.output;\n }\n }\n\n this.logger.info('Retrying workflow', {\n originalRunId: runId,\n fromStep,\n });\n\n const tags: Record<string, string> = {\n ...originalRun.options.tags,\n retryOf: runId,\n };\n if (fromStep) {\n tags.retryFromStep = fromStep;\n }\n\n return this.execute(originalRun.workflowId, input, {\n ...originalRun.options,\n tags,\n });\n }\n\n async list(filter?: WorkflowFilter): Promise<WorkflowRun[]> {\n let results = Array.from(this.runs.values());\n\n if (filter?.workflowId) {\n results = results.filter((r) => r.workflowId === filter.workflowId);\n }\n if (filter?.tenantId) {\n results = results.filter((r) => r.tenantId === filter.tenantId);\n }\n if (filter?.status) {\n results = results.filter((r) => r.status === filter.status);\n }\n\n // Sort by start time (newest first)\n results.sort((a, b) => {\n const aTime = a.startedAt?.getTime() ?? 0;\n const bTime = b.startedAt?.getTime() ?? 0;\n return bTime - aTime;\n });\n\n // Apply pagination\n const offset = filter?.offset ?? 0;\n const limit = filter?.limit ?? 100;\n results = results.slice(offset, offset + limit);\n\n return results.map((r) => this.toPublicRun(r));\n }\n\n /**\n * Execute a single workflow step.\n */\n private async executeStep(\n run: InternalWorkflowRun,\n stepDef: WorkflowStepDefinition,\n input: unknown\n ): Promise<WorkflowStepRun> {\n const stepRun: WorkflowStepRun = {\n id: stepDef.id,\n name: stepDef.name,\n status: 'running',\n input,\n startedAt: new Date(),\n };\n\n this.logger.debug('Executing step', {\n runId: run.id,\n stepId: stepDef.id,\n });\n\n try {\n const context: WorkflowStepContext = {\n workflowId: run.workflowId,\n runId: run.id,\n stepId: stepDef.id,\n tenantId: run.tenantId,\n previousStepOutput: input,\n };\n\n // Execute with optional step timeout\n const timeout = stepDef.timeout ?? 60000;\n const result = await Promise.race([\n stepDef.handler(input, context),\n new Promise((_, reject) => {\n setTimeout(() => reject(new Error('Step timeout')), timeout);\n }),\n ]);\n\n stepRun.status = 'completed';\n stepRun.output = result;\n stepRun.completedAt = new Date();\n\n this.logger.debug('Step completed', {\n runId: run.id,\n stepId: stepDef.id,\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n stepRun.status = 'failed';\n stepRun.error = errorMessage;\n stepRun.completedAt = new Date();\n\n this.logger.warn('Step failed', {\n runId: run.id,\n stepId: stepDef.id,\n error: errorMessage,\n });\n }\n\n return stepRun;\n }\n\n /**\n * Mark run as failed.\n */\n private failRun(run: InternalWorkflowRun, error: string): void {\n if (run.timeoutId) {clearTimeout(run.timeoutId);}\n\n run.status = 'failed';\n run.error = error;\n run.completedAt = new Date();\n\n this.events.publish('workflow.failed', {\n runId: run.id,\n workflowId: run.workflowId,\n error,\n });\n\n this.logger.error('Workflow failed', new Error(error), {\n runId: run.id,\n workflowId: run.workflowId,\n });\n }\n\n /**\n * Schedule a workflow retry based on policy.\n */\n private async scheduleRetry(\n run: InternalWorkflowRun,\n policy: RetryPolicy\n ): Promise<void> {\n const currentAttemptStr = run.options.tags?.['_retryAttempt'];\n const currentAttempt = currentAttemptStr ? parseInt(currentAttemptStr, 10) : 0;\n\n if (currentAttempt >= (policy.maxAttempts ?? 3)) {\n this.logger.warn('Max retry attempts reached', {\n runId: run.id,\n attempts: currentAttempt,\n });\n return;\n }\n\n // Calculate delay with exponential backoff\n const baseDelay = policy.initialDelay ?? 1000;\n const multiplier = policy.backoffMultiplier ?? 2;\n const delay = baseDelay * Math.pow(multiplier, currentAttempt);\n const maxDelay = policy.maxDelay ?? 60000;\n const actualDelay = Math.min(delay, maxDelay);\n\n this.logger.info('Scheduling workflow retry', {\n runId: run.id,\n attempt: currentAttempt + 1,\n delay: actualDelay,\n });\n\n setTimeout(async () => {\n try {\n await this.execute(run.workflowId, run.input, {\n ...run.options,\n tags: {\n ...run.options.tags,\n _retryAttempt: String(currentAttempt + 1),\n _retryOf: run.id,\n },\n });\n } catch (error) {\n this.logger.error('Retry execution failed', error as Error, {\n runId: run.id,\n });\n }\n }, actualDelay);\n }\n\n /**\n * Persist workflow run to storage.\n */\n private async persistRun(run: InternalWorkflowRun): Promise<void> {\n const publicRun = this.toPublicRun(run);\n const data = JSON.stringify(publicRun, null, 2);\n\n try {\n await this.storage.write(\n `workflows/${run.id}.json`,\n Buffer.from(data, 'utf-8')\n );\n } catch (error) {\n this.logger.warn('Failed to persist workflow run', {\n runId: run.id,\n error: (error as Error).message,\n });\n }\n }\n\n /**\n * Convert internal run to public representation.\n */\n private toPublicRun(run: InternalWorkflowRun): WorkflowRun {\n return {\n id: run.id,\n workflowId: run.workflowId,\n tenantId: run.tenantId,\n status: run.status,\n input: run.input,\n output: run.output,\n error: run.error,\n startedAt: run.startedAt,\n completedAt: run.completedAt,\n steps: run.steps,\n };\n }\n\n /**\n * Stop all workflows (for cleanup).\n */\n dispose(): void {\n for (const run of this.runs.values()) {\n if (run.timeoutId) {\n clearTimeout(run.timeoutId);\n }\n }\n }\n\n /**\n * Get engine stats (for monitoring).\n */\n getStats(): {\n totalRuns: number;\n runningCount: number;\n registeredWorkflows: number;\n byStatus: Record<string, number>;\n } {\n const byStatus: Record<string, number> = {};\n\n for (const run of this.runs.values()) {\n byStatus[run.status] = (byStatus[run.status] ?? 0) + 1;\n }\n\n return {\n totalRuns: this.runs.size,\n runningCount: this.running.size,\n registeredWorkflows: this.definitions.size,\n byStatus,\n };\n }\n}\n","/**\n * @module @kb-labs/core-runtime/proxy\n * IPC proxy for ISQLDatabase adapter.\n *\n * This proxy forwards all SQL database operations to the parent process via IPC.\n * The parent process owns the real SQL adapter (e.g., SQLiteAdapter).\n *\n * Benefits:\n * - Single database connection (consistent data access across all workers)\n * - Reduced memory usage (no duplicate connections)\n * - No race conditions (centralized transaction management)\n *\n * @example\n * ```typescript\n * import { SQLDatabaseProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * // In child process (sandbox worker)\n * const transport = createIPCTransport();\n * const db = new SQLDatabaseProxy(transport);\n *\n * // Use like normal ISQLDatabase\n * const result = await db.query('SELECT * FROM users WHERE id = ?', [123]);\n * console.log(result.rows);\n *\n * // Transactions\n * const tx = await db.transaction();\n * await tx.query('INSERT INTO users (name) VALUES (?)', ['Alice']);\n * await tx.commit();\n * ```\n */\n\nimport type { ISQLDatabase, SQLQueryResult, SQLTransaction } from '@kb-labs/core-platform/adapters';\nimport type { ITransport } from '../transport/transport';\nimport { RemoteAdapter } from './remote-adapter';\n\n/**\n * IPC proxy for ISQLDatabase adapter.\n *\n * All method calls are forwarded to the parent process via IPC.\n * The parent process executes the call on the real SQL adapter\n * (e.g., SQLiteAdapter, PostgreSQLAdapter) and returns the result.\n */\nexport class SQLDatabaseProxy extends RemoteAdapter<ISQLDatabase> implements ISQLDatabase {\n /**\n * Create a SQL database proxy.\n *\n * @param transport - IPC transport to communicate with parent\n */\n constructor(transport: ITransport) {\n super('database.sql', transport);\n }\n\n /**\n * Execute a SQL query.\n *\n * @param sql - SQL query string\n * @param params - Query parameters\n * @returns Query result\n */\n async query<T = unknown>(sql: string, params?: unknown[]): Promise<SQLQueryResult<T>> {\n return (await this.callRemote('query', [sql, params])) as SQLQueryResult<T>;\n }\n\n /**\n * Begin a SQL transaction.\n *\n * @returns Transaction proxy object\n */\n async transaction(): Promise<SQLTransaction> {\n // Get transaction ID from parent\n const txId = (await this.callRemote('transaction', [])) as string;\n\n // Return transaction proxy that includes txId in all calls\n return {\n query: async <T = unknown>(sql: string, params?: unknown[]): Promise<SQLQueryResult<T>> => {\n return (await this.callRemote('transaction.query', [txId, sql, params])) as SQLQueryResult<T>;\n },\n\n commit: async (): Promise<void> => {\n await this.callRemote('transaction.commit', [txId]);\n },\n\n rollback: async (): Promise<void> => {\n await this.callRemote('transaction.rollback', [txId]);\n },\n };\n }\n\n /**\n * Close the database connection.\n */\n async close(): Promise<void> {\n await this.callRemote('close', []);\n }\n}\n\n/**\n * Create a SQL database proxy with IPC transport.\n *\n * @param transport - IPC transport to use\n * @returns SQL database proxy instance\n *\n * @example\n * ```typescript\n * import { createSQLDatabaseProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * const transport = createIPCTransport();\n * const db = createSQLDatabaseProxy(transport);\n * ```\n */\nexport function createSQLDatabaseProxy(transport: ITransport): SQLDatabaseProxy {\n return new SQLDatabaseProxy(transport);\n}\n","/**\n * @module @kb-labs/core-runtime/proxy\n * IPC proxy for IDocumentDatabase adapter.\n *\n * This proxy forwards all document database operations to the parent process via IPC.\n * The parent process owns the real document adapter (e.g., MongoDBAdapter).\n *\n * Benefits:\n * - Single database connection (consistent data access across all workers)\n * - Reduced memory usage (no duplicate connections)\n * - No race conditions (centralized transaction management)\n *\n * @example\n * ```typescript\n * import { DocumentDatabaseProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * // In child process (sandbox worker)\n * const transport = createIPCTransport();\n * const db = new DocumentDatabaseProxy(transport);\n *\n * // Use like normal IDocumentDatabase\n * const users = await db.find('users', { age: { $gt: 18 } }, { limit: 10 });\n * console.log(users);\n *\n * // Update by ID\n * const updated = await db.updateById('users', '123', { $set: { active: true } });\n * ```\n */\n\nimport type {\n IDocumentDatabase,\n BaseDocument,\n DocumentFilter,\n DocumentUpdate,\n FindOptions,\n} from '@kb-labs/core-platform/adapters';\nimport type { ITransport } from '../transport/transport';\nimport { RemoteAdapter } from './remote-adapter';\n\n/**\n * IPC proxy for IDocumentDatabase adapter.\n *\n * All method calls are forwarded to the parent process via IPC.\n * The parent process executes the call on the real document adapter\n * (e.g., MongoDBAdapter) and returns the result.\n */\nexport class DocumentDatabaseProxy extends RemoteAdapter<IDocumentDatabase> implements IDocumentDatabase {\n /**\n * Create a document database proxy.\n *\n * @param transport - IPC transport to communicate with parent\n */\n constructor(transport: ITransport) {\n super('database.document', transport);\n }\n\n /**\n * Find documents matching a filter.\n *\n * @param collection - Collection name\n * @param filter - Query filter\n * @param options - Find options (limit, skip, sort)\n * @returns Array of matching documents\n */\n async find<T extends BaseDocument>(\n collection: string,\n filter: DocumentFilter<T>,\n options?: FindOptions\n ): Promise<T[]> {\n return (await this.callRemote('find', [collection, filter, options])) as T[];\n }\n\n /**\n * Find a single document by ID.\n *\n * @param collection - Collection name\n * @param id - Document ID\n * @returns Document or null if not found\n */\n async findById<T extends BaseDocument>(collection: string, id: string): Promise<T | null> {\n return (await this.callRemote('findById', [collection, id])) as T | null;\n }\n\n /**\n * Insert a single document.\n *\n * @param collection - Collection name\n * @param document - Document to insert (id, createdAt, updatedAt will be added)\n * @returns Inserted document with generated fields\n */\n async insertOne<T extends BaseDocument>(\n collection: string,\n document: Omit<T, 'id' | 'createdAt' | 'updatedAt'>\n ): Promise<T> {\n return (await this.callRemote('insertOne', [collection, document])) as T;\n }\n\n /**\n * Update documents matching a filter.\n *\n * @param collection - Collection name\n * @param filter - Query filter\n * @param update - Update operations\n * @returns Number of documents updated\n */\n async updateMany<T extends BaseDocument>(\n collection: string,\n filter: DocumentFilter<T>,\n update: DocumentUpdate<T>\n ): Promise<number> {\n return (await this.callRemote('updateMany', [collection, filter, update])) as number;\n }\n\n /**\n * Update a single document by ID.\n *\n * @param collection - Collection name\n * @param id - Document ID\n * @param update - Update operations\n * @returns Updated document or null if not found\n */\n async updateById<T extends BaseDocument>(\n collection: string,\n id: string,\n update: DocumentUpdate<T>\n ): Promise<T | null> {\n return (await this.callRemote('updateById', [collection, id, update])) as T | null;\n }\n\n /**\n * Delete documents matching a filter.\n *\n * @param collection - Collection name\n * @param filter - Query filter\n * @returns Number of documents deleted\n */\n async deleteMany<T extends BaseDocument>(\n collection: string,\n filter: DocumentFilter<T>\n ): Promise<number> {\n return (await this.callRemote('deleteMany', [collection, filter])) as number;\n }\n\n /**\n * Delete a single document by ID.\n *\n * @param collection - Collection name\n * @param id - Document ID\n * @returns True if deleted, false if not found\n */\n async deleteById(collection: string, id: string): Promise<boolean> {\n return (await this.callRemote('deleteById', [collection, id])) as boolean;\n }\n\n /**\n * Count documents matching a filter.\n *\n * @param collection - Collection name\n * @param filter - Query filter\n * @returns Number of matching documents\n */\n async count<T extends BaseDocument>(\n collection: string,\n filter: DocumentFilter<T>\n ): Promise<number> {\n return (await this.callRemote('count', [collection, filter])) as number;\n }\n\n /**\n * Close the database connection.\n */\n async close(): Promise<void> {\n await this.callRemote('close', []);\n }\n}\n\n/**\n * Create a document database proxy with IPC transport.\n *\n * @param transport - IPC transport to use\n * @returns Document database proxy instance\n *\n * @example\n * ```typescript\n * import { createDocumentDatabaseProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * const transport = createIPCTransport();\n * const db = createDocumentDatabaseProxy(transport);\n * ```\n */\nexport function createDocumentDatabaseProxy(transport: ITransport): DocumentDatabaseProxy {\n return new DocumentDatabaseProxy(transport);\n}\n","/**\n * @module @kb-labs/core-runtime/proxy/create-proxy-platform\n * Create platform container with proxy adapters for subprocess execution.\n *\n * This function creates a PlatformContainer where all adapters are proxies\n * that forward calls to the parent process via IPC (Unix socket).\n *\n * Used in subprocess workers to access real platform services from parent.\n */\n\nimport type { PlatformContainer } from '../container.js';\nimport type { ITransport } from '../transport/transport.js';\nimport { UnixSocketTransport } from '../transport/unix-socket-transport.js';\nimport { CacheProxy } from './cache-proxy.js';\nimport { LLMProxy } from './llm-proxy.js';\nimport { EmbeddingsProxy } from './embeddings-proxy.js';\nimport { VectorStoreProxy } from './vector-store-proxy.js';\nimport { StorageProxy } from './storage-proxy.js';\nimport { SQLDatabaseProxy } from './sql-database-proxy.js';\nimport { DocumentDatabaseProxy } from './document-database-proxy.js';\nimport type { ILogger } from '@kb-labs/core-platform';\n\nexport interface CreateProxyPlatformOptions {\n /**\n * Path to Unix socket for IPC communication.\n * Should match the socket path used by UnixSocketServer in parent process.\n * Default: /tmp/kb-ipc.sock\n */\n socketPath?: string;\n\n /**\n * Logger for subprocess (can be noop or local file logger).\n * Note: This logger is NOT proxied - logs are local to subprocess.\n */\n logger?: ILogger;\n\n /**\n * Custom transport (for testing).\n * If not provided, UnixSocketTransport will be created.\n */\n transport?: ITransport;\n}\n\n/**\n * Noop logger for subprocess (doesn't proxy to parent).\n *\n * Logging in subprocess should be either:\n * 1. Local (to subprocess logs)\n * 2. Sent via events to parent\n * 3. Noop (discarded)\n *\n * Never proxy logger calls via IPC - too chatty!\n */\nfunction createNoopLogger(): ILogger {\n const noop = () => {};\n const logger: ILogger = {\n debug: noop,\n info: noop,\n warn: noop,\n error: noop,\n fatal: noop,\n trace: noop,\n child: () => logger,\n };\n return logger;\n}\n\n/**\n * Create platform container with proxy adapters.\n *\n * All adapters (except logger) forward calls to parent process via IPC.\n * This allows subprocess handlers to access real platform services.\n *\n * @param options - Configuration options\n * @returns Platform container with proxy adapters\n *\n * @example\n * ```typescript\n * // In subprocess (worker-script.ts)\n * import { createProxyPlatform } from '@kb-labs/core-runtime/proxy';\n *\n * const platform = await createProxyPlatform({\n * socketPath: process.env.KB_IPC_SOCKET_PATH,\n * logger: createFileLogger('/tmp/worker.log'),\n * });\n *\n * // Now handlers can use real platform services\n * await platform.cache.set('key', 'value');\n * const result = await platform.llm.complete({ prompt: 'Hello' });\n * ```\n */\nexport async function createProxyPlatform(\n options: CreateProxyPlatformOptions = {}\n): Promise<PlatformContainer> {\n // Create transport (Unix socket by default)\n const transport = options.transport ?? new UnixSocketTransport({\n socketPath: options.socketPath ?? '/tmp/kb-ipc.sock',\n });\n\n // Connect to parent process\n // TODO: Re-enable when transport interface is updated\n // await transport.connect();\n\n // Create proxy adapters\n const cache = new CacheProxy(transport);\n const llm = new LLMProxy(transport);\n const embeddings = new EmbeddingsProxy(transport);\n const vectorStore = new VectorStoreProxy(transport);\n const storage = new StorageProxy(transport);\n const sqlDatabase = new SQLDatabaseProxy(transport);\n const documentDatabase = new DocumentDatabaseProxy(transport);\n\n // Logger is NOT proxied (local or noop)\n const logger = options.logger ?? createNoopLogger();\n\n // EventBus - TODO: implement EventBusProxy\n // For now, noop (job handlers use ctx.events, not platform.eventBus)\n const eventBus = {\n on: () => () => {},\n once: () => () => {},\n off: () => {},\n emit: async () => {},\n };\n\n // Analytics - TODO: implement AnalyticsProxy\n // For now, noop (low priority)\n const analytics = {\n track: () => {},\n identify: () => {},\n flush: async () => {},\n };\n\n // Create new PlatformContainer and configure adapters\n const platform = new (await import('../container.js')).PlatformContainer();\n platform.setAdapter('logger', logger);\n platform.setAdapter('cache', cache);\n platform.setAdapter('llm', llm);\n platform.setAdapter('embeddings', embeddings);\n platform.setAdapter('vectorStore', vectorStore);\n platform.setAdapter('storage', storage);\n platform.setAdapter('sqlDatabase', sqlDatabase);\n platform.setAdapter('documentDatabase', documentDatabase);\n platform.setAdapter('eventBus', eventBus as any);\n platform.setAdapter('analytics', analytics as any);\n\n return platform;\n}\n\n/**\n * Close proxy platform and disconnect from parent.\n *\n * Should be called when subprocess is shutting down.\n *\n * @param platform - Platform container created by createProxyPlatform()\n *\n * @example\n * ```typescript\n * const platform = await createProxyPlatform();\n * // ... use platform ...\n * await closeProxyPlatform(platform);\n * ```\n */\nexport async function closeProxyPlatform(platform: PlatformContainer): Promise<void> {\n // Close transport if it has a close method\n // @ts-expect-error - accessing internal transport\n const transport = platform.cache?._transport;\n if (transport && typeof transport.close === 'function') {\n await transport.close();\n }\n}\n","import { platform } from './container.js';\nimport type {\n IResourceManager,\n ResourceAvailability,\n ResourceType,\n TenantQuotas,\n} from '@kb-labs/core-platform';\n\nexport interface MonitoringSnapshot {\n resource: ResourceType;\n availability?: ResourceAvailability;\n quota?: TenantQuotas;\n tenantId?: string;\n ts: string;\n}\n\nexport interface MonitoringOptions {\n resources?: ResourceType[];\n tenantId?: string;\n}\n\nexport async function getMonitoringSnapshot(\n options: MonitoringOptions = {}\n): Promise<MonitoringSnapshot[]> {\n const resourcesManager = (platform as { resources?: IResourceManager }).resources;\n const resources =\n options.resources ?? (['workflow', 'job', 'llm', 'api'] as ResourceType[]);\n const tenantId = options.tenantId;\n const ts = new Date().toISOString();\n\n if (!resourcesManager) {\n return [];\n }\n\n return Promise.all(\n resources.map(async (resource) => {\n const availability = await resourcesManager\n .getAvailability(resource, tenantId)\n .catch(() => undefined);\n const quota = await resourcesManager\n .getQuota(tenantId ?? 'default')\n .catch(() => undefined);\n\n return { resource, availability, quota, tenantId, ts };\n })\n );\n}\n\nexport type DegradedLevel = 'normal' | 'degraded' | 'critical';\n\nexport interface DegradedStatus {\n level: DegradedLevel;\n ts: string;\n reason?: string;\n}\n\nexport interface DegradedOptions extends MonitoringOptions {\n thresholds?: {\n degraded?: number;\n critical?: number;\n };\n}\n\nexport async function getDegradedStatus(\n options: DegradedOptions = {}\n): Promise<DegradedStatus> {\n const thresholds = {\n degraded: options.thresholds?.degraded ?? 0.75,\n critical: options.thresholds?.critical ?? 0.9,\n };\n const ts = new Date().toISOString();\n\n const snapshots = await getMonitoringSnapshot(options);\n if (snapshots.length === 0) {\n return { level: 'normal', ts, reason: 'monitoring-unavailable' };\n }\n\n let worst: DegradedLevel = 'normal';\n\n for (const snap of snapshots) {\n const availability = snap.availability;\n if (!availability || availability.total === 0) {\n continue;\n }\n const ratio = availability.used / availability.total;\n const level: DegradedLevel =\n ratio >= thresholds.critical\n ? 'critical'\n : ratio >= thresholds.degraded\n ? 'degraded'\n : 'normal';\n\n if (levelRank(level) > levelRank(worst)) {\n worst = level;\n }\n }\n\n return { level: worst, ts };\n}\n\nfunction levelRank(level: DegradedLevel): number {\n switch (level) {\n case 'critical':\n return 2;\n case 'degraded':\n return 1;\n default:\n return 0;\n }\n}\n\n","/**\n * @module @kb-labs/core-runtime/use-cases/start-full-cycle\n * Unified one-click full-cycle entrypoint.\n */\n\nimport type { RunRecord } from '@kb-labs/core-platform';\nimport type { PlatformContainer } from '../container.js';\nimport type { StartFullCycleRequest } from '../run-orchestrator.js';\n\n/**\n * Start full-cycle run through configured run orchestrator.\n */\nexport async function startFullCycle(\n platform: Pick<PlatformContainer, 'runOrchestrator'>,\n request: StartFullCycleRequest\n): Promise<RunRecord> {\n return platform.runOrchestrator.startFullCycle(request);\n}\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/services/hybrid-log-reader.ts","../src/container.ts","../src/discover-adapters.ts","../src/transport/transport.ts","../src/transport/timeout-config.ts","../src/transport/unix-socket-transport.ts","../src/proxy/remote-adapter.ts","../src/transport/bulk-transfer.ts","../src/proxy/vector-store-proxy.ts","../src/proxy/cache-proxy.ts","../src/proxy/config-proxy.ts","../src/proxy/llm-proxy.ts","../src/proxy/embeddings-proxy.ts","../src/proxy/storage-proxy.ts","../src/adapters/config-adapter.ts","../src/ipc/unix-socket-server.ts","../src/index.ts","../src/loader.ts","../src/analytics-context.ts","../src/adapter-loader.ts","../src/environment-lease-store.ts","../src/environment-manager.ts","../src/workspace-manager.ts","../src/snapshot-manager.ts","../src/run-executor.ts","../src/run-orchestrator.ts","../src/wrappers/default-execution-policy-llm.ts","../src/core/resource-manager.ts","../src/core/job-scheduler.ts","../src/core/cron-manager.ts","../src/core/workflow-engine.ts","../src/proxy/sql-database-proxy.ts","../src/proxy/document-database-proxy.ts","../src/proxy/create-proxy-platform.ts","../src/monitoring.ts","../src/use-cases/start-full-cycle.ts"],"names":["PlatformContainer","platform","NoOpAnalytics","MemoryVectorStore","MockLLM","MockEmbeddings","MemoryCache","NoOpConfig","MemoryStorage","ConsoleLogger","MemoryEventBus","NoOpInvoke","NoOpSQLDatabase","NoOpDocumentDatabase","NoOpWorkflowEngine","NoOpJobScheduler","NoOpCronManager","NoOpResourceManager","fs","pathToFileURL","path","glob","net","isAdapterResponse","RemoteAdapter","randomUUID","IPC_PROTOCOL_VERSION","serialize","deserialize","tmpdir","join","writeFile","readFile","unlink","unlinkSync","VectorStoreProxy","CacheProxy","LLMProxy","EmbeddingsProxy","StorageProxy","fs2","net2","os","execSync","AnalyticsLLM","AnalyticsEmbeddings","AnalyticsVectorStore","AnalyticsCache","AnalyticsStorage","InMemoryRateLimitBackend","ResourceBroker","createQueuedLLM","createQueuedEmbeddings","createQueuedVectorStore","UnixSocketTransport","ConfigProxy","discoverAdapters","ConfigAdapter","createUnixSocketServer"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @module @kb-labs/core-runtime/services/hybrid-log-reader\n * Hybrid log reader adapter implementation.\n *\n * Strategy:\n * 1. If persistence available → use it (complete historical data)\n * 2. If only buffer available → use it (recent logs only)\n * 3. Graceful degradation if neither available\n */\n\nimport type {\n ILogReader,\n ILogPersistence,\n ILogBuffer,\n LogRecord,\n LogQuery,\n LogQueryOptions,\n LogQueryResult,\n LogSearchOptions,\n LogSearchResult,\n LogStats,\n LogCapabilities,\n} from '@kb-labs/core-platform';\n\n/**\n * Hybrid log query service.\n *\n * Automatically selects best backend:\n * - Persistence (if available): complete historical data with FTS\n * - Buffer (if available): recent logs only, fast access\n * - Neither: throws descriptive error\n *\n * @example\n * ```typescript\n * const service = new HybridLogReader(persistence, buffer);\n *\n * // Query logs (uses persistence if available)\n * const result = await service.query({ level: 'error' });\n *\n * // Subscribe to real-time stream (uses buffer)\n * const unsubscribe = service.subscribe((log) => console.log(log));\n * ```\n */\nexport class HybridLogReader implements ILogReader {\n constructor(\n private persistence?: ILogPersistence,\n private buffer?: ILogBuffer\n ) {}\n\n /**\n * Query logs with filters and pagination.\n *\n * Strategy:\n * 1. Prefer persistence (complete data)\n * 2. Fallback to buffer (limited data)\n * 3. Error if neither available\n */\n async query(\n filters: LogQuery,\n options: LogQueryOptions = {}\n ): Promise<LogQueryResult> {\n // Strategy 1: Use persistence if available (preferred)\n if (this.persistence) {\n const result = await this.persistence.query(filters, {\n limit: options.limit,\n offset: options.offset,\n sortBy: options.sortBy,\n sortOrder: options.sortOrder,\n });\n\n return {\n logs: result.logs,\n total: result.total,\n hasMore: result.hasMore,\n source: 'persistence',\n };\n }\n\n // Strategy 2: Fallback to buffer (limited data)\n if (this.buffer) {\n return this.queryFromBuffer(filters, options);\n }\n\n // Strategy 3: No storage available\n throw new Error(\n 'No log storage backend available. Configure logPersistence or logRingBuffer in kb.config.json'\n );\n }\n\n /**\n * Get single log by ID.\n *\n * Searches persistence first (complete data), then buffer.\n */\n async getById(id: string): Promise<LogRecord | null> {\n // Try persistence first (complete data)\n if (this.persistence) {\n return this.persistence.getById(id);\n }\n\n // Fallback to buffer (recent logs only)\n if (this.buffer) {\n const logs = this.buffer.query({});\n return logs.find((log) => log.id === id) ?? null;\n }\n\n return null;\n }\n\n /**\n * Full-text search logs.\n *\n * Uses persistence FTS if available, otherwise simple text matching in buffer.\n */\n async search(\n searchText: string,\n options: LogSearchOptions = {}\n ): Promise<LogSearchResult> {\n // Use persistence FTS if available\n if (this.persistence) {\n return this.persistence.search(searchText, {\n limit: options.limit,\n offset: options.offset,\n });\n }\n\n // Fallback: simple text matching in buffer\n if (this.buffer) {\n return this.searchInBuffer(searchText, options);\n }\n\n throw new Error(\n 'No log storage backend available. Configure logPersistence or logRingBuffer in kb.config.json'\n );\n }\n\n /**\n * Subscribe to real-time log stream.\n *\n * Requires ring buffer. Throws error if not available.\n */\n subscribe(\n callback: (log: LogRecord) => void,\n filters?: LogQuery\n ): () => void {\n if (!this.buffer) {\n throw new Error(\n 'Real-time streaming requires ring buffer. Enable streaming in kb.config.json: ' +\n '{ \"platform\": { \"adapters\": { \"logRingBuffer\": \"@kb-labs/adapters-log-ringbuffer\" } } }'\n );\n }\n\n // Subscribe to buffer with optional filters\n return this.buffer.subscribe((log) => {\n // Apply filters if provided\n if (filters) {\n if (filters.level && log.level !== filters.level) {return;}\n if (filters.source && log.source !== filters.source) {return;}\n if (filters.from !== undefined && log.timestamp < filters.from) {return;}\n if (filters.to !== undefined && log.timestamp > filters.to) {return;}\n }\n callback(log);\n });\n }\n\n /**\n * Get combined statistics from both backends.\n */\n async getStats(): Promise<LogStats> {\n const stats: LogStats = {};\n\n // Get buffer stats if available\n if (this.buffer) {\n const raw = this.buffer.getStats();\n stats.buffer = {\n size: raw.total,\n maxSize: raw.bufferSize,\n oldestTimestamp: raw.oldestTimestamp,\n newestTimestamp: raw.newestTimestamp,\n };\n }\n\n // Get persistence stats if available\n if (this.persistence) {\n stats.persistence = await this.persistence.getStats();\n }\n\n return stats;\n }\n\n /**\n * Check which backends and features are available.\n */\n getCapabilities(): LogCapabilities {\n return {\n hasBuffer: !!this.buffer,\n hasPersistence: !!this.persistence,\n hasSearch: !!this.persistence, // FTS only in persistence\n hasStreaming: !!this.buffer, // Streaming only in buffer\n };\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // PRIVATE HELPERS\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Query logs from ring buffer (fallback implementation).\n * @private\n */\n private queryFromBuffer(\n filters: LogQuery,\n options: LogQueryOptions\n ): LogQueryResult {\n if (!this.buffer) {\n throw new Error('Buffer not available');\n }\n\n // Query all matching logs from buffer\n const allLogs = this.buffer.query(filters);\n\n // Apply sorting\n const sortBy = options.sortBy ?? 'timestamp';\n const sortOrder = options.sortOrder ?? 'desc';\n\n const sortedLogs = [...allLogs].sort((a, b) => {\n let comparison = 0;\n\n if (sortBy === 'timestamp') {\n comparison = a.timestamp - b.timestamp;\n } else if (sortBy === 'level') {\n const levelOrder = { trace: 0, debug: 1, info: 2, warn: 3, error: 4, fatal: 5 };\n comparison = levelOrder[a.level] - levelOrder[b.level];\n }\n\n return sortOrder === 'asc' ? comparison : -comparison;\n });\n\n // Apply pagination\n const limit = options.limit ?? 100;\n const offset = options.offset ?? 0;\n const paginatedLogs = sortedLogs.slice(offset, offset + limit);\n\n return {\n logs: paginatedLogs,\n total: sortedLogs.length,\n hasMore: offset + paginatedLogs.length < sortedLogs.length,\n source: 'buffer',\n };\n }\n\n /**\n * Search logs in ring buffer (simple text matching).\n * @private\n */\n private searchInBuffer(\n searchText: string,\n options: LogSearchOptions\n ): LogSearchResult {\n if (!this.buffer) {\n throw new Error('Buffer not available');\n }\n\n // Get all logs from buffer\n const allLogs = this.buffer.query({});\n\n // Simple case-insensitive text matching\n const searchLower = searchText.toLowerCase();\n const filtered = allLogs.filter((log) =>\n log.message.toLowerCase().includes(searchLower)\n );\n\n // Apply pagination\n const limit = options.limit ?? 100;\n const offset = options.offset ?? 0;\n const paginated = filtered.slice(offset, offset + limit);\n\n return {\n logs: paginated,\n total: filtered.length,\n hasMore: offset + paginated.length < filtered.length,\n };\n }\n}\n","/**\n * @module @kb-labs/core-runtime/container\n * Platform DI container.\n */\n\nimport type {\n IAnalytics,\n IVectorStore,\n ILLM,\n IEmbeddings,\n ICache,\n IConfig,\n IStorage,\n ILogger,\n IEventBus,\n IInvoke,\n IWorkflowEngine,\n IJobScheduler,\n ICronManager,\n IResourceManager,\n ILogReader,\n ILogPersistence,\n} from '@kb-labs/core-platform';\nimport type { IExecutionBackend } from '@kb-labs/core-contracts';\nimport type { ISQLDatabase, IDocumentDatabase } from '@kb-labs/core-platform/adapters';\n\nimport type { IResourceBroker } from '@kb-labs/core-resource-broker';\nimport type { EnvironmentManager } from './environment-manager.js';\nimport type { WorkspaceManager } from './workspace-manager.js';\nimport type { SnapshotManager } from './snapshot-manager.js';\nimport type { RunExecutor } from './run-executor.js';\nimport type { RunOrchestrator } from './run-orchestrator.js';\n\nimport {\n NoOpAnalytics,\n MemoryVectorStore,\n MockLLM,\n MockEmbeddings,\n MemoryCache,\n NoOpConfig,\n MemoryStorage,\n ConsoleLogger,\n MemoryEventBus,\n NoOpInvoke,\n NoOpSQLDatabase,\n NoOpDocumentDatabase,\n NoOpWorkflowEngine,\n NoOpJobScheduler,\n NoOpCronManager,\n NoOpResourceManager,\n} from '@kb-labs/core-platform/noop';\n\nimport { HybridLogReader } from './services/hybrid-log-reader.js';\n\n/**\n * Core adapter types (known at compile time).\n * These are the primary adapters that plugins see.\n */\nexport interface CoreAdapterTypes {\n analytics: IAnalytics;\n vectorStore: IVectorStore;\n llm: ILLM;\n embeddings: IEmbeddings;\n cache: ICache;\n config: IConfig;\n storage: IStorage;\n logger: ILogger;\n eventBus: IEventBus;\n invoke: IInvoke;\n sqlDatabase: ISQLDatabase;\n documentDatabase: IDocumentDatabase;\n}\n\n/**\n * Names of all core adapters.\n * Use this type instead of raw strings when referencing adapters —\n * it stays in sync with CoreAdapterTypes automatically.\n *\n * @example\n * ```typescript\n * import type { CoreAdapterName } from '@kb-labs/core-runtime';\n *\n * function requiresLLM(name: CoreAdapterName) { ... }\n * requiresLLM('llm'); // ✅\n * requiresLLM('unknown'); // ❌ compile error\n * ```\n */\nexport type CoreAdapterName = keyof CoreAdapterTypes;\n\n/**\n * All adapter types (core + extensions).\n * Extensions can be any type, not known at compile time.\n */\nexport type AdapterTypes = CoreAdapterTypes & {\n [key: string]: unknown;\n};\n\n/**\n * Platform lifecycle phase.\n */\nexport type PlatformLifecyclePhase =\n | 'start'\n | 'ready'\n | 'beforeShutdown'\n | 'shutdown';\n\n/**\n * Platform lifecycle event context.\n */\nexport interface PlatformLifecycleContext {\n phase: PlatformLifecyclePhase;\n cwd?: string;\n isChildProcess?: boolean;\n reason?: string;\n error?: unknown;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Platform lifecycle hooks.\n */\nexport interface PlatformLifecycleHooks {\n onStart?(context: PlatformLifecycleContext): void | Promise<void>;\n onReady?(context: PlatformLifecycleContext): void | Promise<void>;\n onBeforeShutdown?(context: PlatformLifecycleContext): void | Promise<void>;\n onShutdown?(context: PlatformLifecycleContext): void | Promise<void>;\n onError?(\n error: unknown,\n phase: PlatformLifecyclePhase,\n context: PlatformLifecycleContext\n ): void | Promise<void>;\n}\n\n/**\n * Platform DI container.\n * Provides access to all platform services through lazy-loaded getters.\n */\nexport class PlatformContainer {\n private adapters = new Map<string, unknown>();\n private lifecycleHooks = new Map<string, PlatformLifecycleHooks>();\n private initialized = false;\n\n // ═══════════════════════════════════════════════════════════════════════════\n // ADAPTERS (replaceable via kb.config.json)\n // ═══════════════════════════════════════════════════════════════════════════\n\n /**\n * Set an adapter instance.\n *\n * Supports both core adapters (type-safe) and extension adapters (generic).\n *\n * @example\n * ```typescript\n * // Core adapter (type-safe)\n * platform.setAdapter('logger', pinoLogger); // Type: ILogger\n *\n * // Extension adapter (requires explicit type)\n * platform.setAdapter('logRingBuffer', ringBuffer); // Type: LogRingBufferAdapter\n * ```\n *\n * @param key - Adapter key\n * @param instance - Adapter instance\n */\n setAdapter<K extends keyof CoreAdapterTypes>(key: K, instance: CoreAdapterTypes[K]): void;\n setAdapter<T = unknown>(key: string, instance: T): void;\n setAdapter(key: string, instance: unknown): void {\n this.adapters.set(key, instance);\n }\n\n /**\n * Get an adapter instance.\n *\n * Two overloads:\n * 1. Core adapters (logger, db, etc.) - type-safe, returns typed instance\n * 2. Extension adapters (logRingBuffer, logPersistence, etc.) - generic, requires explicit type\n *\n * @example\n * ```typescript\n * // Core adapter (type-safe)\n * const logger = platform.getAdapter('logger'); // ILogger | undefined\n *\n * // Extension adapter (requires explicit type)\n * const buffer = platform.getAdapter<ILogRingBuffer>('logRingBuffer');\n * ```\n *\n * @param key - Adapter key\n */\n getAdapter<K extends keyof CoreAdapterTypes>(key: K): CoreAdapterTypes[K] | undefined;\n getAdapter<T = unknown>(key: string): T | undefined;\n getAdapter(key: string): unknown | undefined {\n return this.adapters.get(key);\n }\n\n /**\n * Check if an adapter is explicitly configured (not using fallback).\n *\n * @example\n * ```typescript\n * // Core adapter\n * if (platform.hasAdapter('logger')) { ... }\n *\n * // Extension adapter\n * if (platform.hasAdapter('logRingBuffer')) { ... }\n * ```\n *\n * @param key - Adapter key\n */\n hasAdapter<K extends keyof CoreAdapterTypes>(key: K): boolean;\n hasAdapter(key: string): boolean;\n hasAdapter(key: string): boolean {\n return this.adapters.has(key);\n }\n\n /**\n * List all adapter names.\n * Useful for debugging and discovery.\n */\n listAdapters(): string[] {\n return Array.from(this.adapters.keys());\n }\n\n /**\n * Register platform lifecycle hooks.\n * If hooks with this id already exist, they are replaced.\n */\n registerLifecycleHooks(id: string, hooks: PlatformLifecycleHooks): void {\n this.lifecycleHooks.set(id, hooks);\n }\n\n /**\n * Unregister platform lifecycle hooks by id.\n */\n unregisterLifecycleHooks(id: string): void {\n this.lifecycleHooks.delete(id);\n }\n\n /**\n * List registered lifecycle hook ids.\n */\n listLifecycleHookIds(): string[] {\n return Array.from(this.lifecycleHooks.keys());\n }\n\n /**\n * Emit lifecycle phase to registered hooks.\n */\n async emitLifecyclePhase(\n phase: PlatformLifecyclePhase,\n context: Omit<PlatformLifecycleContext, 'phase'> = {}\n ): Promise<void> {\n const event: PlatformLifecycleContext = { phase, ...context };\n const hookEntries = Array.from(this.lifecycleHooks.entries());\n\n for (const [hookId, hooks] of hookEntries) {\n let phaseHandler: ((ctx: PlatformLifecycleContext) => void | Promise<void>) | undefined;\n switch (phase) {\n case 'start':\n phaseHandler = hooks.onStart;\n break;\n case 'ready':\n phaseHandler = hooks.onReady;\n break;\n case 'beforeShutdown':\n phaseHandler = hooks.onBeforeShutdown;\n break;\n case 'shutdown':\n phaseHandler = hooks.onShutdown;\n break;\n }\n\n if (!phaseHandler) {\n continue;\n }\n\n try {\n await phaseHandler(event);\n } catch (hookError) {\n this.logger.warn('Platform lifecycle hook failed', {\n hookId,\n phase,\n error: hookError instanceof Error ? hookError.message : String(hookError),\n });\n\n if (hooks.onError) {\n try {\n await hooks.onError(hookError, phase, event);\n } catch (onErrorFailure) {\n this.logger.warn('Platform lifecycle onError hook failed', {\n hookId,\n phase,\n error: onErrorFailure instanceof Error ? onErrorFailure.message : String(onErrorFailure),\n });\n }\n }\n }\n }\n }\n\n /**\n * Emit lifecycle error to registered onError hooks.\n */\n async emitLifecycleError(\n error: unknown,\n phase: PlatformLifecyclePhase,\n context: Omit<PlatformLifecycleContext, 'phase'> = {}\n ): Promise<void> {\n const event: PlatformLifecycleContext = { phase, ...context, error };\n\n for (const [hookId, hooks] of this.lifecycleHooks.entries()) {\n if (!hooks.onError) {\n continue;\n }\n\n try {\n await hooks.onError(error, phase, event);\n } catch (onErrorFailure) {\n this.logger.warn('Platform lifecycle onError hook failed', {\n hookId,\n phase,\n error: onErrorFailure instanceof Error ? onErrorFailure.message : String(onErrorFailure),\n });\n }\n }\n }\n\n /**\n * Check if a service is explicitly configured (not using fallback).\n *\n * @example\n * ```typescript\n * // Core adapter — type-safe, autocomplete works\n * platform.isConfigured('llm'); // ✅\n * platform.isConfigured('vectorStore'); // ✅\n * platform.isConfigured('unknown'); // ❌ compile error\n *\n * // Extension adapter — generic string\n * platform.isConfigured('myCustomAdapter'); // ✅ string overload\n * ```\n *\n * @param service - Adapter/service name\n * @returns true if explicitly configured, false if using NoOp/fallback\n */\n isConfigured<K extends CoreAdapterName>(service: K): boolean;\n isConfigured(service: string): boolean;\n isConfigured(service: string): boolean {\n // Check if it's an adapter\n if (this.adapters.has(service)) {\n return true;\n }\n // Check core features\n if (this.initialized) {\n const coreFeatures = ['workflows', 'jobScheduler', 'cron', 'resources', 'jobs'];\n if (coreFeatures.includes(service)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Get list of all configured services (adapters + core features).\n * Used for validating plugin platform requirements.\n */\n getConfiguredServices(): Set<string> {\n const services = new Set<string>();\n\n // Adapters\n for (const key of this.adapters.keys()) {\n services.add(key);\n }\n\n // Core features (always available after init)\n if (this.initialized) {\n services.add('workflows');\n services.add('jobScheduler');\n services.add('cron');\n services.add('resources');\n }\n\n // Resource broker (if initialized)\n if (this._resourceBroker) {\n services.add('resourceBroker');\n }\n\n if (this._environmentManager) {\n services.add('environmentManager');\n }\n if (this._workspaceManager) {\n services.add('workspaceManager');\n }\n if (this._snapshotManager) {\n services.add('snapshotManager');\n }\n if (this._runExecutor) {\n services.add('runExecutor');\n }\n if (this._runOrchestrator) {\n services.add('runOrchestrator');\n }\n\n return services;\n }\n\n /** Analytics adapter (fallback: NoOpAnalytics) */\n get analytics(): IAnalytics {\n return (this.adapters.get('analytics') as IAnalytics) ?? new NoOpAnalytics();\n }\n\n /** Vector store adapter (fallback: MemoryVectorStore) */\n get vectorStore(): IVectorStore {\n return (this.adapters.get('vectorStore') as IVectorStore) ?? new MemoryVectorStore();\n }\n\n /** LLM adapter (fallback: MockLLM) */\n get llm(): ILLM {\n return (this.adapters.get('llm') as ILLM) ?? new MockLLM();\n }\n\n /** Embeddings adapter (fallback: MockEmbeddings) */\n get embeddings(): IEmbeddings {\n return (this.adapters.get('embeddings') as IEmbeddings) ?? new MockEmbeddings();\n }\n\n /** Cache adapter (fallback: MemoryCache) */\n get cache(): ICache {\n return (this.adapters.get('cache') as ICache) ?? new MemoryCache();\n }\n\n /** Config adapter (fallback: NoOpConfig) */\n get config(): IConfig {\n return (this.adapters.get('config') as IConfig) ?? new NoOpConfig();\n }\n\n /** Storage adapter (fallback: MemoryStorage) */\n get storage(): IStorage {\n return (this.adapters.get('storage') as IStorage) ?? new MemoryStorage();\n }\n\n /** Logger adapter (fallback: ConsoleLogger) */\n get logger(): ILogger {\n return (this.adapters.get('logger') as ILogger) ?? new ConsoleLogger();\n }\n\n /** Event bus adapter (fallback: MemoryEventBus) */\n get eventBus(): IEventBus {\n return (this.adapters.get('eventBus') as IEventBus) ?? new MemoryEventBus();\n }\n\n /** Inter-plugin invocation adapter (fallback: NoOpInvoke) */\n get invoke(): IInvoke {\n return (this.adapters.get('invoke') as IInvoke) ?? new NoOpInvoke();\n }\n\n /** SQL database adapter (fallback: NoOpSQLDatabase — throws on use) */\n get sqlDatabase(): ISQLDatabase {\n return (this.adapters.get('sqlDatabase') as ISQLDatabase) ?? new NoOpSQLDatabase();\n }\n\n /** Document database adapter (fallback: NoOpDocumentDatabase — throws on use) */\n get documentDatabase(): IDocumentDatabase {\n return (this.adapters.get('documentDatabase') as IDocumentDatabase) ?? new NoOpDocumentDatabase();\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // SERVICES (derived from adapters, lazy-initialized)\n // ═══════════════════════════════════════════════════════════════════════════\n\n private _logQueryService?: ILogReader;\n\n /**\n * Unified log query service.\n * Automatically uses configured backends (logPersistence, logRingBuffer).\n *\n * @example\n * ```typescript\n * // Query logs\n * const result = await platform.logs.query({ level: 'error' });\n *\n * // Get log by ID\n * const log = await platform.logs.getById('log-123');\n *\n * // Full-text search\n * const results = await platform.logs.search('authentication failed');\n *\n * // Subscribe to real-time stream\n * const unsubscribe = platform.logs.subscribe((log) => console.log(log));\n * ```\n */\n get logs(): ILogReader {\n if (!this._logQueryService) {\n const persistence = this.getAdapter<ILogPersistence>('logPersistence');\n const buffer = this.logger.getLogBuffer?.();\n\n this._logQueryService = new HybridLogReader(persistence, buffer);\n }\n return this._logQueryService!;\n }\n\n // ═══════════════════════════════════════════════════════════════════════════\n // CORE FEATURES (built-in, initialized during platform init)\n // ═══════════════════════════════════════════════════════════════════════════\n\n private _workflows?: IWorkflowEngine;\n private _jobs?: IJobScheduler;\n private _cron?: ICronManager;\n private _resources?: IResourceManager;\n private _resourceBroker?: IResourceBroker;\n private _socketServer?: { getSocketPath(): string };\n private _executionBackend?: IExecutionBackend;\n private _environmentManager?: EnvironmentManager;\n private _workspaceManager?: WorkspaceManager;\n private _snapshotManager?: SnapshotManager;\n private _runExecutor?: RunExecutor;\n private _runOrchestrator?: RunOrchestrator;\n\n /** Workflow engine (throws if not initialized) */\n get workflows(): IWorkflowEngine {\n if (!this._workflows) {\n // Return NoOp if not initialized for graceful degradation\n return new NoOpWorkflowEngine();\n }\n return this._workflows;\n }\n\n /** Job scheduler (throws if not initialized) */\n get jobs(): IJobScheduler {\n if (!this._jobs) {\n return new NoOpJobScheduler();\n }\n return this._jobs;\n }\n\n /** Cron manager (throws if not initialized) */\n get cron(): ICronManager {\n if (!this._cron) {\n return new NoOpCronManager();\n }\n return this._cron;\n }\n\n /** Resource manager (throws if not initialized) */\n get resources(): IResourceManager {\n if (!this._resources) {\n return new NoOpResourceManager();\n }\n return this._resources;\n }\n\n /**\n * Resource broker for rate limiting, queueing, and retry.\n * @throws Error if not initialized\n */\n get resourceBroker(): IResourceBroker {\n if (!this._resourceBroker) {\n throw new Error('ResourceBroker not initialized. Call initPlatform() first.');\n }\n return this._resourceBroker;\n }\n\n /**\n * Check if resource broker is initialized.\n */\n get hasResourceBroker(): boolean {\n return this._resourceBroker !== undefined;\n }\n\n /**\n * Initialize core features.\n * Called internally by initPlatform().\n */\n initCoreFeatures(\n workflows: IWorkflowEngine,\n jobs: IJobScheduler,\n cron: ICronManager,\n resources: IResourceManager\n ): void {\n this._workflows = workflows;\n this._jobs = jobs;\n this._cron = cron;\n this._resources = resources;\n this.initialized = true;\n }\n\n /**\n * Initialize resource broker.\n * Called internally by initPlatform().\n */\n initResourceBroker(broker: IResourceBroker): void {\n this._resourceBroker = broker;\n }\n\n /**\n * Initialize Unix socket server.\n * Called internally by initPlatform() in parent process.\n */\n initSocketServer(server: { getSocketPath(): string }): void {\n this._socketServer = server;\n }\n\n /**\n * Get socket path for IPC communication.\n * Returns undefined if not running in parent process.\n */\n getSocketPath(): string | undefined {\n return this._socketServer?.getSocketPath();\n }\n\n /**\n * Initialize execution backend.\n * Called internally by initPlatform() AFTER adapters, BEFORE core features.\n *\n * @param backend - ExecutionBackend instance (from @kb-labs/plugin-execution)\n */\n initExecutionBackend(backend: IExecutionBackend): void {\n if (this._executionBackend) {\n this.logger.warn('ExecutionBackend already initialized, replacing');\n }\n this._executionBackend = backend;\n this.logger.debug('ExecutionBackend initialized', {\n mode: backend.constructor.name,\n });\n }\n\n /**\n * Get execution backend.\n * Returns the initialized backend or throws if not initialized.\n *\n * @throws Error if ExecutionBackend not initialized via initPlatform()\n * @returns ExecutionBackend instance\n */\n get executionBackend(): IExecutionBackend {\n if (!this._executionBackend) {\n throw new Error(\n 'ExecutionBackend not initialized. ' +\n 'Call initPlatform() with execution config to initialize ExecutionBackend.'\n );\n }\n return this._executionBackend;\n }\n\n /**\n * Check if execution backend is initialized.\n */\n get hasExecutionBackend(): boolean {\n return !!this._executionBackend;\n }\n\n /**\n * Initialize orchestration services.\n * Called internally by initPlatform() after ExecutionBackend init.\n */\n initOrchestrationServices(\n environmentManager: EnvironmentManager,\n runExecutor: RunExecutor,\n runOrchestrator: RunOrchestrator\n ): void {\n this._environmentManager = environmentManager;\n this._runExecutor = runExecutor;\n this._runOrchestrator = runOrchestrator;\n }\n\n /**\n * Initialize infrastructure capability services.\n * Called internally by initPlatform().\n */\n initCapabilityServices(\n workspaceManager: WorkspaceManager,\n snapshotManager: SnapshotManager\n ): void {\n this._workspaceManager = workspaceManager;\n this._snapshotManager = snapshotManager;\n }\n\n /**\n * Environment manager service.\n */\n get environmentManager(): EnvironmentManager {\n if (!this._environmentManager) {\n throw new Error(\n 'EnvironmentManager not initialized. Call initPlatform() first.'\n );\n }\n return this._environmentManager;\n }\n\n /**\n * Workspace manager service.\n */\n get workspaceManager(): WorkspaceManager {\n if (!this._workspaceManager) {\n throw new Error(\n 'WorkspaceManager not initialized. Call initPlatform() first.'\n );\n }\n return this._workspaceManager;\n }\n\n /**\n * Snapshot manager service.\n */\n get snapshotManager(): SnapshotManager {\n if (!this._snapshotManager) {\n throw new Error(\n 'SnapshotManager not initialized. Call initPlatform() first.'\n );\n }\n return this._snapshotManager;\n }\n\n /**\n * Run executor service.\n */\n get runExecutor(): RunExecutor {\n if (!this._runExecutor) {\n throw new Error('RunExecutor not initialized. Call initPlatform() first.');\n }\n return this._runExecutor;\n }\n\n /**\n * Run orchestrator service.\n */\n get runOrchestrator(): RunOrchestrator {\n if (!this._runOrchestrator) {\n throw new Error(\n 'RunOrchestrator not initialized. Call initPlatform() first.'\n );\n }\n return this._runOrchestrator;\n }\n\n /**\n * Check if platform is initialized.\n */\n get isInitialized(): boolean {\n return this.initialized;\n }\n\n /**\n * Reset platform to initial state.\n * Clears all adapters and core features.\n * Used primarily for testing.\n */\n reset(): void {\n this.adapters.clear();\n this.lifecycleHooks.clear();\n this._workflows = undefined;\n this._jobs = undefined;\n this._cron = undefined;\n this._resources = undefined;\n this._resourceBroker = undefined;\n this._socketServer = undefined;\n this._executionBackend = undefined;\n this._environmentManager = undefined;\n this._workspaceManager = undefined;\n this._snapshotManager = undefined;\n this._runExecutor = undefined;\n this._runOrchestrator = undefined;\n this.initialized = false;\n }\n\n /**\n * Shutdown platform gracefully.\n * Closes all resources, stops workers, cleanup.\n */\n async shutdown(): Promise<void> {\n await this.emitLifecyclePhase('beforeShutdown', {\n reason: 'platform.shutdown',\n metadata: {\n adapterCount: this.adapters.size,\n hasExecutionBackend: !!this._executionBackend,\n },\n });\n\n // Shutdown execution backend (closes worker pool)\n if (this._executionBackend) {\n try {\n await this._executionBackend.shutdown();\n } catch (error) {\n this.logger.warn('ExecutionBackend shutdown failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n if (this._environmentManager) {\n try {\n await this._environmentManager.shutdown();\n } catch (error) {\n this.logger.warn('EnvironmentManager shutdown failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n if (this._workspaceManager) {\n try {\n await this._workspaceManager.shutdown();\n } catch (error) {\n this.logger.warn('WorkspaceManager shutdown failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n if (this._snapshotManager) {\n try {\n await this._snapshotManager.shutdown();\n } catch (error) {\n this.logger.warn('SnapshotManager shutdown failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Gracefully close adapters that expose close()/dispose()/shutdown()\n for (const [adapterId, adapter] of this.adapters.entries()) {\n if (!adapter || adapter === this._executionBackend) {\n continue;\n }\n\n const candidate = adapter as {\n close?: () => Promise<void> | void;\n dispose?: () => Promise<void> | void;\n shutdown?: () => Promise<void> | void;\n };\n\n try {\n if (typeof candidate.close === 'function') {\n await candidate.close.call(adapter);\n } else if (typeof candidate.dispose === 'function') {\n await candidate.dispose.call(adapter);\n } else if (typeof candidate.shutdown === 'function') {\n await candidate.shutdown.call(adapter);\n }\n } catch (error) {\n this.logger.warn('Adapter shutdown failed', {\n adapterId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // TODO: Shutdown other resources (workflows, jobs, cron, etc.)\n await this.emitLifecyclePhase('shutdown', {\n reason: 'platform.shutdown',\n metadata: {\n adapterCount: this.adapters.size,\n },\n });\n }\n}\n\n/**\n * Cross-realm Symbol for platform singleton.\n *\n * Uses Symbol.for() which creates a GLOBAL symbol that works across:\n * - CJS (require('@kb-labs/core-runtime'))\n * - ESM (import '@kb-labs/core-runtime')\n * - Worker Threads (sandbox workers)\n *\n * Symbol.for() is the standard way to create cross-realm symbols:\n * - React uses Symbol.for('react.element')\n * - Redux uses Symbol.for('redux.observable')\n * - This is NOT a hack - it's official JavaScript API\n *\n * Storage: We use `process` instead of `globalThis` because:\n * - `globalThis` is DIFFERENT between CJS and ESM module realms\n * - `process` is the ONLY object shared across all module types in Node.js\n * - This ensures true singleton behavior across the entire Node.js process\n */\nconst PLATFORM_SINGLETON_KEY = Symbol.for('kb.platform');\n\n/**\n * Type augmentation for process to track platform singleton.\n * This makes TypeScript aware of our platform storage.\n */\ndeclare global {\n var __KB_PLATFORM_SINGLETON__: PlatformContainer | undefined;\n}\n\n// Helper to access the singleton via Symbol.for()\nfunction getPlatformFromProcess(): PlatformContainer | undefined {\n return (process as any)[PLATFORM_SINGLETON_KEY];\n}\n\nfunction setPlatformInProcess(platform: PlatformContainer): void {\n (process as any)[PLATFORM_SINGLETON_KEY] = platform;\n}\n\n/**\n * Global platform container singleton.\n *\n * Uses Symbol.for() + process for TRUE cross-realm singleton:\n * - Works across CJS (CLI bin.cjs) and ESM (sandbox workers)\n * - All worker threads share the same process object\n * - Each Docker container gets its own process (correct isolation!)\n *\n * This ensures:\n * ✅ One QdrantVectorStore instance per Node.js process\n * ✅ One Logger instance per Node.js process\n * ✅ One Analytics adapter per Node.js process\n * ✅ All sandbox workers share adapters (resource efficiency)\n * ✅ Docker containers are isolated (security for paranoid mode)\n */\nexport const platform: PlatformContainer = (() => {\n // Check if singleton already exists\n const existing = getPlatformFromProcess();\n\n if (existing && typeof existing.setAdapter === 'function' && typeof existing.getAdapter === 'function') {\n return existing;\n }\n\n // Create new singleton and store in process\n const newPlatform = new PlatformContainer();\n setPlatformInProcess(newPlatform);\n return newPlatform;\n})();\n","/**\n * @module @kb-labs/core-runtime/discover-adapters\n * Auto-discovery of adapters from workspace packages.\n *\n * Similar to CLI plugin discovery, this scans kb-labs-adapters/packages/*\n * and loads adapters by file path (not package name).\n */\n\nimport { promises as fs } from 'node:fs';\nimport { pathToFileURL } from 'node:url';\nimport path from 'node:path';\nimport { glob } from 'glob';\n\n/**\n * Discovered adapter info\n */\nexport interface DiscoveredAdapter {\n /** Package name (e.g., \"@kb-labs/adapters-openai\") */\n packageName: string;\n /** Absolute path to package root */\n pkgRoot: string;\n /** Adapter factory function */\n createAdapter: (config?: any) => any;\n /** Adapter module (full exports) */\n module: any;\n}\n\n/**\n * Read package.json at given path\n */\nasync function readPackageJson(pkgPath: string): Promise<any> {\n try {\n const content = await fs.readFile(pkgPath, 'utf8');\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n\n/**\n * Load adapter module by file path (ESM import)\n */\nasync function loadAdapterModule(distPath: string): Promise<any> {\n const fileUrl = pathToFileURL(distPath).href;\n return import(fileUrl);\n}\n\n/**\n * Check if package is an adapter (has @kb-labs/adapters-* name)\n */\nfunction isAdapterPackage(pkg: any): boolean {\n return pkg?.name?.startsWith('@kb-labs/adapters-');\n}\n\n/**\n * Discover adapters from workspace packages.\n * Scans kb-labs-adapters/packages/* and loads built adapters.\n *\n * @param cwd - Workspace root directory\n * @returns Map of package names to adapter info\n *\n * @example\n * ```typescript\n * const adapters = await discoverAdapters('/Users/kb-labs');\n * const openai = adapters.get('@kb-labs/adapters-openai');\n * if (openai) {\n * const llm = openai.createAdapter({ model: 'gpt-4' });\n * }\n * ```\n */\nexport async function discoverAdapters(cwd: string): Promise<Map<string, DiscoveredAdapter>> {\n const discovered = new Map<string, DiscoveredAdapter>();\n\n // Scan kb-labs-adapters/packages/*\n const adaptersBase = path.join(cwd, 'kb-labs-adapters', 'packages');\n\n try {\n // Check if kb-labs-adapters exists\n await fs.access(adaptersBase);\n } catch {\n // kb-labs-adapters not found, return empty map\n return discovered;\n }\n\n // Find all package.json files\n const pkgPattern = path.join(adaptersBase, '*/package.json');\n const pkgFiles = await glob(pkgPattern, {\n cwd: adaptersBase,\n absolute: false,\n });\n\n // Load each adapter package\n for (const pkgFile of pkgFiles) {\n const pkgPath = path.join(adaptersBase, pkgFile);\n const pkgRoot = path.dirname(pkgPath);\n const pkg = await readPackageJson(pkgPath);\n\n if (!pkg || !isAdapterPackage(pkg)) {\n continue;\n }\n\n // Find main export (dist/index.js)\n const distPath = path.join(pkgRoot, pkg.main || 'dist/index.js');\n\n try {\n // Check if dist exists (package must be built)\n await fs.access(distPath);\n\n // Load module\n const module = await loadAdapterModule(distPath);\n\n // Check for createAdapter export\n if (typeof module.createAdapter !== 'function') {\n // Skip adapters without createAdapter export (e.g., pino-http is a helper, not an adapter)\n continue;\n }\n\n discovered.set(pkg.name, {\n packageName: pkg.name,\n pkgRoot,\n createAdapter: module.createAdapter,\n module,\n });\n } catch {\n // Silently skip adapters that fail to load (likely not built yet)\n }\n }\n\n return discovered;\n}\n\n/**\n * Resolve adapter path - tries discovery first, falls back to package name import.\n *\n * @param adapterPath - Package name or file path\n * @param cwd - Workspace root directory\n * @returns Adapter factory function\n *\n * @example\n * ```typescript\n * // Try to discover first (workspace)\n * const adapter = await resolveAdapter('@kb-labs/adapters-openai', cwd);\n *\n * // Falls back to dynamic import if not found in workspace\n * const adapter = await resolveAdapter('@kb-labs/adapters-openai', cwd);\n * ```\n */\nexport async function resolveAdapter(\n adapterPath: string,\n cwd: string\n): Promise<((config?: any) => any) | null> {\n // Try workspace discovery first\n const discovered = await discoverAdapters(cwd);\n\n // Check for subpath exports (e.g., \"@kb-labs/adapters-openai/embeddings\")\n const basePkgName = adapterPath.split('/').slice(0, 2).join('/'); // \"@kb-labs/adapters-openai\"\n const subpath = adapterPath.includes('/') ? adapterPath.split('/').slice(2).join('/') : null; // \"embeddings\"\n\n const adapter = discovered.get(basePkgName);\n\n if (adapter && subpath) {\n // Load subpath export from workspace adapter\n const subpathFile = path.join(adapter.pkgRoot, 'dist', `${subpath}.js`);\n try {\n await fs.access(subpathFile);\n const module = await loadAdapterModule(subpathFile);\n if (typeof module.createAdapter === 'function') {\n return module.createAdapter;\n }\n if (typeof module.default === 'function') {\n return module.default;\n }\n } catch {\n // Silently skip subpath that fails to load\n }\n } else if (adapter) {\n return adapter.createAdapter;\n }\n\n // Fallback: try dynamic import (for npm-installed adapters)\n try {\n const module = await import(adapterPath);\n if (typeof module.createAdapter === 'function') {\n return module.createAdapter;\n }\n if (typeof module.default === 'function') {\n return module.default;\n }\n return null;\n } catch {\n return null;\n }\n}\n","/**\n * @module @kb-labs/core-runtime/transport\n * Abstract transport layer for cross-process adapter communication.\n *\n * Provides a transport-agnostic interface for sending adapter calls\n * between parent and child processes. Implementations can use:\n * - IPC (process.send/process.on('message'))\n * - HTTP REST API\n * - Docker exec\n * - gRPC\n * - WebSockets\n *\n * @example\n * ```typescript\n * import { ITransport, IPCTransport } from '@kb-labs/core-runtime/transport';\n *\n * const transport: ITransport = new IPCTransport();\n * const response = await transport.send({\n * type: 'adapter:call',\n * requestId: 'uuid-123',\n * adapter: 'vectorStore',\n * method: 'search',\n * args: [[0.1, 0.2, 0.3], 10],\n * });\n * ```\n */\n\nimport type { AdapterCall, AdapterResponse } from '@kb-labs/core-platform/serializable';\n\n/**\n * Transport configuration options.\n */\nexport interface TransportConfig {\n /**\n * Default timeout for adapter calls in milliseconds.\n * @default 30000 (30 seconds)\n */\n timeout?: number;\n\n /**\n * Number of retry attempts for transient errors.\n * @default 0 (no retries)\n */\n retries?: number;\n\n /**\n * Delay between retry attempts in milliseconds.\n * @default 1000 (1 second)\n */\n retryDelay?: number;\n\n /**\n * Exponential backoff multiplier for retries.\n * @default 2 (doubles delay each retry)\n */\n backoffMultiplier?: number;\n}\n\n/**\n * Abstract transport for sending adapter calls.\n *\n * Implementations must handle:\n * - Reliable message delivery\n * - Timeout enforcement\n * - Error propagation\n * - Resource cleanup\n *\n * Thread-safety: Implementations must be safe to call concurrently\n * from multiple async contexts.\n */\nexport interface ITransport {\n /**\n * Send adapter call and await response.\n *\n * @param call - Adapter method call to send\n * @returns Response with result or error\n * @throws TransportError if communication fails\n * @throws TimeoutError if timeout exceeded\n * @throws SerializationError if message cannot be serialized\n *\n * @example\n * ```typescript\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: 5000,\n * };\n *\n * const response = await transport.send(call);\n * if (response.error) {\n * throw deserialize(response.error);\n * }\n * return deserialize(response.result);\n * ```\n */\n send(call: AdapterCall): Promise<AdapterResponse>;\n\n /**\n * Close transport and cleanup resources.\n *\n * After close():\n * - No new calls can be sent\n * - Pending calls are rejected with TransportError\n * - Listeners/connections are cleaned up\n *\n * @example\n * ```typescript\n * await transport.close();\n * // All pending calls rejected\n * // transport.send() will throw TransportError\n * ```\n */\n close(): Promise<void>;\n\n /**\n * Check if transport is closed.\n */\n isClosed(): boolean;\n}\n\n/**\n * Base error for transport failures.\n */\nexport class TransportError extends Error {\n public override readonly cause?: Error;\n\n constructor(message: string, cause?: Error) {\n super(message);\n this.name = 'TransportError';\n this.cause = cause;\n if (cause) {\n this.stack = `${this.stack}\\nCaused by: ${cause.stack}`;\n }\n }\n}\n\n/**\n * Error thrown when adapter call times out.\n */\nexport class TimeoutError extends TransportError {\n public readonly timeoutMs: number;\n\n constructor(message: string, timeoutMs: number) {\n super(message);\n this.name = 'TimeoutError';\n this.timeoutMs = timeoutMs;\n }\n}\n\n/**\n * Error thrown when circuit breaker is open.\n */\nexport class CircuitOpenError extends TransportError {\n constructor(message: string) {\n super(message);\n this.name = 'CircuitOpenError';\n }\n}\n\n/**\n * Check if error is retryable (transient failure).\n *\n * Retryable errors:\n * - Network timeouts (TimeoutError)\n * - Connection errors (ECONNRESET, ECONNREFUSED, ETIMEDOUT)\n * - Temporary server errors (503 Service Unavailable)\n *\n * Non-retryable errors:\n * - Invalid requests (400 Bad Request)\n * - Authentication failures (401, 403)\n * - Not found (404)\n * - Application errors from adapter (e.g., VectorStoreError)\n *\n * @param error - Error to check\n * @returns true if error should be retried\n */\nexport function isRetryableError(error: Error): boolean {\n // Timeout errors are retryable\n if (error instanceof TimeoutError) {\n return true;\n }\n\n // Circuit breaker open is NOT retryable (wait for half-open state)\n if (error instanceof CircuitOpenError) {\n return false;\n }\n\n // Check error code for network errors\n const code = (error as any).code;\n if (code) {\n const retryableCodes = [\n 'ECONNRESET', // Connection reset\n 'ECONNREFUSED', // Connection refused\n 'ETIMEDOUT', // Operation timed out\n 'ENOTFOUND', // DNS lookup failed\n 'EAI_AGAIN', // DNS temporary failure\n ];\n return retryableCodes.includes(code);\n }\n\n // Check HTTP status for server errors\n const status = (error as any).status || (error as any).statusCode;\n if (status) {\n // 503 Service Unavailable is retryable\n // 429 Too Many Requests is retryable\n return status === 503 || status === 429;\n }\n\n // Default: not retryable\n return false;\n}\n\n/**\n * Internal pending request tracking.\n * Used by transport implementations to match responses with requests.\n */\nexport interface PendingRequest {\n resolve: (response: AdapterResponse) => void;\n reject: (error: Error) => void;\n timer: NodeJS.Timeout;\n}\n","/**\n * @module @kb-labs/core-runtime/transport/timeout-config\n * Declarative timeout configuration for adapter operations.\n *\n * Different adapter operations have different performance characteristics:\n * - Fast operations (cache, simple queries): 5-30s\n * - Medium operations (embeddings, search): 30-60s\n * - Slow operations (bulk upsert, batch embeddings): 60-180s\n *\n * These timeouts account for:\n * 1. Network latency (Unix Socket is fast, but operation itself may be slow)\n * 2. Backend processing time (Qdrant upsert, OpenAI API calls)\n * 3. Safety margin (P95 latency + buffer)\n *\n * @example\n * ```typescript\n * import { getOperationTimeout } from './timeout-config';\n *\n * const timeout = getOperationTimeout('vectorStore', 'upsert');\n * // Returns 120000 (2 minutes)\n * ```\n */\n\n/**\n * Timeout configuration map.\n * Key format: \"adapter.method\" or \"adapter.*\" for wildcard.\n */\nexport const OPERATION_TIMEOUTS: Record<string, number> = {\n // === VectorStore operations ===\n // Bulk upsert is slow (Qdrant indexing overhead)\n 'vectorStore.upsert': 120_000, // 2 minutes\n\n // Search operations - medium latency\n 'vectorStore.search': 30_000, // 30 seconds\n 'vectorStore.hybridSearch': 45_000, // 45 seconds (BM25 + vector)\n\n // Bulk retrieval - potentially large result sets\n 'vectorStore.get': 120_000, // 2 minutes (retrieving many vectors)\n 'vectorStore.query': 120_000, // 2 minutes (metadata filtering + retrieval)\n\n // Collection management - fast\n 'vectorStore.createCollection': 15_000,\n 'vectorStore.deleteCollection': 15_000,\n 'vectorStore.collectionExists': 5_000,\n\n // === Embeddings operations ===\n // Single embed - OpenAI API latency\n 'embeddings.embed': 30_000, // 30 seconds\n\n // Batch embeddings - OpenAI processes in parallel, but may rate limit\n 'embeddings.embedBatch': 120_000, // 2 minutes\n\n // Dimension check - fast property access\n 'embeddings.getDimensions': 5_000,\n\n // === LLM operations ===\n // Text generation - depends on output length\n 'llm.generate': 90_000, // 1.5 minutes\n 'llm.generateStream': 120_000, // 2 minutes (streaming may take longer)\n\n // === Cache operations ===\n // Cache is fast (Redis or in-memory)\n 'cache.get': 5_000,\n 'cache.set': 5_000,\n 'cache.delete': 5_000,\n 'cache.clear': 10_000,\n 'cache.has': 5_000,\n\n // === Storage operations ===\n // File I/O - medium latency\n 'storage.read': 15_000,\n 'storage.write': 30_000,\n 'storage.delete': 10_000,\n 'storage.exists': 5_000,\n 'storage.list': 20_000,\n\n // === Wildcard defaults ===\n // Default timeout for any vectorStore operation not listed above\n 'vectorStore.*': 60_000,\n\n // Default timeout for any embeddings operation\n 'embeddings.*': 60_000,\n\n // Default timeout for any LLM operation\n 'llm.*': 90_000,\n\n // Default timeout for any cache operation\n 'cache.*': 10_000,\n\n // Default timeout for any storage operation\n 'storage.*': 30_000,\n\n // === Global fallback ===\n // Used when no specific rule matches\n '*': 30_000, // 30 seconds default\n};\n\n/**\n * Get timeout for a specific adapter operation.\n *\n * Priority:\n * 1. Explicit \"adapter.method\" match\n * 2. Wildcard \"adapter.*\" match\n * 3. Global \"*\" fallback\n *\n * @param adapter - Adapter name (e.g., \"vectorStore\", \"embeddings\")\n * @param method - Method name (e.g., \"upsert\", \"search\")\n * @returns Timeout in milliseconds\n *\n * @example\n * ```typescript\n * getOperationTimeout('vectorStore', 'upsert'); // 120000\n * getOperationTimeout('vectorStore', 'unknownMethod'); // 60000 (wildcard)\n * getOperationTimeout('unknownAdapter', 'unknownMethod'); // 30000 (fallback)\n * ```\n */\nexport function getOperationTimeout(adapter: string, method: string): number {\n // Try exact match first\n const exactKey = `${adapter}.${method}`;\n if (exactKey in OPERATION_TIMEOUTS) {\n return OPERATION_TIMEOUTS[exactKey]!;\n }\n\n // Try adapter wildcard\n const wildcardKey = `${adapter}.*`;\n if (wildcardKey in OPERATION_TIMEOUTS) {\n return OPERATION_TIMEOUTS[wildcardKey]!;\n }\n\n // Global fallback\n return OPERATION_TIMEOUTS['*']!;\n}\n\n/**\n * Get timeout for an adapter call with priority chain:\n * 1. Explicit call.timeout (highest priority)\n * 2. Config timeout from transport\n * 3. Operation-specific timeout\n * 4. Global fallback (lowest priority)\n *\n * @param call - Adapter call with optional timeout\n * @param configTimeout - Transport-level default timeout\n * @returns Final timeout to use in milliseconds\n *\n * @example\n * ```typescript\n * // Explicit timeout takes priority\n * selectTimeout({ adapter: 'vectorStore', method: 'upsert', timeout: 60000 }, 30000);\n * // Returns 60000\n *\n * // Config timeout takes priority over operation timeout\n * selectTimeout({ adapter: 'vectorStore', method: 'upsert' }, 90000);\n * // Returns 90000\n *\n * // Operation timeout used when no explicit override\n * selectTimeout({ adapter: 'vectorStore', method: 'upsert' }, undefined);\n * // Returns 120000\n * ```\n */\nexport function selectTimeout(\n call: { adapter: string; method: string; timeout?: number },\n configTimeout?: number\n): number {\n // Priority 1: Explicit call timeout\n if (call.timeout !== undefined) {\n return call.timeout;\n }\n\n // Priority 2: Transport config timeout\n if (configTimeout !== undefined) {\n return configTimeout;\n }\n\n // Priority 3: Operation-specific timeout\n return getOperationTimeout(call.adapter, call.method);\n}\n","/**\n * @module @kb-labs/core-runtime/transport\n * Unix Domain Socket transport for high-throughput IPC.\n *\n * Unix sockets provide 100-1000x better performance than process.send()\n * for large messages (>16KB), making them ideal for bulk operations like\n * VectorStore upsert with thousands of vectors.\n *\n * @example\n * ```typescript\n * import { UnixSocketTransport } from '@kb-labs/core-runtime/transport';\n *\n * // In child process\n * const transport = new UnixSocketTransport({ socketPath: '/tmp/kb-ipc.sock' });\n * const response = await transport.send(call);\n * await transport.close();\n * ```\n */\n\nimport * as net from 'net';\nimport type { AdapterCall, AdapterResponse } from '@kb-labs/core-platform/serializable';\nimport { isAdapterResponse } from '@kb-labs/core-platform/serializable';\nimport {\n type ITransport,\n type TransportConfig,\n type PendingRequest,\n TransportError,\n TimeoutError,\n} from './transport.js';\nimport { selectTimeout } from './timeout-config.js';\n\n/**\n * Configuration for Unix Socket transport.\n */\nexport interface UnixSocketConfig extends TransportConfig {\n /** Path to Unix socket file (default: /tmp/kb-ipc.sock) */\n socketPath?: string;\n /** Reconnect on disconnect (default: true) */\n autoReconnect?: boolean;\n /** Max reconnect attempts (default: 3) */\n maxReconnectAttempts?: number;\n}\n\n/**\n * Unix Domain Socket transport for high-performance IPC.\n *\n * Features:\n * - 100-1000x faster than process.send() for large messages\n * - No backpressure issues (TCP flow control handles it)\n * - Auto-reconnect on connection loss\n * - Message framing with newline delimiter\n *\n * Performance:\n * - process.send(): ~16KB buffer, 250-300s for 40MB\n * - Unix socket: ~1-2 GB/s throughput, <1s for 40MB\n */\nexport class UnixSocketTransport implements ITransport {\n private socket: net.Socket | null = null;\n private pending = new Map<string, PendingRequest>();\n private closed = false;\n private connecting = false;\n private buffer = '';\n private reconnectAttempts = 0;\n\n constructor(private config: UnixSocketConfig = {}) {}\n\n /**\n * Connect to Unix socket server.\n * Called lazily on first send() or explicitly.\n */\n async connect(): Promise<void> {\n if (this.socket && !this.socket.destroyed) {\n return; // Already connected\n }\n\n if (this.connecting) {\n // Wait for existing connection attempt\n await new Promise((resolve) => {\n setTimeout(resolve, 100);\n });\n return this.connect();\n }\n\n this.connecting = true;\n\n return new Promise((resolve, reject) => {\n const socketPath = this.config.socketPath ?? '/tmp/kb-ipc.sock';\n\n this.socket = net.connect(socketPath);\n\n this.socket.on('connect', () => {\n this.connecting = false;\n this.reconnectAttempts = 0;\n resolve();\n });\n\n this.socket.on('error', (error) => {\n this.connecting = false;\n\n // Try reconnect if enabled\n const maxAttempts = this.config.maxReconnectAttempts ?? 3;\n if (this.config.autoReconnect !== false && this.reconnectAttempts < maxAttempts) {\n this.reconnectAttempts++;\n setTimeout(() => this.connect(), 1000 * this.reconnectAttempts);\n return;\n }\n\n reject(new TransportError(`Unix socket connection failed: ${error.message}`, error));\n });\n\n this.socket.on('data', (data) => {\n this.handleData(data);\n });\n\n this.socket.on('close', () => {\n if (!this.closed && this.config.autoReconnect !== false) {\n // Unexpected close, try reconnect\n setTimeout(() => this.connect(), 1000);\n }\n });\n });\n }\n\n async send(call: AdapterCall): Promise<AdapterResponse> {\n if (this.closed) {\n throw new TransportError('Transport is closed');\n }\n\n // Ensure connected\n await this.connect();\n\n if (!this.socket || this.socket.destroyed) {\n throw new TransportError('Socket not available');\n }\n\n // Smart timeout selection based on operation type\n const timeout = selectTimeout(call, this.config.timeout);\n\n return new Promise((resolve, reject) => {\n // Create timeout timer\n const timer = setTimeout(() => {\n this.pending.delete(call.requestId);\n reject(new TimeoutError(`Adapter call timed out after ${timeout}ms`, timeout));\n }, timeout);\n\n // Store pending request\n this.pending.set(call.requestId, { resolve, reject, timer });\n\n // Send via Unix socket (newline-delimited JSON)\n const message = JSON.stringify(call) + '\\n';\n\n const written = this.socket!.write(message, 'utf8', (error) => {\n if (error) {\n const pending = this.pending.get(call.requestId);\n if (pending) {\n clearTimeout(pending.timer);\n this.pending.delete(call.requestId);\n reject(new TransportError(`Failed to write to socket: ${error.message}`, error));\n }\n }\n });\n\n // Unix sockets handle backpressure via TCP flow control\n // If write() returns false, 'drain' event will fire when ready\n if (!written) {\n this.socket!.once('drain', () => {\n // Socket ready for more data (TCP handled backpressure)\n });\n }\n });\n }\n\n /**\n * Handle incoming data from Unix socket.\n * Messages are newline-delimited JSON.\n */\n private handleData(data: Buffer): void {\n this.buffer += data.toString('utf8');\n\n // Process all complete messages (newline-delimited)\n let newlineIndex: number;\n while ((newlineIndex = this.buffer.indexOf('\\n')) !== -1) {\n const line = this.buffer.slice(0, newlineIndex);\n this.buffer = this.buffer.slice(newlineIndex + 1);\n\n if (line.trim().length === 0) {\n continue;\n }\n\n try {\n const msg = JSON.parse(line);\n this.handleMessage(msg);\n } catch {\n // Ignore parse errors - corrupt message or incomplete fragment\n }\n }\n }\n\n private handleMessage(msg: unknown): void {\n // Ignore non-response messages\n if (!isAdapterResponse(msg)) {\n return;\n }\n\n // Find pending request\n const pending = this.pending.get(msg.requestId);\n if (!pending) {\n // Response for unknown request (may have timed out)\n return;\n }\n\n // Clear timeout and remove from pending\n clearTimeout(pending.timer);\n this.pending.delete(msg.requestId);\n\n // Resolve with response\n pending.resolve(msg);\n }\n\n async close(): Promise<void> {\n if (this.closed) {\n return;\n }\n\n this.closed = true;\n\n // Close socket\n if (this.socket) {\n this.socket.destroy();\n this.socket = null;\n }\n\n // Reject all pending requests\n for (const [requestId, pending] of this.pending) {\n clearTimeout(pending.timer);\n pending.reject(new TransportError('Transport closed'));\n }\n this.pending.clear();\n }\n\n isClosed(): boolean {\n return this.closed;\n }\n}\n\n/**\n * Create UnixSocketTransport with configuration.\n *\n * @example\n * ```typescript\n * import { createUnixSocketTransport } from '@kb-labs/core-runtime/transport';\n *\n * const transport = createUnixSocketTransport({\n * socketPath: '/tmp/kb-ipc.sock',\n * timeout: 60000,\n * });\n * ```\n */\nexport function createUnixSocketTransport(config?: UnixSocketConfig): UnixSocketTransport {\n return new UnixSocketTransport(config);\n}\n","/**\n * @module @kb-labs/core-runtime/proxy\n * Generic base class for remote adapter proxies.\n *\n * This class provides the foundation for all IPC proxy adapters.\n * It handles serialization, transport, and error propagation automatically.\n *\n * @example\n * ```typescript\n * import { RemoteAdapter } from '@kb-labs/core-runtime/proxy';\n * import type { IVectorStore } from '@kb-labs/core-platform';\n *\n * class VectorStoreProxy extends RemoteAdapter<IVectorStore> implements IVectorStore {\n * constructor(transport: ITransport) {\n * super('vectorStore', transport);\n * }\n *\n * async search(query: number[], limit: number): Promise<VectorSearchResult[]> {\n * return this.callRemote('search', [query, limit]) as Promise<VectorSearchResult[]>;\n * }\n * }\n * ```\n */\n\nimport { randomUUID } from 'crypto';\nimport type { ITransport } from '../transport/transport';\nimport type { AdapterCall, AdapterType, AdapterCallContext } from '@kb-labs/core-platform/serializable';\nimport { serialize, deserialize, IPC_PROTOCOL_VERSION } from '@kb-labs/core-platform/serializable';\n\n/**\n * Generic base class for remote adapter proxies.\n *\n * Automatically handles:\n * - Method call serialization\n * - Transport communication\n * - Response deserialization\n * - Error propagation\n * - Context propagation (traceId, pluginId, etc.)\n *\n * Type parameter T should be the adapter interface (e.g., IVectorStore).\n */\nexport abstract class RemoteAdapter<T> {\n private context?: AdapterCallContext;\n\n /**\n * Create a remote adapter proxy.\n *\n * @param adapterName - Name of the adapter (e.g., 'vectorStore', 'cache')\n * @param transport - Transport layer for IPC communication\n * @param context - Optional execution context for tracing/debugging\n */\n constructor(\n private readonly adapterName: AdapterType,\n private readonly transport: ITransport,\n context?: AdapterCallContext\n ) {\n this.context = context;\n }\n\n /**\n * Set execution context for this adapter.\n * Context is included in all subsequent adapter calls for tracing/debugging.\n *\n * @param context - Execution context (traceId, pluginId, sessionId, etc.)\n *\n * @example\n * ```typescript\n * proxy.setContext({\n * traceId: 'trace-abc',\n * pluginId: '@kb-labs/mind',\n * sessionId: 'session-xyz',\n * });\n * ```\n */\n setContext(context: AdapterCallContext): void {\n this.context = context;\n }\n\n /**\n * Get current execution context.\n */\n getContext(): AdapterCallContext | undefined {\n return this.context;\n }\n\n /**\n * Call a method on the remote adapter (in parent process).\n *\n * This method:\n * 1. Generates a unique request ID\n * 2. Serializes the method arguments\n * 3. Sends the call via transport\n * 4. Waits for response\n * 5. Deserializes and returns the result (or throws error)\n *\n * @param method - Method name to call on the adapter\n * @param args - Method arguments (will be serialized)\n * @param timeout - Optional timeout in milliseconds (overrides transport default)\n * @returns Promise resolving to deserialized result\n * @throws Error if remote method throws or communication fails\n *\n * @example\n * ```typescript\n * // In VectorStoreProxy.search():\n * return this.callRemote('search', [query, limit, filter]);\n *\n * // With custom timeout for bulk operations:\n * return this.callRemote('upsert', [vectors], 120000); // 2 min timeout\n * ```\n */\n protected async callRemote(method: string, args: unknown[], timeout?: number): Promise<unknown> {\n // Generate unique request ID\n const requestId = randomUUID();\n\n // Create adapter call message with context (if available)\n const call: AdapterCall = {\n version: IPC_PROTOCOL_VERSION, // Protocol version for backward compatibility\n type: 'adapter:call',\n requestId,\n adapter: this.adapterName,\n method,\n args: args.map((arg) => serialize(arg)),\n timeout, // Optional timeout for this specific call\n context: this.context, // Include execution context for tracing/debugging\n };\n\n // Send via transport and await response\n const response = await this.transport.send(call);\n\n // Check for error in response\n if (response.error) {\n // Deserialize and throw error from parent\n throw deserialize(response.error);\n }\n\n // Deserialize and return result (or undefined for void methods)\n return response.result !== undefined ? deserialize(response.result) : undefined;\n }\n\n /**\n * Get the adapter name this proxy represents.\n */\n protected getAdapterName(): AdapterType {\n return this.adapterName;\n }\n\n /**\n * Get the transport used by this proxy.\n * Useful for advanced use cases (e.g., checking if transport is closed).\n */\n protected getTransport(): ITransport {\n return this.transport;\n }\n}\n","/**\n * @module @kb-labs/core-runtime/transport/bulk-transfer\n * Smart IPC transfer: inline for small payloads, temp files for large payloads.\n *\n * Problem:\n * - Unix Socket IPC has backpressure issues with large JSON payloads (>100KB)\n * - Serializing 50 vectors × 1536 floats causes 120s+ timeout\n *\n * Solution:\n * - Small payloads (< 1MB): inline JSON through IPC\n * - Large payloads (> 1MB): write to temp file, send only file ID through IPC\n *\n * Performance:\n * - Inline: ~1ms IPC overhead\n * - Temp file: ~50ms write + 1ms IPC + 30ms read = ~81ms total\n * - Qdrant upsert: 77ms\n * - Total: ~158ms per batch (vs 120s+ timeout)\n */\n\nimport { writeFile, readFile, unlink } from 'fs/promises';\nimport { unlinkSync } from 'fs';\nimport { tmpdir } from 'os';\nimport { join } from 'path';\n\n/**\n * Transfer protocol: inline JSON or temp file reference\n */\nexport interface BulkTransfer {\n type: 'inline' | 'file';\n payload: string; // JSON string if inline, absolute temp file path if file\n}\n\n/**\n * Configuration for bulk transfer behavior\n */\nexport interface BulkTransferOptions {\n /** Threshold: payloads larger than this use temp files (default: 1MB) */\n maxInlineSize: number;\n /** Directory for temp files (default: os.tmpdir()) */\n tempDir: string;\n}\n\n/**\n * Helper for smart IPC transfer with automatic inline/file decision\n */\nexport class BulkTransferHelper {\n /** Map of temp file IDs to file paths (for cleanup) */\n private static tempFiles = new Map<string, string>();\n\n /** Default options */\n private static defaultOptions: BulkTransferOptions = {\n maxInlineSize: 1_000_000, // 1MB\n tempDir: tmpdir(),\n };\n\n /**\n * Serialize data: inline for small, temp file for large\n *\n * @example\n * ```typescript\n * const transfer = await BulkTransferHelper.serialize(vectors, {\n * maxInlineSize: 1_000_000,\n * tempDir: '/tmp'\n * });\n *\n * if (transfer.type === 'inline') {\n * console.log('Using inline IPC');\n * } else {\n * console.log('Using temp file:', transfer.payload); // Absolute path like '/tmp/bulk-123.json'\n * }\n * ```\n */\n static async serialize<T>(\n data: T,\n options: Partial<BulkTransferOptions> = {}\n ): Promise<BulkTransfer> {\n const opts = { ...this.defaultOptions, ...options };\n const json = JSON.stringify(data);\n\n // Small payload: use inline IPC (fast path)\n if (json.length < opts.maxInlineSize) {\n return { type: 'inline', payload: json };\n }\n\n // Large payload: write to temp file (avoid IPC backpressure)\n const tempId = `bulk-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n const tempPath = join(opts.tempDir, `${tempId}.json`);\n\n await writeFile(tempPath, json, 'utf8');\n this.tempFiles.set(tempPath, tempPath); // Store by path for cleanup\n\n return { type: 'file', payload: tempPath }; // Return absolute path, not ID\n }\n\n /**\n * Deserialize from inline JSON or temp file\n *\n * @example\n * ```typescript\n * const transfer = { type: 'file', payload: '/tmp/bulk-123.json' };\n * const data = await BulkTransferHelper.deserialize<VectorRecord[]>(transfer);\n * ```\n */\n static async deserialize<T>(transfer: BulkTransfer): Promise<T> {\n if (transfer.type === 'inline') {\n return JSON.parse(transfer.payload);\n }\n\n // transfer.payload is now absolute temp file path (cross-process compatible)\n const tempPath = transfer.payload;\n\n try {\n const json = await readFile(tempPath, 'utf8');\n return JSON.parse(json);\n } finally {\n // Cleanup immediately after read\n await unlink(tempPath).catch(() => {\n // Ignore errors (file might already be deleted)\n });\n this.tempFiles.delete(tempPath); // Remove from cleanup map if exists\n }\n }\n\n /**\n * Check if object is a BulkTransfer\n */\n static isBulkTransfer(obj: unknown): obj is BulkTransfer {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'type' in obj &&\n 'payload' in obj &&\n (obj.type === 'inline' || obj.type === 'file')\n );\n }\n\n /**\n * Cleanup all temp files (call on process exit)\n */\n static async cleanup(): Promise<void> {\n const cleanupPromises = Array.from(this.tempFiles.values()).map((path) =>\n unlink(path).catch(() => {\n // Ignore errors\n })\n );\n await Promise.all(cleanupPromises);\n this.tempFiles.clear();\n }\n\n /**\n * Get statistics about temp files\n */\n static getStats(): { tempFilesCount: number; tempFilePaths: string[] } {\n return {\n tempFilesCount: this.tempFiles.size,\n tempFilePaths: Array.from(this.tempFiles.values()),\n };\n }\n}\n\n// Cleanup on process exit\nprocess.on('exit', () => {\n // Sync cleanup (process.on('exit') doesn't support async)\n for (const path of BulkTransferHelper.getStats().tempFilePaths) {\n try {\n unlinkSync(path);\n } catch {\n // Ignore\n }\n }\n});\n\n// Cleanup on uncaught errors\nprocess.on('uncaughtException', async (error) => {\n console.error('[BulkTransferHelper] Uncaught exception, cleaning up temp files:', error);\n await BulkTransferHelper.cleanup();\n process.exit(1);\n});\n\nprocess.on('SIGINT', async () => {\n console.log('[BulkTransferHelper] SIGINT received, cleaning up temp files');\n await BulkTransferHelper.cleanup();\n process.exit(0);\n});\n\nprocess.on('SIGTERM', async () => {\n console.log('[BulkTransferHelper] SIGTERM received, cleaning up temp files');\n await BulkTransferHelper.cleanup();\n process.exit(0);\n});\n","/**\n * @module @kb-labs/core-runtime/proxy\n * IPC proxy for IVectorStore adapter.\n *\n * This proxy forwards all vector store operations to the parent process\n * via IPC. The parent process owns the real QdrantVectorStore instance.\n *\n * Benefits:\n * - Single QdrantVectorStore instance (shared across all sandbox workers)\n * - Reduced memory usage (no duplicate connections)\n * - Reduced connection count (5 instead of 250 for 50 workers)\n *\n * @example\n * ```typescript\n * import { VectorStoreProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * // In child process (sandbox worker)\n * const transport = createIPCTransport();\n * const vectorStore = new VectorStoreProxy(transport);\n *\n * // Use like normal IVectorStore\n * const results = await vectorStore.search([0.1, 0.2, 0.3], 10);\n * ```\n */\n\nimport type {\n IVectorStore,\n VectorRecord,\n VectorSearchResult,\n VectorFilter,\n} from '@kb-labs/core-platform';\nimport type { ITransport } from '../transport/transport';\nimport { RemoteAdapter } from './remote-adapter';\nimport { BulkTransferHelper } from '../transport/bulk-transfer';\nimport { tmpdir } from 'os';\n\n/**\n * IPC proxy for IVectorStore adapter.\n *\n * All method calls are forwarded to the parent process via IPC.\n * The parent process executes the call on the real vector store\n * (e.g., QdrantVectorStore) and returns the result.\n *\n * From the caller's perspective, this behaves identically to a\n * local vector store - the IPC layer is completely transparent.\n */\nexport class VectorStoreProxy extends RemoteAdapter<IVectorStore> implements IVectorStore {\n // Timeout for bulk operations that may trigger IPC backpressure\n private static readonly BULK_OPERATION_TIMEOUT = 120_000; // 2 minutes\n\n // BulkTransfer configuration\n private readonly bulkTransferOptions = {\n maxInlineSize: 1_000_000, // 1MB threshold\n tempDir: process.env.KB_TEMP_DIR ?? tmpdir(),\n };\n\n /**\n * Create a vector store proxy.\n *\n * @param transport - IPC transport to communicate with parent\n */\n constructor(transport: ITransport) {\n super('vectorStore', transport);\n }\n\n /**\n * Search for similar vectors.\n *\n * @param query - Query embedding vector\n * @param limit - Maximum number of results\n * @param filter - Optional metadata filter\n * @returns Promise resolving to search results\n */\n async search(\n query: number[],\n limit: number,\n filter?: VectorFilter\n ): Promise<VectorSearchResult[]> {\n return (await this.callRemote('search', [query, limit, filter])) as VectorSearchResult[];\n }\n\n /**\n * Insert or update vectors.\n * Uses BulkTransfer for large payloads to avoid IPC backpressure.\n *\n * @param vectors - Vector records to upsert\n */\n async upsert(vectors: VectorRecord[]): Promise<void> {\n // Smart serialization: inline for small, temp file for large\n const transfer = await BulkTransferHelper.serialize(vectors, this.bulkTransferOptions);\n await this.callRemote('upsert', [transfer], VectorStoreProxy.BULK_OPERATION_TIMEOUT);\n }\n\n /**\n * Delete vectors by IDs.\n * Uses extended timeout for bulk deletions.\n *\n * @param ids - Vector IDs to delete\n */\n async delete(ids: string[]): Promise<void> {\n await this.callRemote('delete', [ids], VectorStoreProxy.BULK_OPERATION_TIMEOUT);\n }\n\n /**\n * Upsert vectors with chunk metadata (used by Mind RAG).\n * Uses extended timeout for bulk operations.\n *\n * @param scope - Scope ID\n * @param vectors - Vector records to upsert\n */\n async upsertChunks(scope: string, vectors: VectorRecord[]): Promise<void> {\n await this.callRemote('upsertChunks', [scope, vectors], VectorStoreProxy.BULK_OPERATION_TIMEOUT);\n }\n\n /**\n * Count total vectors in collection.\n *\n * @returns Promise resolving to vector count\n */\n async count(): Promise<number> {\n return (await this.callRemote('count', [])) as number;\n }\n\n /**\n * Get vectors by IDs.\n * IDs argument is usually small, passed directly through IPC.\n * Uses BulkTransfer only for large result sets.\n *\n * @param ids - Vector IDs to retrieve\n * @returns Promise resolving to vector records\n */\n async get(ids: string[]): Promise<VectorRecord[]> {\n // Small IDs array - pass directly (no BulkTransfer for argument)\n const resultTransfer = await this.callRemote('get', [ids], VectorStoreProxy.BULK_OPERATION_TIMEOUT);\n\n // Large result - deserialize if it's BulkTransfer\n if (BulkTransferHelper.isBulkTransfer(resultTransfer)) {\n return BulkTransferHelper.deserialize<VectorRecord[]>(resultTransfer);\n }\n return resultTransfer as VectorRecord[];\n }\n\n /**\n * Query vectors by metadata filter.\n * Filter argument is small, passed directly through IPC.\n * Uses BulkTransfer only for potentially large result sets.\n *\n * @param filter - Metadata filter to apply\n * @returns Promise resolving to matching vector records\n */\n async query(filter: VectorFilter): Promise<VectorRecord[]> {\n // Small filter - pass directly (no BulkTransfer for argument)\n const resultTransfer = await this.callRemote('query', [filter], VectorStoreProxy.BULK_OPERATION_TIMEOUT);\n\n // Large result - deserialize if it's BulkTransfer\n if (BulkTransferHelper.isBulkTransfer(resultTransfer)) {\n return BulkTransferHelper.deserialize<VectorRecord[]>(resultTransfer);\n }\n return resultTransfer as VectorRecord[];\n }\n\n /**\n * Clear all vectors from collection.\n * Uses extended timeout for bulk deletion.\n */\n async clear(): Promise<void> {\n await this.callRemote('clear', [], VectorStoreProxy.BULK_OPERATION_TIMEOUT);\n }\n\n /**\n * Initialize the vector store.\n * Called during platform initialization.\n */\n async initialize(): Promise<void> {\n await this.callRemote('initialize', []);\n }\n\n /**\n * Close connections and cleanup resources.\n */\n async close(): Promise<void> {\n await this.callRemote('close', []);\n }\n}\n\n/**\n * Create a VectorStore proxy with IPC transport.\n *\n * @param transport - IPC transport to use\n * @returns VectorStore proxy instance\n *\n * @example\n * ```typescript\n * import { createVectorStoreProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * const transport = createIPCTransport();\n * const vectorStore = createVectorStoreProxy(transport);\n * ```\n */\nexport function createVectorStoreProxy(transport: ITransport): VectorStoreProxy {\n return new VectorStoreProxy(transport);\n}\n","/**\n * @module @kb-labs/core-runtime/proxy\n * IPC proxy for ICache adapter.\n *\n * This proxy forwards all cache operations to the parent process via IPC.\n * The parent process owns the real cache adapter (e.g., RedisCacheAdapter).\n *\n * Benefits:\n * - Single cache instance (shared across all sandbox workers)\n * - Reduced memory usage (no duplicate Redis connections)\n * - Reduced connection count (5 instead of 250 for 50 workers)\n *\n * @example\n * ```typescript\n * import { CacheProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * // In child process (sandbox worker)\n * const transport = createIPCTransport();\n * const cache = new CacheProxy(transport);\n *\n * // Use like normal ICache\n * await cache.set('key', { foo: 'bar' }, 60000);\n * const value = await cache.get('key');\n * ```\n */\n\nimport type { ICache } from '@kb-labs/core-platform';\nimport type { ITransport } from '../transport/transport';\nimport { RemoteAdapter } from './remote-adapter';\n\n/**\n * IPC proxy for ICache adapter.\n *\n * All method calls are forwarded to the parent process via IPC.\n * The parent process executes the call on the real cache adapter\n * (e.g., RedisCacheAdapter) and returns the result.\n *\n * From the caller's perspective, this behaves identically to a\n * local cache - the IPC layer is completely transparent.\n */\nexport class CacheProxy extends RemoteAdapter<ICache> implements ICache {\n /**\n * Create a cache proxy.\n *\n * @param transport - IPC transport to communicate with parent\n */\n constructor(transport: ITransport) {\n super('cache', transport);\n }\n\n /**\n * Get a value from cache.\n *\n * @param key - Cache key\n * @returns Cached value or null if not found/expired\n */\n async get<T>(key: string): Promise<T | null> {\n return (await this.callRemote('get', [key])) as T | null;\n }\n\n /**\n * Set a value in cache.\n *\n * @param key - Cache key\n * @param value - Value to cache\n * @param ttl - Time to live in milliseconds (optional)\n */\n async set<T>(key: string, value: T, ttl?: number): Promise<void> {\n await this.callRemote('set', [key, value, ttl]);\n }\n\n /**\n * Delete a value from cache.\n *\n * @param key - Cache key\n */\n async delete(key: string): Promise<void> {\n await this.callRemote('delete', [key]);\n }\n\n /**\n * Clear cache entries matching a pattern.\n *\n * @param pattern - Glob pattern (e.g., 'user:*')\n */\n async clear(pattern?: string): Promise<void> {\n await this.callRemote('clear', [pattern]);\n }\n\n /**\n * Add member to sorted set with score.\n *\n * @param key - Sorted set key\n * @param score - Numeric score (typically timestamp)\n * @param member - Member to add\n */\n async zadd(key: string, score: number, member: string): Promise<void> {\n await this.callRemote('zadd', [key, score, member]);\n }\n\n /**\n * Get members from sorted set by score range.\n *\n * @param key - Sorted set key\n * @param min - Minimum score (inclusive)\n * @param max - Maximum score (inclusive)\n * @returns Array of members in score order\n */\n async zrangebyscore(key: string, min: number, max: number): Promise<string[]> {\n return (await this.callRemote('zrangebyscore', [key, min, max])) as string[];\n }\n\n /**\n * Remove member from sorted set.\n *\n * @param key - Sorted set key\n * @param member - Member to remove\n */\n async zrem(key: string, member: string): Promise<void> {\n await this.callRemote('zrem', [key, member]);\n }\n\n /**\n * Set key-value pair only if key does not exist (atomic operation).\n *\n * @param key - Cache key\n * @param value - Value to set\n * @param ttl - Time to live in milliseconds (optional)\n * @returns true if value was set, false if key already exists\n */\n async setIfNotExists<T>(key: string, value: T, ttl?: number): Promise<boolean> {\n return (await this.callRemote('setIfNotExists', [key, value, ttl])) as boolean;\n }\n}\n\n/**\n * Create a Cache proxy with IPC transport.\n *\n * @param transport - IPC transport to use\n * @returns Cache proxy instance\n *\n * @example\n * ```typescript\n * import { createCacheProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * const transport = createIPCTransport();\n * const cache = createCacheProxy(transport);\n * ```\n */\nexport function createCacheProxy(transport: ITransport): CacheProxy {\n return new CacheProxy(transport);\n}\n","/**\n * @module @kb-labs/core-runtime/proxy\n * IPC proxy for IConfig adapter.\n *\n * This proxy forwards all config operations to the parent process via IPC.\n * The parent process owns the real ConfigAdapter instance.\n *\n * Benefits:\n * - Single source of truth for config (loaded once in parent)\n * - No need to reload kb.config.json in child processes\n * - Automatic config updates propagate to all workers\n *\n * @example\n * ```typescript\n * import { ConfigProxy } from '@kb-labs/core-runtime';\n *\n * // In child process (sandbox worker)\n * const transport = createIPCTransport();\n * const config = new ConfigProxy(transport);\n *\n * // Use like normal IConfig\n * const mindConfig = await config.getConfig('mind');\n * ```\n */\n\nimport type { IConfig } from '@kb-labs/core-platform';\nimport type { ITransport } from '../transport/transport';\nimport { RemoteAdapter } from './remote-adapter';\n\n/**\n * IPC proxy for IConfig adapter.\n *\n * All method calls are forwarded to the parent process via IPC.\n * The parent process executes the call on the real ConfigAdapter\n * and returns the result.\n *\n * From the caller's perspective, this behaves identically to a\n * local config adapter - the IPC layer is completely transparent.\n */\nexport class ConfigProxy extends RemoteAdapter<IConfig> implements IConfig {\n /**\n * Create a config proxy.\n *\n * @param transport - IPC transport to communicate with parent\n */\n constructor(transport: ITransport) {\n super('config', transport);\n }\n\n /**\n * Get product-specific configuration.\n *\n * @param productId - Product identifier (e.g., 'mind', 'workflow', 'plugins')\n * @param profileId - Profile identifier (defaults to 'default' or KB_PROFILE env var)\n * @returns Promise resolving to product-specific config or undefined\n *\n * @example\n * ```typescript\n * const mindConfig = await config.getConfig('mind');\n * if (mindConfig?.scopes) {\n * // Use scopes\n * }\n * ```\n */\n async getConfig(productId: string, profileId?: string): Promise<any> {\n return (await this.callRemote('getConfig', [productId, profileId])) as any;\n }\n\n /**\n * Get raw kb.config.json data.\n *\n * @returns Promise resolving to raw config object or undefined\n *\n * @example\n * ```typescript\n * const rawConfig = await config.getRawConfig();\n * if (rawConfig) {\n * const allProfiles = rawConfig.profiles;\n * }\n * ```\n */\n async getRawConfig(): Promise<any> {\n return (await this.callRemote('getRawConfig', [])) as any;\n }\n}\n","/**\n * @module @kb-labs/core-runtime/proxy\n * IPC proxy for ILLM adapter.\n *\n * This proxy forwards all LLM operations to the parent process via IPC.\n * The parent process owns the real LLM adapter (e.g., OpenAILLM).\n *\n * Benefits:\n * - Single LLM instance (shared rate limiter across all workers)\n * - Reduced memory usage (no duplicate API clients)\n * - Centralized quota enforcement (tenant rate limits)\n *\n * Note: true token-by-token streaming is not supported over IPC.\n * This proxy falls back to complete() and emits a single chunk.\n *\n * @example\n * ```typescript\n * import { LLMProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * // In child process (sandbox worker)\n * const transport = createIPCTransport();\n * const llm = new LLMProxy(transport);\n *\n * // Use like normal ILLM\n * const response = await llm.complete('What is TypeScript?', {\n * model: 'gpt-4',\n * temperature: 0.7,\n * maxTokens: 500,\n * });\n * ```\n */\n\nimport type {\n ILLM,\n LLMOptions,\n LLMResponse,\n LLMMessage,\n LLMToolCallOptions,\n LLMToolCallResponse,\n LLMProtocolCapabilities,\n} from '@kb-labs/core-platform';\nimport type { ITransport } from '../transport/transport';\nimport { RemoteAdapter } from './remote-adapter';\n\n/**\n * IPC proxy for ILLM adapter.\n *\n * All method calls are forwarded to the parent process via IPC.\n * The parent process executes the call on the real LLM adapter\n * (e.g., OpenAILLM) and returns the result.\n *\n * **Limitation**: true token-by-token `stream()` is not supported over IPC.\n * Streaming requires bidirectional communication which is not\n * currently implemented. This proxy falls back to `complete()`.\n */\nexport class LLMProxy extends RemoteAdapter<ILLM> implements ILLM {\n /**\n * Create an LLM proxy.\n *\n * @param transport - IPC transport to communicate with parent\n */\n constructor(transport: ITransport) {\n super('llm', transport);\n }\n\n /**\n * Generate a completion for the given prompt.\n *\n * @param prompt - Text prompt\n * @param options - Optional generation options\n * @returns LLM response with content and token usage\n */\n async complete(prompt: string, options?: LLMOptions): Promise<LLMResponse> {\n return (await this.callRemote('complete', [prompt, options])) as LLMResponse;\n }\n\n getProtocolCapabilities(): LLMProtocolCapabilities {\n return {\n cache: { supported: false },\n stream: { supported: false },\n };\n }\n\n /**\n * Stream a completion for the given prompt.\n *\n * **Fallback over IPC**: Uses complete() and emits a single chunk.\n *\n * Streaming requires bidirectional communication which is not\n * currently implemented in the IPC protocol. This fallback preserves\n * API compatibility for callers expecting AsyncIterable<string>.\n *\n * @param prompt - Text prompt\n * @param options - Optional generation options\n * @returns Async iterable with a single chunk from complete()\n */\n async *stream(prompt: string, options?: LLMOptions): AsyncIterable<string> {\n console.warn('[LLMProxy] stream() fallback via complete() over IPC.');\n const response = await this.complete(prompt, options);\n if (response.content) {\n yield response.content;\n }\n }\n\n /**\n * Chat with native tool calling support.\n *\n * Forwards tool calling request to parent process via IPC.\n *\n * @param messages - Conversation history\n * @param options - Options including tools and tool choice\n * @returns LLM response with optional tool calls\n */\n async chatWithTools(\n messages: LLMMessage[],\n options: LLMToolCallOptions\n ): Promise<LLMToolCallResponse> {\n return (await this.callRemote('chatWithTools', [messages, options])) as LLMToolCallResponse;\n }\n}\n\n/**\n * Create an LLM proxy with IPC transport.\n *\n * @param transport - IPC transport to use\n * @returns LLM proxy instance\n *\n * @example\n * ```typescript\n * import { createLLMProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * const transport = createIPCTransport();\n * const llm = createLLMProxy(transport);\n * ```\n */\nexport function createLLMProxy(transport: ITransport): LLMProxy {\n return new LLMProxy(transport);\n}\n","/**\n * @module @kb-labs/core-runtime/proxy\n * IPC proxy for IEmbeddings adapter.\n *\n * This proxy forwards all embeddings operations to the parent process via IPC.\n * The parent process owns the real embeddings adapter (e.g., OpenAIEmbeddings).\n *\n * Benefits:\n * - Single embeddings instance (shared rate limiter across all workers)\n * - Reduced memory usage (no duplicate API clients)\n * - Centralized quota enforcement (tenant rate limits)\n *\n * @example\n * ```typescript\n * import { EmbeddingsProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * // In child process (sandbox worker)\n * const transport = createIPCTransport();\n * const embeddings = new EmbeddingsProxy(transport);\n *\n * // Use like normal IEmbeddings\n * const vector = await embeddings.embed('Hello world');\n * const vectors = await embeddings.embedBatch(['foo', 'bar', 'baz']);\n * console.log('Dimensions:', embeddings.dimensions); // 1536\n * ```\n */\n\nimport type { IEmbeddings } from '@kb-labs/core-platform';\nimport type { ITransport } from '../transport/transport';\nimport { RemoteAdapter } from './remote-adapter';\n\n/**\n * IPC proxy for IEmbeddings adapter.\n *\n * All method calls are forwarded to the parent process via IPC.\n * The parent process executes the call on the real embeddings adapter\n * (e.g., OpenAIEmbeddings) and returns the result.\n *\n * The `dimensions` property is fetched once during initialization\n * and cached locally for performance.\n */\nexport class EmbeddingsProxy extends RemoteAdapter<IEmbeddings> implements IEmbeddings {\n private _dimensions?: number;\n\n /**\n * Create an embeddings proxy.\n *\n * @param transport - IPC transport to communicate with parent\n * @param dimensions - Optional dimensions override (avoids IPC call)\n */\n constructor(transport: ITransport, dimensions?: number) {\n super('embeddings', transport);\n this._dimensions = dimensions;\n }\n\n /**\n * Generate embedding vector for a single text.\n *\n * @param text - Input text\n * @returns Embedding vector\n */\n async embed(text: string): Promise<number[]> {\n return (await this.callRemote('embed', [text])) as number[];\n }\n\n /**\n * Generate embedding vectors for multiple texts.\n *\n * @param texts - Array of input texts\n * @returns Array of embedding vectors (same order as input)\n */\n async embedBatch(texts: string[]): Promise<number[][]> {\n return (await this.callRemote('embedBatch', [texts])) as number[][];\n }\n\n /**\n * Dimension of the embedding vectors.\n *\n * This value is fetched once from the parent on first access\n * and cached locally for performance.\n */\n get dimensions(): number {\n if (this._dimensions === undefined) {\n throw new Error(\n 'EmbeddingsProxy dimensions not initialized. ' +\n 'Call getDimensions() first or pass dimensions to constructor.'\n );\n }\n return this._dimensions;\n }\n\n /**\n * Initialize dimensions by fetching from parent.\n *\n * This is called automatically by initPlatform() in child process.\n * If you create EmbeddingsProxy manually, call this method before\n * accessing the `dimensions` property.\n *\n * @returns Dimensions value\n *\n * @example\n * ```typescript\n * const proxy = new EmbeddingsProxy(transport);\n * await proxy.getDimensions(); // Fetch once\n * console.log(proxy.dimensions); // Now safe to access\n * ```\n */\n async getDimensions(): Promise<number> {\n if (this._dimensions === undefined) {\n // Fetch dimensions from parent via property access\n // We use a special 'getDimensions' method that the real adapter implements\n this._dimensions = (await this.callRemote('getDimensions', [])) as number;\n }\n return this._dimensions;\n }\n}\n\n/**\n * Create an Embeddings proxy with IPC transport.\n *\n * @param transport - IPC transport to use\n * @param dimensions - Optional dimensions override (avoids IPC call)\n * @returns Embeddings proxy instance\n *\n * @example\n * ```typescript\n * import { createEmbeddingsProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * const transport = createIPCTransport();\n * const embeddings = createEmbeddingsProxy(transport, 1536);\n * ```\n */\nexport function createEmbeddingsProxy(transport: ITransport, dimensions?: number): EmbeddingsProxy {\n return new EmbeddingsProxy(transport, dimensions);\n}\n","/**\n * @module @kb-labs/core-runtime/proxy\n * IPC proxy for IStorage adapter.\n *\n * This proxy forwards all storage operations to the parent process via IPC.\n * The parent process owns the real storage adapter (e.g., FilesystemStorageAdapter).\n *\n * Benefits:\n * - Single storage instance (consistent file access across all workers)\n * - Reduced memory usage (no duplicate file handles)\n * - No race conditions (centralized file access)\n *\n * Note: Buffer serialization is handled automatically by the IPC layer.\n *\n * @example\n * ```typescript\n * import { StorageProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * // In child process (sandbox worker)\n * const transport = createIPCTransport();\n * const storage = new StorageProxy(transport);\n *\n * // Use like normal IStorage\n * await storage.write('.kb/data.json', Buffer.from('{\"foo\":\"bar\"}'));\n * const data = await storage.read('.kb/data.json');\n * const files = await storage.list('.kb/');\n * ```\n */\n\nimport type { IStorage, StorageMetadata } from '@kb-labs/core-platform/adapters';\nimport type { ITransport } from '../transport/transport';\nimport { RemoteAdapter } from './remote-adapter';\n\n/**\n * IPC proxy for IStorage adapter.\n *\n * All method calls are forwarded to the parent process via IPC.\n * The parent process executes the call on the real storage adapter\n * (e.g., FilesystemStorageAdapter) and returns the result.\n *\n * Buffer serialization/deserialization is handled automatically\n * by the IPC serializer (Buffer → base64 → Buffer).\n */\nexport class StorageProxy extends RemoteAdapter<IStorage> implements IStorage {\n /**\n * Create a storage proxy.\n *\n * @param transport - IPC transport to communicate with parent\n */\n constructor(transport: ITransport) {\n super('storage', transport);\n }\n\n /**\n * Read file contents.\n *\n * @param path - File path\n * @returns File contents or null if not found\n */\n async read(path: string): Promise<Buffer | null> {\n return (await this.callRemote('read', [path])) as Buffer | null;\n }\n\n /**\n * Write file contents.\n *\n * @param path - File path\n * @param data - File contents\n */\n async write(path: string, data: Buffer): Promise<void> {\n await this.callRemote('write', [path, data]);\n }\n\n /**\n * Delete a file.\n *\n * @param path - File path\n */\n async delete(path: string): Promise<void> {\n await this.callRemote('delete', [path]);\n }\n\n /**\n * List files matching a prefix.\n *\n * @param prefix - Path prefix (e.g., 'docs/')\n * @returns Array of file paths\n */\n async list(prefix: string): Promise<string[]> {\n return (await this.callRemote('list', [prefix])) as string[];\n }\n\n /**\n * Check if a file exists.\n *\n * @param path - File path\n * @returns True if file exists, false otherwise\n */\n async exists(path: string): Promise<boolean> {\n return (await this.callRemote('exists', [path])) as boolean;\n }\n\n // ═══════════════════════════════════════════════════════════════════════\n // EXTENDED METHODS (optional - implements IStorage extended interface)\n // ═══════════════════════════════════════════════════════════════════════\n\n /**\n * Get file metadata.\n * Optional method - implements IStorage.stat().\n *\n * @param path - File path\n * @returns File metadata or null if not found\n */\n async stat?(path: string): Promise<StorageMetadata | null> {\n return (await this.callRemote('stat', [path])) as StorageMetadata | null;\n }\n\n /**\n * Copy file within storage.\n * Optional method - implements IStorage.copy().\n *\n * @param sourcePath - Source file path\n * @param destPath - Destination file path\n */\n async copy?(sourcePath: string, destPath: string): Promise<void> {\n await this.callRemote('copy', [sourcePath, destPath]);\n }\n\n /**\n * Move file within storage.\n * Optional method - implements IStorage.move().\n *\n * @param sourcePath - Source file path\n * @param destPath - Destination file path\n */\n async move?(sourcePath: string, destPath: string): Promise<void> {\n await this.callRemote('move', [sourcePath, destPath]);\n }\n\n /**\n * List files with metadata.\n * Optional method - implements IStorage.listWithMetadata().\n *\n * @param prefix - Path prefix (e.g., 'docs/')\n * @returns Array of file metadata\n */\n async listWithMetadata?(prefix: string): Promise<StorageMetadata[]> {\n return (await this.callRemote('listWithMetadata', [prefix])) as StorageMetadata[];\n }\n}\n\n/**\n * Create a Storage proxy with IPC transport.\n *\n * @param transport - IPC transport to use\n * @returns Storage proxy instance\n *\n * @example\n * ```typescript\n * import { createStorageProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * const transport = createIPCTransport();\n * const storage = createStorageProxy(transport);\n * ```\n */\nexport function createStorageProxy(transport: ITransport): StorageProxy {\n return new StorageProxy(transport);\n}\n","/**\n * @module @kb-labs/core-runtime/adapters/config-adapter\n * Real config adapter implementation (runs in parent process).\n */\n\nimport type { IConfig } from '@kb-labs/core-platform';\n\n/**\n * ConfigAdapter - Real implementation that accesses globalThis.__KB_RAW_CONFIG__.\n *\n * This adapter runs ONLY in the parent process (CLI bin).\n * Child processes use ConfigProxy which calls this via IPC.\n *\n * @example\n * ```typescript\n * // In parent process (loader.ts):\n * const configAdapter = new ConfigAdapter();\n * platform.setAdapter('config', configAdapter);\n *\n * // In command handler:\n * const mindConfig = await platform.config.getConfig('mind');\n * ```\n */\nexport class ConfigAdapter implements IConfig {\n /**\n * Get product-specific configuration.\n * Extracts configuration for a specific product from the global config.\n * Supports both Profiles v2 and legacy config structures.\n *\n * @param productId - Product identifier (e.g., 'mind', 'workflow', 'plugins')\n * @param profileId - Profile identifier (defaults to 'default' or KB_PROFILE env var)\n * @returns Product-specific config or undefined if not found\n *\n * @example\n * ```typescript\n * // Mind product\n * const mindConfig = await config.getConfig('mind');\n * if (mindConfig?.scopes) {\n * // Use scopes\n * }\n *\n * // Workflow product with explicit profile\n * const workflowConfig = await config.getConfig('workflow', 'production');\n * ```\n */\n async getConfig(productId: string, profileId?: string): Promise<any> {\n // Access rawConfig from globalThis (set by bootstrap.ts)\n const rawConfig = (globalThis as any).__KB_RAW_CONFIG__;\n\n if (!rawConfig) {\n return undefined;\n }\n\n const effectiveProfileId = profileId ?? process.env.KB_PROFILE ?? 'default';\n\n // Try profiles v2 structure first\n if (rawConfig.profiles && Array.isArray(rawConfig.profiles)) {\n const profile = rawConfig.profiles.find((p: any) => p.id === effectiveProfileId) ?? rawConfig.profiles[0];\n if (profile?.products?.[productId]) {\n return profile.products[productId];\n }\n }\n\n // Fallback to legacy structure\n // Map productId to legacy key (e.g., 'mind' → 'knowledge')\n const legacyKeyMap: Record<string, string> = {\n 'mind': 'knowledge',\n };\n\n const legacyKey = legacyKeyMap[productId] ?? productId;\n if (rawConfig[legacyKey]) {\n return rawConfig[legacyKey];\n }\n\n return undefined;\n }\n\n /**\n * Get raw kb.config.json data.\n * Returns the entire config object without any product/profile extraction.\n * Useful for custom config parsing or when you need access to multiple products.\n *\n * @returns Raw config object or undefined if not loaded\n *\n * @example\n * ```typescript\n * const rawConfig = await config.getRawConfig();\n * if (rawConfig) {\n * // Access any part of config\n * const allProfiles = rawConfig.profiles;\n * }\n * ```\n */\n async getRawConfig(): Promise<any> {\n return (globalThis as any).__KB_RAW_CONFIG__;\n }\n}\n","/**\n * @module @kb-labs/core-runtime/ipc\n * Unix Socket server for handling adapter calls from child processes.\n *\n * This server runs in the parent process (CLI bin) and listens for\n * adapter method calls from child processes (sandbox workers) via Unix sockets.\n *\n * Unix sockets provide 100-1000x better performance than process.send()\n * for large messages (>16KB), making them ideal for bulk operations.\n *\n * @example\n * ```typescript\n * import { UnixSocketServer } from '@kb-labs/core-runtime/ipc';\n * import { platform } from '@kb-labs/core-runtime';\n *\n * // In CLI bin after initPlatform()\n * const server = new UnixSocketServer(platform);\n * await server.start();\n *\n * // Server now handles all Unix socket adapter calls\n * ```\n */\n\nimport * as net from 'net';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport type { PlatformContainer } from '../container.js';\nimport type { AdapterCall, AdapterResponse } from '@kb-labs/core-platform/serializable';\nimport { serialize, deserialize, IPC_PROTOCOL_VERSION } from '@kb-labs/core-platform/serializable';\nimport { BulkTransferHelper } from '../transport/bulk-transfer.js';\n\nexport interface UnixSocketServerConfig {\n /** Path to Unix socket file (default: /tmp/kb-ipc.sock) */\n socketPath?: string;\n}\n\n/**\n * Unix Socket server for parent process.\n *\n * Responsibilities:\n * - Listen for adapter calls via Unix socket\n * - Validate and route calls to correct adapter\n * - Execute methods with deserialized arguments\n * - Serialize and send responses back\n * - Handle errors gracefully\n */\nexport class UnixSocketServer {\n private server: net.Server | null = null;\n private clients = new Set<net.Socket>();\n private socketPath: string;\n private started = false;\n\n /**\n * Create a Unix Socket server.\n *\n * @param platform - Platform container with real adapters\n * @param config - Server configuration\n */\n constructor(\n private readonly platform: PlatformContainer,\n config: UnixSocketServerConfig = {}\n ) {\n this.socketPath = config.socketPath ?? '/tmp/kb-ipc.sock';\n }\n\n /**\n * Get the socket path.\n * Used by parent process to pass to child processes via env var.\n */\n getSocketPath(): string {\n return this.socketPath;\n }\n\n /**\n * Start listening for connections.\n */\n async start(): Promise<void> {\n // Remove existing socket file if exists\n if (fs.existsSync(this.socketPath)) {\n fs.unlinkSync(this.socketPath);\n }\n\n return new Promise((resolve, reject) => {\n this.server = net.createServer((socket) => {\n this.handleClient(socket);\n });\n\n this.server.on('error', (error) => {\n reject(error);\n });\n\n this.server.listen(this.socketPath, () => {\n // Set socket permissions (readable/writable by all)\n fs.chmodSync(this.socketPath, 0o666);\n this.started = true;\n this.platform.logger.debug('UnixSocketServer started listening for adapter calls');\n resolve();\n });\n });\n }\n\n /**\n * Handle new client connection.\n */\n private handleClient(socket: net.Socket): void {\n this.clients.add(socket);\n\n let buffer = '';\n\n socket.on('data', (data) => {\n buffer += data.toString('utf8');\n\n // Process all complete messages (newline-delimited)\n let newlineIndex: number;\n while ((newlineIndex = buffer.indexOf('\\n')) !== -1) {\n const line = buffer.slice(0, newlineIndex);\n buffer = buffer.slice(newlineIndex + 1);\n\n if (line.trim().length === 0) {\n continue;\n }\n\n try {\n const call = JSON.parse(line) as AdapterCall;\n this.handleCall(socket, call);\n } catch (error) {\n console.error('[UnixSocketServer] Failed to parse message:', error);\n }\n }\n });\n\n socket.on('close', () => {\n this.clients.delete(socket);\n });\n\n socket.on('error', (error) => {\n console.error('[UnixSocketServer] Client socket error:', error);\n this.clients.delete(socket);\n });\n }\n\n /**\n * Handle adapter call from client.\n */\n private async handleCall(socket: net.Socket, call: AdapterCall): Promise<void> {\n // Check protocol version compatibility\n if (call.version !== IPC_PROTOCOL_VERSION) {\n console.error('[UnixSocketServer] Protocol version mismatch:', {\n received: call.version,\n expected: IPC_PROTOCOL_VERSION,\n adapter: call.adapter,\n method: call.method,\n note: 'Child process may be using outdated protocol. Consider rebuilding.',\n });\n }\n\n // Log context for debugging/tracing (if provided)\n if (call.context) {\n console.error('[UnixSocketServer] Adapter call context:', {\n version: call.version,\n traceId: call.context.traceId,\n pluginId: call.context.pluginId,\n sessionId: call.context.sessionId,\n tenantId: call.context.tenantId,\n adapter: call.adapter,\n method: call.method,\n });\n }\n\n try {\n // Get the adapter from platform\n const adapter = this.getAdapter(call.adapter);\n\n // Get the method on the adapter\n const method = (adapter as any)[call.method];\n\n if (typeof method !== 'function') {\n throw new Error(\n `Method '${call.method}' not found on adapter '${call.adapter}'. ` +\n `Available methods: ${Object.getOwnPropertyNames(Object.getPrototypeOf(adapter)).join(', ')}`\n );\n }\n\n // Deserialize arguments (handle BulkTransfer)\n const args = await Promise.all(\n call.args.map(async (arg) => {\n const deserialized = deserialize(arg);\n if (BulkTransferHelper.isBulkTransfer(deserialized)) {\n return BulkTransferHelper.deserialize(deserialized);\n }\n return deserialized;\n })\n );\n\n // Execute method on adapter\n const result = await method.apply(adapter, args);\n\n // Serialize result (handle BulkTransfer)\n let serializedResult;\n if (result !== undefined && result !== null && typeof result === 'object') {\n // For large results, use BulkTransfer\n const resultJson = JSON.stringify(result);\n if (resultJson.length > 1_000_000) {\n const transfer = await BulkTransferHelper.serialize(result, {\n maxInlineSize: 1_000_000,\n tempDir: process.env.KB_TEMP_DIR ?? os.tmpdir(),\n });\n serializedResult = serialize(transfer);\n } else {\n serializedResult = serialize(result);\n }\n } else {\n serializedResult = serialize(result);\n }\n\n // Send successful response\n const response: AdapterResponse = {\n type: 'adapter:response',\n requestId: call.requestId,\n result: serializedResult,\n };\n\n const message = JSON.stringify(response) + '\\n';\n socket.write(message, 'utf8');\n } catch (error) {\n // Serialize and send error response\n const response: AdapterResponse = {\n type: 'adapter:response',\n requestId: call.requestId,\n error: serialize(error) as any,\n };\n\n const message = JSON.stringify(response) + '\\n';\n socket.write(message, 'utf8');\n\n // Log error for debugging\n console.error(\n `[UnixSocketServer] Error handling adapter call: ${call.adapter}.${call.method}`,\n error\n );\n }\n }\n\n /**\n * Get adapter instance from platform container.\n *\n * @param name - Adapter name (e.g., 'vectorStore', 'cache')\n * @returns Adapter instance\n * @throws Error if adapter not found\n */\n private getAdapter(name: string): unknown {\n switch (name) {\n case 'vectorStore':\n return this.platform.vectorStore;\n case 'cache':\n return this.platform.cache;\n case 'config':\n return this.platform.config;\n case 'llm':\n return this.platform.llm;\n case 'embeddings':\n return this.platform.embeddings;\n case 'storage':\n return this.platform.storage;\n case 'logger':\n return this.platform.logger;\n case 'analytics':\n return this.platform.analytics;\n case 'eventBus':\n return this.platform.eventBus;\n case 'invoke':\n return this.platform.invoke;\n default:\n throw new Error(\n `Unknown adapter: '${name}'. Valid adapters: vectorStore, cache, config, llm, embeddings, storage, logger, analytics, eventBus, invoke`\n );\n }\n }\n\n /**\n * Stop server and close all connections.\n */\n async close(): Promise<void> {\n if (!this.started) {\n return;\n }\n\n // Close all client connections\n for (const client of this.clients) {\n client.destroy();\n }\n this.clients.clear();\n\n // Close server\n if (this.server) {\n await new Promise<void>((resolve) => {\n this.server!.close(() => {\n resolve();\n });\n });\n this.server = null;\n }\n\n // Remove socket file\n if (fs.existsSync(this.socketPath)) {\n fs.unlinkSync(this.socketPath);\n }\n\n this.started = false;\n console.error('[UnixSocketServer] Stopped listening for adapter calls');\n }\n\n /**\n * Check if server is started.\n */\n isStarted(): boolean {\n return this.started;\n }\n}\n\n/**\n * Create and start a Unix Socket server.\n *\n * Convenience function that creates the server and starts it immediately.\n *\n * @param platform - Platform container with real adapters\n * @param config - Server configuration\n * @returns Started Unix Socket server instance\n *\n * @example\n * ```typescript\n * import { createUnixSocketServer } from '@kb-labs/core-runtime/ipc';\n * import { platform } from '@kb-labs/core-runtime';\n *\n * const server = await createUnixSocketServer(platform);\n * // Server is now handling Unix socket calls\n * ```\n */\nexport async function createUnixSocketServer(\n platform: PlatformContainer,\n config?: UnixSocketServerConfig\n): Promise<UnixSocketServer> {\n const server = new UnixSocketServer(platform, config);\n await server.start();\n return server;\n}\n","/**\n * @module @kb-labs/core-runtime\n * DI Container + Core Features Implementations for KB Labs Platform.\n *\n * @example\n * ```typescript\n * import { initPlatform, platform } from '@kb-labs/core-runtime';\n *\n * // Initialize platform with adapters\n * await initPlatform({\n * adapters: {\n * analytics: '@kb-labs/analytics-adapter',\n * vectorStore: '@kb-labs/mind-qdrant',\n * },\n * });\n *\n * // Use platform services\n * await platform.analytics.track('event');\n * await platform.vectorStore.search([...]);\n * ```\n */\n\n// Container\nexport { PlatformContainer, platform } from './container.js';\nexport type {\n CoreAdapterTypes,\n CoreAdapterName,\n AdapterTypes,\n PlatformLifecyclePhase,\n PlatformLifecycleContext,\n PlatformLifecycleHooks,\n} from './container.js';\n\n// Loader\nexport { initPlatform, resetPlatform } from './loader.js';\n\n// Adapter discovery (for testing/debugging)\nexport { discoverAdapters, resolveAdapter } from './discover-adapters.js';\nexport type { DiscoveredAdapter } from './discover-adapters.js';\n\n// Config types\nexport type {\n PlatformConfig,\n AdaptersConfig,\n CoreFeaturesConfig,\n ResourcesConfig,\n ResourceBrokerConfig,\n JobsConfig,\n WorkflowsConfig,\n ExecutionConfig,\n} from './config.js';\n\n// Analytics context\nexport { createAnalyticsContext } from './analytics-context.js';\n\n// Core feature implementations (for direct usage/extension)\nexport {\n ResourceManager,\n JobScheduler,\n CronManager,\n WorkflowEngine,\n} from './core/index.js';\n\n// ═══════════════════════════════════════════════════════════════════════════\n// IPC & TRANSPORT (Re-exported from @kb-labs/core-ipc)\n// ═══════════════════════════════════════════════════════════════════════════\n\n// IPC Servers (Parent Process Side)\nexport { UnixSocketServer, type UnixSocketServerConfig, IPCServer, createIPCServer } from '@kb-labs/core-ipc';\n\n// Transport Layer (Child Process Side)\nexport {\n type ITransport,\n type TransportConfig,\n type PendingRequest,\n TransportError,\n TimeoutError,\n CircuitOpenError,\n isRetryableError,\n IPCTransport,\n createIPCTransport,\n UnixSocketTransport,\n createUnixSocketTransport,\n type UnixSocketConfig,\n} from '@kb-labs/core-ipc';\n\n// Bulk Transfer (Large Message Optimization)\nexport { BulkTransferHelper, type BulkTransfer, type BulkTransferOptions } from '@kb-labs/core-ipc';\n\n// Timeout Configuration\nexport { selectTimeout, getOperationTimeout, OPERATION_TIMEOUTS } from '@kb-labs/core-ipc';\n\n// Proxy adapters (child process)\nexport { RemoteAdapter } from './proxy/remote-adapter.js';\nexport { VectorStoreProxy, createVectorStoreProxy } from './proxy/vector-store-proxy.js';\nexport { CacheProxy, createCacheProxy } from './proxy/cache-proxy.js';\nexport { LLMProxy } from './proxy/llm-proxy.js';\nexport { EmbeddingsProxy } from './proxy/embeddings-proxy.js';\nexport { StorageProxy, createStorageProxy } from './proxy/storage-proxy.js';\nexport { SQLDatabaseProxy, createSQLDatabaseProxy } from './proxy/sql-database-proxy.js';\nexport { DocumentDatabaseProxy, createDocumentDatabaseProxy } from './proxy/document-database-proxy.js';\nexport {\n createProxyPlatform,\n closeProxyPlatform,\n type CreateProxyPlatformOptions\n} from './proxy/create-proxy-platform.js';\nexport { createNoOpPlatform } from '@kb-labs/core-platform/noop';\n\nexport type {\n ResourceManagerConfig,\n JobSchedulerConfig,\n JobHandler,\n WorkflowEngineConfig,\n WorkflowDefinition,\n WorkflowStepDefinition,\n WorkflowStepContext,\n} from './core/index.js';\n\n// Monitoring helpers\nexport {\n getMonitoringSnapshot,\n getDegradedStatus,\n type MonitoringSnapshot,\n type MonitoringOptions,\n type DegradedLevel,\n type DegradedStatus,\n type DegradedOptions,\n} from './monitoring.js';\n\n// Orchestration services\nexport { EnvironmentManager } from './environment-manager.js';\nexport { WorkspaceManager } from './workspace-manager.js';\nexport { SnapshotManager } from './snapshot-manager.js';\nexport { RunExecutor } from './run-executor.js';\nexport type { RunStepExecutionRequest } from './run-executor.js';\nexport { RunOrchestrator } from './run-orchestrator.js';\nexport type { StartFullCycleRequest } from './run-orchestrator.js';\n\n// Use-cases\nexport { startFullCycle } from './use-cases/start-full-cycle.js';\n","/**\n * @module @kb-labs/core-runtime/loader\n * Platform initialization and adapter loading.\n */\n\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { promises as fs } from 'node:fs';\nimport type { AdapterTypes, PlatformContainer } from './container.js';\nimport type { PlatformConfig, CoreFeaturesConfig, ResourceBrokerConfig, LLMAdapterOptions, AdapterValue } from './config.js';\nimport { platform } from './container.js';\nimport { resolveAdapter } from './discover-adapters.js';\nimport { createAnalyticsContext } from './analytics-context.js';\nimport { AdapterLoader } from './adapter-loader.js';\nimport type { AdapterConfig, LoadedAdapterModule } from './adapter-loader.js';\nimport { EnvironmentManager } from './environment-manager.js';\nimport { WorkspaceManager } from './workspace-manager.js';\nimport { SnapshotManager } from './snapshot-manager.js';\nimport { RunExecutor } from './run-executor.js';\nimport { RunOrchestrator } from './run-orchestrator.js';\nimport { createDefaultExecutionPolicyLLM } from './wrappers/default-execution-policy-llm.js';\n\nimport { ResourceManager } from './core/resource-manager.js';\nimport { JobScheduler } from './core/job-scheduler.js';\nimport { CronManager } from './core/cron-manager.js';\nimport { WorkflowEngine } from './core/workflow-engine.js';\n\n// Import analytics wrappers for transparent metrics collection\nimport {\n AnalyticsLLM,\n AnalyticsEmbeddings,\n AnalyticsVectorStore,\n AnalyticsCache,\n AnalyticsStorage,\n} from '@kb-labs/core-platform';\n\nimport {\n ResourceBroker,\n InMemoryRateLimitBackend,\n createQueuedLLM,\n createQueuedEmbeddings,\n createQueuedVectorStore,\n} from '@kb-labs/core-resource-broker';\nimport type { RateLimitBackend } from '@kb-labs/core-resource-broker';\n\n// Import ExecutionBackend type only (implementation loaded dynamically to break circular dependency)\n\n/**\n * Adapter factory function type.\n * Adapters should export a createAdapter function.\n */\ntype AdapterFactory<T> = (config?: unknown) => T | Promise<T>;\n\n/**\n * Normalize adapter value to array format.\n * - string → [string]\n * - string[] → string[]\n * - null/undefined → []\n *\n * @param value - Adapter value (string, string[], or null)\n * @returns Array of adapter package paths\n */\nfunction normalizeAdapterValue(value: AdapterValue | undefined): string[] {\n if (!value) {return [];}\n if (Array.isArray(value)) {return value;}\n return [value];\n}\n\n/**\n * Get primary adapter from value (first in array or single string).\n *\n * @param value - Adapter value\n * @returns Primary adapter package path or undefined\n */\nfunction getPrimaryAdapter(value: AdapterValue | undefined): string | undefined {\n if (!value) {return undefined;}\n if (Array.isArray(value)) {return value[0];}\n return value;\n}\n\n/**\n * Load an adapter from a package path.\n * Uses workspace discovery to load from file paths (kb-labs-adapters/*),\n * then falls back to dynamic import for npm-installed adapters.\n *\n * @param adapterPath - Package name (e.g., \"@kb-labs/adapters-openai\")\n * @param cwd - Workspace root directory\n * @returns Adapter instance or undefined if loading fails\n */\nasync function loadAdapter<T>(adapterPath: string, cwd: string, options?: unknown): Promise<T | undefined> {\n try {\n // Use resolveAdapter to try workspace discovery first, then npm\n const factory = await resolveAdapter(adapterPath, cwd);\n\n if (factory) {\n return await factory(options);\n }\n\n platform.logger.warn('Adapter has no createAdapter or default export', { adapterPath });\n return undefined;\n } catch (error) {\n platform.logger.warn('Failed to load adapter', {\n adapterPath,\n error: error instanceof Error ? error.message : String(error)\n });\n return undefined;\n }\n}\n\n\n/**\n * Wrap an adapter with analytics tracking.\n * Returns the wrapped adapter if analytics is available, otherwise returns the original adapter.\n *\n * @param key - Adapter type key\n * @param instance - Real adapter instance\n * @returns Wrapped adapter with analytics or original adapter\n */\nfunction wrapWithAnalytics<K extends keyof AdapterTypes>(\n key: K,\n instance: AdapterTypes[K]\n): AdapterTypes[K] {\n const analytics = platform.analytics;\n\n // If no analytics adapter, return original (graceful degradation)\n if (!analytics || analytics.constructor.name === 'NoOpAnalytics') {\n return instance;\n }\n\n // Wrap each adapter type with its corresponding analytics wrapper\n switch (key) {\n case 'llm':\n return new AnalyticsLLM(instance as any, analytics) as unknown as AdapterTypes[K];\n case 'embeddings':\n return new AnalyticsEmbeddings(instance as any, analytics) as unknown as AdapterTypes[K];\n case 'vectorStore':\n return new AnalyticsVectorStore(instance as any, analytics) as unknown as AdapterTypes[K];\n case 'cache':\n return new AnalyticsCache(instance as any, analytics) as unknown as AdapterTypes[K];\n case 'storage':\n return new AnalyticsStorage(instance as any, analytics) as unknown as AdapterTypes[K];\n default:\n // For adapters without analytics wrappers (config, etc.), return original\n return instance;\n }\n}\n\n/**\n * Initialize core features with real implementations.\n */\nfunction initializeCoreFeatures(\n container: PlatformContainer,\n config: CoreFeaturesConfig = {}\n): {\n workflows: any; // TODO: Re-enable when workflow-engine is ported to V3\n jobs: JobScheduler;\n cron: CronManager;\n resources: ResourceManager;\n} {\n // Create core features with proper dependencies\n const resources = new ResourceManager(\n container.cache,\n container.logger,\n config.resources\n );\n\n const jobs = new JobScheduler(\n resources,\n container.eventBus,\n container.logger,\n config.jobs\n );\n\n const cron = new CronManager(container.logger);\n\n const workflows = new WorkflowEngine(\n resources,\n container.storage,\n container.eventBus,\n container.logger,\n config.workflows\n );\n\n return { workflows, jobs, cron, resources };\n}\n\n/**\n * Initialize resource broker with queue and rate limiting.\n * Wraps existing adapters with Queued versions for transparent integration.\n * Plugins use useLLM(), useEmbeddings() as before - they don't know about queuing.\n */\nfunction initializeResourceBroker(\n container: PlatformContainer,\n config: ResourceBrokerConfig = {}\n): ResourceBroker {\n // Create backend (distributed or in-memory)\n let backend: RateLimitBackend;\n\n if (config.distributed) {\n // For distributed mode, we need StateBroker\n // This will be implemented when StateBroker is available\n platform.logger.warn('Distributed ResourceBroker not yet implemented, using InMemory');\n backend = new InMemoryRateLimitBackend();\n } else {\n backend = new InMemoryRateLimitBackend();\n }\n\n const broker = new ResourceBroker(backend);\n\n // Register LLM resource and wrap adapter\n if (container.hasAdapter('llm')) {\n const llmConfig = config.llm ?? {};\n const realLLM = container.llm; // Save reference to real adapter\n\n broker.register('llm', {\n rateLimits: llmConfig.rateLimits ?? 'openai-tier-1',\n maxRetries: llmConfig.maxRetries ?? 3,\n timeout: llmConfig.timeout ?? 60000,\n executor: async (operation: string, args: unknown[]) => {\n if (operation === 'complete') {\n return realLLM.complete(args[0] as string, args[1] as any);\n }\n throw new Error(`Unknown LLM operation: ${operation}`);\n },\n });\n\n // Replace adapter with Queued version - plugins see same interface\n const queuedLLM = createQueuedLLM(broker, realLLM);\n container.setAdapter('llm', queuedLLM);\n platform.logger.debug('ResourceBroker: LLM adapter wrapped with queue');\n }\n\n // Register Embeddings resource and wrap adapter\n if (container.hasAdapter('embeddings')) {\n const embeddingsConfig = config.embeddings ?? {};\n const realEmbeddings = container.embeddings; // Save reference to real adapter\n\n broker.register('embeddings', {\n rateLimits: embeddingsConfig.rateLimits ?? 'openai-tier-1',\n maxRetries: embeddingsConfig.maxRetries ?? 3,\n timeout: embeddingsConfig.timeout ?? 60000,\n executor: async (operation: string, args: unknown[]) => {\n if (operation === 'embed') {\n return realEmbeddings.embed(args[0] as string);\n }\n if (operation === 'embedBatch') {\n return realEmbeddings.embedBatch(args[0] as string[]);\n }\n throw new Error(`Unknown Embeddings operation: ${operation}`);\n },\n });\n\n // Replace adapter with Queued version - plugins see same interface\n const queuedEmbeddings = createQueuedEmbeddings(broker, realEmbeddings);\n container.setAdapter('embeddings', queuedEmbeddings);\n platform.logger.debug('ResourceBroker: Embeddings adapter wrapped with queue');\n }\n\n // Register VectorStore resource and wrap adapter\n if (container.hasAdapter('vectorStore')) {\n const vsConfig = config.vectorStore ?? {};\n const realVectorStore = container.vectorStore; // Save reference to real adapter\n\n broker.register('vectorStore', {\n rateLimits: vsConfig.maxConcurrent ? { maxConcurrentRequests: vsConfig.maxConcurrent } : {},\n maxRetries: vsConfig.maxRetries ?? 3,\n timeout: vsConfig.timeout ?? 30000,\n executor: async (operation: string, args: unknown[]) => {\n switch (operation) {\n case 'search':\n return realVectorStore.search(args[0] as number[], args[1] as number, args[2] as any);\n case 'upsert':\n return realVectorStore.upsert(args[0] as any[]);\n case 'delete':\n return realVectorStore.delete(args[0] as string[]);\n case 'count':\n return realVectorStore.count();\n case 'get':\n return realVectorStore.get?.(args[0] as string[]);\n case 'query':\n return realVectorStore.query?.(args[0] as any);\n default:\n throw new Error(`Unknown VectorStore operation: ${operation}`);\n }\n },\n });\n\n // Replace adapter with Queued version - plugins see same interface\n const queuedVectorStore = createQueuedVectorStore(broker, realVectorStore);\n container.setAdapter('vectorStore', queuedVectorStore);\n platform.logger.debug('ResourceBroker: VectorStore adapter wrapped with queue');\n }\n\n return broker;\n}\n\n/**\n * Initialize the platform with configuration.\n * Loads adapters and initializes core features.\n *\n * @param config - Platform configuration\n * @param cwd - Workspace root directory (defaults to process.cwd())\n * @returns Initialized platform container\n *\n * @example\n * ```typescript\n * await initPlatform({\n * adapters: {\n * analytics: '@kb-labs/analytics-adapter',\n * vectorStore: '@kb-labs/adapters-qdrant',\n * llm: '@kb-labs/adapters-openai',\n * },\n * core: {\n * resources: { defaultQuotas: { ... } },\n * jobs: { maxConcurrent: 10 },\n * },\n * });\n * ```\n */\nexport async function initPlatform(\n config: PlatformConfig = {},\n cwd: string = process.cwd(),\n uiProvider?: (hostType: string) => any\n): Promise<PlatformContainer> {\n\n // ✅ Idempotent: If already initialized, return existing singleton\n // This prevents duplicate adapter instances across CLI and sandbox processes\n platform.logger.debug(`initPlatform isInitialized=${platform.isInitialized} pid=${process.pid}`);\n\n if (platform.isInitialized) {\n platform.logger.debug(`initPlatform returning existing platform pid=${process.pid}`);\n return platform;\n }\n\n platform.logger.debug(`initPlatform initializing NEW platform pid=${process.pid}`);\n const { adapters = {}, adapterOptions = {}, core = {}, execution = {} } = config;\n\n // 🔍 Detect if running in child process (sandbox worker)\n const isChildProcess = !!process.send; // Has IPC channel = forked child\n const initStartedAt = Date.now();\n\n await platform.emitLifecyclePhase('start', {\n cwd,\n isChildProcess,\n metadata: {\n adapterKeys: Object.keys(adapters),\n hasExecutionConfig: Object.keys(execution).length > 0,\n pid: process.pid,\n },\n });\n\n try {\n if (isChildProcess) {\n // ══════════════════════════════════════════════════════════════════════\n // CHILD PROCESS (Sandbox Worker)\n // ══════════════════════════════════════════════════════════════════════\n // Create IPC proxy adapters that forward calls to parent process.\n // This eliminates adapter duplication - only parent has real adapters.\n\n platform.logger.debug('initPlatform child process detected - creating proxy adapters');\n\n // Use Unix Socket transport by default (100-1000x faster than IPC for large messages)\n const { UnixSocketTransport } = await import('./transport/unix-socket-transport.js');\n const { VectorStoreProxy } = await import('./proxy/vector-store-proxy.js');\n const { CacheProxy } = await import('./proxy/cache-proxy.js');\n const { ConfigProxy } = await import('./proxy/config-proxy.js');\n const { LLMProxy } = await import('./proxy/llm-proxy.js');\n const { EmbeddingsProxy } = await import('./proxy/embeddings-proxy.js');\n const { StorageProxy } = await import('./proxy/storage-proxy.js');\n\n // Create single transport for all adapters\n const transport = new UnixSocketTransport();\n platform.logger.debug('initPlatform using Unix Socket transport');\n\n // Create proxy adapters (replace real adapters with IPC proxies)\n if (adapters.vectorStore) {\n platform.setAdapter('vectorStore', new VectorStoreProxy(transport));\n platform.logger.debug('initPlatform created VectorStoreProxy');\n }\n\n if (adapters.cache) {\n platform.setAdapter('cache', new CacheProxy(transport));\n platform.logger.debug('initPlatform created CacheProxy');\n }\n\n // Config adapter is ALWAYS created (not optional like other adapters)\n platform.setAdapter('config', new ConfigProxy(transport));\n platform.logger.debug('initPlatform created ConfigProxy');\n\n // LLM proxy is ALWAYS created (parent may have real LLM even if not in child config)\n platform.setAdapter('llm', new LLMProxy(transport));\n platform.logger.debug('initPlatform created LLMProxy');\n\n if (adapters.embeddings) {\n const embeddingsProxy = new EmbeddingsProxy(transport);\n await embeddingsProxy.getDimensions(); // Initialize dimensions before use\n platform.setAdapter('embeddings', embeddingsProxy);\n platform.logger.debug('initPlatform created EmbeddingsProxy');\n }\n\n if (adapters.storage) {\n platform.setAdapter('storage', new StorageProxy(transport));\n platform.logger.debug('initPlatform created StorageProxy');\n }\n\n // ⚠️ CRITICAL: Do NOT create ExecutionBackend in child process!\n // Child processes ARE the workers - creating backend here would spawn infinite workers.\n // ExecutionBackend is ONLY created in parent process.\n\n // Core features are initialized normally (they don't duplicate resources)\n const coreFeatures = initializeCoreFeatures(platform, core);\n platform.initCoreFeatures(\n coreFeatures.workflows,\n coreFeatures.jobs,\n coreFeatures.cron,\n coreFeatures.resources\n );\n\n // Initialize ResourceBroker for queue and rate limiting\n const resourceBroker = initializeResourceBroker(platform, core.resourceBroker);\n platform.initResourceBroker(resourceBroker);\n platform.logger.debug('initPlatform initialized ResourceBroker');\n\n platform.logger.debug('initPlatform child process initialization complete');\n\n } else {\n // ══════════════════════════════════════════════════════════════════════\n // PARENT PROCESS (CLI bin)\n // ══════════════════════════════════════════════════════════════════════\n // Load real adapters (Qdrant, Redis, OpenAI, etc.)\n // Start IPC server to handle calls from child processes.\n\n platform.logger.debug('initPlatform parent process detected - loading real adapters');\n\n // Create analytics context for auto-enrichment (once per execution)\n const analyticsContext = await createAnalyticsContext(cwd);\n platform.logger.debug('initPlatform created analytics context', {\n product: analyticsContext.source.product,\n version: analyticsContext.source.version,\n actorType: analyticsContext.actor?.type,\n runId: analyticsContext.runId,\n });\n\n // Use AdapterLoader for dependency resolution and proper loading order\n const loader = new AdapterLoader();\n\n // Create runtime contexts registry\n // Adapters declare which contexts they need via manifest.contexts\n const runtimeContexts: Record<string, unknown> = {\n workspace: { cwd },\n analytics: analyticsContext,\n };\n\n // Module loader function - defined before loop so we can pre-load manifests\n const loadModule = async (modulePath: string): Promise<LoadedAdapterModule> => {\n try {\n const { discoverAdapters } = await import('./discover-adapters.js');\n const discovered = await discoverAdapters(cwd);\n\n // Parse module path into base package and subpath (same logic as resolveAdapter)\n const basePkgName = modulePath.split('/').slice(0, 2).join('/'); // \"@kb-labs/adapters-openai\"\n const subpath =\n modulePath.includes('/') && modulePath.split('/').length > 2\n ? modulePath.split('/').slice(2).join('/')\n : null; // \"embeddings\" or null\n\n const adapter = discovered.get(basePkgName);\n\n if (adapter && subpath) {\n // Load subpath export from workspace adapter\n const subpathFile = path.join(adapter.pkgRoot, 'dist', `${subpath}.js`);\n try {\n await fs.access(subpathFile);\n const module = await import(pathToFileURL(subpathFile).href);\n\n const factory = module.createAdapter || module.default;\n const manifest = module.manifest;\n\n if (!factory) {\n throw new Error(\n `Subpath ${modulePath} has no createAdapter or default export`\n );\n }\n\n if (!manifest) {\n throw new Error(\n `Subpath ${modulePath} has no manifest export`\n );\n }\n\n return { createAdapter: factory, manifest };\n } catch (err) {\n // Subpath file doesn't exist, try loading base package\n const baseModule = await import(\n pathToFileURL(\n path.join(adapter.pkgRoot, 'dist', 'index.js')\n ).href\n );\n\n const factory = baseModule.createAdapter || baseModule.default;\n const manifest = baseModule.manifest;\n\n if (!factory) {\n throw new Error(\n `Module ${modulePath} has no createAdapter or default export`\n );\n }\n\n if (!manifest) {\n throw new Error(\n `Module ${modulePath} has no manifest export`\n );\n }\n\n return { createAdapter: factory, manifest };\n }\n } else if (adapter) {\n // Load base package (no subpath)\n const module = await import(\n pathToFileURL(\n path.join(adapter.pkgRoot, 'dist', 'index.js')\n ).href\n );\n\n const factory = module.createAdapter || module.default;\n const manifest = module.manifest;\n\n if (!factory) {\n throw new Error(\n `Module ${modulePath} has no createAdapter or default export`\n );\n }\n\n if (!manifest) {\n throw new Error(\n `Module ${modulePath} has no manifest export`\n );\n }\n\n return { createAdapter: factory, manifest };\n } else {\n // Fallback to node_modules\n const module = await import(modulePath);\n\n const factory = module.createAdapter || module.default;\n const manifest = module.manifest;\n\n if (!factory) {\n throw new Error(\n `Module ${modulePath} has no createAdapter or default export`\n );\n }\n\n if (!manifest) {\n throw new Error(\n `Module ${modulePath} has no manifest export`\n );\n }\n\n return { createAdapter: factory, manifest };\n }\n } catch (error) {\n throw new Error(\n `Failed to load adapter module ${modulePath}: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n };\n\n // Build adapter configs for AdapterLoader\n // Supports both single adapter (string) and multi-adapter (string[]) config\n const adapterConfigs: Record<string, AdapterConfig> = {};\n\n // Track all available adapters for multi-adapter routing (LLM tier switching, etc.)\n const availableAdapters: Record<string, string[]> = {};\n\n for (const [name, adapterValue] of Object.entries(adapters)) {\n // Normalize to array and get primary adapter\n const adapterPackages = normalizeAdapterValue(adapterValue as AdapterValue);\n const primaryAdapter = getPrimaryAdapter(adapterValue as AdapterValue);\n\n if (!primaryAdapter) {continue;}\n\n // Store all available adapters for this type (used by LLMRouter, etc.)\n availableAdapters[name] = adapterPackages;\n\n try {\n // Pre-load module to access manifest (primary adapter only)\n const module = await loadModule(primaryAdapter);\n const baseOptions = (adapterOptions as Record<string, unknown>)[name] ?? {};\n\n // Inject requested contexts from manifest\n const requestedContexts = module.manifest.contexts ?? [];\n const contexts: Record<string, unknown> = {};\n\n for (const ctxName of requestedContexts) {\n if (runtimeContexts[ctxName]) {\n contexts[ctxName] = runtimeContexts[ctxName];\n }\n }\n\n adapterConfigs[name] = {\n module: primaryAdapter,\n // Merge contexts with user options (user options can override)\n config: { ...contexts, ...baseOptions },\n };\n\n // Log multi-adapter setup\n if (adapterPackages.length > 1) {\n platform.logger.debug(`initPlatform multi-adapter setup for ${name}`, {\n primary: primaryAdapter,\n available: adapterPackages,\n });\n }\n } catch (error) {\n throw error;\n }\n }\n\n // Load adapters with dependency resolution\n const loadedAdapters = await loader.loadAdapters(adapterConfigs, loadModule);\n\n // CRITICAL: Set analytics adapter FIRST (without wrapping) so wrapWithAnalytics() can use it\n if (loadedAdapters.has('analytics')) {\n platform.setAdapter('analytics', loadedAdapters.get('analytics') as any);\n platform.logger.debug('initPlatform loaded adapter: analytics → FileAnalytics (set early for wrapping)');\n }\n\n // Set adapters in platform (wrapped with analytics if available)\n // NOTE: LLM gets special handling - LLMRouter wraps AFTER ResourceBroker\n // Chain will be: LLMRouter → QueuedLLM → AnalyticsLLM → RawAdapter\n for (const [name, instance] of loadedAdapters.entries()) {\n // Skip analytics - already set above\n if (name === 'analytics') {\n continue;\n }\n\n // For LLM: only wrap with Analytics here, Router wrapping happens after ResourceBroker\n const wrappedInstance = wrapWithAnalytics(name as keyof AdapterTypes, instance as any);\n platform.setAdapter(name, wrappedInstance);\n\n const wrapperName = (wrappedInstance as any).constructor?.name ?? 'Unknown';\n const isWrapped = wrapperName.startsWith('Analytics');\n platform.logger.debug(\n `initPlatform loaded adapter: ${name} → ${(instance as any).constructor.name}${isWrapped ? ` (wrapped with ${wrapperName})` : ''}`\n );\n }\n\n // Get dependency graph for extension connection\n const graph = await loader.buildDependencyGraph(adapterConfigs, loadModule);\n loader.connectExtensions(loadedAdapters, graph);\n\n // Create ConfigAdapter (ALWAYS present, not loaded dynamically)\n try {\n const { ConfigAdapter } = await import('./adapters/config-adapter.js');\n platform.setAdapter('config', new ConfigAdapter());\n platform.logger.debug('initPlatform created ConfigAdapter');\n } catch (error) {\n platform.logger.warn('Failed to create ConfigAdapter, using NoOp fallback', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n // ══════════════════════════════════════════════════════════════════════\n // Initialize ExecutionBackend (AFTER adapters, BEFORE core features)\n // CRITICAL: ExecutionBackend is REQUIRED - all execution goes through it\n // ══════════════════════════════════════════════════════════════════════\n try {\n // Use dynamic import from plugin-execution-factory to eliminate circular dependency\n // plugin-execution-factory has no dependency on core-runtime\n const { createExecutionBackend } = await import('@kb-labs/plugin-execution-factory');\n\n // Map config types to backend options (explicit mapping, no type casts)\n const executionBackend = createExecutionBackend({\n platform: platform, // PlatformServices interface (adapters only)\n mode: execution.mode ?? 'auto',\n uiProvider, // Pass UI provider from caller (CLI, REST API, etc.)\n workerPool: execution.workerPool ? {\n min: execution.workerPool.min,\n max: execution.workerPool.max,\n maxRequestsPerWorker: execution.workerPool.maxRequestsPerWorker,\n maxUptimeMsPerWorker: execution.workerPool.maxUptimeMsPerWorker,\n maxConcurrentPerPlugin: execution.workerPool.maxConcurrentPerPlugin,\n warmup: execution.workerPool.warmup ? {\n mode: execution.workerPool.warmup.mode ?? 'none',\n topN: execution.workerPool.warmup.topN,\n maxHandlers: execution.workerPool.warmup.maxHandlers,\n } : undefined,\n } : undefined,\n remote: execution.remote ? {\n endpoint: execution.remote.endpoint ?? '',\n } : undefined,\n });\n\n platform.initExecutionBackend(executionBackend);\n\n platform.logger.debug('initPlatform initialized ExecutionBackend', {\n mode: execution.mode ?? 'auto',\n hasWorkerPool: !!execution.workerPool,\n configPath: 'platform.execution',\n });\n } catch (error) {\n // In test environment, @kb-labs/plugin-execution may not be available\n // Only warn if in test environment (NODE_ENV=test or vitest detected)\n const isTestEnv = process.env.NODE_ENV === 'test' || process.env.VITEST === 'true';\n\n if (isTestEnv) {\n platform.logger.warn('ExecutionBackend initialization failed in test environment', {\n error: error instanceof Error ? error.message : String(error),\n });\n } else {\n // In production/development, ExecutionBackend is REQUIRED\n platform.logger.error('ExecutionBackend initialization failed');\n throw error;\n }\n }\n\n // Initialize capability services (workspace/snapshot managers)\n try {\n const workspaceManager = new WorkspaceManager(platform);\n const snapshotManager = new SnapshotManager(platform);\n platform.initCapabilityServices(workspaceManager, snapshotManager);\n platform.registerLifecycleHooks('capability-managers', {\n onShutdown: async () => {\n await workspaceManager.shutdown();\n await snapshotManager.shutdown();\n },\n });\n\n platform.logger.debug('initPlatform initialized capability services', {\n hasWorkspaceProvider: workspaceManager.hasProvider(),\n hasSnapshotProvider: snapshotManager.hasProvider(),\n });\n } catch (error) {\n platform.logger.warn('Failed to initialize capability services, continuing without them', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n // Initialize orchestration services (environment manager + run executor/orchestrator)\n try {\n if (platform.hasExecutionBackend) {\n const environmentOptions = (adapterOptions.environment ?? {}) as Record<string, unknown>;\n const environmentManager = new EnvironmentManager(platform, {\n janitorIntervalMs: typeof environmentOptions.janitorIntervalMs === 'number'\n ? environmentOptions.janitorIntervalMs\n : undefined,\n janitorBatchSize: typeof environmentOptions.janitorBatchSize === 'number'\n ? environmentOptions.janitorBatchSize\n : undefined,\n });\n const runExecutor = new RunExecutor(platform.executionBackend, platform.logger);\n const runOrchestrator = new RunOrchestrator(\n environmentManager,\n runExecutor,\n platform.logger\n );\n\n platform.initOrchestrationServices(\n environmentManager,\n runExecutor,\n runOrchestrator\n );\n environmentManager.startJanitor();\n platform.registerLifecycleHooks('environment-manager', {\n onShutdown: async () => {\n await environmentManager.shutdown();\n },\n });\n\n platform.logger.debug('initPlatform initialized orchestration services', {\n hasEnvironmentProvider: environmentManager.hasProvider(),\n });\n }\n } catch (error) {\n platform.logger.warn('Failed to initialize orchestration services, continuing without them', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n // Initialize core features (gracefully degrade if workflow unavailable)\n try {\n const coreFeatures = initializeCoreFeatures(platform, core);\n platform.initCoreFeatures(\n coreFeatures.workflows,\n coreFeatures.jobs,\n coreFeatures.cron,\n coreFeatures.resources\n );\n platform.logger.debug('initPlatform initialized core features');\n } catch (error) {\n platform.logger.warn('Failed to initialize core features, continuing without them', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n // Initialize ResourceBroker for queue and rate limiting (optional)\n try {\n const resourceBroker = initializeResourceBroker(platform, core.resourceBroker);\n platform.initResourceBroker(resourceBroker);\n platform.logger.debug('initPlatform initialized ResourceBroker');\n } catch (error) {\n platform.logger.warn('Failed to initialize ResourceBroker, continuing without rate limiting', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n // ══════════════════════════════════════════════════════════════════════\n // Wrap LLM with Router (AFTER ResourceBroker)\n // Chain: LLMRouter → QueuedLLM → AnalyticsLLM → RawAdapter\n // This ensures useLLM({ tier }) can call resolve() on the outermost wrapper\n // ══════════════════════════════════════════════════════════════════════\n if (platform.hasAdapter('llm')) {\n const llmOptions = (adapterOptions.llm ?? {}) as LLMAdapterOptions;\n const executionDefaults = llmOptions.executionDefaults;\n const llmWithDefaults = createDefaultExecutionPolicyLLM(platform.llm, executionDefaults);\n\n if (llmWithDefaults !== platform.llm) {\n platform.setAdapter('llm', llmWithDefaults);\n platform.logger.debug('initPlatform applied centralized LLM execution defaults');\n }\n\n try {\n const { LLMRouter } = await import('@kb-labs/llm-router');\n\n // Get current LLM (already QueuedLLM → AnalyticsLLM → RawAdapter)\n const queuedLLM = llmWithDefaults;\n\n // Create adapter loader function for multi-adapter support\n // CRITICAL: Wrap loaded adapters with AnalyticsLLM for tracking\n const adapterLoader = async (adapterPackage: string): Promise<any> => {\n try {\n const module = await loadModule(adapterPackage);\n const loadedAdapter = await module.createAdapter(llmOptions, {});\n\n // Wrap with AnalyticsLLM if analytics is available\n const analytics = platform.analytics;\n const analyticsWrapped = analytics && analytics.constructor.name !== 'NoOpAnalytics'\n ? new AnalyticsLLM(loadedAdapter as any, analytics)\n : loadedAdapter;\n const wrappedAdapter = createDefaultExecutionPolicyLLM(\n analyticsWrapped as any,\n executionDefaults\n );\n\n platform.logger.debug(`LLMRouter loaded adapter: ${adapterPackage}`, {\n wrapped: wrappedAdapter !== loadedAdapter,\n });\n return wrappedAdapter;\n } catch (error) {\n platform.logger.warn(`Failed to load adapter ${adapterPackage}`, {\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n };\n\n // Build router config from adapter options\n const routerConfig = {\n defaultTier: llmOptions.defaultTier ?? llmOptions.tier ?? 'small',\n tierMapping: llmOptions.tierMapping,\n capabilities: llmOptions.capabilities,\n adapterLoader,\n };\n\n const llmRouter = new LLMRouter(\n queuedLLM,\n routerConfig,\n platform.logger\n );\n\n // Replace LLM adapter with Router-wrapped version\n platform.setAdapter('llm', llmRouter);\n\n const modelInfo = llmOptions.tierMapping\n ? `tierMapping with ${Object.keys(llmOptions.tierMapping).length} tiers`\n : `tier: ${routerConfig.defaultTier}`;\n\n const llmAdapters = availableAdapters['llm'] ?? [];\n if (llmAdapters.length > 1) {\n platform.logger.debug(`initPlatform LLM multi-adapter enabled`, {\n adapters: llmAdapters,\n primary: llmAdapters[0],\n });\n }\n\n platform.logger.debug(`initPlatform wrapped LLM with Router (${modelInfo})`);\n } catch (error) {\n // LLMRouter not available - keep QueuedLLM as is\n platform.logger.debug('LLMRouter not available, using QueuedLLM directly', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Start Unix Socket server to handle adapter calls from children (critical for V3 plugins)\n try {\n const { createUnixSocketServer } = await import('./ipc/unix-socket-server.js');\n const socketServer = await createUnixSocketServer(platform);\n platform.initSocketServer(socketServer);\n platform.logger.debug('initPlatform started Unix Socket server for child processes');\n } catch (error) {\n platform.logger.warn('Failed to start UnixSocketServer, V3 plugin execution will be unavailable', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n platform.logger.debug('initPlatform parent process initialization complete');\n }\n\n await platform.emitLifecyclePhase('ready', {\n cwd,\n isChildProcess,\n metadata: {\n adapterKeys: platform.listAdapters(),\n durationMs: Date.now() - initStartedAt,\n pid: process.pid,\n },\n });\n\n return platform;\n } catch (error) {\n await platform.emitLifecycleError(error, 'start', {\n cwd,\n isChildProcess,\n metadata: {\n adapterKeys: Object.keys(adapters),\n durationMs: Date.now() - initStartedAt,\n pid: process.pid,\n },\n });\n throw error;\n }\n}\n\n/**\n * Reset the platform to initial state (for testing).\n * Clears all adapters and core features.\n * Platform will use NoOp fallbacks until re-initialized.\n *\n * @example\n * ```typescript\n * // Before test\n * resetPlatform();\n * await initPlatform({ adapters: { llm: mockLLM } });\n *\n * // After test\n * resetPlatform();\n * ```\n */\nexport function resetPlatform(): void {\n platform.reset();\n}\n","/**\n * @module @kb-labs/core-runtime/analytics-context\n * Auto-detection of analytics context (source, actor, runId) for event enrichment.\n *\n * See ADR-0040: Analytics V1 Auto-Enrichment\n */\n\nimport { randomUUID } from 'node:crypto';\nimport { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { execSync } from 'node:child_process';\nimport type { AnalyticsContext } from '@kb-labs/core-platform/adapters';\nexport type { AnalyticsContext };\n\n/**\n * Create AnalyticsContext with auto-detection of source, actor, and runId.\n *\n * Detection logic:\n * - **Source**: Reads package.json from cwd for product name and version\n * - **Actor**: Detects from CI environment variables or git config\n * - CI mode: Checks CI=true, GITHUB_ACTIONS, GITLAB_CI, etc.\n * - User mode: Executes `git config user.name` and `git config user.email`\n * - **RunId**: Generates unique UUID per execution (correlates events in single CLI invocation)\n * - **Context**: Adds workspace path, git branch (if available)\n *\n * @param cwd - Workspace root directory\n * @returns AnalyticsContext with auto-populated metadata\n *\n * @example\n * ```typescript\n * const context = await createAnalyticsContext('/path/to/workspace');\n * // {\n * // source: { product: '@kb-labs/cli', version: '1.0.0' },\n * // runId: 'f47ac10b-58cc-4372-a567-0e02b2c3d479',\n * // actor: { type: 'user', id: 'user@example.com', name: 'John Doe' },\n * // ctx: { workspace: '/path/to/workspace', branch: 'main' }\n * // }\n * ```\n */\nexport async function createAnalyticsContext(cwd: string): Promise<AnalyticsContext> {\n // 1. Detect source from package.json\n const source = await detectSource(cwd);\n\n // 2. Detect actor from environment\n const actor = detectActor();\n\n // 3. Generate runId per execution\n const runId = randomUUID();\n\n // 4. Additional context\n const ctx = buildContext(cwd);\n\n return {\n source,\n runId,\n actor,\n ctx,\n };\n}\n\n/**\n * Detect source (product name and version) from package.json\n */\nasync function detectSource(cwd: string): Promise<{ product: string; version: string }> {\n try {\n const pkgPath = join(cwd, 'package.json');\n const pkgContent = await readFile(pkgPath, 'utf-8');\n const pkg = JSON.parse(pkgContent);\n\n return {\n product: pkg.name || 'kb-labs',\n version: pkg.version || '0.0.0',\n };\n } catch {\n // If package.json doesn't exist or is invalid, use defaults\n return {\n product: 'kb-labs',\n version: '0.0.0',\n };\n }\n}\n\n/**\n * Detect actor from environment (CI or user)\n */\nfunction detectActor(): AnalyticsContext['actor'] {\n // CI detection (GitHub Actions, GitLab CI, CircleCI, Jenkins, etc.)\n const isCI =\n process.env.CI === 'true' ||\n process.env.GITHUB_ACTIONS === 'true' ||\n process.env.GITLAB_CI === 'true' ||\n process.env.CIRCLECI === 'true' ||\n process.env.JENKINS_URL !== undefined ||\n process.env.TRAVIS === 'true';\n\n if (isCI) {\n return {\n type: 'ci',\n id:\n process.env.GITHUB_ACTOR ||\n process.env.GITLAB_USER_LOGIN ||\n process.env.CIRCLE_USERNAME ||\n process.env.BUILD_USER_ID ||\n 'ci-bot',\n name:\n process.env.GITHUB_ACTOR ||\n process.env.GITLAB_USER_NAME ||\n process.env.BUILD_USER ||\n 'CI Bot',\n };\n }\n\n // User detection from git config\n try {\n const gitUser = execSync('git config user.name', {\n encoding: 'utf-8',\n stdio: ['pipe', 'pipe', 'ignore'],\n }).trim();\n\n const gitEmail = execSync('git config user.email', {\n encoding: 'utf-8',\n stdio: ['pipe', 'pipe', 'ignore'],\n }).trim();\n\n return {\n type: 'user',\n id: gitEmail || undefined,\n name: gitUser || undefined,\n };\n } catch {\n // Git config not available, use minimal actor\n return {\n type: 'user',\n };\n }\n}\n\n/**\n * Build additional context (workspace, branch, etc.)\n */\nfunction buildContext(cwd: string): Record<string, string | number | boolean | null> {\n const ctx: Record<string, string | number | boolean | null> = {\n workspace: cwd,\n };\n\n // Add git branch if available\n try {\n const branch = execSync('git rev-parse --abbrev-ref HEAD', {\n encoding: 'utf-8',\n stdio: ['pipe', 'pipe', 'ignore'],\n }).trim();\n ctx.branch = branch;\n } catch {\n // Git not available, skip branch\n }\n\n return ctx;\n}\n","/**\n * @module @kb-labs/core-runtime/adapter-loader\n * Adapter dependency resolution and loading with topological sort.\n *\n * Implements ADR-0043: Adapter Manifest System\n */\n\nimport type { AdapterManifest, AdapterDependency } from '@kb-labs/core-platform';\n\n/**\n * Adapter configuration from kb.config.json\n */\nexport interface AdapterConfig {\n /** Package path (e.g., \"@kb-labs/adapters-pino\") */\n module: string;\n /** Adapter-specific configuration */\n config?: unknown;\n}\n\n/**\n * Loaded adapter module with manifest and factory\n */\nexport interface LoadedAdapterModule {\n /** Adapter manifest */\n manifest: AdapterManifest;\n /** Factory function to create adapter instance */\n createAdapter: (config: unknown, deps: Record<string, unknown>) => unknown | Promise<unknown>;\n}\n\n/**\n * Dependency graph node\n */\ninterface DependencyGraphNode {\n /** Adapter name (config key) */\n name: string;\n /** Adapter manifest */\n manifest: AdapterManifest;\n /** Loaded module */\n module: LoadedAdapterModule;\n /** Adapter configuration */\n config: unknown;\n /** Required dependencies (adapter names) */\n requiredDeps: string[];\n /** Optional dependencies (adapter names) */\n optionalDeps: string[];\n /** Incoming edge count (for Kahn's algorithm) */\n inDegree: number;\n}\n\n/**\n * Dependency graph for topological sort\n */\nexport class DependencyGraph {\n private nodes = new Map<string, DependencyGraphNode>();\n private edges = new Map<string, Set<string>>(); // from -> [to...]\n\n /**\n * Add node to graph\n */\n addNode(node: DependencyGraphNode): void {\n this.nodes.set(node.name, node);\n if (!this.edges.has(node.name)) {\n this.edges.set(node.name, new Set());\n }\n }\n\n /**\n * Add edge from dependency to dependent.\n * In topological sort, edge A -> B means A must come before B.\n * For adapters: db -> logPersistence means db must load before logPersistence.\n */\n addEdge(from: string, to: string): void {\n if (!this.edges.has(from)) {\n this.edges.set(from, new Set());\n }\n this.edges.get(from)!.add(to);\n\n // Increment in-degree of dependent node (target)\n const node = this.nodes.get(to);\n if (node) {\n node.inDegree++;\n }\n }\n\n /**\n * Get node by name\n */\n getNode(name: string): DependencyGraphNode | undefined {\n return this.nodes.get(name);\n }\n\n /**\n * Get all nodes\n */\n getAllNodes(): DependencyGraphNode[] {\n return Array.from(this.nodes.values());\n }\n\n /**\n * Get dependencies of a node\n */\n getDependencies(name: string): string[] {\n return Array.from(this.edges.get(name) ?? []);\n }\n\n /**\n * Topological sort using Kahn's algorithm.\n * Returns nodes in dependency order (dependencies before dependents).\n *\n * @throws Error if circular dependency detected\n */\n topologicalSort(): DependencyGraphNode[] {\n // Copy in-degrees (Kahn's algorithm mutates them)\n const inDegrees = new Map<string, number>();\n for (const node of this.nodes.values()) {\n inDegrees.set(node.name, node.inDegree);\n }\n\n // Queue of nodes with no incoming edges\n const queue: string[] = [];\n for (const [name, degree] of inDegrees.entries()) {\n if (degree === 0) {\n queue.push(name);\n }\n }\n\n const sorted: DependencyGraphNode[] = [];\n\n while (queue.length > 0) {\n const currentName = queue.shift()!;\n const currentNode = this.nodes.get(currentName)!;\n sorted.push(currentNode);\n\n // For each dependency of current node\n const deps = this.getDependencies(currentName);\n for (const depName of deps) {\n const depDegree = inDegrees.get(depName)!;\n inDegrees.set(depName, depDegree - 1);\n\n if (depDegree - 1 === 0) {\n queue.push(depName);\n }\n }\n }\n\n // If not all nodes processed, there's a cycle\n if (sorted.length !== this.nodes.size) {\n const remaining = Array.from(this.nodes.keys()).filter(\n (name) => !sorted.some((node) => node.name === name)\n );\n throw new Error(\n `Circular dependency detected in adapters: ${remaining.join(', ')}`\n );\n }\n\n return sorted;\n }\n}\n\n/**\n * Adapter loader with dependency resolution.\n *\n * Features:\n * - Topological sort for correct load order\n * - Circular dependency detection\n * - Extension connection after all adapters loaded\n * - Support for optional dependencies\n */\nexport class AdapterLoader {\n /**\n * Create rich missing-dependency error with runtime-token guidance.\n */\n private createMissingDependencyError(\n nodeName: string,\n depToken: string,\n graph: DependencyGraph\n ): Error {\n const nodes = graph.getAllNodes();\n const configuredTokens = nodes.map((n) => n.name);\n const matchingManifestIds = nodes\n .filter((n) => n.manifest.id === depToken)\n .map((n) => n.name);\n\n let message =\n `Adapter \"${nodeName}\" requires adapter \"${depToken}\" but it's not configured. ` +\n `Dependencies must reference runtime adapter tokens (config keys), not manifest.id.`;\n\n if (matchingManifestIds.length > 0) {\n message +=\n ` Token \"${depToken}\" matches manifest.id of configured adapter token(s): ` +\n `${matchingManifestIds.join(', ')}.`;\n }\n\n message += ` Configured tokens: ${configuredTokens.join(', ') || '(none)'}.`;\n return new Error(message);\n }\n\n /**\n * Build dependency graph from adapter configurations.\n *\n * @param configs - Adapter configurations from kb.config.json\n * @param loadModule - Function to load adapter module (for testing/mocking)\n * @returns Dependency graph\n */\n async buildDependencyGraph(\n configs: Record<string, AdapterConfig>,\n loadModule: (modulePath: string) => Promise<LoadedAdapterModule>\n ): Promise<DependencyGraph> {\n const graph = new DependencyGraph();\n\n // Step 1: Load all modules and create nodes\n for (const [name, config] of Object.entries(configs)) {\n const module = await loadModule(config.module);\n\n // Parse dependencies from manifest\n const requiredDeps = this.parseDependencies(module.manifest.requires?.adapters ?? []);\n const optionalDeps = module.manifest.optional?.adapters ?? [];\n\n graph.addNode({\n name,\n manifest: module.manifest,\n module,\n config: config.config,\n requiredDeps,\n optionalDeps,\n inDegree: 0, // Will be updated when edges are added\n });\n }\n\n // Step 2: Add edges (dependencies)\n for (const node of graph.getAllNodes()) {\n // Add edges for required dependencies\n for (const depId of node.requiredDeps) {\n const depNode = graph.getNode(depId);\n if (!depNode) {\n throw this.createMissingDependencyError(node.name, depId, graph);\n }\n // Edge from dependency to dependent (dependency must load first)\n // db -> logPersistence means db loads before logPersistence\n graph.addEdge(depId, node.name);\n }\n\n // Add edges for optional dependencies (if present)\n for (const depId of node.optionalDeps) {\n const depNode = graph.getNode(depId);\n if (depNode) {\n // Only add edge if optional dep exists\n graph.addEdge(depId, node.name);\n }\n // If optional dep missing, skip (no error)\n }\n }\n\n return graph;\n }\n\n /**\n * Parse adapter dependencies from manifest.\n * Handles both short form (string[]) and long form ({ id, alias }[]).\n */\n private parseDependencies(deps: AdapterDependency[]): string[] {\n return deps.map((dep) => {\n if (typeof dep === 'string') {\n return dep;\n }\n return dep.id;\n });\n }\n\n /**\n * Get dependency aliases for factory function.\n * Maps dependency IDs to their aliases (or ID if no alias).\n */\n private getDependencyAliases(\n manifest: AdapterManifest\n ): Map<string, string> {\n const aliases = new Map<string, string>();\n\n const deps = manifest.requires?.adapters ?? [];\n for (const dep of deps) {\n if (typeof dep === 'string') {\n aliases.set(dep, dep); // No alias, use ID\n } else {\n aliases.set(dep.id, dep.alias ?? dep.id);\n }\n }\n\n return aliases;\n }\n\n /**\n * Load adapters in dependency order.\n *\n * @param configs - Adapter configurations\n * @param loadModule - Function to load adapter module\n * @returns Map of adapter name to instance\n */\n async loadAdapters(\n configs: Record<string, AdapterConfig>,\n loadModule: (modulePath: string) => Promise<LoadedAdapterModule>\n ): Promise<Map<string, unknown>> {\n // Step 1: Build dependency graph\n const graph = await this.buildDependencyGraph(configs, loadModule);\n\n // Step 2: Topological sort\n const sorted = graph.topologicalSort();\n\n // Step 3: Load adapters in dependency order\n const adapters = new Map<string, unknown>();\n\n for (const node of sorted) {\n // Build deps object for factory function\n const deps: Record<string, unknown> = {};\n\n // Get dependency aliases\n const aliases = this.getDependencyAliases(node.manifest);\n\n // Add required dependencies\n for (const depId of node.requiredDeps) {\n const depInstance = adapters.get(depId);\n if (!depInstance) {\n throw new Error(\n `Internal error: Required dependency \"${depId}\" not loaded before \"${node.name}\"`\n );\n }\n const alias = aliases.get(depId) ?? depId;\n deps[alias] = depInstance;\n }\n\n // Add optional dependencies (if present)\n for (const depId of node.optionalDeps) {\n const depInstance = adapters.get(depId);\n if (depInstance) {\n const alias = aliases.get(depId) ?? depId;\n deps[alias] = depInstance;\n }\n // If optional dep missing, skip\n }\n\n // Create adapter instance\n const instance = await node.module.createAdapter(node.config, deps);\n adapters.set(node.name, instance);\n }\n\n return adapters;\n }\n\n /**\n * Connect extensions to core adapters.\n * Called after all adapters are loaded.\n *\n * Extensions are sorted by priority (higher first), then by registration order.\n *\n * @param adapters - Map of adapter name to instance\n * @param graph - Dependency graph with manifests\n */\n connectExtensions(\n adapters: Map<string, unknown>,\n graph: DependencyGraph\n ): void {\n // Collect all extensions\n const extensions: Array<{\n name: string;\n manifest: AdapterManifest;\n instance: unknown;\n priority: number;\n }> = [];\n\n for (const node of graph.getAllNodes()) {\n if (node.manifest.extends) {\n const instance = adapters.get(node.name);\n if (!instance) {continue;}\n\n extensions.push({\n name: node.name,\n manifest: node.manifest,\n instance,\n priority: node.manifest.extends.priority ?? 0,\n });\n }\n }\n\n // Sort by priority (higher first), then by name (stable sort)\n extensions.sort((a, b) => {\n if (a.priority !== b.priority) {\n return b.priority - a.priority; // Higher priority first\n }\n return a.name.localeCompare(b.name); // Alphabetical for same priority\n });\n\n // Connect each extension\n for (const ext of extensions) {\n const { adapter: targetName, hook, method } = ext.manifest.extends!;\n\n const target = adapters.get(targetName);\n if (!target) {\n console.warn(\n `[AdapterLoader] Extension \"${ext.name}\" cannot connect: target adapter \"${targetName}\" not found`\n );\n continue;\n }\n\n // Check if target has hook method\n if (typeof (target as any)[hook] !== 'function') {\n console.warn(\n `[AdapterLoader] Extension \"${ext.name}\" cannot connect: target \"${targetName}\" has no method \"${hook}\"`\n );\n continue;\n }\n\n // Check if extension has method\n if (typeof (ext.instance as any)[method] !== 'function') {\n console.warn(\n `[AdapterLoader] Extension \"${ext.name}\" cannot connect: extension has no method \"${method}\"`\n );\n continue;\n }\n\n // Connect: target.hook(extension.method)\n try {\n const extensionMethod = (ext.instance as any)[method].bind(ext.instance);\n (target as any)[hook](extensionMethod);\n\n console.log(\n `[AdapterLoader] Connected extension \"${ext.name}\" to \"${targetName}.${hook}\" (priority: ${ext.priority})`\n );\n } catch (error) {\n console.error(\n `[AdapterLoader] Failed to connect extension \"${ext.name}\":`,\n error\n );\n }\n }\n }\n}\n","/**\n * @module @kb-labs/core-runtime/environment-lease-store\n * SQL-backed persistence for environment leases and events.\n */\n\nimport type { ISQLDatabase } from '@kb-labs/core-platform/adapters';\n\nexport interface EnvironmentLeaseRow {\n environmentId: string;\n runId?: string;\n status: 'active' | 'terminated' | 'failed';\n provider: string;\n acquiredAt: string;\n expiresAt: string;\n releasedAt?: string | null;\n metadataJson?: string | null;\n}\n\nexport interface EnvironmentEventRow {\n id: string;\n environmentId: string;\n runId?: string;\n type: string;\n at: string;\n reason?: string;\n payloadJson?: string | null;\n}\n\n/**\n * SQL persistence helper for environment lifecycle.\n */\nexport class EnvironmentLeaseStore {\n private schemaReady = false;\n\n constructor(private readonly db: ISQLDatabase) {}\n\n /**\n * Ensure required schema exists.\n */\n async ensureSchema(): Promise<void> {\n if (this.schemaReady) {\n return;\n }\n\n const createLeasesSql = `\n CREATE TABLE IF NOT EXISTS environment_leases (\n environment_id TEXT PRIMARY KEY,\n run_id TEXT,\n status TEXT NOT NULL,\n provider TEXT NOT NULL,\n acquired_at TEXT NOT NULL,\n expires_at TEXT NOT NULL,\n released_at TEXT,\n metadata_json TEXT\n )\n `;\n\n const createEventsSql = `\n CREATE TABLE IF NOT EXISTS environment_events (\n id TEXT PRIMARY KEY,\n environment_id TEXT NOT NULL,\n run_id TEXT,\n type TEXT NOT NULL,\n at TEXT NOT NULL,\n reason TEXT,\n payload_json TEXT\n )\n `;\n\n if (typeof this.db.exec === 'function') {\n await this.db.exec(createLeasesSql);\n await this.db.exec(createEventsSql);\n } else {\n await this.db.query(createLeasesSql);\n await this.db.query(createEventsSql);\n }\n\n this.schemaReady = true;\n }\n\n /**\n * Upsert lease record.\n */\n async upsertLease(row: EnvironmentLeaseRow): Promise<void> {\n await this.ensureSchema();\n\n await this.db.query(\n `\n INSERT INTO environment_leases (\n environment_id,\n run_id,\n status,\n provider,\n acquired_at,\n expires_at,\n released_at,\n metadata_json\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(environment_id) DO UPDATE SET\n run_id = excluded.run_id,\n status = excluded.status,\n provider = excluded.provider,\n acquired_at = excluded.acquired_at,\n expires_at = excluded.expires_at,\n released_at = excluded.released_at,\n metadata_json = excluded.metadata_json\n `,\n [\n row.environmentId,\n row.runId ?? null,\n row.status,\n row.provider,\n row.acquiredAt,\n row.expiresAt,\n row.releasedAt ?? null,\n row.metadataJson ?? null,\n ]\n );\n }\n\n /**\n * Append event.\n */\n async appendEvent(row: EnvironmentEventRow): Promise<void> {\n await this.ensureSchema();\n\n await this.db.query(\n `\n INSERT INTO environment_events (\n id,\n environment_id,\n run_id,\n type,\n at,\n reason,\n payload_json\n ) VALUES (?, ?, ?, ?, ?, ?, ?)\n `,\n [\n row.id,\n row.environmentId,\n row.runId ?? null,\n row.type,\n row.at,\n row.reason ?? null,\n row.payloadJson ?? null,\n ]\n );\n }\n\n /**\n * Mark lease as terminated.\n */\n async markTerminated(environmentId: string, releasedAt: string, reason?: string): Promise<void> {\n await this.ensureSchema();\n\n await this.db.query(\n `\n UPDATE environment_leases\n SET status = 'terminated', released_at = ?\n WHERE environment_id = ?\n `,\n [releasedAt, environmentId]\n );\n\n if (reason) {\n await this.appendEvent({\n id: `${environmentId}-terminated-${Date.now()}`,\n environmentId,\n type: 'environment.terminated',\n at: releasedAt,\n reason,\n });\n }\n }\n\n /**\n * Find active leases that expired before given timestamp.\n */\n async findExpiredActiveLeases(nowIso: string, limit = 50): Promise<EnvironmentLeaseRow[]> {\n await this.ensureSchema();\n\n const result = await this.db.query<{\n environment_id: string;\n run_id: string | null;\n status: string;\n provider: string;\n acquired_at: string;\n expires_at: string;\n released_at: string | null;\n metadata_json: string | null;\n }>(\n `\n SELECT\n environment_id,\n run_id,\n status,\n provider,\n acquired_at,\n expires_at,\n released_at,\n metadata_json\n FROM environment_leases\n WHERE status = 'active' AND expires_at <= ?\n ORDER BY expires_at ASC\n LIMIT ?\n `,\n [nowIso, limit]\n );\n\n return result.rows.map((row) => ({\n environmentId: row.environment_id,\n runId: row.run_id ?? undefined,\n status: row.status as EnvironmentLeaseRow['status'],\n provider: row.provider,\n acquiredAt: row.acquired_at,\n expiresAt: row.expires_at,\n releasedAt: row.released_at,\n metadataJson: row.metadata_json,\n }));\n }\n}\n\n","/**\n * @module @kb-labs/core-runtime/environment-manager\n * Runtime manager for long-lived environment providers.\n */\n\nimport type {\n IEnvironmentProvider,\n CreateEnvironmentRequest,\n EnvironmentDescriptor,\n EnvironmentStatusResult,\n EnvironmentLease,\n} from '@kb-labs/core-platform';\nimport type { ISQLDatabase } from '@kb-labs/core-platform/adapters';\nimport { randomUUID } from 'node:crypto';\nimport type { PlatformContainer } from './container.js';\nimport { EnvironmentLeaseStore } from './environment-lease-store.js';\n\nexport interface EnvironmentManagerOptions {\n janitorIntervalMs?: number;\n janitorBatchSize?: number;\n}\n\n/**\n * Environment manager facade over `environment` adapter token.\n *\n * Keeps provider access in one place and centralizes diagnostics.\n */\nexport class EnvironmentManager {\n private readonly store?: EnvironmentLeaseStore;\n private readonly janitorIntervalMs: number;\n private readonly janitorBatchSize: number;\n private janitorTimer?: NodeJS.Timeout;\n\n constructor(\n private readonly platform: Pick<PlatformContainer, 'getAdapter' | 'logger'>,\n options: EnvironmentManagerOptions = {}\n ) {\n const db = this.platform.getAdapter<ISQLDatabase>('sqlDatabase');\n if (db) {\n this.store = new EnvironmentLeaseStore(db);\n }\n\n this.janitorIntervalMs = options.janitorIntervalMs ?? 60_000;\n this.janitorBatchSize = options.janitorBatchSize ?? 25;\n }\n\n /**\n * Check whether environment provider is configured.\n */\n hasProvider(): boolean {\n return !!this.platform.getAdapter<IEnvironmentProvider>('environment');\n }\n\n /**\n * Create environment using configured provider.\n */\n async createEnvironment(request: CreateEnvironmentRequest): Promise<EnvironmentDescriptor> {\n const provider = this.getProviderOrThrow();\n const environment = await provider.create(request);\n const now = new Date().toISOString();\n\n await this.safePersist(async () => this.persistLeaseState(environment, request.runId, 'active', now), {\n operation: 'persistLeaseState',\n environmentId: environment.environmentId,\n runId: request.runId,\n });\n await this.safePersist(async () => this.appendEvent({\n environmentId: environment.environmentId,\n runId: request.runId,\n type: 'environment.created',\n at: now,\n payload: {\n provider: environment.provider,\n status: environment.status,\n },\n }), {\n operation: 'appendEvent',\n environmentId: environment.environmentId,\n runId: request.runId,\n eventType: 'environment.created',\n });\n\n this.platform.logger.debug('Environment created', {\n environmentId: environment.environmentId,\n provider: environment.provider,\n status: environment.status,\n runId: request.runId,\n templateId: request.templateId,\n });\n\n return environment;\n }\n\n /**\n * Get environment status.\n */\n async getEnvironmentStatus(environmentId: string): Promise<EnvironmentStatusResult> {\n const provider = this.getProviderOrThrow();\n return provider.getStatus(environmentId);\n }\n\n /**\n * Destroy environment.\n */\n async destroyEnvironment(environmentId: string, reason?: string): Promise<void> {\n const provider = this.getProviderOrThrow();\n await provider.destroy(environmentId, reason);\n const now = new Date().toISOString();\n\n await this.safePersist(\n async () => this.store?.markTerminated(environmentId, now, reason),\n {\n operation: 'markTerminated',\n environmentId,\n reason,\n }\n );\n await this.safePersist(async () => this.appendEvent({\n environmentId,\n type: 'environment.destroyed',\n at: now,\n reason,\n }), {\n operation: 'appendEvent',\n environmentId,\n reason,\n eventType: 'environment.destroyed',\n });\n\n this.platform.logger.debug('Environment destroyed', {\n environmentId,\n reason,\n });\n }\n\n /**\n * Renew environment lease if provider supports it.\n */\n async renewEnvironmentLease(\n environmentId: string,\n ttlMs: number\n ): Promise<EnvironmentLease> {\n const provider = this.getProviderOrThrow();\n if (!provider.renewLease) {\n throw new Error('Configured environment provider does not support lease renewal');\n }\n const lease = await provider.renewLease(environmentId, ttlMs);\n const status = await this.getEnvironmentStatus(environmentId).catch(() => undefined);\n\n await this.safePersist(\n async () => this.persistLeaseState(\n {\n environmentId,\n provider: 'unknown',\n status: status?.status ?? 'ready',\n createdAt: lease.acquiredAt,\n updatedAt: new Date().toISOString(),\n lease,\n },\n lease.owner,\n 'active',\n new Date().toISOString()\n ),\n {\n operation: 'persistLeaseState',\n environmentId,\n runId: lease.owner,\n }\n );\n await this.safePersist(async () => this.appendEvent({\n environmentId,\n runId: lease.owner,\n type: 'environment.lease.renewed',\n at: new Date().toISOString(),\n payload: {\n expiresAt: lease.expiresAt,\n },\n }), {\n operation: 'appendEvent',\n environmentId,\n runId: lease.owner,\n eventType: 'environment.lease.renewed',\n });\n\n return lease;\n }\n\n /**\n * Start periodic cleanup for expired leases.\n */\n startJanitor(): void {\n if (!this.store || this.janitorTimer) {\n return;\n }\n\n this.janitorTimer = setInterval(() => {\n void this.cleanupExpiredLeases();\n }, this.janitorIntervalMs);\n\n this.janitorTimer.unref?.();\n this.platform.logger.debug('Environment janitor started', {\n intervalMs: this.janitorIntervalMs,\n batchSize: this.janitorBatchSize,\n });\n }\n\n /**\n * Stop janitor timer.\n */\n async shutdown(): Promise<void> {\n if (this.janitorTimer) {\n clearInterval(this.janitorTimer);\n this.janitorTimer = undefined;\n }\n }\n\n /**\n * Cleanup expired active leases.\n */\n async cleanupExpiredLeases(now: Date = new Date()): Promise<number> {\n if (!this.store) {\n return 0;\n }\n\n const expired = await this.store.findExpiredActiveLeases(\n now.toISOString(),\n this.janitorBatchSize\n );\n\n let cleaned = 0;\n for (const lease of expired) {\n try {\n await this.destroyEnvironment(lease.environmentId, 'lease_expired');\n cleaned++;\n } catch (error) {\n this.platform.logger.warn('Environment janitor failed to cleanup lease', {\n environmentId: lease.environmentId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n if (cleaned > 0) {\n this.platform.logger.debug('Environment janitor cleanup complete', {\n cleaned,\n });\n }\n\n return cleaned;\n }\n\n private getProviderOrThrow(): IEnvironmentProvider {\n const provider = this.platform.getAdapter<IEnvironmentProvider>('environment');\n if (!provider) {\n throw new Error(\n 'Environment provider not configured. ' +\n 'Configure platform.adapters.environment with an adapter implementing IEnvironmentProvider.'\n );\n }\n return provider;\n }\n\n private async persistLeaseState(\n environment: EnvironmentDescriptor,\n runId: string | undefined,\n status: 'active' | 'terminated' | 'failed',\n nowIso: string\n ): Promise<void> {\n if (!this.store) {\n return;\n }\n\n await this.store.upsertLease({\n environmentId: environment.environmentId,\n runId,\n status,\n provider: environment.provider,\n acquiredAt: environment.lease?.acquiredAt ?? environment.createdAt,\n expiresAt: environment.lease?.expiresAt ?? nowIso,\n metadataJson: environment.metadata\n ? JSON.stringify(environment.metadata)\n : null,\n releasedAt: status === 'active' ? null : nowIso,\n });\n }\n\n private async appendEvent(input: {\n environmentId: string;\n runId?: string;\n type: string;\n at: string;\n reason?: string;\n payload?: Record<string, unknown>;\n }): Promise<void> {\n if (!this.store) {\n return;\n }\n\n await this.store.appendEvent({\n id: randomUUID(),\n environmentId: input.environmentId,\n runId: input.runId,\n type: input.type,\n at: input.at,\n reason: input.reason,\n payloadJson: input.payload ? JSON.stringify(input.payload) : null,\n });\n }\n\n private async safePersist(\n operation: () => Promise<void | unknown>,\n context: Record<string, unknown>\n ): Promise<void> {\n try {\n await operation();\n } catch (error) {\n this.platform.logger.warn('Environment persistence operation failed', {\n ...context,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n}\n","/**\n * @module @kb-labs/core-runtime/workspace-manager\n * Runtime manager for workspace providers.\n */\n\nimport type {\n IWorkspaceProvider,\n MaterializeWorkspaceRequest,\n WorkspaceDescriptor,\n AttachWorkspaceRequest,\n WorkspaceAttachment,\n WorkspaceStatusResult,\n WorkspaceProviderCapabilities,\n} from '@kb-labs/core-platform';\nimport type { PlatformContainer } from './container.js';\n\nexport class WorkspaceManager {\n constructor(\n private readonly platform: Pick<PlatformContainer, 'getAdapter'>\n ) {}\n\n /**\n * Check whether workspace provider is configured.\n */\n hasProvider(): boolean {\n return !!this.platform.getAdapter<IWorkspaceProvider>('workspace');\n }\n\n /**\n * Materialize a workspace.\n */\n async materializeWorkspace(\n request: MaterializeWorkspaceRequest\n ): Promise<WorkspaceDescriptor> {\n const provider = this.getProviderOrThrow();\n return provider.materialize(request);\n }\n\n /**\n * Attach workspace to environment.\n */\n async attachWorkspace(\n request: AttachWorkspaceRequest\n ): Promise<WorkspaceAttachment> {\n const provider = this.getProviderOrThrow();\n return provider.attach(request);\n }\n\n /**\n * Release workspace attachment.\n */\n async releaseWorkspace(workspaceId: string, environmentId?: string): Promise<void> {\n const provider = this.getProviderOrThrow();\n await provider.release(workspaceId, environmentId);\n }\n\n /**\n * Get workspace lifecycle status.\n */\n async getWorkspaceStatus(workspaceId: string): Promise<WorkspaceStatusResult> {\n const provider = this.getProviderOrThrow();\n return provider.getStatus(workspaceId);\n }\n\n /**\n * Read provider capabilities.\n */\n getCapabilities(): WorkspaceProviderCapabilities {\n const provider = this.getProviderOrThrow();\n return provider.getCapabilities?.() ?? {};\n }\n\n /**\n * Shutdown manager resources (reserved for future internal workers).\n */\n async shutdown(): Promise<void> {\n // No background resources yet.\n }\n\n private getProviderOrThrow(): IWorkspaceProvider {\n const provider = this.platform.getAdapter<IWorkspaceProvider>('workspace');\n if (!provider) {\n throw new Error(\n 'Workspace provider not configured. ' +\n 'Configure platform.adapters.workspace with an adapter implementing IWorkspaceProvider.'\n );\n }\n return provider;\n }\n}\n","/**\n * @module @kb-labs/core-runtime/snapshot-manager\n * Runtime manager for snapshot providers.\n */\n\nimport type {\n ISnapshotProvider,\n CaptureSnapshotRequest,\n SnapshotDescriptor,\n RestoreSnapshotRequest,\n RestoreSnapshotResult,\n SnapshotStatusResult,\n SnapshotGarbageCollectRequest,\n SnapshotGarbageCollectResult,\n SnapshotProviderCapabilities,\n} from '@kb-labs/core-platform';\nimport type { PlatformContainer } from './container.js';\n\nexport class SnapshotManager {\n constructor(\n private readonly platform: Pick<PlatformContainer, 'getAdapter'>\n ) {}\n\n /**\n * Check whether snapshot provider is configured.\n */\n hasProvider(): boolean {\n return !!this.platform.getAdapter<ISnapshotProvider>('snapshot');\n }\n\n /**\n * Capture a new snapshot.\n */\n async captureSnapshot(\n request: CaptureSnapshotRequest\n ): Promise<SnapshotDescriptor> {\n const provider = this.getProviderOrThrow();\n return provider.capture(request);\n }\n\n /**\n * Restore an existing snapshot.\n */\n async restoreSnapshot(\n request: RestoreSnapshotRequest\n ): Promise<RestoreSnapshotResult> {\n const provider = this.getProviderOrThrow();\n return provider.restore(request);\n }\n\n /**\n * Read snapshot status.\n */\n async getSnapshotStatus(snapshotId: string): Promise<SnapshotStatusResult> {\n const provider = this.getProviderOrThrow();\n return provider.getStatus(snapshotId);\n }\n\n /**\n * Delete snapshot by id.\n */\n async deleteSnapshot(snapshotId: string): Promise<void> {\n const provider = this.getProviderOrThrow();\n await provider.delete(snapshotId);\n }\n\n /**\n * Run garbage collection if provider supports it.\n */\n async garbageCollectSnapshots(\n request: SnapshotGarbageCollectRequest = {}\n ): Promise<SnapshotGarbageCollectResult> {\n const provider = this.getProviderOrThrow();\n if (!provider.garbageCollect) {\n throw new Error('Configured snapshot provider does not support garbage collection');\n }\n return provider.garbageCollect(request);\n }\n\n /**\n * Read provider capabilities.\n */\n getCapabilities(): SnapshotProviderCapabilities {\n const provider = this.getProviderOrThrow();\n return provider.getCapabilities?.() ?? {};\n }\n\n /**\n * Shutdown manager resources (reserved for future internal workers).\n */\n async shutdown(): Promise<void> {\n // No background resources yet.\n }\n\n private getProviderOrThrow(): ISnapshotProvider {\n const provider = this.platform.getAdapter<ISnapshotProvider>('snapshot');\n if (!provider) {\n throw new Error(\n 'Snapshot provider not configured. ' +\n 'Configure platform.adapters.snapshot with an adapter implementing ISnapshotProvider.'\n );\n }\n return provider;\n }\n}\n","/**\n * @module @kb-labs/core-runtime/run-executor\n * Bridge between run orchestration and execution backend.\n */\n\nimport type {\n IExecutionBackend,\n ExecutionRequest,\n ExecutionResult,\n} from '@kb-labs/core-contracts';\n\n/**\n * Request for run step execution.\n */\nexport interface RunStepExecutionRequest {\n runId: string;\n stepId: string;\n environmentId?: string;\n execution: ExecutionRequest;\n}\n\n/**\n * Run executor that enriches execution metadata with run/environment context.\n */\nexport class RunExecutor {\n constructor(\n private readonly executionBackend: IExecutionBackend,\n private readonly logger: { debug(message: string, meta?: Record<string, unknown>): void }\n ) {}\n\n /**\n * Execute one run step through the shared execution backend.\n */\n async executeStep(request: RunStepExecutionRequest): Promise<ExecutionResult> {\n const { runId, stepId, environmentId, execution } = request;\n\n this.logger.debug('RunExecutor: executing step', {\n runId,\n stepId,\n environmentId,\n executionId: execution.executionId,\n pluginRoot: execution.pluginRoot,\n handlerRef: execution.handlerRef,\n });\n\n return this.executionBackend.execute({\n ...execution,\n context: {\n ...execution.context,\n run: {\n runId,\n stepId,\n environmentId,\n },\n },\n });\n }\n}\n","/**\n * @module @kb-labs/core-runtime/run-orchestrator\n * Minimal run state machine orchestration skeleton.\n */\n\nimport { randomUUID } from 'node:crypto';\nimport type {\n CreateEnvironmentRequest,\n CreateRunRequest,\n RunRecord,\n RunStatus,\n} from '@kb-labs/core-platform';\nimport type { RunStepExecutionRequest } from './run-executor.js';\nimport type { EnvironmentManager } from './environment-manager.js';\nimport type { RunExecutor } from './run-executor.js';\n\n/**\n * Full-cycle start request (MVP skeleton).\n */\nexport interface StartFullCycleRequest {\n run: CreateRunRequest;\n environment: CreateEnvironmentRequest;\n firstStep?: RunStepExecutionRequest['execution'];\n}\n\n/**\n * In-memory orchestrator skeleton for phase 2 wiring.\n */\nexport class RunOrchestrator {\n private readonly runs = new Map<string, RunRecord>();\n\n constructor(\n private readonly environmentManager: EnvironmentManager,\n private readonly runExecutor: RunExecutor,\n private readonly logger: { debug(message: string, meta?: Record<string, unknown>): void }\n ) {}\n\n /**\n * Create run record in memory.\n */\n createRun(input: CreateRunRequest): RunRecord {\n const now = new Date().toISOString();\n const run: RunRecord = {\n runId: randomUUID(),\n status: 'queued',\n taskRef: input.taskRef,\n templateId: input.templateId,\n actorId: input.actorId,\n tenantId: input.tenantId,\n metadata: input.metadata,\n createdAt: now,\n updatedAt: now,\n };\n\n this.runs.set(run.runId, run);\n return run;\n }\n\n /**\n * Read run from in-memory store.\n */\n getRun(runId: string): RunRecord | undefined {\n return this.runs.get(runId);\n }\n\n /**\n * Start minimal full-cycle flow.\n * queue -> provisioning -> executing -> completed/failed\n */\n async startFullCycle(request: StartFullCycleRequest): Promise<RunRecord> {\n const run = this.createRun(request.run);\n this.transition(run.runId, 'provisioning');\n\n try {\n const environment = await this.environmentManager.createEnvironment({\n ...request.environment,\n runId: request.environment.runId ?? run.runId,\n tenantId: request.environment.tenantId ?? request.run.tenantId,\n });\n\n run.environmentId = environment.environmentId;\n this.transition(run.runId, 'executing');\n\n if (request.firstStep) {\n await this.runExecutor.executeStep({\n runId: run.runId,\n stepId: 'step-1',\n environmentId: environment.environmentId,\n execution: request.firstStep,\n });\n }\n\n this.transition(run.runId, 'completed');\n return this.getRunOrThrow(run.runId);\n } catch (error) {\n this.transition(run.runId, 'failed');\n this.logger.debug('RunOrchestrator: run failed', {\n runId: run.runId,\n error: error instanceof Error ? error.message : String(error),\n });\n\n if (run.environmentId) {\n try {\n await this.environmentManager.destroyEnvironment(\n run.environmentId,\n 'run.failed'\n );\n } catch {\n // Best-effort cleanup for skeleton implementation.\n }\n }\n\n throw error;\n }\n }\n\n private transition(runId: string, to: RunStatus): void {\n const run = this.getRunOrThrow(runId);\n const now = new Date().toISOString();\n const from = run.status;\n\n run.status = to;\n run.updatedAt = now;\n if (!run.startedAt && to !== 'queued') {\n run.startedAt = now;\n }\n if (to === 'completed' || to === 'failed' || to === 'failed_by_review' || to === 'cancelled') {\n run.completedAt = now;\n }\n\n this.logger.debug('RunOrchestrator: transition', {\n runId,\n from,\n to,\n updatedAt: now,\n });\n }\n\n private getRunOrThrow(runId: string): RunRecord {\n const run = this.runs.get(runId);\n if (!run) {\n throw new Error(`Run not found: ${runId}`);\n }\n return run;\n }\n}\n\n","/**\n * @module @kb-labs/core-runtime/wrappers/default-execution-policy-llm\n * Centralized execution defaults wrapper for ILLM.\n */\n\nimport type {\n ILLM,\n LLMOptions,\n LLMResponse,\n LLMMessage,\n LLMToolCallOptions,\n LLMToolCallResponse,\n LLMExecutionPolicy,\n LLMProtocolCapabilities,\n} from '@kb-labs/core-platform';\n\nfunction mergeExecutionPolicy(\n defaults: LLMExecutionPolicy,\n local?: LLMExecutionPolicy\n): LLMExecutionPolicy {\n if (!local) {\n return defaults;\n }\n\n return {\n ...defaults,\n ...local,\n cache: { ...defaults.cache, ...local.cache },\n stream: { ...defaults.stream, ...local.stream },\n };\n}\n\nfunction withExecutionDefaults(\n options: LLMOptions | undefined,\n defaults: LLMExecutionPolicy\n): LLMOptions {\n return {\n ...(options ?? {}),\n execution: mergeExecutionPolicy(defaults, options?.execution),\n };\n}\n\nexport class DefaultExecutionPolicyLLM implements ILLM {\n constructor(\n private readonly realLLM: ILLM,\n private readonly defaults: LLMExecutionPolicy\n ) {}\n\n async complete(prompt: string, options?: LLMOptions): Promise<LLMResponse> {\n return this.realLLM.complete(prompt, withExecutionDefaults(options, this.defaults));\n }\n\n stream(prompt: string, options?: LLMOptions): AsyncIterable<string> {\n return this.realLLM.stream(prompt, withExecutionDefaults(options, this.defaults));\n }\n\n async getProtocolCapabilities(): Promise<LLMProtocolCapabilities> {\n if (!this.realLLM.getProtocolCapabilities) {\n return {\n cache: { supported: false },\n stream: { supported: true },\n };\n }\n return this.realLLM.getProtocolCapabilities();\n }\n\n async chatWithTools(\n messages: LLMMessage[],\n options: LLMToolCallOptions\n ): Promise<LLMToolCallResponse> {\n if (!this.realLLM.chatWithTools) {\n throw new Error('Underlying LLM does not support chatWithTools');\n }\n return this.realLLM.chatWithTools(\n messages,\n withExecutionDefaults(options, this.defaults) as LLMToolCallOptions\n );\n }\n}\n\nexport function createDefaultExecutionPolicyLLM(\n llm: ILLM,\n defaults?: LLMExecutionPolicy\n): ILLM {\n if (!defaults || Object.keys(defaults).length === 0) {\n return llm;\n }\n\n return new DefaultExecutionPolicyLLM(llm, defaults);\n}\n\n","/**\n * @module @kb-labs/core-runtime/core/resource-manager\n * In-memory resource manager with quota enforcement.\n */\n\nimport type {\n IResourceManager,\n ResourceType,\n ResourceSlot,\n ResourceAvailability,\n TenantQuotas,\n ILogger,\n ICache,\n} from '@kb-labs/core-platform';\n\n/**\n * Default quotas for tenants without explicit configuration.\n */\nconst DEFAULT_QUOTAS: TenantQuotas = {\n maxConcurrentWorkflows: 5,\n maxConcurrentJobs: 10,\n maxQueuedJobs: 100,\n apiRequestsPerMinute: 1000,\n llmTokensPerDay: 100000,\n storageBytes: 1024 * 1024 * 1024, // 1GB\n};\n\n/**\n * Resource limits per type mapped to quota fields.\n */\nconst RESOURCE_QUOTA_MAP: Record<ResourceType, keyof TenantQuotas> = {\n workflow: 'maxConcurrentWorkflows',\n job: 'maxConcurrentJobs',\n llm: 'apiRequestsPerMinute',\n embedding: 'apiRequestsPerMinute',\n api: 'apiRequestsPerMinute',\n};\n\nexport interface ResourceManagerConfig {\n /** Default quotas for new tenants */\n defaultQuotas?: Partial<TenantQuotas>;\n /** Slot expiration check interval in ms (default: 30000) */\n expirationCheckInterval?: number;\n}\n\n/**\n * In-memory resource manager with quota enforcement.\n * Tracks resource slots per tenant and enforces limits.\n */\nexport class ResourceManager implements IResourceManager {\n private slots = new Map<string, ResourceSlot>();\n private tenantSlots = new Map<string, Set<string>>();\n private quotas = new Map<string, TenantQuotas>();\n private defaultQuotas: TenantQuotas;\n private idCounter = 0;\n private expirationTimer?: ReturnType<typeof setInterval>;\n\n constructor(\n private cache: ICache,\n private logger: ILogger,\n config: ResourceManagerConfig = {}\n ) {\n this.defaultQuotas = { ...DEFAULT_QUOTAS, ...config.defaultQuotas };\n\n // Start expiration checker\n const interval = config.expirationCheckInterval ?? 30000;\n this.expirationTimer = setInterval(() => this.cleanupExpiredSlots(), interval);\n }\n\n /**\n * Acquire a resource slot for a tenant.\n * Returns null if quota exceeded.\n *\n * @param resource - Type of resource to acquire\n * @param tenantId - Tenant identifier\n * @param timeout - Optional slot expiration timeout in ms\n * @returns Resource slot if available, null if quota exceeded\n */\n async acquireSlot(\n resource: ResourceType,\n tenantId: string,\n timeout?: number\n ): Promise<ResourceSlot | null> {\n const quota = await this.getQuota(tenantId);\n const current = this.getResourceCount(resource, tenantId);\n const max = this.getMaxForResource(quota, resource);\n\n if (current >= max) {\n this.logger.warn('Resource quota exceeded', {\n resource,\n tenantId,\n current,\n max,\n });\n return null;\n }\n\n const slot: ResourceSlot = {\n id: `slot-${++this.idCounter}-${Date.now()}`,\n resource,\n tenantId,\n acquiredAt: new Date(),\n expiresAt: timeout ? new Date(Date.now() + timeout) : undefined,\n };\n\n // Store slot\n this.slots.set(slot.id, slot);\n\n // Track by tenant\n let tenantSet = this.tenantSlots.get(tenantId);\n if (!tenantSet) {\n tenantSet = new Set();\n this.tenantSlots.set(tenantId, tenantSet);\n }\n tenantSet.add(slot.id);\n\n this.logger.debug('Resource slot acquired', {\n slotId: slot.id,\n resource,\n tenantId,\n expiresAt: slot.expiresAt,\n });\n\n return slot;\n }\n\n /**\n * Release a previously acquired resource slot.\n * Frees up quota for the tenant.\n *\n * @param slot - Slot to release\n */\n async releaseSlot(slot: ResourceSlot): Promise<void> {\n if (!this.slots.has(slot.id)) {\n this.logger.warn('Attempted to release unknown slot', { slotId: slot.id });\n return;\n }\n\n this.slots.delete(slot.id);\n\n const tenantSet = this.tenantSlots.get(slot.tenantId);\n if (tenantSet) {\n tenantSet.delete(slot.id);\n if (tenantSet.size === 0) {\n this.tenantSlots.delete(slot.tenantId);\n }\n }\n\n this.logger.debug('Resource slot released', {\n slotId: slot.id,\n resource: slot.resource,\n tenantId: slot.tenantId,\n });\n }\n\n /**\n * Get resource availability statistics.\n * If tenantId provided, returns tenant-specific stats.\n * Otherwise, returns global platform stats.\n *\n * @param resource - Type of resource\n * @param tenantId - Optional tenant filter\n * @returns Resource availability stats\n */\n async getAvailability(\n resource: ResourceType,\n tenantId?: string\n ): Promise<ResourceAvailability> {\n if (tenantId) {\n const quota = await this.getQuota(tenantId);\n const max = this.getMaxForResource(quota, resource);\n const used = this.getResourceCount(resource, tenantId);\n\n return {\n resource,\n total: max,\n used,\n available: Math.max(0, max - used),\n queueLength: 0, // In-memory implementation doesn't queue\n };\n }\n\n // Global availability (all tenants)\n let totalUsed = 0;\n for (const slot of this.slots.values()) {\n if (slot.resource === resource) {\n totalUsed++;\n }\n }\n\n return {\n resource,\n total: Number.MAX_SAFE_INTEGER,\n used: totalUsed,\n available: Number.MAX_SAFE_INTEGER,\n queueLength: 0,\n };\n }\n\n /**\n * Set custom quotas for a tenant.\n * Merges with default quotas and persists to cache.\n *\n * @param tenantId - Tenant identifier\n * @param quotas - Partial quotas to update\n */\n async setQuota(tenantId: string, quotas: Partial<TenantQuotas>): Promise<void> {\n const existing = this.quotas.get(tenantId) ?? { ...this.defaultQuotas };\n const updated = { ...existing, ...quotas };\n this.quotas.set(tenantId, updated);\n\n // Optionally persist to cache for cross-process consistency\n await this.cache.set(`quota:${tenantId}`, updated);\n\n this.logger.info('Tenant quota updated', { tenantId, quotas: updated });\n }\n\n /**\n * Get quota configuration for a tenant.\n * Returns defaults if no custom quotas set.\n *\n * @param tenantId - Tenant identifier\n * @returns Tenant quota configuration\n */\n async getQuota(tenantId: string): Promise<TenantQuotas> {\n // Check local cache first\n const cached = this.quotas.get(tenantId);\n if (cached) {return cached;}\n\n // Try to load from cache\n const stored = await this.cache.get<TenantQuotas>(`quota:${tenantId}`);\n if (stored) {\n this.quotas.set(tenantId, stored);\n return stored;\n }\n\n // Return defaults\n return { ...this.defaultQuotas };\n }\n\n /**\n * Get count of active slots for a resource type and tenant.\n */\n private getResourceCount(resource: ResourceType, tenantId: string): number {\n const tenantSet = this.tenantSlots.get(tenantId);\n if (!tenantSet) {return 0;}\n\n let count = 0;\n for (const slotId of tenantSet) {\n const slot = this.slots.get(slotId);\n if (slot?.resource === resource) {\n count++;\n }\n }\n return count;\n }\n\n /**\n * Get max allowed for a resource type from quotas.\n */\n private getMaxForResource(quota: TenantQuotas, resource: ResourceType): number {\n const field = RESOURCE_QUOTA_MAP[resource];\n return quota[field] as number;\n }\n\n /**\n * Clean up expired slots.\n */\n private cleanupExpiredSlots(): void {\n const now = Date.now();\n const expired: ResourceSlot[] = [];\n\n for (const slot of this.slots.values()) {\n if (slot.expiresAt && slot.expiresAt.getTime() < now) {\n expired.push(slot);\n }\n }\n\n for (const slot of expired) {\n this.releaseSlot(slot);\n this.logger.debug('Expired slot cleaned up', { slotId: slot.id });\n }\n }\n\n /**\n * Stop the expiration timer (for cleanup).\n */\n dispose(): void {\n if (this.expirationTimer) {\n clearInterval(this.expirationTimer);\n this.expirationTimer = undefined;\n }\n }\n\n /**\n * Get current stats (for monitoring).\n */\n getStats(): {\n totalSlots: number;\n slotsByResource: Record<ResourceType, number>;\n tenantCount: number;\n } {\n const slotsByResource: Record<ResourceType, number> = {\n workflow: 0,\n job: 0,\n llm: 0,\n embedding: 0,\n api: 0,\n };\n\n for (const slot of this.slots.values()) {\n slotsByResource[slot.resource]++;\n }\n\n return {\n totalSlots: this.slots.size,\n slotsByResource,\n tenantCount: this.tenantSlots.size,\n };\n }\n}\n","/**\n * @module @kb-labs/core-runtime/core/job-scheduler\n * In-memory job scheduler with queue and execution.\n */\n\nimport type {\n IJobScheduler,\n JobDefinition,\n JobHandle,\n JobFilter,\n CronExpression,\n IResourceManager,\n IEventBus,\n ILogger,\n} from '@kb-labs/core-platform';\n\nexport interface JobSchedulerConfig {\n /** Maximum concurrent jobs globally (default: 10) */\n maxConcurrent?: number;\n /** Queue poll interval in ms (default: 1000) */\n pollInterval?: number;\n /** Default job timeout in ms (default: 300000 = 5min) */\n defaultTimeout?: number;\n}\n\n/**\n * Job handler function type.\n */\nexport type JobHandler = (payload: unknown) => Promise<unknown>;\n\n/**\n * Internal job representation with additional fields.\n */\ninterface InternalJob extends JobHandle {\n definition: JobDefinition;\n handler?: JobHandler;\n timeoutId?: ReturnType<typeof setTimeout>;\n}\n\n/**\n * In-memory job scheduler with queue processing.\n */\nexport class JobScheduler implements IJobScheduler {\n private jobs = new Map<string, InternalJob>();\n private queue: string[] = [];\n private handlers = new Map<string, JobHandler>();\n private running = new Set<string>();\n private idCounter = 0;\n private pollTimer?: ReturnType<typeof setInterval>;\n private readonly config: Required<JobSchedulerConfig>;\n\n constructor(\n private resources: IResourceManager,\n private events: IEventBus,\n private logger: ILogger,\n config: JobSchedulerConfig = {}\n ) {\n this.config = {\n maxConcurrent: config.maxConcurrent ?? 10,\n pollInterval: config.pollInterval ?? 1000,\n defaultTimeout: config.defaultTimeout ?? 300000,\n };\n\n // Start queue processor\n this.pollTimer = setInterval(() => this.processQueue(), this.config.pollInterval);\n }\n\n /**\n * Register a job handler for a job type.\n */\n registerHandler(type: string, handler: JobHandler): void {\n this.handlers.set(type, handler);\n this.logger.debug('Job handler registered', { type });\n }\n\n /**\n * Unregister a job handler.\n */\n unregisterHandler(type: string): void {\n this.handlers.delete(type);\n }\n\n async submit(job: JobDefinition): Promise<JobHandle> {\n const id = job.idempotencyKey ?? `job-${++this.idCounter}-${Date.now()}`;\n\n // Check for duplicate by idempotency key\n if (job.idempotencyKey && this.jobs.has(id)) {\n const existing = this.jobs.get(id)!;\n this.logger.debug('Duplicate job submission', { jobId: id, status: existing.status });\n return this.toHandle(existing);\n }\n\n const tenantId = job.tenantId ?? 'default';\n const now = new Date();\n\n const internalJob: InternalJob = {\n id,\n type: job.type,\n tenantId,\n status: 'pending',\n createdAt: now,\n definition: job,\n };\n\n this.jobs.set(id, internalJob);\n\n // If runAt is in the future, schedule for later\n if (job.runAt && job.runAt.getTime() > now.getTime()) {\n const delay = job.runAt.getTime() - now.getTime();\n setTimeout(() => this.enqueue(id), delay);\n this.logger.debug('Job scheduled for later', { jobId: id, runAt: job.runAt });\n } else {\n this.enqueue(id);\n }\n\n await this.events.publish('job.submitted', { jobId: id, type: job.type, tenantId });\n\n return this.toHandle(internalJob);\n }\n\n async schedule(\n job: JobDefinition,\n schedule: CronExpression | Date\n ): Promise<JobHandle> {\n // For Date, use runAt\n if (schedule instanceof Date) {\n return this.submit({ ...job, runAt: schedule });\n }\n\n // For cron expression, this should be handled by CronManager\n // Here we just submit immediately with a note\n this.logger.warn('Cron scheduling should use CronManager', {\n schedule,\n jobType: job.type,\n });\n return this.submit(job);\n }\n\n async cancel(jobId: string): Promise<boolean> {\n const job = this.jobs.get(jobId);\n if (!job) {return false;}\n\n if (job.status === 'completed' || job.status === 'failed') {\n return false; // Can't cancel finished jobs\n }\n\n // Clear timeout if running\n if (job.timeoutId) {\n clearTimeout(job.timeoutId);\n }\n\n job.status = 'cancelled';\n job.completedAt = new Date();\n\n // Remove from queue if pending\n const queueIndex = this.queue.indexOf(jobId);\n if (queueIndex !== -1) {\n this.queue.splice(queueIndex, 1);\n }\n\n // Remove from running\n this.running.delete(jobId);\n\n await this.events.publish('job.cancelled', { jobId, type: job.type });\n this.logger.info('Job cancelled', { jobId });\n\n return true;\n }\n\n async getStatus(jobId: string): Promise<JobHandle | null> {\n const job = this.jobs.get(jobId);\n return job ? this.toHandle(job) : 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 // Sort by creation time (newest first)\n results.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());\n\n // Apply pagination\n const offset = filter?.offset ?? 0;\n const limit = filter?.limit ?? 100;\n results = results.slice(offset, offset + limit);\n\n return results.map((j) => this.toHandle(j));\n }\n\n /**\n * Add job to queue.\n */\n private enqueue(jobId: string): void {\n const job = this.jobs.get(jobId);\n if (!job || job.status !== 'pending') {return;}\n\n // Insert by priority (higher priority = earlier in queue)\n const priority = job.definition.priority ?? 50;\n let insertIndex = this.queue.length;\n\n for (let i = 0; i < this.queue.length; i++) {\n const queuedJob = this.jobs.get(this.queue[i]!);\n const queuedPriority = queuedJob?.definition.priority ?? 50;\n if (priority > queuedPriority) {\n insertIndex = i;\n break;\n }\n }\n\n this.queue.splice(insertIndex, 0, jobId);\n this.logger.debug('Job enqueued', { jobId, queuePosition: insertIndex });\n }\n\n /**\n * Process queued jobs.\n */\n private async processQueue(): Promise<void> {\n // Check if we can run more jobs\n if (this.running.size >= this.config.maxConcurrent) {\n return;\n }\n\n // Get next job from queue\n while (this.queue.length > 0 && this.running.size < this.config.maxConcurrent) {\n const jobId = this.queue.shift();\n if (!jobId) {break;}\n\n const job = this.jobs.get(jobId);\n if (!job || job.status !== 'pending') {continue;}\n\n // Try to acquire resource slot\n const slot = await this.resources.acquireSlot('job', job.tenantId, this.config.defaultTimeout);\n if (!slot) {\n // Put back in queue\n this.queue.unshift(jobId);\n break;\n }\n\n // Start job execution\n this.executeJob(job, slot.id).catch((err) => {\n this.logger.error('Job execution error', err as Error, { jobId: job.id });\n });\n }\n }\n\n /**\n * Execute a single job.\n */\n private async executeJob(job: InternalJob, slotId: string): Promise<void> {\n job.status = 'running';\n job.startedAt = new Date();\n this.running.add(job.id);\n\n await this.events.publish('job.started', { jobId: job.id, type: job.type });\n this.logger.info('Job started', { jobId: job.id, type: job.type });\n\n // Set timeout\n const timeout = job.definition.timeout ?? this.config.defaultTimeout;\n job.timeoutId = setTimeout(() => {\n if (job.status === 'running') {\n job.status = 'failed';\n job.error = 'Job timeout';\n job.completedAt = new Date();\n this.running.delete(job.id);\n this.events.publish('job.failed', { jobId: job.id, error: 'timeout' });\n this.logger.warn('Job timed out', { jobId: job.id });\n }\n }, timeout);\n\n try {\n // Get handler\n const handler = this.handlers.get(job.type);\n if (!handler) {\n throw new Error(`No handler registered for job type: ${job.type}`);\n }\n\n // Execute\n const result = await handler(job.definition.payload);\n\n // Success\n if (job.timeoutId) {clearTimeout(job.timeoutId);}\n\n job.status = 'completed';\n job.result = result;\n job.completedAt = new Date();\n\n await this.events.publish('job.completed', {\n jobId: job.id,\n type: job.type,\n result,\n });\n this.logger.info('Job completed', { jobId: job.id, type: job.type });\n } catch (error) {\n if (job.timeoutId) {clearTimeout(job.timeoutId);}\n\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n // Check if should retry\n const maxRetries = job.definition.maxRetries ?? 3;\n const currentRetries = (job as unknown as { _retryCount?: number })._retryCount ?? 0;\n\n if (currentRetries < maxRetries) {\n // Retry\n (job as unknown as { _retryCount: number })._retryCount = currentRetries + 1;\n job.status = 'pending';\n job.startedAt = undefined;\n this.enqueue(job.id);\n\n this.logger.warn('Job failed, retrying', {\n jobId: job.id,\n attempt: currentRetries + 1,\n maxRetries,\n error: errorMessage,\n });\n } else {\n // Final failure\n job.status = 'failed';\n job.error = errorMessage;\n job.completedAt = new Date();\n\n await this.events.publish('job.failed', {\n jobId: job.id,\n type: job.type,\n error: errorMessage,\n });\n this.logger.error('Job failed', error as Error, { jobId: job.id });\n }\n } finally {\n this.running.delete(job.id);\n\n // Release resource slot\n await this.resources.releaseSlot({\n id: slotId,\n resource: 'job',\n tenantId: job.tenantId,\n acquiredAt: job.startedAt ?? new Date(),\n });\n }\n }\n\n /**\n * Convert internal job to public handle.\n */\n private toHandle(job: InternalJob): JobHandle {\n return {\n id: job.id,\n type: job.type,\n tenantId: job.tenantId,\n status: job.status,\n progress: job.progress,\n result: job.result,\n error: job.error,\n createdAt: job.createdAt,\n startedAt: job.startedAt,\n completedAt: job.completedAt,\n };\n }\n\n /**\n * Stop the scheduler (for cleanup).\n */\n dispose(): void {\n if (this.pollTimer) {\n clearInterval(this.pollTimer);\n this.pollTimer = undefined;\n }\n }\n\n /**\n * Get scheduler stats (for monitoring).\n */\n getStats(): {\n totalJobs: number;\n queueLength: number;\n runningCount: number;\n byStatus: Record<string, number>;\n } {\n const byStatus: Record<string, number> = {};\n\n for (const job of this.jobs.values()) {\n byStatus[job.status] = (byStatus[job.status] ?? 0) + 1;\n }\n\n return {\n totalJobs: this.jobs.size,\n queueLength: this.queue.length,\n runningCount: this.running.size,\n byStatus,\n };\n }\n}\n","/**\n * @module @kb-labs/core-runtime/core/cron-manager\n * Cron job manager with scheduling support.\n */\n\nimport type {\n ICronManager,\n CronJob,\n CronHandler,\n CronContext,\n ILogger,\n} from '@kb-labs/core-platform';\nimport type { CronExpression } from '@kb-labs/core-platform';\n\n/**\n * Internal cron job entry.\n */\ninterface CronEntry {\n id: string;\n schedule: CronExpression;\n handler: CronHandler;\n status: 'active' | 'paused';\n lastRun?: Date;\n nextRun?: Date;\n runCount: number;\n timerId?: ReturnType<typeof setTimeout>;\n}\n\n/**\n * Parse simple cron expressions.\n * Supports: @hourly, @daily, @weekly, @monthly, @yearly\n * And basic cron: \"* * * * *\" (minute hour day month weekday)\n */\nfunction parseNextRun(schedule: CronExpression, from: Date = new Date()): Date {\n const next = new Date(from);\n\n // Handle shortcuts\n switch (schedule) {\n case '@hourly':\n next.setHours(next.getHours() + 1);\n next.setMinutes(0);\n next.setSeconds(0);\n next.setMilliseconds(0);\n return next;\n\n case '@daily':\n case '@midnight':\n next.setDate(next.getDate() + 1);\n next.setHours(0);\n next.setMinutes(0);\n next.setSeconds(0);\n next.setMilliseconds(0);\n return next;\n\n case '@weekly':\n next.setDate(next.getDate() + (7 - next.getDay()));\n next.setHours(0);\n next.setMinutes(0);\n next.setSeconds(0);\n next.setMilliseconds(0);\n return next;\n\n case '@monthly':\n next.setMonth(next.getMonth() + 1);\n next.setDate(1);\n next.setHours(0);\n next.setMinutes(0);\n next.setSeconds(0);\n next.setMilliseconds(0);\n return next;\n\n case '@yearly':\n case '@annually':\n next.setFullYear(next.getFullYear() + 1);\n next.setMonth(0);\n next.setDate(1);\n next.setHours(0);\n next.setMinutes(0);\n next.setSeconds(0);\n next.setMilliseconds(0);\n return next;\n }\n\n // Parse standard cron expression (simplified)\n const parts = schedule.split(' ');\n if (parts.length === 5) {\n const [minute, hour] = parts;\n\n // Handle \"*/N\" interval syntax\n if (minute?.startsWith('*/')) {\n const interval = parseInt(minute.substring(2), 10);\n if (!isNaN(interval)) {\n next.setMinutes(next.getMinutes() + interval);\n next.setSeconds(0);\n next.setMilliseconds(0);\n return next;\n }\n }\n\n // Simple case: specific minute and hour\n const targetMinute = minute === '*' ? next.getMinutes() : parseInt(minute ?? '0', 10);\n const targetHour = hour === '*' ? next.getHours() : parseInt(hour ?? '0', 10);\n\n if (!isNaN(targetMinute) && !isNaN(targetHour)) {\n next.setHours(targetHour);\n next.setMinutes(targetMinute);\n next.setSeconds(0);\n next.setMilliseconds(0);\n\n // If already passed, move to next day\n if (next <= from) {\n next.setDate(next.getDate() + 1);\n }\n return next;\n }\n }\n\n // Fallback: 1 hour from now\n next.setHours(next.getHours() + 1);\n return next;\n}\n\n/**\n * In-memory cron manager with scheduling.\n */\nexport class CronManager implements ICronManager {\n private jobs = new Map<string, CronEntry>();\n\n constructor(private logger: ILogger) {}\n\n register(id: string, schedule: CronExpression, handler: CronHandler): void {\n // Unregister if exists\n if (this.jobs.has(id)) {\n this.unregister(id);\n }\n\n const nextRun = parseNextRun(schedule);\n const entry: CronEntry = {\n id,\n schedule,\n handler,\n status: 'active',\n nextRun,\n runCount: 0,\n };\n\n this.jobs.set(id, entry);\n this.scheduleNext(entry);\n\n this.logger.info('Cron job registered', {\n id,\n schedule,\n nextRun: nextRun.toISOString(),\n });\n }\n\n unregister(id: string): void {\n const entry = this.jobs.get(id);\n if (!entry) {return;}\n\n if (entry.timerId) {\n clearTimeout(entry.timerId);\n }\n\n this.jobs.delete(id);\n this.logger.info('Cron job unregistered', { id });\n }\n\n list(): CronJob[] {\n return Array.from(this.jobs.values()).map((entry) => ({\n id: entry.id,\n schedule: entry.schedule,\n status: entry.status,\n lastRun: entry.lastRun,\n nextRun: entry.nextRun,\n runCount: entry.runCount,\n }));\n }\n\n async trigger(id: string): Promise<void> {\n const entry = this.jobs.get(id);\n if (!entry) {\n throw new Error(`Cron job not found: ${id}`);\n }\n\n await this.executeJob(entry);\n }\n\n pause(id: string): void {\n const entry = this.jobs.get(id);\n if (!entry) {return;}\n\n if (entry.timerId) {\n clearTimeout(entry.timerId);\n entry.timerId = undefined;\n }\n\n entry.status = 'paused';\n this.logger.info('Cron job paused', { id });\n }\n\n resume(id: string): void {\n const entry = this.jobs.get(id);\n if (!entry || entry.status !== 'paused') {return;}\n\n entry.status = 'active';\n entry.nextRun = parseNextRun(entry.schedule);\n this.scheduleNext(entry);\n\n this.logger.info('Cron job resumed', { id, nextRun: entry.nextRun });\n }\n\n /**\n * Schedule the next execution of a cron job.\n */\n private scheduleNext(entry: CronEntry): void {\n if (entry.status !== 'active' || !entry.nextRun) {return;}\n\n const delay = Math.max(0, entry.nextRun.getTime() - Date.now());\n\n entry.timerId = setTimeout(async () => {\n if (entry.status !== 'active') {return;}\n\n try {\n await this.executeJob(entry);\n } catch (error) {\n this.logger.error('Cron job execution failed', error as Error, {\n id: entry.id,\n });\n }\n\n // Schedule next run\n entry.nextRun = parseNextRun(entry.schedule);\n this.scheduleNext(entry);\n }, delay);\n }\n\n /**\n * Execute a cron job.\n */\n private async executeJob(entry: CronEntry): Promise<void> {\n const now = new Date();\n\n const context: CronContext = {\n jobId: entry.id,\n scheduledAt: entry.nextRun ?? now,\n executedAt: now,\n runCount: entry.runCount + 1,\n };\n\n this.logger.debug('Executing cron job', { id: entry.id, runCount: context.runCount });\n\n await entry.handler(context);\n\n entry.lastRun = now;\n entry.runCount++;\n\n this.logger.debug('Cron job executed', {\n id: entry.id,\n runCount: entry.runCount,\n });\n }\n\n /**\n * Stop all cron jobs (for cleanup).\n */\n dispose(): void {\n for (const entry of this.jobs.values()) {\n if (entry.timerId) {\n clearTimeout(entry.timerId);\n }\n }\n this.jobs.clear();\n }\n\n /**\n * Get stats (for monitoring).\n */\n getStats(): {\n totalJobs: number;\n activeJobs: number;\n pausedJobs: number;\n } {\n let active = 0;\n let paused = 0;\n\n for (const entry of this.jobs.values()) {\n if (entry.status === 'active') {active++;}\n else {paused++;}\n }\n\n return {\n totalJobs: this.jobs.size,\n activeJobs: active,\n pausedJobs: paused,\n };\n }\n}\n","/**\n * @module @kb-labs/core-runtime/core/workflow-engine\n * In-memory workflow engine with step execution.\n */\n\nimport type {\n IWorkflowEngine,\n WorkflowOptions,\n WorkflowRun,\n WorkflowStepRun,\n WorkflowFilter,\n RetryPolicy,\n IResourceManager,\n IStorage,\n IEventBus,\n ILogger,\n} from '@kb-labs/core-platform';\n\nexport interface WorkflowEngineConfig {\n /** Maximum concurrent workflows globally (default: 5) */\n maxConcurrent?: number;\n /** Default workflow timeout in ms (default: 300000 = 5min) */\n defaultTimeout?: number;\n}\n\n/**\n * Workflow definition (registered workflows).\n */\nexport interface WorkflowDefinition {\n id: string;\n name: string;\n steps: WorkflowStepDefinition[];\n}\n\n/**\n * Workflow step definition.\n */\nexport interface WorkflowStepDefinition {\n id: string;\n name: string;\n handler: (input: unknown, context: WorkflowStepContext) => Promise<unknown>;\n continueOnError?: boolean;\n timeout?: number;\n}\n\n/**\n * Context passed to step handlers.\n */\nexport interface WorkflowStepContext {\n workflowId: string;\n runId: string;\n stepId: string;\n tenantId: string;\n previousStepOutput?: unknown;\n}\n\n/**\n * Internal workflow run representation.\n */\ninterface InternalWorkflowRun extends WorkflowRun {\n definition: WorkflowDefinition;\n options: WorkflowOptions;\n timeoutId?: ReturnType<typeof setTimeout>;\n}\n\n/**\n * In-memory workflow engine.\n */\nexport class WorkflowEngine implements IWorkflowEngine {\n private runs = new Map<string, InternalWorkflowRun>();\n private definitions = new Map<string, WorkflowDefinition>();\n private running = new Set<string>();\n private idCounter = 0;\n private readonly config: Required<WorkflowEngineConfig>;\n\n constructor(\n private resources: IResourceManager,\n private storage: IStorage,\n private events: IEventBus,\n private logger: ILogger,\n config: WorkflowEngineConfig = {}\n ) {\n this.config = {\n maxConcurrent: config.maxConcurrent ?? 5,\n defaultTimeout: config.defaultTimeout ?? 300000,\n };\n }\n\n /**\n * Register a workflow definition.\n */\n registerWorkflow(definition: WorkflowDefinition): void {\n this.definitions.set(definition.id, definition);\n this.logger.info('Workflow registered', {\n workflowId: definition.id,\n steps: definition.steps.length,\n });\n }\n\n /**\n * Unregister a workflow definition.\n */\n unregisterWorkflow(workflowId: string): void {\n this.definitions.delete(workflowId);\n }\n\n async execute(\n workflowId: string,\n input: unknown,\n options?: WorkflowOptions\n ): Promise<WorkflowRun> {\n const definition = this.definitions.get(workflowId);\n if (!definition) {\n throw new Error(`Workflow not found: ${workflowId}`);\n }\n\n const tenantId = options?.tenantId ?? 'default';\n const timeout = options?.timeout ?? this.config.defaultTimeout;\n\n // Try to acquire resource slot\n const slot = await this.resources.acquireSlot('workflow', tenantId, timeout);\n if (!slot) {\n throw new Error(`Workflow quota exceeded for tenant: ${tenantId}`);\n }\n\n const runId = `run-${++this.idCounter}-${Date.now()}`;\n const now = new Date();\n\n const run: InternalWorkflowRun = {\n id: runId,\n workflowId,\n tenantId,\n status: 'running',\n input,\n startedAt: now,\n steps: [],\n definition,\n options: options ?? {},\n };\n\n this.runs.set(runId, run);\n this.running.add(runId);\n\n // Set timeout\n run.timeoutId = setTimeout(() => {\n if (run.status === 'running') {\n this.failRun(run, 'Workflow timeout');\n }\n }, timeout);\n\n await this.events.publish('workflow.started', {\n runId,\n workflowId,\n tenantId,\n });\n\n this.logger.info('Workflow started', { runId, workflowId, tenantId });\n\n // Execute steps\n try {\n let previousOutput: unknown = input;\n\n for (const stepDef of definition.steps) {\n if (run.status !== 'running') {break;}\n\n const stepRun = await this.executeStep(run, stepDef, previousOutput);\n run.steps.push(stepRun);\n\n if (stepRun.status === 'failed' && !stepDef.continueOnError) {\n throw new Error(`Step ${stepDef.id} failed: ${stepRun.error}`);\n }\n\n previousOutput = stepRun.output;\n }\n\n // Success\n if (run.timeoutId) {clearTimeout(run.timeoutId);}\n\n run.status = 'completed';\n run.output = previousOutput;\n run.completedAt = new Date();\n\n await this.events.publish('workflow.completed', {\n runId,\n workflowId,\n output: run.output,\n });\n\n this.logger.info('Workflow completed', { runId, workflowId });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.failRun(run, errorMessage);\n\n // Handle retry policy\n if (options?.retryPolicy) {\n await this.scheduleRetry(run, options.retryPolicy);\n }\n } finally {\n this.running.delete(runId);\n\n // Release resource slot\n await this.resources.releaseSlot(slot);\n\n // Persist run to storage\n await this.persistRun(run);\n }\n\n return this.toPublicRun(run);\n }\n\n async getStatus(runId: string): Promise<WorkflowRun | null> {\n // Check memory first\n const run = this.runs.get(runId);\n if (run) {return this.toPublicRun(run);}\n\n // Try to load from storage\n const stored = await this.storage.read(`workflows/${runId}.json`);\n if (stored) {\n try {\n return JSON.parse(stored.toString()) as WorkflowRun;\n } catch {\n return null;\n }\n }\n\n return null;\n }\n\n async cancel(runId: string): Promise<void> {\n const run = this.runs.get(runId);\n if (!run) {\n throw new Error(`Workflow run not found: ${runId}`);\n }\n\n if (run.status !== 'running' && run.status !== 'pending') {\n throw new Error(`Cannot cancel workflow in status: ${run.status}`);\n }\n\n if (run.timeoutId) {clearTimeout(run.timeoutId);}\n\n run.status = 'cancelled';\n run.completedAt = new Date();\n\n this.running.delete(runId);\n\n await this.events.publish('workflow.cancelled', {\n runId,\n workflowId: run.workflowId,\n });\n\n this.logger.info('Workflow cancelled', { runId });\n }\n\n async retry(runId: string, fromStep?: string): Promise<WorkflowRun> {\n const originalRun = this.runs.get(runId);\n if (!originalRun) {\n throw new Error(`Workflow run not found: ${runId}`);\n }\n\n // Find step to retry from\n let input = originalRun.input;\n const definition = originalRun.definition;\n\n if (fromStep) {\n const stepIndex = definition.steps.findIndex((s) => s.id === fromStep);\n if (stepIndex === -1) {\n throw new Error(`Step not found: ${fromStep}`);\n }\n\n // Use previous step's output as input\n if (stepIndex > 0 && originalRun.steps[stepIndex - 1]) {\n input = originalRun.steps[stepIndex - 1]!.output;\n }\n }\n\n this.logger.info('Retrying workflow', {\n originalRunId: runId,\n fromStep,\n });\n\n const tags: Record<string, string> = {\n ...originalRun.options.tags,\n retryOf: runId,\n };\n if (fromStep) {\n tags.retryFromStep = fromStep;\n }\n\n return this.execute(originalRun.workflowId, input, {\n ...originalRun.options,\n tags,\n });\n }\n\n async list(filter?: WorkflowFilter): Promise<WorkflowRun[]> {\n let results = Array.from(this.runs.values());\n\n if (filter?.workflowId) {\n results = results.filter((r) => r.workflowId === filter.workflowId);\n }\n if (filter?.tenantId) {\n results = results.filter((r) => r.tenantId === filter.tenantId);\n }\n if (filter?.status) {\n results = results.filter((r) => r.status === filter.status);\n }\n\n // Sort by start time (newest first)\n results.sort((a, b) => {\n const aTime = a.startedAt?.getTime() ?? 0;\n const bTime = b.startedAt?.getTime() ?? 0;\n return bTime - aTime;\n });\n\n // Apply pagination\n const offset = filter?.offset ?? 0;\n const limit = filter?.limit ?? 100;\n results = results.slice(offset, offset + limit);\n\n return results.map((r) => this.toPublicRun(r));\n }\n\n /**\n * Execute a single workflow step.\n */\n private async executeStep(\n run: InternalWorkflowRun,\n stepDef: WorkflowStepDefinition,\n input: unknown\n ): Promise<WorkflowStepRun> {\n const stepRun: WorkflowStepRun = {\n id: stepDef.id,\n name: stepDef.name,\n status: 'running',\n input,\n startedAt: new Date(),\n };\n\n this.logger.debug('Executing step', {\n runId: run.id,\n stepId: stepDef.id,\n });\n\n try {\n const context: WorkflowStepContext = {\n workflowId: run.workflowId,\n runId: run.id,\n stepId: stepDef.id,\n tenantId: run.tenantId,\n previousStepOutput: input,\n };\n\n // Execute with optional step timeout\n const timeout = stepDef.timeout ?? 60000;\n const result = await Promise.race([\n stepDef.handler(input, context),\n new Promise((_, reject) => {\n setTimeout(() => reject(new Error('Step timeout')), timeout);\n }),\n ]);\n\n stepRun.status = 'completed';\n stepRun.output = result;\n stepRun.completedAt = new Date();\n\n this.logger.debug('Step completed', {\n runId: run.id,\n stepId: stepDef.id,\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n stepRun.status = 'failed';\n stepRun.error = errorMessage;\n stepRun.completedAt = new Date();\n\n this.logger.warn('Step failed', {\n runId: run.id,\n stepId: stepDef.id,\n error: errorMessage,\n });\n }\n\n return stepRun;\n }\n\n /**\n * Mark run as failed.\n */\n private failRun(run: InternalWorkflowRun, error: string): void {\n if (run.timeoutId) {clearTimeout(run.timeoutId);}\n\n run.status = 'failed';\n run.error = error;\n run.completedAt = new Date();\n\n this.events.publish('workflow.failed', {\n runId: run.id,\n workflowId: run.workflowId,\n error,\n });\n\n this.logger.error('Workflow failed', new Error(error), {\n runId: run.id,\n workflowId: run.workflowId,\n });\n }\n\n /**\n * Schedule a workflow retry based on policy.\n */\n private async scheduleRetry(\n run: InternalWorkflowRun,\n policy: RetryPolicy\n ): Promise<void> {\n const currentAttemptStr = run.options.tags?.['_retryAttempt'];\n const currentAttempt = currentAttemptStr ? parseInt(currentAttemptStr, 10) : 0;\n\n if (currentAttempt >= (policy.maxAttempts ?? 3)) {\n this.logger.warn('Max retry attempts reached', {\n runId: run.id,\n attempts: currentAttempt,\n });\n return;\n }\n\n // Calculate delay with exponential backoff\n const baseDelay = policy.initialDelay ?? 1000;\n const multiplier = policy.backoffMultiplier ?? 2;\n const delay = baseDelay * Math.pow(multiplier, currentAttempt);\n const maxDelay = policy.maxDelay ?? 60000;\n const actualDelay = Math.min(delay, maxDelay);\n\n this.logger.info('Scheduling workflow retry', {\n runId: run.id,\n attempt: currentAttempt + 1,\n delay: actualDelay,\n });\n\n setTimeout(async () => {\n try {\n await this.execute(run.workflowId, run.input, {\n ...run.options,\n tags: {\n ...run.options.tags,\n _retryAttempt: String(currentAttempt + 1),\n _retryOf: run.id,\n },\n });\n } catch (error) {\n this.logger.error('Retry execution failed', error as Error, {\n runId: run.id,\n });\n }\n }, actualDelay);\n }\n\n /**\n * Persist workflow run to storage.\n */\n private async persistRun(run: InternalWorkflowRun): Promise<void> {\n const publicRun = this.toPublicRun(run);\n const data = JSON.stringify(publicRun, null, 2);\n\n try {\n await this.storage.write(\n `workflows/${run.id}.json`,\n Buffer.from(data, 'utf-8')\n );\n } catch (error) {\n this.logger.warn('Failed to persist workflow run', {\n runId: run.id,\n error: (error as Error).message,\n });\n }\n }\n\n /**\n * Convert internal run to public representation.\n */\n private toPublicRun(run: InternalWorkflowRun): WorkflowRun {\n return {\n id: run.id,\n workflowId: run.workflowId,\n tenantId: run.tenantId,\n status: run.status,\n input: run.input,\n output: run.output,\n error: run.error,\n startedAt: run.startedAt,\n completedAt: run.completedAt,\n steps: run.steps,\n };\n }\n\n /**\n * Stop all workflows (for cleanup).\n */\n dispose(): void {\n for (const run of this.runs.values()) {\n if (run.timeoutId) {\n clearTimeout(run.timeoutId);\n }\n }\n }\n\n /**\n * Get engine stats (for monitoring).\n */\n getStats(): {\n totalRuns: number;\n runningCount: number;\n registeredWorkflows: number;\n byStatus: Record<string, number>;\n } {\n const byStatus: Record<string, number> = {};\n\n for (const run of this.runs.values()) {\n byStatus[run.status] = (byStatus[run.status] ?? 0) + 1;\n }\n\n return {\n totalRuns: this.runs.size,\n runningCount: this.running.size,\n registeredWorkflows: this.definitions.size,\n byStatus,\n };\n }\n}\n","/**\n * @module @kb-labs/core-runtime/proxy\n * IPC proxy for ISQLDatabase adapter.\n *\n * This proxy forwards all SQL database operations to the parent process via IPC.\n * The parent process owns the real SQL adapter (e.g., SQLiteAdapter).\n *\n * Benefits:\n * - Single database connection (consistent data access across all workers)\n * - Reduced memory usage (no duplicate connections)\n * - No race conditions (centralized transaction management)\n *\n * @example\n * ```typescript\n * import { SQLDatabaseProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * // In child process (sandbox worker)\n * const transport = createIPCTransport();\n * const db = new SQLDatabaseProxy(transport);\n *\n * // Use like normal ISQLDatabase\n * const result = await db.query('SELECT * FROM users WHERE id = ?', [123]);\n * console.log(result.rows);\n *\n * // Transactions\n * const tx = await db.transaction();\n * await tx.query('INSERT INTO users (name) VALUES (?)', ['Alice']);\n * await tx.commit();\n * ```\n */\n\nimport type { ISQLDatabase, SQLQueryResult, SQLTransaction } from '@kb-labs/core-platform/adapters';\nimport type { ITransport } from '../transport/transport';\nimport { RemoteAdapter } from './remote-adapter';\n\n/**\n * IPC proxy for ISQLDatabase adapter.\n *\n * All method calls are forwarded to the parent process via IPC.\n * The parent process executes the call on the real SQL adapter\n * (e.g., SQLiteAdapter, PostgreSQLAdapter) and returns the result.\n */\nexport class SQLDatabaseProxy extends RemoteAdapter<ISQLDatabase> implements ISQLDatabase {\n /**\n * Create a SQL database proxy.\n *\n * @param transport - IPC transport to communicate with parent\n */\n constructor(transport: ITransport) {\n super('database.sql', transport);\n }\n\n /**\n * Execute a SQL query.\n *\n * @param sql - SQL query string\n * @param params - Query parameters\n * @returns Query result\n */\n async query<T = unknown>(sql: string, params?: unknown[]): Promise<SQLQueryResult<T>> {\n return (await this.callRemote('query', [sql, params])) as SQLQueryResult<T>;\n }\n\n /**\n * Begin a SQL transaction.\n *\n * @returns Transaction proxy object\n */\n async transaction(): Promise<SQLTransaction> {\n // Get transaction ID from parent\n const txId = (await this.callRemote('transaction', [])) as string;\n\n // Return transaction proxy that includes txId in all calls\n return {\n query: async <T = unknown>(sql: string, params?: unknown[]): Promise<SQLQueryResult<T>> => {\n return (await this.callRemote('transaction.query', [txId, sql, params])) as SQLQueryResult<T>;\n },\n\n commit: async (): Promise<void> => {\n await this.callRemote('transaction.commit', [txId]);\n },\n\n rollback: async (): Promise<void> => {\n await this.callRemote('transaction.rollback', [txId]);\n },\n };\n }\n\n /**\n * Close the database connection.\n */\n async close(): Promise<void> {\n await this.callRemote('close', []);\n }\n}\n\n/**\n * Create a SQL database proxy with IPC transport.\n *\n * @param transport - IPC transport to use\n * @returns SQL database proxy instance\n *\n * @example\n * ```typescript\n * import { createSQLDatabaseProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * const transport = createIPCTransport();\n * const db = createSQLDatabaseProxy(transport);\n * ```\n */\nexport function createSQLDatabaseProxy(transport: ITransport): SQLDatabaseProxy {\n return new SQLDatabaseProxy(transport);\n}\n","/**\n * @module @kb-labs/core-runtime/proxy\n * IPC proxy for IDocumentDatabase adapter.\n *\n * This proxy forwards all document database operations to the parent process via IPC.\n * The parent process owns the real document adapter (e.g., MongoDBAdapter).\n *\n * Benefits:\n * - Single database connection (consistent data access across all workers)\n * - Reduced memory usage (no duplicate connections)\n * - No race conditions (centralized transaction management)\n *\n * @example\n * ```typescript\n * import { DocumentDatabaseProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * // In child process (sandbox worker)\n * const transport = createIPCTransport();\n * const db = new DocumentDatabaseProxy(transport);\n *\n * // Use like normal IDocumentDatabase\n * const users = await db.find('users', { age: { $gt: 18 } }, { limit: 10 });\n * console.log(users);\n *\n * // Update by ID\n * const updated = await db.updateById('users', '123', { $set: { active: true } });\n * ```\n */\n\nimport type {\n IDocumentDatabase,\n BaseDocument,\n DocumentFilter,\n DocumentUpdate,\n FindOptions,\n} from '@kb-labs/core-platform/adapters';\nimport type { ITransport } from '../transport/transport';\nimport { RemoteAdapter } from './remote-adapter';\n\n/**\n * IPC proxy for IDocumentDatabase adapter.\n *\n * All method calls are forwarded to the parent process via IPC.\n * The parent process executes the call on the real document adapter\n * (e.g., MongoDBAdapter) and returns the result.\n */\nexport class DocumentDatabaseProxy extends RemoteAdapter<IDocumentDatabase> implements IDocumentDatabase {\n /**\n * Create a document database proxy.\n *\n * @param transport - IPC transport to communicate with parent\n */\n constructor(transport: ITransport) {\n super('database.document', transport);\n }\n\n /**\n * Find documents matching a filter.\n *\n * @param collection - Collection name\n * @param filter - Query filter\n * @param options - Find options (limit, skip, sort)\n * @returns Array of matching documents\n */\n async find<T extends BaseDocument>(\n collection: string,\n filter: DocumentFilter<T>,\n options?: FindOptions\n ): Promise<T[]> {\n return (await this.callRemote('find', [collection, filter, options])) as T[];\n }\n\n /**\n * Find a single document by ID.\n *\n * @param collection - Collection name\n * @param id - Document ID\n * @returns Document or null if not found\n */\n async findById<T extends BaseDocument>(collection: string, id: string): Promise<T | null> {\n return (await this.callRemote('findById', [collection, id])) as T | null;\n }\n\n /**\n * Insert a single document.\n *\n * @param collection - Collection name\n * @param document - Document to insert (id, createdAt, updatedAt will be added)\n * @returns Inserted document with generated fields\n */\n async insertOne<T extends BaseDocument>(\n collection: string,\n document: Omit<T, 'id' | 'createdAt' | 'updatedAt'>\n ): Promise<T> {\n return (await this.callRemote('insertOne', [collection, document])) as T;\n }\n\n /**\n * Update documents matching a filter.\n *\n * @param collection - Collection name\n * @param filter - Query filter\n * @param update - Update operations\n * @returns Number of documents updated\n */\n async updateMany<T extends BaseDocument>(\n collection: string,\n filter: DocumentFilter<T>,\n update: DocumentUpdate<T>\n ): Promise<number> {\n return (await this.callRemote('updateMany', [collection, filter, update])) as number;\n }\n\n /**\n * Update a single document by ID.\n *\n * @param collection - Collection name\n * @param id - Document ID\n * @param update - Update operations\n * @returns Updated document or null if not found\n */\n async updateById<T extends BaseDocument>(\n collection: string,\n id: string,\n update: DocumentUpdate<T>\n ): Promise<T | null> {\n return (await this.callRemote('updateById', [collection, id, update])) as T | null;\n }\n\n /**\n * Delete documents matching a filter.\n *\n * @param collection - Collection name\n * @param filter - Query filter\n * @returns Number of documents deleted\n */\n async deleteMany<T extends BaseDocument>(\n collection: string,\n filter: DocumentFilter<T>\n ): Promise<number> {\n return (await this.callRemote('deleteMany', [collection, filter])) as number;\n }\n\n /**\n * Delete a single document by ID.\n *\n * @param collection - Collection name\n * @param id - Document ID\n * @returns True if deleted, false if not found\n */\n async deleteById(collection: string, id: string): Promise<boolean> {\n return (await this.callRemote('deleteById', [collection, id])) as boolean;\n }\n\n /**\n * Count documents matching a filter.\n *\n * @param collection - Collection name\n * @param filter - Query filter\n * @returns Number of matching documents\n */\n async count<T extends BaseDocument>(\n collection: string,\n filter: DocumentFilter<T>\n ): Promise<number> {\n return (await this.callRemote('count', [collection, filter])) as number;\n }\n\n /**\n * Close the database connection.\n */\n async close(): Promise<void> {\n await this.callRemote('close', []);\n }\n}\n\n/**\n * Create a document database proxy with IPC transport.\n *\n * @param transport - IPC transport to use\n * @returns Document database proxy instance\n *\n * @example\n * ```typescript\n * import { createDocumentDatabaseProxy, createIPCTransport } from '@kb-labs/core-runtime';\n *\n * const transport = createIPCTransport();\n * const db = createDocumentDatabaseProxy(transport);\n * ```\n */\nexport function createDocumentDatabaseProxy(transport: ITransport): DocumentDatabaseProxy {\n return new DocumentDatabaseProxy(transport);\n}\n","/**\n * @module @kb-labs/core-runtime/proxy/create-proxy-platform\n * Create platform container with proxy adapters for subprocess execution.\n *\n * This function creates a PlatformContainer where all adapters are proxies\n * that forward calls to the parent process via IPC (Unix socket).\n *\n * Used in subprocess workers to access real platform services from parent.\n */\n\nimport type { PlatformContainer } from '../container.js';\nimport type { ITransport } from '../transport/transport.js';\nimport { UnixSocketTransport } from '../transport/unix-socket-transport.js';\nimport { CacheProxy } from './cache-proxy.js';\nimport { LLMProxy } from './llm-proxy.js';\nimport { EmbeddingsProxy } from './embeddings-proxy.js';\nimport { VectorStoreProxy } from './vector-store-proxy.js';\nimport { StorageProxy } from './storage-proxy.js';\nimport { SQLDatabaseProxy } from './sql-database-proxy.js';\nimport { DocumentDatabaseProxy } from './document-database-proxy.js';\nimport type { ILogger } from '@kb-labs/core-platform';\n\nexport interface CreateProxyPlatformOptions {\n /**\n * Path to Unix socket for IPC communication.\n * Should match the socket path used by UnixSocketServer in parent process.\n * Default: /tmp/kb-ipc.sock\n */\n socketPath?: string;\n\n /**\n * Logger for subprocess (can be noop or local file logger).\n * Note: This logger is NOT proxied - logs are local to subprocess.\n */\n logger?: ILogger;\n\n /**\n * Custom transport (for testing).\n * If not provided, UnixSocketTransport will be created.\n */\n transport?: ITransport;\n}\n\n/**\n * Noop logger for subprocess (doesn't proxy to parent).\n *\n * Logging in subprocess should be either:\n * 1. Local (to subprocess logs)\n * 2. Sent via events to parent\n * 3. Noop (discarded)\n *\n * Never proxy logger calls via IPC - too chatty!\n */\nfunction createNoopLogger(): ILogger {\n const noop = () => {};\n const logger: ILogger = {\n debug: noop,\n info: noop,\n warn: noop,\n error: noop,\n fatal: noop,\n trace: noop,\n child: () => logger,\n };\n return logger;\n}\n\n/**\n * Create platform container with proxy adapters.\n *\n * All adapters (except logger) forward calls to parent process via IPC.\n * This allows subprocess handlers to access real platform services.\n *\n * @param options - Configuration options\n * @returns Platform container with proxy adapters\n *\n * @example\n * ```typescript\n * // In subprocess (worker-script.ts)\n * import { createProxyPlatform } from '@kb-labs/core-runtime/proxy';\n *\n * const platform = await createProxyPlatform({\n * socketPath: process.env.KB_IPC_SOCKET_PATH,\n * logger: createFileLogger('/tmp/worker.log'),\n * });\n *\n * // Now handlers can use real platform services\n * await platform.cache.set('key', 'value');\n * const result = await platform.llm.complete({ prompt: 'Hello' });\n * ```\n */\nexport async function createProxyPlatform(\n options: CreateProxyPlatformOptions = {}\n): Promise<PlatformContainer> {\n // Create transport (Unix socket by default)\n const transport = options.transport ?? new UnixSocketTransport({\n socketPath: options.socketPath ?? '/tmp/kb-ipc.sock',\n });\n\n // Connect to parent process\n // TODO: Re-enable when transport interface is updated\n // await transport.connect();\n\n // Create proxy adapters\n const cache = new CacheProxy(transport);\n const llm = new LLMProxy(transport);\n const embeddings = new EmbeddingsProxy(transport);\n const vectorStore = new VectorStoreProxy(transport);\n const storage = new StorageProxy(transport);\n const sqlDatabase = new SQLDatabaseProxy(transport);\n const documentDatabase = new DocumentDatabaseProxy(transport);\n\n // Logger is NOT proxied (local or noop)\n const logger = options.logger ?? createNoopLogger();\n\n // EventBus - TODO: implement EventBusProxy\n // For now, noop (job handlers use ctx.events, not platform.eventBus)\n const eventBus = {\n on: () => () => {},\n once: () => () => {},\n off: () => {},\n emit: async () => {},\n };\n\n // Analytics - TODO: implement AnalyticsProxy\n // For now, noop (low priority)\n const analytics = {\n track: () => {},\n identify: () => {},\n flush: async () => {},\n };\n\n // Create new PlatformContainer and configure adapters\n const platform = new (await import('../container.js')).PlatformContainer();\n platform.setAdapter('logger', logger);\n platform.setAdapter('cache', cache);\n platform.setAdapter('llm', llm);\n platform.setAdapter('embeddings', embeddings);\n platform.setAdapter('vectorStore', vectorStore);\n platform.setAdapter('storage', storage);\n platform.setAdapter('sqlDatabase', sqlDatabase);\n platform.setAdapter('documentDatabase', documentDatabase);\n platform.setAdapter('eventBus', eventBus as any);\n platform.setAdapter('analytics', analytics as any);\n\n return platform;\n}\n\n/**\n * Close proxy platform and disconnect from parent.\n *\n * Should be called when subprocess is shutting down.\n *\n * @param platform - Platform container created by createProxyPlatform()\n *\n * @example\n * ```typescript\n * const platform = await createProxyPlatform();\n * // ... use platform ...\n * await closeProxyPlatform(platform);\n * ```\n */\nexport async function closeProxyPlatform(platform: PlatformContainer): Promise<void> {\n // Close transport if it has a close method\n // @ts-expect-error - accessing internal transport\n const transport = platform.cache?._transport;\n if (transport && typeof transport.close === 'function') {\n await transport.close();\n }\n}\n","import { platform } from './container.js';\nimport type {\n IResourceManager,\n ResourceAvailability,\n ResourceType,\n TenantQuotas,\n} from '@kb-labs/core-platform';\n\nexport interface MonitoringSnapshot {\n resource: ResourceType;\n availability?: ResourceAvailability;\n quota?: TenantQuotas;\n tenantId?: string;\n ts: string;\n}\n\nexport interface MonitoringOptions {\n resources?: ResourceType[];\n tenantId?: string;\n}\n\nexport async function getMonitoringSnapshot(\n options: MonitoringOptions = {}\n): Promise<MonitoringSnapshot[]> {\n const resourcesManager = (platform as { resources?: IResourceManager }).resources;\n const resources =\n options.resources ?? (['workflow', 'job', 'llm', 'api'] as ResourceType[]);\n const tenantId = options.tenantId;\n const ts = new Date().toISOString();\n\n if (!resourcesManager) {\n return [];\n }\n\n return Promise.all(\n resources.map(async (resource) => {\n const availability = await resourcesManager\n .getAvailability(resource, tenantId)\n .catch(() => undefined);\n const quota = await resourcesManager\n .getQuota(tenantId ?? 'default')\n .catch(() => undefined);\n\n return { resource, availability, quota, tenantId, ts };\n })\n );\n}\n\nexport type DegradedLevel = 'normal' | 'degraded' | 'critical';\n\nexport interface DegradedStatus {\n level: DegradedLevel;\n ts: string;\n reason?: string;\n}\n\nexport interface DegradedOptions extends MonitoringOptions {\n thresholds?: {\n degraded?: number;\n critical?: number;\n };\n}\n\nexport async function getDegradedStatus(\n options: DegradedOptions = {}\n): Promise<DegradedStatus> {\n const thresholds = {\n degraded: options.thresholds?.degraded ?? 0.75,\n critical: options.thresholds?.critical ?? 0.9,\n };\n const ts = new Date().toISOString();\n\n const snapshots = await getMonitoringSnapshot(options);\n if (snapshots.length === 0) {\n return { level: 'normal', ts, reason: 'monitoring-unavailable' };\n }\n\n let worst: DegradedLevel = 'normal';\n\n for (const snap of snapshots) {\n const availability = snap.availability;\n if (!availability || availability.total === 0) {\n continue;\n }\n const ratio = availability.used / availability.total;\n const level: DegradedLevel =\n ratio >= thresholds.critical\n ? 'critical'\n : ratio >= thresholds.degraded\n ? 'degraded'\n : 'normal';\n\n if (levelRank(level) > levelRank(worst)) {\n worst = level;\n }\n }\n\n return { level: worst, ts };\n}\n\nfunction levelRank(level: DegradedLevel): number {\n switch (level) {\n case 'critical':\n return 2;\n case 'degraded':\n return 1;\n default:\n return 0;\n }\n}\n\n","/**\n * @module @kb-labs/core-runtime/use-cases/start-full-cycle\n * Unified one-click full-cycle entrypoint.\n */\n\nimport type { RunRecord } from '@kb-labs/core-platform';\nimport type { PlatformContainer } from '../container.js';\nimport type { StartFullCycleRequest } from '../run-orchestrator.js';\n\n/**\n * Start full-cycle run through configured run orchestrator.\n */\nexport async function startFullCycle(\n platform: Pick<PlatformContainer, 'runOrchestrator'>,\n request: StartFullCycleRequest\n): Promise<RunRecord> {\n return platform.runOrchestrator.startFullCycle(request);\n}\n\n"]}
|