@kb-labs/shared-testing-platform 2.119.0-canary.f8394d5fd → 2.119.1-canary.b53bbee1d

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/setup-platform.ts","../src/create-test-context.ts","../src/test-command.ts","../src/in-memory-document-database.ts","../src/in-memory-kv-store.ts"],"names":["platform","out"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module @kb-labs/shared-testing-platform/setup-platform\n *\n * Solves the \"singleton gap\" problem: composables (useLLM, useCache, etc.)\n * read from the global platform singleton, but createTestContext() only\n * populates ctx.platform. This module bridges the gap by setting test mocks\n * directly into the global singleton.\n */\n\nimport { platform, resetPlatform } from '@kb-labs/core-runtime';\nimport type {\n ILLM,\n ICache,\n IEmbeddings,\n IVectorStore,\n IStorage,\n IAnalytics,\n ILogger,\n IEventBus,\n} from '@kb-labs/core-platform';\n\n/**\n * Options for setting up the test platform.\n * Only adapters that are provided will be registered.\n * Omitted adapters will use the PlatformContainer's built-in fallbacks.\n */\nexport interface TestPlatformOptions {\n llm?: ILLM;\n cache?: ICache;\n embeddings?: IEmbeddings;\n vectorStore?: IVectorStore;\n storage?: IStorage;\n analytics?: IAnalytics;\n logger?: ILogger;\n eventBus?: IEventBus;\n}\n\nexport interface TestPlatformResult {\n /** The global platform singleton (with test mocks applied) */\n platform: typeof platform;\n /** Call in afterEach() to reset the singleton to a clean state */\n cleanup: () => void;\n}\n\n/**\n * Setup the global platform singleton with test mocks.\n *\n * This ensures that useLLM(), useCache() and other composables\n * return the test mocks instead of uninitialized/stale adapters.\n *\n * @example\n * ```typescript\n * import { setupTestPlatform, mockLLM } from '@kb-labs/shared-testing-platform';\n *\n * describe('my handler', () => {\n * let cleanup: () => void;\n *\n * beforeEach(() => {\n * const result = setupTestPlatform({\n * llm: mockLLM().onAnyComplete().respondWith('hello'),\n * });\n * cleanup = result.cleanup;\n * });\n *\n * afterEach(() => cleanup());\n * });\n * ```\n */\nexport function setupTestPlatform(options: TestPlatformOptions = {}): TestPlatformResult {\n // Reset everything first — clean slate\n resetPlatform();\n\n // Register provided adapters into the global singleton\n const adapterMap: Array<[string, unknown]> = [\n ['llm', options.llm],\n ['cache', options.cache],\n ['embeddings', options.embeddings],\n ['vectorStore', options.vectorStore],\n ['storage', options.storage],\n ['analytics', options.analytics],\n ['logger', options.logger],\n ['eventBus', options.eventBus],\n ];\n\n for (const [key, instance] of adapterMap) {\n if (instance !== undefined) {\n platform.setAdapter(key, instance);\n }\n }\n\n return {\n platform,\n cleanup: () => resetPlatform(),\n };\n}\n","/**\n * @module @kb-labs/shared-testing-platform/create-test-context\n *\n * Enhanced test context factory that bridges ctx.platform and the global singleton.\n *\n * Unlike the original createTestContext() from SDK, this version:\n * - Uses mockLLM/mockCache/mockLogger with vi.fn() spies (not noop functions)\n * - Syncs ctx.platform adapters with the global singleton via setupTestPlatform()\n * - Provides a cleanup function to reset the singleton in afterEach()\n *\n * @example\n * ```typescript\n * import { createTestContext, mockLLM } from '@kb-labs/shared-testing-platform';\n *\n * const llm = mockLLM().onAnyComplete().respondWith('hello');\n * const { ctx, cleanup } = createTestContext({ platform: { llm } });\n *\n * // Both work — ctx.platform and useLLM() return the same mock\n * await handler.execute(ctx, args);\n * expect(llm.complete).toHaveBeenCalled();\n *\n * cleanup(); // Reset singleton in afterEach\n * ```\n */\n\nimport type {\n PluginContextV3,\n HostContext,\n PlatformServices,\n UIFacade,\n TraceContext,\n RuntimeAPI,\n PluginAPI,\n FSShim,\n FetchShim,\n EnvShim,\n InvokeAPI,\n EnvironmentAPI,\n WorkspaceAPI,\n SnapshotAPI,\n} from '@kb-labs/plugin-contracts';\n\nimport { mockLLM, mockCache, mockStorage, mockLogger } from '@kb-labs/shared-testing';\nimport { setupTestPlatform } from './setup-platform.js';\nimport { vi } from 'vitest';\n\n// ────────────────────────────────────────────────────────────────────\n// Types\n// ────────────────────────────────────────────────────────────────────\n\nexport interface CreateTestContextOptions {\n pluginId?: string;\n pluginVersion?: string;\n host?: 'cli' | 'rest' | 'workflow' | 'webhook';\n hostContext?: HostContext;\n config?: unknown;\n cwd?: string;\n outdir?: string;\n tenantId?: string;\n signal?: AbortSignal;\n /** Override platform services. Also synced to global singleton. */\n platform?: Partial<PlatformServices>;\n /** Override UI facade */\n ui?: Partial<UIFacade>;\n /**\n * If true, sync platform adapters to the global singleton\n * so that useLLM(), useCache(), etc. return the test mocks.\n * @default true\n */\n syncSingleton?: boolean;\n}\n\nexport interface TestContextResult<TConfig = unknown> {\n /** The plugin context with test mocks */\n ctx: PluginContextV3<TConfig>;\n /** Call in afterEach() to reset the global singleton */\n cleanup: () => void;\n}\n\n// ────────────────────────────────────────────────────────────────────\n// Mock factories\n// ────────────────────────────────────────────────────────────────────\n\nexport function createMockTrace(): TraceContext {\n return {\n traceId: 'test-trace-id',\n spanId: 'test-span-id',\n parentSpanId: undefined,\n addEvent: () => {},\n setAttribute: () => {},\n recordError: () => {},\n };\n}\n\nexport function createMockUI(): UIFacade {\n const messages: string[] = [];\n\n const mockColor = (text: string) => text;\n const mockColors = {\n success: mockColor,\n error: mockColor,\n warning: mockColor,\n info: mockColor,\n primary: mockColor,\n accent: mockColor,\n highlight: mockColor,\n secondary: mockColor,\n emphasis: mockColor,\n muted: mockColor,\n foreground: mockColor,\n dim: mockColor,\n bold: mockColor,\n underline: mockColor,\n inverse: mockColor,\n };\n\n return {\n colors: mockColors,\n symbols: {\n success: '+',\n error: 'x',\n warning: '!',\n info: 'i',\n bullet: '-',\n clock: 'T',\n folder: 'D',\n package: 'P',\n pointer: '>',\n section: '#',\n separator: '-',\n border: '|',\n topLeft: '+',\n topRight: '+',\n bottomLeft: '+',\n bottomRight: '+',\n leftT: '+',\n rightT: '+',\n step: 'o',\n stepDone: '*',\n arrow: '>',\n diamond: '<>',\n },\n write: vi.fn((text) => messages.push(`WRITE: ${text}`)),\n info: vi.fn((msg) => messages.push(`INFO: ${msg}`)),\n success: vi.fn((msg) => messages.push(`SUCCESS: ${msg}`)),\n warn: vi.fn((msg) => messages.push(`WARN: ${msg}`)),\n error: vi.fn((err) => messages.push(`ERROR: ${err instanceof Error ? err.message : err}`)),\n debug: vi.fn((msg) => messages.push(`DEBUG: ${msg}`)),\n spinner: vi.fn((msg) => {\n messages.push(`SPINNER: ${msg}`);\n return {\n update: vi.fn((m: string) => messages.push(`SPINNER UPDATE: ${m}`)),\n succeed: vi.fn((m?: string) => messages.push(`SPINNER SUCCEED: ${m ?? msg}`)),\n fail: vi.fn((m?: string) => messages.push(`SPINNER FAIL: ${m ?? msg}`)),\n stop: vi.fn(),\n };\n }),\n table: vi.fn((data) => messages.push(`TABLE: ${JSON.stringify(data)}`)),\n json: vi.fn((data) => messages.push(`JSON: ${JSON.stringify(data)}`)),\n newline: vi.fn(() => messages.push('')),\n divider: vi.fn(() => messages.push('-'.repeat(40))),\n box: vi.fn((content, title) => {\n if (title) { messages.push(`+- ${title} -+`); }\n messages.push(content);\n if (title) { messages.push(`+${'-'.repeat(title.length + 4)}+`); }\n }),\n sideBox: vi.fn((options) => {\n messages.push(`+- ${options.title} -+`);\n if (options.summary) {\n Object.entries(options.summary).forEach(([key, value]) => {\n messages.push(` ${key}: ${value}`);\n });\n }\n if (options.sections) {\n options.sections.forEach((section: { header?: string; items: string[] }) => {\n if (section.header) { messages.push(` ${section.header}:`); }\n section.items.forEach((item: string) => messages.push(` ${item}`));\n });\n }\n if (options.timing) {\n messages.push(` Timing: ${options.timing}ms`);\n }\n messages.push('+' + '-'.repeat(options.title.length + 4) + '+');\n }),\n chain: vi.fn((items) => {\n items.forEach((item: { title: string }) => messages.push(`CHAIN: ${item.title}`));\n }),\n confirm: vi.fn(async () => true),\n prompt: vi.fn(async () => ''),\n select: async (_msg, choices) => choices[0]?.value as never,\n multiSelect: async (_msg, choices) => choices.filter((c) => c.checked).map((c) => c.value) as never,\n log: vi.fn(),\n };\n}\n\nexport function createMockRuntime(): RuntimeAPI {\n const mockFS: FSShim = {\n readFile: vi.fn(async () => ''),\n readFileBuffer: vi.fn(async () => new Uint8Array()),\n writeFile: vi.fn(async () => {}),\n readdir: vi.fn(async () => []),\n readdirWithStats: vi.fn(async () => []),\n mkdir: vi.fn(async () => {}),\n rm: vi.fn(async () => {}),\n copy: vi.fn(async () => {}),\n move: vi.fn(async () => {}),\n glob: vi.fn(async () => []),\n stat: vi.fn(async () => ({\n isFile: () => false,\n isDirectory: () => false,\n size: 0,\n mtime: Date.now(),\n ctime: Date.now(),\n })),\n exists: vi.fn(async () => false),\n resolve: (path: string) => path,\n relative: (path: string) => path,\n join: (...segments: string[]) => segments.join('/'),\n dirname: (path: string) => path.split('/').slice(0, -1).join('/'),\n basename: (path: string) => path.split('/').pop() ?? '',\n extname: (path: string) => {\n const base = path.split('/').pop() ?? '';\n const idx = base.lastIndexOf('.');\n return idx > 0 ? base.slice(idx) : '';\n },\n };\n\n const mockFetch: FetchShim = vi.fn(async () => new Response('mock'));\n const mockEnv: EnvShim = vi.fn((_key: string) => undefined) as EnvShim;\n\n return {\n fs: mockFS,\n fetch: mockFetch,\n env: mockEnv,\n };\n}\n\nexport function createMockEnvironmentAPI(): EnvironmentAPI {\n return {\n create: vi.fn(async () => ({\n environmentId: 'env_mock_1',\n provider: 'mock',\n status: 'ready' as const,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n })),\n status: vi.fn(async (environmentId: string) => ({\n environmentId,\n status: 'ready' as const,\n updatedAt: new Date().toISOString(),\n })),\n destroy: vi.fn(async () => {}),\n renewLease: vi.fn(async () => ({\n leaseId: 'lease_mock_1',\n acquiredAt: new Date().toISOString(),\n expiresAt: new Date(Date.now() + 10 * 60 * 1000).toISOString(),\n })),\n };\n}\n\nexport function createMockWorkspaceAPI(): WorkspaceAPI {\n return {\n materialize: vi.fn(async () => ({\n workspaceId: 'ws_mock_1',\n provider: 'mock',\n status: 'ready' as const,\n rootPath: '/tmp/ws_mock_1',\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n })),\n attach: vi.fn(async (request) => ({\n workspaceId: request.workspaceId,\n environmentId: request.environmentId,\n mountPath: request.mountPath ?? '/workspace',\n attachedAt: new Date().toISOString(),\n })),\n release: vi.fn(async () => {}),\n status: vi.fn(async (workspaceId: string) => ({\n workspaceId,\n status: 'ready' as const,\n updatedAt: new Date().toISOString(),\n })),\n };\n}\n\nexport function createMockSnapshotAPI(): SnapshotAPI {\n return {\n capture: vi.fn(async (request) => ({\n snapshotId: request.snapshotId ?? 'snap_mock_1',\n provider: 'mock',\n status: 'ready' as const,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n workspaceId: request.workspaceId,\n environmentId: request.environmentId,\n })),\n restore: vi.fn(async (request) => ({\n snapshotId: request.snapshotId,\n restoredAt: new Date().toISOString(),\n workspaceId: request.workspaceId,\n environmentId: request.environmentId,\n targetPath: request.targetPath,\n })),\n status: vi.fn(async (snapshotId: string) => ({\n snapshotId,\n status: 'ready' as const,\n updatedAt: new Date().toISOString(),\n })),\n delete: vi.fn(async () => {}),\n gc: vi.fn(async (request) => ({\n scanned: 0,\n deleted: 0,\n dryRun: request?.dryRun ?? false,\n })),\n };\n}\n\nexport function createInfraApiMocks(): Pick<PluginAPI, 'environment' | 'workspace' | 'snapshot'> {\n return {\n environment: createMockEnvironmentAPI(),\n workspace: createMockWorkspaceAPI(),\n snapshot: createMockSnapshotAPI(),\n };\n}\n\nexport function createMockPluginAPI(): PluginAPI {\n const infra = createInfraApiMocks();\n return {\n lifecycle: {\n onCleanup: vi.fn(),\n },\n state: {\n get: vi.fn(async () => undefined),\n set: vi.fn(async () => {}),\n delete: vi.fn(async () => {}),\n has: vi.fn(async () => false),\n getMany: vi.fn(async () => new Map()),\n setMany: vi.fn(async () => {}),\n },\n artifacts: {\n write: vi.fn(async () => '/mock/path'),\n list: vi.fn(async () => []),\n read: vi.fn(async () => ''),\n readBuffer: vi.fn(async () => new Uint8Array()),\n exists: vi.fn(async () => false),\n path: vi.fn(() => '/mock/path'),\n },\n shell: {\n exec: vi.fn(async () => ({ code: 0, stdout: '', stderr: '', ok: true })),\n },\n events: {\n emit: vi.fn(async () => {}),\n },\n invoke: {\n call: vi.fn(async (_pluginId: string, _input?: unknown, _options?: unknown) => undefined) as InvokeAPI['call'],\n },\n workflows: {\n run: vi.fn(async () => 'mock-run-id'),\n wait: vi.fn(async () => undefined),\n status: vi.fn(async () => null),\n cancel: vi.fn(async () => {}),\n list: vi.fn(async () => []),\n },\n jobs: {\n submit: vi.fn(async () => 'mock-job-id'),\n schedule: vi.fn(async () => 'mock-scheduled-job-id'),\n wait: vi.fn(async () => undefined),\n status: vi.fn(async () => null),\n cancel: vi.fn(async () => false),\n list: vi.fn(async () => []),\n },\n cron: {\n register: vi.fn(async () => {}),\n unregister: vi.fn(async () => {}),\n list: vi.fn(async () => []),\n pause: vi.fn(async () => {}),\n resume: vi.fn(async () => {}),\n trigger: vi.fn(async () => {}),\n },\n environment: infra.environment,\n workspace: infra.workspace,\n snapshot: infra.snapshot,\n };\n}\n\nexport const createMockPlatformApi = createMockPluginAPI;\n\nexport function createMockPluginContextV3<TConfig = unknown>(\n options: CreateTestContextOptions = {}\n): TestContextResult<TConfig> {\n return createTestContext<TConfig>(options);\n}\n\n// ────────────────────────────────────────────────────────────────────\n// Public API\n// ────────────────────────────────────────────────────────────────────\n\n/**\n * Create a test context for plugin development.\n *\n * Uses mock builders with vi.fn() spies and syncs platform adapters\n * to the global singleton by default so that composables work in tests.\n */\nexport function createTestContext<TConfig = unknown>(\n options: CreateTestContextOptions = {}\n): TestContextResult<TConfig> {\n const {\n pluginId = 'test-plugin',\n pluginVersion = '0.0.0',\n host = 'cli',\n hostContext,\n config,\n cwd = process.cwd(),\n outdir,\n tenantId,\n signal,\n platform: platformOverrides,\n ui: uiOverrides,\n syncSingleton = true,\n } = options;\n\n const resolvedOutdir = outdir ?? `${cwd}/.kb/output`;\n\n const defaultHostContext: HostContext =\n hostContext ??\n (() => {\n switch (host) {\n case 'cli':\n return { host: 'cli', argv: ['test'], flags: {} };\n case 'rest':\n return {\n host: 'rest',\n method: 'GET',\n path: '/test',\n requestId: 'test-req-001',\n traceId: 'test-trace-001',\n };\n case 'workflow':\n return { host: 'workflow', workflowId: 'test-wf', runId: 'test-run', stepId: 'test-step' };\n case 'webhook':\n return { host: 'webhook', event: 'test:event', namespaceId: 'test-ns', webhookId: 'test-webhook-001' };\n }\n })();\n\n const defaultLogger = mockLogger();\n const defaultLLM = mockLLM();\n const defaultCache = mockCache();\n const defaultStorage = mockStorage();\n\n const defaultPlatform: PlatformServices = {\n logger: defaultLogger,\n llm: defaultLLM,\n embeddings: {\n embed: vi.fn(async () => []),\n embedBatch: vi.fn(async () => [[]]),\n dimensions: 1536,\n getDimensions: vi.fn(async () => 1536),\n },\n vectorStore: {\n search: vi.fn(async () => []),\n upsert: vi.fn(async () => {}),\n delete: vi.fn(async () => {}),\n count: vi.fn(async () => 0),\n },\n cache: defaultCache,\n storage: defaultStorage,\n analytics: {\n track: vi.fn(async () => {}),\n identify: vi.fn(async () => {}),\n flush: vi.fn(async () => {}),\n },\n eventBus: {\n publish: vi.fn(async () => {}),\n subscribe: vi.fn(() => () => {}),\n },\n config: {\n getConfig: vi.fn(async () => ({})),\n getRawConfig: vi.fn(async () => ({})),\n },\n invoke: {\n call: vi.fn(async () => ({ success: true, data: null })),\n isAvailable: vi.fn(async () => false),\n } as PlatformServices['invoke'],\n documentDatabase: {\n find: vi.fn(async () => []),\n findStream: vi.fn(async function* () { /* empty */ }),\n findById: vi.fn(async () => null),\n count: vi.fn(async () => 0),\n insertOne: vi.fn(async () => ({ id: 'mock', createdAt: 0, updatedAt: 0 })),\n insertMany: vi.fn(async () => []),\n updateOne: vi.fn(async () => null),\n updateMany: vi.fn(async () => 0),\n updateById: vi.fn(async () => null),\n deleteMany: vi.fn(async () => 0),\n deleteById: vi.fn(async () => false),\n bulkWrite: vi.fn(async () => ({ inserted: 0, updated: 0, deleted: 0 })),\n transaction: vi.fn(async () => undefined as never),\n ensureCollection: vi.fn(async () => undefined),\n ping: vi.fn(async () => ({ ok: true, latencyMs: 0 })),\n close: vi.fn(async () => {}),\n } as unknown as PlatformServices['documentDatabase'],\n kvStore: {\n get: vi.fn(async () => null),\n getMany: vi.fn(async () => []),\n set: vi.fn(async () => true),\n setMany: vi.fn(async () => {}),\n setIfNotExists: vi.fn(async () => true),\n delete: vi.fn(async () => false),\n exists: vi.fn(async () => false),\n cas: vi.fn(async () => false),\n incr: vi.fn(async () => 0),\n ttl: vi.fn(async () => null),\n expire: vi.fn(async () => false),\n persist: vi.fn(async () => false),\n scan: vi.fn(async function* () { /* empty */ }),\n ping: vi.fn(async () => ({ ok: true, latencyMs: 0 })),\n close: vi.fn(async () => {}),\n } as unknown as PlatformServices['kvStore'],\n logs: {\n query: vi.fn(async () => ({ logs: [], total: 0, hasMore: false, source: 'buffer' as const })),\n getById: vi.fn(async () => null),\n search: vi.fn(async () => ({ logs: [], total: 0, hasMore: false })),\n subscribe: vi.fn(() => () => {}),\n getStats: vi.fn(async () => ({})),\n getCapabilities: vi.fn(() => ({ hasBuffer: false, hasPersistence: false, hasSearch: false, hasStreaming: false })),\n },\n };\n\n const finalPlatform: PlatformServices = {\n ...defaultPlatform,\n ...platformOverrides,\n };\n\n let cleanupFn = () => {};\n if (syncSingleton) {\n const result = setupTestPlatform({\n llm: finalPlatform.llm,\n cache: finalPlatform.cache,\n storage: finalPlatform.storage,\n logger: finalPlatform.logger,\n analytics: finalPlatform.analytics,\n embeddings: finalPlatform.embeddings,\n vectorStore: finalPlatform.vectorStore,\n eventBus: finalPlatform.eventBus,\n });\n cleanupFn = result.cleanup;\n }\n\n const defaultUI = createMockUI();\n const finalUI: UIFacade = {\n ...defaultUI,\n ...uiOverrides,\n };\n\n const ctx: PluginContextV3<TConfig> = {\n host,\n requestId: 'test-trace:test-span',\n pluginId,\n pluginVersion,\n tenantId,\n cwd,\n outdir: resolvedOutdir,\n config: config as TConfig,\n signal,\n trace: createMockTrace(),\n hostContext: defaultHostContext,\n ui: finalUI,\n platform: finalPlatform,\n runtime: createMockRuntime(),\n api: createMockPluginAPI(),\n };\n\n return { ctx, cleanup: cleanupFn };\n}\n","/**\n * @module @kb-labs/shared-testing-platform/test-command\n *\n * Single-function test runner for plugin command handlers.\n */\n\nimport type {\n PluginContextV3,\n CommandResult,\n UIFacade,\n PlatformServices,\n} from '@kb-labs/plugin-contracts';\n\nimport {\n createTestContext,\n type CreateTestContextOptions,\n} from './create-test-context.js';\n\nexport interface TestableHandler<TConfig = unknown, TInput = unknown, TResult = unknown> {\n execute(\n context: PluginContextV3<TConfig>,\n input: TInput\n ): Promise<TResult> | TResult;\n cleanup?(): Promise<void> | void;\n}\n\nexport interface TestCommandOptions<TConfig = unknown> {\n flags?: Record<string, unknown>;\n argv?: string[];\n query?: Record<string, unknown>;\n body?: unknown;\n params?: Record<string, unknown>;\n input?: unknown;\n host?: 'cli' | 'rest' | 'workflow' | 'webhook';\n config?: TConfig;\n cwd?: string;\n tenantId?: string;\n signal?: AbortSignal;\n platform?: Partial<PlatformServices>;\n ui?: Partial<UIFacade>;\n syncSingleton?: boolean;\n}\n\nexport interface TestCommandResult<TResult = unknown> {\n exitCode: number;\n result: TResult | undefined;\n meta: Record<string, unknown> | undefined;\n raw: unknown;\n ui: UIFacade;\n ctx: PluginContextV3;\n cleanup: () => void;\n}\n\nexport async function testCommand<TResult = unknown, TConfig = unknown>(\n handler: TestableHandler<TConfig, any, any>,\n options: TestCommandOptions<TConfig> = {}\n): Promise<TestCommandResult<TResult>> {\n const {\n flags,\n argv = [],\n query,\n body,\n params,\n input: rawInput,\n host = 'cli',\n config,\n cwd,\n tenantId,\n signal,\n platform,\n ui,\n syncSingleton = true,\n } = options;\n\n const ctxOptions: CreateTestContextOptions = {\n host,\n config,\n cwd,\n tenantId,\n signal,\n platform,\n ui,\n syncSingleton,\n };\n\n const { ctx, cleanup } = createTestContext<TConfig>(ctxOptions);\n\n let input: unknown;\n\n if (rawInput !== undefined) {\n input = rawInput;\n } else if (host === 'rest') {\n input = {\n ...(query !== undefined ? { query } : {}),\n ...(body !== undefined ? { body } : {}),\n ...(params !== undefined ? { params } : {}),\n };\n } else {\n input = { flags: flags ?? {}, argv };\n }\n\n let raw: unknown;\n try {\n raw = await handler.execute(ctx as PluginContextV3<TConfig>, input);\n } finally {\n await handler.cleanup?.();\n }\n\n let exitCode = 0;\n let result: TResult | undefined;\n let meta: Record<string, unknown> | undefined;\n\n if (raw != null && typeof raw === 'object' && 'ok' in raw) {\n const cmdResult = raw as CommandResult<TResult>;\n exitCode = cmdResult.ok ? 0 : 1;\n result = cmdResult.result as TResult | undefined;\n meta = cmdResult.meta;\n } else if (raw === undefined || raw === null) {\n exitCode = 0;\n result = undefined;\n meta = undefined;\n } else {\n exitCode = 0;\n result = raw as TResult;\n meta = undefined;\n }\n\n return {\n exitCode,\n result,\n meta,\n raw,\n ui: ctx.ui,\n ctx: ctx as PluginContextV3,\n cleanup,\n };\n}\n","/**\n * In-memory `IDocumentDatabase` for tests.\n *\n * Scope: behavioural fidelity sufficient for governance / wrapper tests —\n * CRUD, filters, updates, atomic bulkWrite, transactions, ensureCollection,\n * unique indexes. Not optimised, not for production. Sweep-based TTL is\n * intentionally absent (not exercised by the governance suite).\n */\n\nimport type {\n BaseDocument,\n BulkOp,\n BulkResult,\n DocumentFilter,\n DocumentUpdate,\n EnsureCollectionOpts,\n FilterOperators,\n FindOptions,\n IDocumentDatabase,\n IDocumentTransaction,\n IndexSpec,\n ProjectOpts,\n Projection,\n SignalOpts,\n} from '@kb-labs/core-platform/adapters';\n\ninterface Collection {\n docs: Map<string, BaseDocument>;\n indexes: IndexSpec[];\n}\n\nfunction nextId(): string {\n return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction clone<T>(value: T): T {\n return value === undefined || value === null\n ? value\n : (JSON.parse(JSON.stringify(value)) as T);\n}\n\nfunction matchScalar<V>(value: V, ops: FilterOperators<V> | V): boolean {\n if (ops === null || ops === undefined || typeof ops !== 'object') {\n return value === ops;\n }\n const o = ops as FilterOperators<V>;\n if ('$eq' in o && o.$eq !== undefined && value !== o.$eq) { return false; }\n if ('$ne' in o && o.$ne !== undefined && value === o.$ne) { return false; }\n if ('$gt' in o && o.$gt !== undefined && !(value as never > (o.$gt as never))) { return false; }\n if ('$gte' in o && o.$gte !== undefined && !(value as never >= (o.$gte as never))) { return false; }\n if ('$lt' in o && o.$lt !== undefined && !(value as never < (o.$lt as never))) { return false; }\n if ('$lte' in o && o.$lte !== undefined && !(value as never <= (o.$lte as never))) { return false; }\n if ('$in' in o && Array.isArray(o.$in) && !o.$in.includes(value as never)) { return false; }\n if ('$nin' in o && Array.isArray(o.$nin) && o.$nin.includes(value as never)) { return false; }\n if ('$exists' in o && typeof o.$exists === 'boolean') {\n const present = value !== undefined;\n if (present !== o.$exists) { return false; }\n }\n if ('$startsWith' in o && typeof o.$startsWith === 'string') {\n if (typeof value !== 'string' || !value.startsWith(o.$startsWith)) { return false; }\n }\n if ('$contains' in o && typeof o.$contains === 'string') {\n if (typeof value !== 'string' || !value.includes(o.$contains)) { return false; }\n }\n if ('$endsWith' in o && typeof o.$endsWith === 'string') {\n if (typeof value !== 'string' || !value.endsWith(o.$endsWith)) { return false; }\n }\n return true;\n}\n\nfunction matchFilter<T extends BaseDocument>(\n doc: T,\n filter: DocumentFilter<T>,\n): boolean {\n const source = doc as unknown as Record<string, unknown>;\n if (filter.$and && Array.isArray(filter.$and)) {\n if (!filter.$and.every((f) => matchFilter(doc, f as DocumentFilter<T>))) { return false; }\n }\n if (filter.$or && Array.isArray(filter.$or)) {\n if (!filter.$or.some((f) => matchFilter(doc, f as DocumentFilter<T>))) { return false; }\n }\n for (const key of Object.keys(filter)) {\n if (key === '$and' || key === '$or') { continue; }\n const fieldValue = source[key];\n const expectation = (filter as Record<string, unknown>)[key];\n if (!matchScalar(fieldValue, expectation as never)) { return false; }\n }\n return true;\n}\n\nfunction applyUpdate<T extends BaseDocument>(\n doc: T,\n update: DocumentUpdate<T>,\n): T {\n const next: Record<string, unknown> = { ...(doc as unknown as Record<string, unknown>) };\n if (update.$set) {\n for (const [k, v] of Object.entries(update.$set)) { next[k] = v; }\n }\n if (update.$unset) {\n for (const k of Object.keys(update.$unset)) { delete next[k]; }\n }\n if (update.$inc) {\n for (const [k, delta] of Object.entries(update.$inc)) {\n const current = typeof next[k] === 'number' ? (next[k] as number) : 0;\n if (typeof delta !== 'number' || !Number.isFinite(delta)) {\n throw new Error(`$inc value for \"${k}\" must be a finite number`);\n }\n next[k] = current + delta;\n }\n }\n next.updatedAt = Date.now();\n return next as T;\n}\n\nfunction applyProjection<T, P>(\n doc: T,\n projection: Projection<T> | undefined,\n): P {\n if (!projection) { return doc as unknown as P; }\n const entries = Object.entries(projection) as Array<[keyof T, 0 | 1]>;\n const includes = entries.filter(([, v]) => v === 1).map(([k]) => k);\n const excludes = entries.filter(([, v]) => v === 0).map(([k]) => k);\n if (includes.length > 0 && excludes.length > 0) {\n throw new Error('projection cannot mix include (1) and exclude (0)');\n }\n const source = doc as unknown as Record<string, unknown>;\n if (includes.length > 0) {\n const out: Record<string, unknown> = {};\n for (const k of includes as string[]) {\n out[k] = source[k];\n }\n return out as P;\n }\n const out: Record<string, unknown> = { ...source };\n for (const k of excludes as string[]) { delete out[k]; }\n return out as P;\n}\n\nfunction sortDocs<T extends BaseDocument>(docs: T[], sort?: Record<string, 1 | -1>): T[] {\n if (!sort) { return docs; }\n const entries = Object.entries(sort);\n return [...docs].sort((a, b) => {\n for (const [field, dir] of entries) {\n const av = (a as Record<string, unknown>)[field];\n const bv = (b as Record<string, unknown>)[field];\n if (av === bv) { continue; }\n const cmp = (av as never) < (bv as never) ? -1 : 1;\n return dir === 1 ? cmp : -cmp;\n }\n return 0;\n });\n}\n\nfunction checkUniqueIndexes<T extends BaseDocument>(\n collection: Collection,\n doc: T,\n ignoreId?: string,\n): void {\n for (const idx of collection.indexes) {\n if (!idx.unique) { continue; }\n const paths = Array.isArray(idx.path) ? idx.path : [idx.path];\n const newKey = paths.map((p) => JSON.stringify((doc as unknown as Record<string, unknown>)[p])).join('|');\n for (const existing of collection.docs.values()) {\n if (ignoreId !== undefined && existing.id === ignoreId) { continue; }\n const existingKey = paths.map((p) => JSON.stringify((existing as unknown as Record<string, unknown>)[p])).join('|');\n if (existingKey === newKey) {\n throw new Error(`unique index violation on [${paths.join(', ')}]`);\n }\n }\n }\n}\n\nexport interface InMemoryDocumentDatabaseOptions {\n /** Seed clock value for new documents. Defaults to `Date.now()` at call site. */\n now?: () => number;\n}\n\n/**\n * In-memory `IDocumentDatabase` for tests.\n *\n * Storage layout: `Map<collectionName, Collection>`. Each `Collection` holds\n * a `Map<id, doc>` and a list of declared indexes (used for uniqueness checks).\n */\nexport class InMemoryDocumentDatabase implements IDocumentDatabase {\n private readonly collections = new Map<string, Collection>();\n private readonly now: () => number;\n private closed = false;\n\n constructor(opts: InMemoryDocumentDatabaseOptions = {}) {\n this.now = opts.now ?? (() => Date.now());\n }\n\n private getCollection(name: string): Collection {\n let c = this.collections.get(name);\n if (!c) {\n c = { docs: new Map(), indexes: [] };\n this.collections.set(name, c);\n }\n return c;\n }\n\n private throwIfClosed(): void {\n if (this.closed) { throw new Error('InMemoryDocumentDatabase is closed'); }\n }\n\n async ensureCollection(name: string, options?: EnsureCollectionOpts): Promise<void> {\n this.throwIfClosed();\n const c = this.getCollection(name);\n if (options?.indexes) {\n for (const idx of options.indexes) {\n const paths = Array.isArray(idx.path) ? idx.path.join(',') : idx.path;\n const exists = c.indexes.some((existing) => {\n const existingPaths = Array.isArray(existing.path) ? existing.path.join(',') : existing.path;\n return existingPaths === paths;\n });\n if (!exists) { c.indexes.push(idx); }\n }\n }\n }\n\n async find<T extends BaseDocument, P = T>(\n collection: string,\n filter: DocumentFilter<T>,\n options?: FindOptions & ProjectOpts<T, P> & SignalOpts,\n ): Promise<P[]> {\n this.throwIfClosed();\n const c = this.getCollection(collection);\n let docs = Array.from(c.docs.values()) as T[];\n docs = docs.filter((d) => matchFilter(d, filter));\n docs = sortDocs(docs, options?.sort);\n if (options?.skip) { docs = docs.slice(options.skip); }\n if (options?.limit !== undefined) { docs = docs.slice(0, options.limit); }\n return docs.map((d) => applyProjection<T, P>(clone(d), options?.project as Projection<T> | undefined));\n }\n\n findStream<T extends BaseDocument, P = T>(\n collection: string,\n filter: DocumentFilter<T>,\n options?: FindOptions & ProjectOpts<T, P> & SignalOpts & { batchSize?: number },\n ): AsyncIterable<P> {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n return {\n async *[Symbol.asyncIterator]() {\n const results = await self.find<T, P>(collection, filter, options);\n for (const r of results) { yield r; }\n },\n };\n }\n\n async findById<T extends BaseDocument>(\n collection: string,\n id: string,\n ): Promise<T | null> {\n this.throwIfClosed();\n const doc = this.getCollection(collection).docs.get(id);\n return doc ? clone(doc as T) : null;\n }\n\n async count<T extends BaseDocument>(\n collection: string,\n filter: DocumentFilter<T>,\n ): Promise<number> {\n this.throwIfClosed();\n const docs = Array.from(this.getCollection(collection).docs.values()) as T[];\n return docs.filter((d) => matchFilter(d, filter)).length;\n }\n\n async insertOne<T extends BaseDocument>(\n collection: string,\n doc: Omit<T, 'id' | 'createdAt' | 'updatedAt'>,\n ): Promise<T> {\n this.throwIfClosed();\n const c = this.getCollection(collection);\n const now = this.now();\n const full = { ...(doc as object), id: nextId(), createdAt: now, updatedAt: now } as T;\n checkUniqueIndexes(c, full);\n c.docs.set(full.id, clone(full));\n return clone(full);\n }\n\n async insertMany<T extends BaseDocument>(\n collection: string,\n docs: Array<Omit<T, 'id' | 'createdAt' | 'updatedAt'>>,\n ): Promise<T[]> {\n this.throwIfClosed();\n const c = this.getCollection(collection);\n const now = this.now();\n const staged: T[] = [];\n for (const d of docs) {\n const full = { ...(d as object), id: nextId(), createdAt: now, updatedAt: now } as T;\n checkUniqueIndexes(c, full);\n for (const s of staged) {\n try { checkUniqueIndexes({ docs: new Map([[s.id, s]]), indexes: c.indexes }, full); } catch (e) { throw e; }\n }\n staged.push(full);\n }\n for (const s of staged) { c.docs.set(s.id, clone(s)); }\n return staged.map(clone);\n }\n\n async updateOne<T extends BaseDocument>(\n collection: string,\n filter: DocumentFilter<T>,\n update: DocumentUpdate<T>,\n options?: SignalOpts & { upsert?: boolean },\n ): Promise<T | null> {\n this.throwIfClosed();\n const c = this.getCollection(collection);\n for (const existing of c.docs.values()) {\n if (matchFilter(existing as T, filter)) {\n const next = applyUpdate(existing as T, update);\n checkUniqueIndexes(c, next, existing.id);\n c.docs.set(existing.id, clone(next));\n return clone(next);\n }\n }\n if (options?.upsert) {\n const now = this.now();\n const seed: Record<string, unknown> = { id: nextId(), createdAt: now, updatedAt: now };\n for (const [k, v] of Object.entries(filter)) {\n if (k === '$and' || k === '$or') { continue; }\n if (v !== null && typeof v === 'object') { continue; }\n seed[k] = v;\n }\n const next = applyUpdate(seed as T, update);\n checkUniqueIndexes(c, next);\n c.docs.set(next.id, clone(next));\n return clone(next);\n }\n return null;\n }\n\n async updateMany<T extends BaseDocument>(\n collection: string,\n filter: DocumentFilter<T>,\n update: DocumentUpdate<T>,\n ): Promise<number> {\n this.throwIfClosed();\n const c = this.getCollection(collection);\n let n = 0;\n for (const existing of c.docs.values()) {\n if (matchFilter(existing as T, filter)) {\n const next = applyUpdate(existing as T, update);\n checkUniqueIndexes(c, next, existing.id);\n c.docs.set(existing.id, clone(next));\n n++;\n }\n }\n return n;\n }\n\n async updateById<T extends BaseDocument>(\n collection: string,\n id: string,\n update: DocumentUpdate<T>,\n ): Promise<T | null> {\n this.throwIfClosed();\n const c = this.getCollection(collection);\n const existing = c.docs.get(id);\n if (!existing) { return null; }\n const next = applyUpdate(existing as T, update);\n checkUniqueIndexes(c, next, id);\n c.docs.set(id, clone(next));\n return clone(next);\n }\n\n async deleteMany<T extends BaseDocument>(\n collection: string,\n filter: DocumentFilter<T>,\n ): Promise<number> {\n this.throwIfClosed();\n const c = this.getCollection(collection);\n let n = 0;\n for (const [id, doc] of c.docs) {\n if (matchFilter(doc as T, filter)) {\n c.docs.delete(id);\n n++;\n }\n }\n return n;\n }\n\n async deleteById(collection: string, id: string): Promise<boolean> {\n this.throwIfClosed();\n return this.getCollection(collection).docs.delete(id);\n }\n\n async bulkWrite<T extends BaseDocument>(\n collection: string,\n ops: Array<BulkOp<T>>,\n ): Promise<BulkResult> {\n this.throwIfClosed();\n const c = this.getCollection(collection);\n const snapshot = new Map(c.docs);\n const result: BulkResult = { inserted: 0, updated: 0, deleted: 0 };\n try {\n for (const op of ops) {\n if (op.type === 'insert') {\n await this.insertOne(collection, op.doc);\n result.inserted++;\n } else if (op.type === 'update') {\n const target = await this.updateOne(collection, op.filter, op.update, { upsert: op.upsert });\n if (target) { result.updated++; }\n } else {\n result.deleted += await this.deleteMany(collection, op.filter);\n }\n }\n return result;\n } catch (err) {\n c.docs.clear();\n for (const [k, v] of snapshot) { c.docs.set(k, v); }\n throw err;\n }\n }\n\n async transaction<T>(fn: (tx: IDocumentTransaction) => Promise<T>): Promise<T> {\n this.throwIfClosed();\n const snapshot = new Map<string, Map<string, BaseDocument>>();\n for (const [name, c] of this.collections) {\n snapshot.set(name, new Map(c.docs));\n }\n const tx: IDocumentTransaction = {\n find: this.find.bind(this),\n findById: this.findById.bind(this),\n count: this.count.bind(this),\n insertOne: this.insertOne.bind(this),\n insertMany: this.insertMany.bind(this),\n updateOne: this.updateOne.bind(this),\n updateMany: this.updateMany.bind(this),\n updateById: this.updateById.bind(this),\n deleteMany: this.deleteMany.bind(this),\n deleteById: this.deleteById.bind(this),\n };\n try {\n return await fn(tx);\n } catch (err) {\n for (const [name, docs] of snapshot) {\n const c = this.collections.get(name);\n if (c) { c.docs.clear(); for (const [k, v] of docs) { c.docs.set(k, v); } }\n }\n throw err;\n }\n }\n\n async ping(): Promise<{ ok: boolean; latencyMs: number }> {\n return { ok: !this.closed, latencyMs: 0 };\n }\n\n async close(): Promise<void> {\n this.closed = true;\n }\n}\n\nexport function createInMemoryDocumentDatabase(\n opts?: InMemoryDocumentDatabaseOptions,\n): InMemoryDocumentDatabase {\n return new InMemoryDocumentDatabase(opts);\n}\n","/**\n * In-memory `IKVStore` for tests. Sufficient for governance / wrapper tests:\n * full method surface, TTL respected on read (lazy expiry), atomic CAS / incr\n * via the single-threaded event loop. No background sweeper.\n */\n\nimport type { IKVStore, SetOpts, SignalOpts } from '@kb-labs/core-platform/adapters';\n\ninterface Entry {\n value: unknown;\n expiresAt: number | null;\n}\n\nexport class InMemoryKVStore implements IKVStore {\n private readonly map = new Map<string, Entry>();\n private closed = false;\n\n private throwIfClosed(): void {\n if (this.closed) { throw new Error('InMemoryKVStore is closed'); }\n }\n\n private isExpired(entry: Entry, at: number = Date.now()): boolean {\n return entry.expiresAt !== null && entry.expiresAt <= at;\n }\n\n private getLive(key: string): Entry | null {\n const e = this.map.get(key);\n if (!e) { return null; }\n if (this.isExpired(e)) {\n this.map.delete(key);\n return null;\n }\n return e;\n }\n\n async get<T = unknown>(key: string): Promise<T | null> {\n this.throwIfClosed();\n if (typeof key !== 'string' || key.length === 0) {\n throw new Error('KV key must be a non-empty string');\n }\n const e = this.getLive(key);\n return e ? (e.value as T) : null;\n }\n\n async getMany<T = unknown>(keys: string[]): Promise<Array<T | null>> {\n this.throwIfClosed();\n return Promise.all(keys.map((k) => this.get<T>(k)));\n }\n\n async set<T = unknown>(key: string, value: T, options?: SetOpts): Promise<boolean> {\n this.throwIfClosed();\n if (typeof key !== 'string' || key.length === 0) {\n throw new Error('KV key must be a non-empty string');\n }\n if (options?.ifNotExists && options?.ifExists) {\n throw new Error('ifNotExists and ifExists are mutually exclusive');\n }\n const present = this.getLive(key) !== null;\n if (options?.ifNotExists && present) { return false; }\n if (options?.ifExists && !present) { return false; }\n const expiresAt = typeof options?.ttlMs === 'number' ? Date.now() + options.ttlMs : null;\n this.map.set(key, { value, expiresAt });\n return true;\n }\n\n async setMany<T = unknown>(\n entries: Array<{ key: string; value: T; ttlMs?: number }>,\n ): Promise<void> {\n this.throwIfClosed();\n for (const e of entries) {\n if (typeof e.key !== 'string' || e.key.length === 0) {\n throw new Error('KV key must be a non-empty string');\n }\n }\n const now = Date.now();\n for (const e of entries) {\n this.map.set(e.key, {\n value: e.value,\n expiresAt: typeof e.ttlMs === 'number' ? now + e.ttlMs : null,\n });\n }\n }\n\n async setIfNotExists<T = unknown>(\n key: string,\n value: T,\n options?: { ttlMs?: number } & SignalOpts,\n ): Promise<boolean> {\n return this.set(key, value, { ttlMs: options?.ttlMs, ifNotExists: true });\n }\n\n async delete(key: string): Promise<boolean> {\n this.throwIfClosed();\n const existed = this.getLive(key) !== null;\n this.map.delete(key);\n return existed;\n }\n\n async exists(key: string): Promise<boolean> {\n this.throwIfClosed();\n return this.getLive(key) !== null;\n }\n\n async cas<T = unknown>(\n key: string,\n expected: T,\n next: T,\n options?: { ttlMs?: number } & SignalOpts,\n ): Promise<boolean> {\n this.throwIfClosed();\n const current = this.getLive(key);\n const currentValue = current ? current.value : null;\n if (JSON.stringify(currentValue) !== JSON.stringify(expected)) { return false; }\n const expiresAt = typeof options?.ttlMs === 'number'\n ? Date.now() + options.ttlMs\n : current?.expiresAt ?? null;\n this.map.set(key, { value: next, expiresAt });\n return true;\n }\n\n async incr(\n key: string,\n delta = 1,\n options?: { ttlMs?: number } & SignalOpts,\n ): Promise<number> {\n this.throwIfClosed();\n if (!Number.isFinite(delta)) {\n throw new Error('incr delta must be a finite number');\n }\n const current = this.getLive(key);\n if (current && typeof current.value !== 'number') {\n throw new Error(`incr target \"${key}\" is not a number`);\n }\n const nextValue = (current ? (current.value as number) : 0) + delta;\n const expiresAt = typeof options?.ttlMs === 'number'\n ? Date.now() + options.ttlMs\n : current?.expiresAt ?? null;\n this.map.set(key, { value: nextValue, expiresAt });\n return nextValue;\n }\n\n async ttl(key: string): Promise<number | null> {\n this.throwIfClosed();\n const e = this.getLive(key);\n if (!e || e.expiresAt === null) { return null; }\n return Math.max(0, e.expiresAt - Date.now());\n }\n\n async expire(key: string, ttlMs: number): Promise<boolean> {\n this.throwIfClosed();\n const e = this.getLive(key);\n if (!e) { return false; }\n e.expiresAt = Date.now() + ttlMs;\n return true;\n }\n\n async persist(key: string): Promise<boolean> {\n this.throwIfClosed();\n const e = this.getLive(key);\n if (!e) { return false; }\n e.expiresAt = null;\n return true;\n }\n\n scan(\n prefix = '',\n _options?: { batchSize?: number } & SignalOpts,\n ): AsyncIterable<{ key: string; value: unknown }> {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n return {\n async *[Symbol.asyncIterator]() {\n self.throwIfClosed();\n for (const [key, entry] of [...self.map.entries()]) {\n if (self.isExpired(entry)) { self.map.delete(key); continue; }\n if (!key.startsWith(prefix)) { continue; }\n yield { key, value: entry.value };\n }\n },\n };\n }\n\n async ping(): Promise<{ ok: boolean; latencyMs: number }> {\n return { ok: !this.closed, latencyMs: 0 };\n }\n\n async close(): Promise<void> {\n this.closed = true;\n }\n}\n\nexport function createInMemoryKVStore(): InMemoryKVStore {\n return new InMemoryKVStore();\n}\n"]}
1
+ {"version":3,"sources":["../../home/runner/work/kb-labs/kb-labs/shared/testing-platform/src/setup-platform.ts","../../home/runner/work/kb-labs/kb-labs/shared/testing-platform/src/create-test-context.ts","../../home/runner/work/kb-labs/kb-labs/shared/testing-platform/src/test-command.ts","../../home/runner/work/kb-labs/kb-labs/shared/testing-platform/src/in-memory-document-database.ts","../../home/runner/work/kb-labs/kb-labs/shared/testing-platform/src/in-memory-kv-store.ts"],"names":["platform","out"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module @kb-labs/shared-testing-platform/setup-platform\n *\n * Solves the \"singleton gap\" problem: composables (useLLM, useCache, etc.)\n * read from the global platform singleton, but createTestContext() only\n * populates ctx.platform. This module bridges the gap by setting test mocks\n * directly into the global singleton.\n */\n\nimport { platform, resetPlatform } from '@kb-labs/core-runtime';\nimport type {\n ILLM,\n ICache,\n IEmbeddings,\n IVectorStore,\n IStorage,\n IAnalytics,\n ILogger,\n IEventBus,\n} from '@kb-labs/core-platform';\n\n/**\n * Options for setting up the test platform.\n * Only adapters that are provided will be registered.\n * Omitted adapters will use the PlatformContainer's built-in fallbacks.\n */\nexport interface TestPlatformOptions {\n llm?: ILLM;\n cache?: ICache;\n embeddings?: IEmbeddings;\n vectorStore?: IVectorStore;\n storage?: IStorage;\n analytics?: IAnalytics;\n logger?: ILogger;\n eventBus?: IEventBus;\n}\n\nexport interface TestPlatformResult {\n /** The global platform singleton (with test mocks applied) */\n platform: typeof platform;\n /** Call in afterEach() to reset the singleton to a clean state */\n cleanup: () => void;\n}\n\n/**\n * Setup the global platform singleton with test mocks.\n *\n * This ensures that useLLM(), useCache() and other composables\n * return the test mocks instead of uninitialized/stale adapters.\n *\n * @example\n * ```typescript\n * import { setupTestPlatform, mockLLM } from '@kb-labs/shared-testing-platform';\n *\n * describe('my handler', () => {\n * let cleanup: () => void;\n *\n * beforeEach(() => {\n * const result = setupTestPlatform({\n * llm: mockLLM().onAnyComplete().respondWith('hello'),\n * });\n * cleanup = result.cleanup;\n * });\n *\n * afterEach(() => cleanup());\n * });\n * ```\n */\nexport function setupTestPlatform(options: TestPlatformOptions = {}): TestPlatformResult {\n // Reset everything first — clean slate\n resetPlatform();\n\n // Register provided adapters into the global singleton\n const adapterMap: Array<[string, unknown]> = [\n ['llm', options.llm],\n ['cache', options.cache],\n ['embeddings', options.embeddings],\n ['vectorStore', options.vectorStore],\n ['storage', options.storage],\n ['analytics', options.analytics],\n ['logger', options.logger],\n ['eventBus', options.eventBus],\n ];\n\n for (const [key, instance] of adapterMap) {\n if (instance !== undefined) {\n platform.setAdapter(key, instance);\n }\n }\n\n return {\n platform,\n cleanup: () => resetPlatform(),\n };\n}\n","/**\n * @module @kb-labs/shared-testing-platform/create-test-context\n *\n * Enhanced test context factory that bridges ctx.platform and the global singleton.\n *\n * Unlike the original createTestContext() from SDK, this version:\n * - Uses mockLLM/mockCache/mockLogger with vi.fn() spies (not noop functions)\n * - Syncs ctx.platform adapters with the global singleton via setupTestPlatform()\n * - Provides a cleanup function to reset the singleton in afterEach()\n *\n * @example\n * ```typescript\n * import { createTestContext, mockLLM } from '@kb-labs/shared-testing-platform';\n *\n * const llm = mockLLM().onAnyComplete().respondWith('hello');\n * const { ctx, cleanup } = createTestContext({ platform: { llm } });\n *\n * // Both work — ctx.platform and useLLM() return the same mock\n * await handler.execute(ctx, args);\n * expect(llm.complete).toHaveBeenCalled();\n *\n * cleanup(); // Reset singleton in afterEach\n * ```\n */\n\nimport type {\n PluginContextV3,\n HostContext,\n PlatformServices,\n UIFacade,\n TraceContext,\n RuntimeAPI,\n PluginAPI,\n FSShim,\n FetchShim,\n EnvShim,\n InvokeAPI,\n EnvironmentAPI,\n WorkspaceAPI,\n SnapshotAPI,\n} from '@kb-labs/plugin-contracts';\n\nimport { mockLLM, mockCache, mockStorage, mockLogger } from '@kb-labs/shared-testing';\nimport { setupTestPlatform } from './setup-platform.js';\nimport { vi } from 'vitest';\n\n// ────────────────────────────────────────────────────────────────────\n// Types\n// ────────────────────────────────────────────────────────────────────\n\nexport interface CreateTestContextOptions {\n pluginId?: string;\n pluginVersion?: string;\n host?: 'cli' | 'rest' | 'workflow' | 'webhook';\n hostContext?: HostContext;\n config?: unknown;\n cwd?: string;\n outdir?: string;\n tenantId?: string;\n signal?: AbortSignal;\n /** Override platform services. Also synced to global singleton. */\n platform?: Partial<PlatformServices>;\n /** Override UI facade */\n ui?: Partial<UIFacade>;\n /**\n * If true, sync platform adapters to the global singleton\n * so that useLLM(), useCache(), etc. return the test mocks.\n * @default true\n */\n syncSingleton?: boolean;\n}\n\nexport interface TestContextResult<TConfig = unknown> {\n /** The plugin context with test mocks */\n ctx: PluginContextV3<TConfig>;\n /** Call in afterEach() to reset the global singleton */\n cleanup: () => void;\n}\n\n// ────────────────────────────────────────────────────────────────────\n// Mock factories\n// ────────────────────────────────────────────────────────────────────\n\nexport function createMockTrace(): TraceContext {\n return {\n traceId: 'test-trace-id',\n spanId: 'test-span-id',\n parentSpanId: undefined,\n addEvent: () => {},\n setAttribute: () => {},\n recordError: () => {},\n };\n}\n\nexport function createMockUI(): UIFacade {\n const messages: string[] = [];\n\n const mockColor = (text: string) => text;\n const mockColors = {\n success: mockColor,\n error: mockColor,\n warning: mockColor,\n info: mockColor,\n primary: mockColor,\n accent: mockColor,\n highlight: mockColor,\n secondary: mockColor,\n emphasis: mockColor,\n muted: mockColor,\n foreground: mockColor,\n dim: mockColor,\n bold: mockColor,\n underline: mockColor,\n inverse: mockColor,\n };\n\n return {\n colors: mockColors,\n symbols: {\n success: '+',\n error: 'x',\n warning: '!',\n info: 'i',\n bullet: '-',\n clock: 'T',\n folder: 'D',\n package: 'P',\n pointer: '>',\n section: '#',\n separator: '-',\n border: '|',\n topLeft: '+',\n topRight: '+',\n bottomLeft: '+',\n bottomRight: '+',\n leftT: '+',\n rightT: '+',\n step: 'o',\n stepDone: '*',\n arrow: '>',\n diamond: '<>',\n },\n write: vi.fn((text) => messages.push(`WRITE: ${text}`)),\n info: vi.fn((msg) => messages.push(`INFO: ${msg}`)),\n success: vi.fn((msg) => messages.push(`SUCCESS: ${msg}`)),\n warn: vi.fn((msg) => messages.push(`WARN: ${msg}`)),\n error: vi.fn((err) => messages.push(`ERROR: ${err instanceof Error ? err.message : err}`)),\n debug: vi.fn((msg) => messages.push(`DEBUG: ${msg}`)),\n spinner: vi.fn((msg) => {\n messages.push(`SPINNER: ${msg}`);\n return {\n update: vi.fn((m: string) => messages.push(`SPINNER UPDATE: ${m}`)),\n succeed: vi.fn((m?: string) => messages.push(`SPINNER SUCCEED: ${m ?? msg}`)),\n fail: vi.fn((m?: string) => messages.push(`SPINNER FAIL: ${m ?? msg}`)),\n stop: vi.fn(),\n };\n }),\n table: vi.fn((data) => messages.push(`TABLE: ${JSON.stringify(data)}`)),\n json: vi.fn((data) => messages.push(`JSON: ${JSON.stringify(data)}`)),\n newline: vi.fn(() => messages.push('')),\n divider: vi.fn(() => messages.push('-'.repeat(40))),\n box: vi.fn((content, title) => {\n if (title) { messages.push(`+- ${title} -+`); }\n messages.push(content);\n if (title) { messages.push(`+${'-'.repeat(title.length + 4)}+`); }\n }),\n sideBox: vi.fn((options) => {\n messages.push(`+- ${options.title} -+`);\n if (options.summary) {\n Object.entries(options.summary).forEach(([key, value]) => {\n messages.push(` ${key}: ${value}`);\n });\n }\n if (options.sections) {\n options.sections.forEach((section: { header?: string; items: string[] }) => {\n if (section.header) { messages.push(` ${section.header}:`); }\n section.items.forEach((item: string) => messages.push(` ${item}`));\n });\n }\n if (options.timing) {\n messages.push(` Timing: ${options.timing}ms`);\n }\n messages.push('+' + '-'.repeat(options.title.length + 4) + '+');\n }),\n chain: vi.fn((items) => {\n items.forEach((item: { title: string }) => messages.push(`CHAIN: ${item.title}`));\n }),\n confirm: vi.fn(async () => true),\n prompt: vi.fn(async () => ''),\n select: async (_msg, choices) => choices[0]?.value as never,\n multiSelect: async (_msg, choices) => choices.filter((c) => c.checked).map((c) => c.value) as never,\n log: vi.fn(),\n };\n}\n\nexport function createMockRuntime(): RuntimeAPI {\n const mockFS: FSShim = {\n readFile: vi.fn(async () => ''),\n readFileBuffer: vi.fn(async () => new Uint8Array()),\n writeFile: vi.fn(async () => {}),\n readdir: vi.fn(async () => []),\n readdirWithStats: vi.fn(async () => []),\n mkdir: vi.fn(async () => {}),\n rm: vi.fn(async () => {}),\n copy: vi.fn(async () => {}),\n move: vi.fn(async () => {}),\n glob: vi.fn(async () => []),\n stat: vi.fn(async () => ({\n isFile: () => false,\n isDirectory: () => false,\n size: 0,\n mtime: Date.now(),\n ctime: Date.now(),\n })),\n exists: vi.fn(async () => false),\n resolve: (path: string) => path,\n relative: (path: string) => path,\n join: (...segments: string[]) => segments.join('/'),\n dirname: (path: string) => path.split('/').slice(0, -1).join('/'),\n basename: (path: string) => path.split('/').pop() ?? '',\n extname: (path: string) => {\n const base = path.split('/').pop() ?? '';\n const idx = base.lastIndexOf('.');\n return idx > 0 ? base.slice(idx) : '';\n },\n };\n\n const mockFetch: FetchShim = vi.fn(async () => new Response('mock'));\n const mockEnv: EnvShim = vi.fn((_key: string) => undefined) as EnvShim;\n\n return {\n fs: mockFS,\n fetch: mockFetch,\n env: mockEnv,\n };\n}\n\nexport function createMockEnvironmentAPI(): EnvironmentAPI {\n return {\n create: vi.fn(async () => ({\n environmentId: 'env_mock_1',\n provider: 'mock',\n status: 'ready' as const,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n })),\n status: vi.fn(async (environmentId: string) => ({\n environmentId,\n status: 'ready' as const,\n updatedAt: new Date().toISOString(),\n })),\n destroy: vi.fn(async () => {}),\n renewLease: vi.fn(async () => ({\n leaseId: 'lease_mock_1',\n acquiredAt: new Date().toISOString(),\n expiresAt: new Date(Date.now() + 10 * 60 * 1000).toISOString(),\n })),\n };\n}\n\nexport function createMockWorkspaceAPI(): WorkspaceAPI {\n return {\n materialize: vi.fn(async () => ({\n workspaceId: 'ws_mock_1',\n provider: 'mock',\n status: 'ready' as const,\n rootPath: '/tmp/ws_mock_1',\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n })),\n attach: vi.fn(async (request) => ({\n workspaceId: request.workspaceId,\n environmentId: request.environmentId,\n mountPath: request.mountPath ?? '/workspace',\n attachedAt: new Date().toISOString(),\n })),\n release: vi.fn(async () => {}),\n status: vi.fn(async (workspaceId: string) => ({\n workspaceId,\n status: 'ready' as const,\n updatedAt: new Date().toISOString(),\n })),\n };\n}\n\nexport function createMockSnapshotAPI(): SnapshotAPI {\n return {\n capture: vi.fn(async (request) => ({\n snapshotId: request.snapshotId ?? 'snap_mock_1',\n provider: 'mock',\n status: 'ready' as const,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n workspaceId: request.workspaceId,\n environmentId: request.environmentId,\n })),\n restore: vi.fn(async (request) => ({\n snapshotId: request.snapshotId,\n restoredAt: new Date().toISOString(),\n workspaceId: request.workspaceId,\n environmentId: request.environmentId,\n targetPath: request.targetPath,\n })),\n status: vi.fn(async (snapshotId: string) => ({\n snapshotId,\n status: 'ready' as const,\n updatedAt: new Date().toISOString(),\n })),\n delete: vi.fn(async () => {}),\n gc: vi.fn(async (request) => ({\n scanned: 0,\n deleted: 0,\n dryRun: request?.dryRun ?? false,\n })),\n };\n}\n\nexport function createInfraApiMocks(): Pick<PluginAPI, 'environment' | 'workspace' | 'snapshot'> {\n return {\n environment: createMockEnvironmentAPI(),\n workspace: createMockWorkspaceAPI(),\n snapshot: createMockSnapshotAPI(),\n };\n}\n\nexport function createMockPluginAPI(): PluginAPI {\n const infra = createInfraApiMocks();\n return {\n lifecycle: {\n onCleanup: vi.fn(),\n },\n state: {\n get: vi.fn(async () => undefined),\n set: vi.fn(async () => {}),\n delete: vi.fn(async () => {}),\n has: vi.fn(async () => false),\n getMany: vi.fn(async () => new Map()),\n setMany: vi.fn(async () => {}),\n },\n artifacts: {\n write: vi.fn(async () => '/mock/path'),\n list: vi.fn(async () => []),\n read: vi.fn(async () => ''),\n readBuffer: vi.fn(async () => new Uint8Array()),\n exists: vi.fn(async () => false),\n path: vi.fn(() => '/mock/path'),\n },\n shell: {\n exec: vi.fn(async () => ({ code: 0, stdout: '', stderr: '', ok: true })),\n },\n events: {\n emit: vi.fn(async () => {}),\n },\n invoke: {\n call: vi.fn(async (_pluginId: string, _input?: unknown, _options?: unknown) => undefined) as InvokeAPI['call'],\n },\n workflows: {\n run: vi.fn(async () => 'mock-run-id'),\n wait: vi.fn(async () => undefined),\n status: vi.fn(async () => null),\n cancel: vi.fn(async () => {}),\n list: vi.fn(async () => []),\n },\n jobs: {\n submit: vi.fn(async () => 'mock-job-id'),\n schedule: vi.fn(async () => 'mock-scheduled-job-id'),\n wait: vi.fn(async () => undefined),\n status: vi.fn(async () => null),\n cancel: vi.fn(async () => false),\n list: vi.fn(async () => []),\n },\n cron: {\n register: vi.fn(async () => {}),\n unregister: vi.fn(async () => {}),\n list: vi.fn(async () => []),\n pause: vi.fn(async () => {}),\n resume: vi.fn(async () => {}),\n trigger: vi.fn(async () => {}),\n },\n environment: infra.environment,\n workspace: infra.workspace,\n snapshot: infra.snapshot,\n };\n}\n\nexport const createMockPlatformApi = createMockPluginAPI;\n\nexport function createMockPluginContextV3<TConfig = unknown>(\n options: CreateTestContextOptions = {}\n): TestContextResult<TConfig> {\n return createTestContext<TConfig>(options);\n}\n\n// ────────────────────────────────────────────────────────────────────\n// Public API\n// ────────────────────────────────────────────────────────────────────\n\n/**\n * Create a test context for plugin development.\n *\n * Uses mock builders with vi.fn() spies and syncs platform adapters\n * to the global singleton by default so that composables work in tests.\n */\nexport function createTestContext<TConfig = unknown>(\n options: CreateTestContextOptions = {}\n): TestContextResult<TConfig> {\n const {\n pluginId = 'test-plugin',\n pluginVersion = '0.0.0',\n host = 'cli',\n hostContext,\n config,\n cwd = process.cwd(),\n outdir,\n tenantId,\n signal,\n platform: platformOverrides,\n ui: uiOverrides,\n syncSingleton = true,\n } = options;\n\n const resolvedOutdir = outdir ?? `${cwd}/.kb/output`;\n\n const defaultHostContext: HostContext =\n hostContext ??\n (() => {\n switch (host) {\n case 'cli':\n return { host: 'cli', argv: ['test'], flags: {} };\n case 'rest':\n return {\n host: 'rest',\n method: 'GET',\n path: '/test',\n requestId: 'test-req-001',\n traceId: 'test-trace-001',\n };\n case 'workflow':\n return { host: 'workflow', workflowId: 'test-wf', runId: 'test-run', stepId: 'test-step' };\n case 'webhook':\n return { host: 'webhook', event: 'test:event', namespaceId: 'test-ns', webhookId: 'test-webhook-001' };\n }\n })();\n\n const defaultLogger = mockLogger();\n const defaultLLM = mockLLM();\n const defaultCache = mockCache();\n const defaultStorage = mockStorage();\n\n const defaultPlatform: PlatformServices = {\n logger: defaultLogger,\n llm: defaultLLM,\n embeddings: {\n embed: vi.fn(async () => []),\n embedBatch: vi.fn(async () => [[]]),\n dimensions: 1536,\n getDimensions: vi.fn(async () => 1536),\n },\n vectorStore: {\n search: vi.fn(async () => []),\n upsert: vi.fn(async () => {}),\n delete: vi.fn(async () => {}),\n count: vi.fn(async () => 0),\n },\n cache: defaultCache,\n storage: defaultStorage,\n analytics: {\n track: vi.fn(async () => {}),\n identify: vi.fn(async () => {}),\n flush: vi.fn(async () => {}),\n },\n eventBus: {\n publish: vi.fn(async () => {}),\n subscribe: vi.fn(() => () => {}),\n },\n config: {\n getConfig: vi.fn(async () => ({})),\n getRawConfig: vi.fn(async () => ({})),\n },\n invoke: {\n call: vi.fn(async () => ({ success: true, data: null })),\n isAvailable: vi.fn(async () => false),\n } as PlatformServices['invoke'],\n documentDatabase: {\n find: vi.fn(async () => []),\n findStream: vi.fn(async function* () { /* empty */ }),\n findById: vi.fn(async () => null),\n count: vi.fn(async () => 0),\n insertOne: vi.fn(async () => ({ id: 'mock', createdAt: 0, updatedAt: 0 })),\n insertMany: vi.fn(async () => []),\n updateOne: vi.fn(async () => null),\n updateMany: vi.fn(async () => 0),\n updateById: vi.fn(async () => null),\n deleteMany: vi.fn(async () => 0),\n deleteById: vi.fn(async () => false),\n bulkWrite: vi.fn(async () => ({ inserted: 0, updated: 0, deleted: 0 })),\n transaction: vi.fn(async () => undefined as never),\n ensureCollection: vi.fn(async () => undefined),\n ping: vi.fn(async () => ({ ok: true, latencyMs: 0 })),\n close: vi.fn(async () => {}),\n } as unknown as PlatformServices['documentDatabase'],\n kvStore: {\n get: vi.fn(async () => null),\n getMany: vi.fn(async () => []),\n set: vi.fn(async () => true),\n setMany: vi.fn(async () => {}),\n setIfNotExists: vi.fn(async () => true),\n delete: vi.fn(async () => false),\n exists: vi.fn(async () => false),\n cas: vi.fn(async () => false),\n incr: vi.fn(async () => 0),\n ttl: vi.fn(async () => null),\n expire: vi.fn(async () => false),\n persist: vi.fn(async () => false),\n scan: vi.fn(async function* () { /* empty */ }),\n ping: vi.fn(async () => ({ ok: true, latencyMs: 0 })),\n close: vi.fn(async () => {}),\n } as unknown as PlatformServices['kvStore'],\n logs: {\n query: vi.fn(async () => ({ logs: [], total: 0, hasMore: false, source: 'buffer' as const })),\n getById: vi.fn(async () => null),\n search: vi.fn(async () => ({ logs: [], total: 0, hasMore: false })),\n subscribe: vi.fn(() => () => {}),\n getStats: vi.fn(async () => ({})),\n getCapabilities: vi.fn(() => ({ hasBuffer: false, hasPersistence: false, hasSearch: false, hasStreaming: false })),\n },\n };\n\n const finalPlatform: PlatformServices = {\n ...defaultPlatform,\n ...platformOverrides,\n };\n\n let cleanupFn = () => {};\n if (syncSingleton) {\n const result = setupTestPlatform({\n llm: finalPlatform.llm,\n cache: finalPlatform.cache,\n storage: finalPlatform.storage,\n logger: finalPlatform.logger,\n analytics: finalPlatform.analytics,\n embeddings: finalPlatform.embeddings,\n vectorStore: finalPlatform.vectorStore,\n eventBus: finalPlatform.eventBus,\n });\n cleanupFn = result.cleanup;\n }\n\n const defaultUI = createMockUI();\n const finalUI: UIFacade = {\n ...defaultUI,\n ...uiOverrides,\n };\n\n const ctx: PluginContextV3<TConfig> = {\n host,\n requestId: 'test-trace:test-span',\n pluginId,\n pluginVersion,\n tenantId,\n cwd,\n outdir: resolvedOutdir,\n config: config as TConfig,\n signal,\n trace: createMockTrace(),\n hostContext: defaultHostContext,\n ui: finalUI,\n platform: finalPlatform,\n runtime: createMockRuntime(),\n api: createMockPluginAPI(),\n };\n\n return { ctx, cleanup: cleanupFn };\n}\n","/**\n * @module @kb-labs/shared-testing-platform/test-command\n *\n * Single-function test runner for plugin command handlers.\n */\n\nimport type {\n PluginContextV3,\n CommandResult,\n UIFacade,\n PlatformServices,\n} from '@kb-labs/plugin-contracts';\n\nimport {\n createTestContext,\n type CreateTestContextOptions,\n} from './create-test-context.js';\n\nexport interface TestableHandler<TConfig = unknown, TInput = unknown, TResult = unknown> {\n execute(\n context: PluginContextV3<TConfig>,\n input: TInput\n ): Promise<TResult> | TResult;\n cleanup?(): Promise<void> | void;\n}\n\nexport interface TestCommandOptions<TConfig = unknown> {\n flags?: Record<string, unknown>;\n argv?: string[];\n query?: Record<string, unknown>;\n body?: unknown;\n params?: Record<string, unknown>;\n input?: unknown;\n host?: 'cli' | 'rest' | 'workflow' | 'webhook';\n config?: TConfig;\n cwd?: string;\n tenantId?: string;\n signal?: AbortSignal;\n platform?: Partial<PlatformServices>;\n ui?: Partial<UIFacade>;\n syncSingleton?: boolean;\n}\n\nexport interface TestCommandResult<TResult = unknown> {\n exitCode: number;\n result: TResult | undefined;\n meta: Record<string, unknown> | undefined;\n raw: unknown;\n ui: UIFacade;\n ctx: PluginContextV3;\n cleanup: () => void;\n}\n\nexport async function testCommand<TResult = unknown, TConfig = unknown>(\n handler: TestableHandler<TConfig, any, any>,\n options: TestCommandOptions<TConfig> = {}\n): Promise<TestCommandResult<TResult>> {\n const {\n flags,\n argv = [],\n query,\n body,\n params,\n input: rawInput,\n host = 'cli',\n config,\n cwd,\n tenantId,\n signal,\n platform,\n ui,\n syncSingleton = true,\n } = options;\n\n const ctxOptions: CreateTestContextOptions = {\n host,\n config,\n cwd,\n tenantId,\n signal,\n platform,\n ui,\n syncSingleton,\n };\n\n const { ctx, cleanup } = createTestContext<TConfig>(ctxOptions);\n\n let input: unknown;\n\n if (rawInput !== undefined) {\n input = rawInput;\n } else if (host === 'rest') {\n input = {\n ...(query !== undefined ? { query } : {}),\n ...(body !== undefined ? { body } : {}),\n ...(params !== undefined ? { params } : {}),\n };\n } else {\n input = { flags: flags ?? {}, argv };\n }\n\n let raw: unknown;\n try {\n raw = await handler.execute(ctx as PluginContextV3<TConfig>, input);\n } finally {\n await handler.cleanup?.();\n }\n\n let exitCode = 0;\n let result: TResult | undefined;\n let meta: Record<string, unknown> | undefined;\n\n if (raw != null && typeof raw === 'object' && 'ok' in raw) {\n const cmdResult = raw as CommandResult<TResult>;\n exitCode = cmdResult.ok ? 0 : 1;\n result = cmdResult.result as TResult | undefined;\n meta = cmdResult.meta;\n } else if (raw === undefined || raw === null) {\n exitCode = 0;\n result = undefined;\n meta = undefined;\n } else {\n exitCode = 0;\n result = raw as TResult;\n meta = undefined;\n }\n\n return {\n exitCode,\n result,\n meta,\n raw,\n ui: ctx.ui,\n ctx: ctx as PluginContextV3,\n cleanup,\n };\n}\n","/**\n * In-memory `IDocumentDatabase` for tests.\n *\n * Scope: behavioural fidelity sufficient for governance / wrapper tests —\n * CRUD, filters, updates, atomic bulkWrite, transactions, ensureCollection,\n * unique indexes. Not optimised, not for production. Sweep-based TTL is\n * intentionally absent (not exercised by the governance suite).\n */\n\nimport type {\n BaseDocument,\n BulkOp,\n BulkResult,\n DocumentFilter,\n DocumentUpdate,\n EnsureCollectionOpts,\n FilterOperators,\n FindOptions,\n IDocumentDatabase,\n IDocumentTransaction,\n IndexSpec,\n ProjectOpts,\n Projection,\n SignalOpts,\n} from '@kb-labs/core-platform/adapters';\n\ninterface Collection {\n docs: Map<string, BaseDocument>;\n indexes: IndexSpec[];\n}\n\nfunction nextId(): string {\n return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction clone<T>(value: T): T {\n return value === undefined || value === null\n ? value\n : (JSON.parse(JSON.stringify(value)) as T);\n}\n\nfunction matchScalar<V>(value: V, ops: FilterOperators<V> | V): boolean {\n if (ops === null || ops === undefined || typeof ops !== 'object') {\n return value === ops;\n }\n const o = ops as FilterOperators<V>;\n if ('$eq' in o && o.$eq !== undefined && value !== o.$eq) { return false; }\n if ('$ne' in o && o.$ne !== undefined && value === o.$ne) { return false; }\n if ('$gt' in o && o.$gt !== undefined && !(value as never > (o.$gt as never))) { return false; }\n if ('$gte' in o && o.$gte !== undefined && !(value as never >= (o.$gte as never))) { return false; }\n if ('$lt' in o && o.$lt !== undefined && !(value as never < (o.$lt as never))) { return false; }\n if ('$lte' in o && o.$lte !== undefined && !(value as never <= (o.$lte as never))) { return false; }\n if ('$in' in o && Array.isArray(o.$in) && !o.$in.includes(value as never)) { return false; }\n if ('$nin' in o && Array.isArray(o.$nin) && o.$nin.includes(value as never)) { return false; }\n if ('$exists' in o && typeof o.$exists === 'boolean') {\n const present = value !== undefined;\n if (present !== o.$exists) { return false; }\n }\n if ('$startsWith' in o && typeof o.$startsWith === 'string') {\n if (typeof value !== 'string' || !value.startsWith(o.$startsWith)) { return false; }\n }\n if ('$contains' in o && typeof o.$contains === 'string') {\n if (typeof value !== 'string' || !value.includes(o.$contains)) { return false; }\n }\n if ('$endsWith' in o && typeof o.$endsWith === 'string') {\n if (typeof value !== 'string' || !value.endsWith(o.$endsWith)) { return false; }\n }\n return true;\n}\n\nfunction matchFilter<T extends BaseDocument>(\n doc: T,\n filter: DocumentFilter<T>,\n): boolean {\n const source = doc as unknown as Record<string, unknown>;\n if (filter.$and && Array.isArray(filter.$and)) {\n if (!filter.$and.every((f) => matchFilter(doc, f as DocumentFilter<T>))) { return false; }\n }\n if (filter.$or && Array.isArray(filter.$or)) {\n if (!filter.$or.some((f) => matchFilter(doc, f as DocumentFilter<T>))) { return false; }\n }\n for (const key of Object.keys(filter)) {\n if (key === '$and' || key === '$or') { continue; }\n const fieldValue = source[key];\n const expectation = (filter as Record<string, unknown>)[key];\n if (!matchScalar(fieldValue, expectation as never)) { return false; }\n }\n return true;\n}\n\nfunction applyUpdate<T extends BaseDocument>(\n doc: T,\n update: DocumentUpdate<T>,\n): T {\n const next: Record<string, unknown> = { ...(doc as unknown as Record<string, unknown>) };\n if (update.$set) {\n for (const [k, v] of Object.entries(update.$set)) { next[k] = v; }\n }\n if (update.$unset) {\n for (const k of Object.keys(update.$unset)) { delete next[k]; }\n }\n if (update.$inc) {\n for (const [k, delta] of Object.entries(update.$inc)) {\n const current = typeof next[k] === 'number' ? (next[k] as number) : 0;\n if (typeof delta !== 'number' || !Number.isFinite(delta)) {\n throw new Error(`$inc value for \"${k}\" must be a finite number`);\n }\n next[k] = current + delta;\n }\n }\n next.updatedAt = Date.now();\n return next as T;\n}\n\nfunction applyProjection<T, P>(\n doc: T,\n projection: Projection<T> | undefined,\n): P {\n if (!projection) { return doc as unknown as P; }\n const entries = Object.entries(projection) as Array<[keyof T, 0 | 1]>;\n const includes = entries.filter(([, v]) => v === 1).map(([k]) => k);\n const excludes = entries.filter(([, v]) => v === 0).map(([k]) => k);\n if (includes.length > 0 && excludes.length > 0) {\n throw new Error('projection cannot mix include (1) and exclude (0)');\n }\n const source = doc as unknown as Record<string, unknown>;\n if (includes.length > 0) {\n const out: Record<string, unknown> = {};\n for (const k of includes as string[]) {\n out[k] = source[k];\n }\n return out as P;\n }\n const out: Record<string, unknown> = { ...source };\n for (const k of excludes as string[]) { delete out[k]; }\n return out as P;\n}\n\nfunction sortDocs<T extends BaseDocument>(docs: T[], sort?: Record<string, 1 | -1>): T[] {\n if (!sort) { return docs; }\n const entries = Object.entries(sort);\n return [...docs].sort((a, b) => {\n for (const [field, dir] of entries) {\n const av = (a as Record<string, unknown>)[field];\n const bv = (b as Record<string, unknown>)[field];\n if (av === bv) { continue; }\n const cmp = (av as never) < (bv as never) ? -1 : 1;\n return dir === 1 ? cmp : -cmp;\n }\n return 0;\n });\n}\n\nfunction checkUniqueIndexes<T extends BaseDocument>(\n collection: Collection,\n doc: T,\n ignoreId?: string,\n): void {\n for (const idx of collection.indexes) {\n if (!idx.unique) { continue; }\n const paths = Array.isArray(idx.path) ? idx.path : [idx.path];\n const newKey = paths.map((p) => JSON.stringify((doc as unknown as Record<string, unknown>)[p])).join('|');\n for (const existing of collection.docs.values()) {\n if (ignoreId !== undefined && existing.id === ignoreId) { continue; }\n const existingKey = paths.map((p) => JSON.stringify((existing as unknown as Record<string, unknown>)[p])).join('|');\n if (existingKey === newKey) {\n throw new Error(`unique index violation on [${paths.join(', ')}]`);\n }\n }\n }\n}\n\nexport interface InMemoryDocumentDatabaseOptions {\n /** Seed clock value for new documents. Defaults to `Date.now()` at call site. */\n now?: () => number;\n}\n\n/**\n * In-memory `IDocumentDatabase` for tests.\n *\n * Storage layout: `Map<collectionName, Collection>`. Each `Collection` holds\n * a `Map<id, doc>` and a list of declared indexes (used for uniqueness checks).\n */\nexport class InMemoryDocumentDatabase implements IDocumentDatabase {\n private readonly collections = new Map<string, Collection>();\n private readonly now: () => number;\n private closed = false;\n\n constructor(opts: InMemoryDocumentDatabaseOptions = {}) {\n this.now = opts.now ?? (() => Date.now());\n }\n\n private getCollection(name: string): Collection {\n let c = this.collections.get(name);\n if (!c) {\n c = { docs: new Map(), indexes: [] };\n this.collections.set(name, c);\n }\n return c;\n }\n\n private throwIfClosed(): void {\n if (this.closed) { throw new Error('InMemoryDocumentDatabase is closed'); }\n }\n\n async ensureCollection(name: string, options?: EnsureCollectionOpts): Promise<void> {\n this.throwIfClosed();\n const c = this.getCollection(name);\n if (options?.indexes) {\n for (const idx of options.indexes) {\n const paths = Array.isArray(idx.path) ? idx.path.join(',') : idx.path;\n const exists = c.indexes.some((existing) => {\n const existingPaths = Array.isArray(existing.path) ? existing.path.join(',') : existing.path;\n return existingPaths === paths;\n });\n if (!exists) { c.indexes.push(idx); }\n }\n }\n }\n\n async find<T extends BaseDocument, P = T>(\n collection: string,\n filter: DocumentFilter<T>,\n options?: FindOptions & ProjectOpts<T, P> & SignalOpts,\n ): Promise<P[]> {\n this.throwIfClosed();\n const c = this.getCollection(collection);\n let docs = Array.from(c.docs.values()) as T[];\n docs = docs.filter((d) => matchFilter(d, filter));\n docs = sortDocs(docs, options?.sort);\n if (options?.skip) { docs = docs.slice(options.skip); }\n if (options?.limit !== undefined) { docs = docs.slice(0, options.limit); }\n return docs.map((d) => applyProjection<T, P>(clone(d), options?.project as Projection<T> | undefined));\n }\n\n findStream<T extends BaseDocument, P = T>(\n collection: string,\n filter: DocumentFilter<T>,\n options?: FindOptions & ProjectOpts<T, P> & SignalOpts & { batchSize?: number },\n ): AsyncIterable<P> {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n return {\n async *[Symbol.asyncIterator]() {\n const results = await self.find<T, P>(collection, filter, options);\n for (const r of results) { yield r; }\n },\n };\n }\n\n async findById<T extends BaseDocument>(\n collection: string,\n id: string,\n ): Promise<T | null> {\n this.throwIfClosed();\n const doc = this.getCollection(collection).docs.get(id);\n return doc ? clone(doc as T) : null;\n }\n\n async count<T extends BaseDocument>(\n collection: string,\n filter: DocumentFilter<T>,\n ): Promise<number> {\n this.throwIfClosed();\n const docs = Array.from(this.getCollection(collection).docs.values()) as T[];\n return docs.filter((d) => matchFilter(d, filter)).length;\n }\n\n async insertOne<T extends BaseDocument>(\n collection: string,\n doc: Omit<T, 'id' | 'createdAt' | 'updatedAt'>,\n ): Promise<T> {\n this.throwIfClosed();\n const c = this.getCollection(collection);\n const now = this.now();\n const full = { ...(doc as object), id: nextId(), createdAt: now, updatedAt: now } as T;\n checkUniqueIndexes(c, full);\n c.docs.set(full.id, clone(full));\n return clone(full);\n }\n\n async insertMany<T extends BaseDocument>(\n collection: string,\n docs: Array<Omit<T, 'id' | 'createdAt' | 'updatedAt'>>,\n ): Promise<T[]> {\n this.throwIfClosed();\n const c = this.getCollection(collection);\n const now = this.now();\n const staged: T[] = [];\n for (const d of docs) {\n const full = { ...(d as object), id: nextId(), createdAt: now, updatedAt: now } as T;\n checkUniqueIndexes(c, full);\n for (const s of staged) {\n try { checkUniqueIndexes({ docs: new Map([[s.id, s]]), indexes: c.indexes }, full); } catch (e) { throw e; }\n }\n staged.push(full);\n }\n for (const s of staged) { c.docs.set(s.id, clone(s)); }\n return staged.map(clone);\n }\n\n async updateOne<T extends BaseDocument>(\n collection: string,\n filter: DocumentFilter<T>,\n update: DocumentUpdate<T>,\n options?: SignalOpts & { upsert?: boolean },\n ): Promise<T | null> {\n this.throwIfClosed();\n const c = this.getCollection(collection);\n for (const existing of c.docs.values()) {\n if (matchFilter(existing as T, filter)) {\n const next = applyUpdate(existing as T, update);\n checkUniqueIndexes(c, next, existing.id);\n c.docs.set(existing.id, clone(next));\n return clone(next);\n }\n }\n if (options?.upsert) {\n const now = this.now();\n const seed: Record<string, unknown> = { id: nextId(), createdAt: now, updatedAt: now };\n for (const [k, v] of Object.entries(filter)) {\n if (k === '$and' || k === '$or') { continue; }\n if (v !== null && typeof v === 'object') { continue; }\n seed[k] = v;\n }\n const next = applyUpdate(seed as T, update);\n checkUniqueIndexes(c, next);\n c.docs.set(next.id, clone(next));\n return clone(next);\n }\n return null;\n }\n\n async updateMany<T extends BaseDocument>(\n collection: string,\n filter: DocumentFilter<T>,\n update: DocumentUpdate<T>,\n ): Promise<number> {\n this.throwIfClosed();\n const c = this.getCollection(collection);\n let n = 0;\n for (const existing of c.docs.values()) {\n if (matchFilter(existing as T, filter)) {\n const next = applyUpdate(existing as T, update);\n checkUniqueIndexes(c, next, existing.id);\n c.docs.set(existing.id, clone(next));\n n++;\n }\n }\n return n;\n }\n\n async updateById<T extends BaseDocument>(\n collection: string,\n id: string,\n update: DocumentUpdate<T>,\n ): Promise<T | null> {\n this.throwIfClosed();\n const c = this.getCollection(collection);\n const existing = c.docs.get(id);\n if (!existing) { return null; }\n const next = applyUpdate(existing as T, update);\n checkUniqueIndexes(c, next, id);\n c.docs.set(id, clone(next));\n return clone(next);\n }\n\n async deleteMany<T extends BaseDocument>(\n collection: string,\n filter: DocumentFilter<T>,\n ): Promise<number> {\n this.throwIfClosed();\n const c = this.getCollection(collection);\n let n = 0;\n for (const [id, doc] of c.docs) {\n if (matchFilter(doc as T, filter)) {\n c.docs.delete(id);\n n++;\n }\n }\n return n;\n }\n\n async deleteById(collection: string, id: string): Promise<boolean> {\n this.throwIfClosed();\n return this.getCollection(collection).docs.delete(id);\n }\n\n async bulkWrite<T extends BaseDocument>(\n collection: string,\n ops: Array<BulkOp<T>>,\n ): Promise<BulkResult> {\n this.throwIfClosed();\n const c = this.getCollection(collection);\n const snapshot = new Map(c.docs);\n const result: BulkResult = { inserted: 0, updated: 0, deleted: 0 };\n try {\n for (const op of ops) {\n if (op.type === 'insert') {\n await this.insertOne(collection, op.doc);\n result.inserted++;\n } else if (op.type === 'update') {\n const target = await this.updateOne(collection, op.filter, op.update, { upsert: op.upsert });\n if (target) { result.updated++; }\n } else {\n result.deleted += await this.deleteMany(collection, op.filter);\n }\n }\n return result;\n } catch (err) {\n c.docs.clear();\n for (const [k, v] of snapshot) { c.docs.set(k, v); }\n throw err;\n }\n }\n\n async transaction<T>(fn: (tx: IDocumentTransaction) => Promise<T>): Promise<T> {\n this.throwIfClosed();\n const snapshot = new Map<string, Map<string, BaseDocument>>();\n for (const [name, c] of this.collections) {\n snapshot.set(name, new Map(c.docs));\n }\n const tx: IDocumentTransaction = {\n find: this.find.bind(this),\n findById: this.findById.bind(this),\n count: this.count.bind(this),\n insertOne: this.insertOne.bind(this),\n insertMany: this.insertMany.bind(this),\n updateOne: this.updateOne.bind(this),\n updateMany: this.updateMany.bind(this),\n updateById: this.updateById.bind(this),\n deleteMany: this.deleteMany.bind(this),\n deleteById: this.deleteById.bind(this),\n };\n try {\n return await fn(tx);\n } catch (err) {\n for (const [name, docs] of snapshot) {\n const c = this.collections.get(name);\n if (c) { c.docs.clear(); for (const [k, v] of docs) { c.docs.set(k, v); } }\n }\n throw err;\n }\n }\n\n async ping(): Promise<{ ok: boolean; latencyMs: number }> {\n return { ok: !this.closed, latencyMs: 0 };\n }\n\n async close(): Promise<void> {\n this.closed = true;\n }\n}\n\nexport function createInMemoryDocumentDatabase(\n opts?: InMemoryDocumentDatabaseOptions,\n): InMemoryDocumentDatabase {\n return new InMemoryDocumentDatabase(opts);\n}\n","/**\n * In-memory `IKVStore` for tests. Sufficient for governance / wrapper tests:\n * full method surface, TTL respected on read (lazy expiry), atomic CAS / incr\n * via the single-threaded event loop. No background sweeper.\n */\n\nimport type { IKVStore, SetOpts, SignalOpts } from '@kb-labs/core-platform/adapters';\n\ninterface Entry {\n value: unknown;\n expiresAt: number | null;\n}\n\nexport class InMemoryKVStore implements IKVStore {\n private readonly map = new Map<string, Entry>();\n private closed = false;\n\n private throwIfClosed(): void {\n if (this.closed) { throw new Error('InMemoryKVStore is closed'); }\n }\n\n private isExpired(entry: Entry, at: number = Date.now()): boolean {\n return entry.expiresAt !== null && entry.expiresAt <= at;\n }\n\n private getLive(key: string): Entry | null {\n const e = this.map.get(key);\n if (!e) { return null; }\n if (this.isExpired(e)) {\n this.map.delete(key);\n return null;\n }\n return e;\n }\n\n async get<T = unknown>(key: string): Promise<T | null> {\n this.throwIfClosed();\n if (typeof key !== 'string' || key.length === 0) {\n throw new Error('KV key must be a non-empty string');\n }\n const e = this.getLive(key);\n return e ? (e.value as T) : null;\n }\n\n async getMany<T = unknown>(keys: string[]): Promise<Array<T | null>> {\n this.throwIfClosed();\n return Promise.all(keys.map((k) => this.get<T>(k)));\n }\n\n async set<T = unknown>(key: string, value: T, options?: SetOpts): Promise<boolean> {\n this.throwIfClosed();\n if (typeof key !== 'string' || key.length === 0) {\n throw new Error('KV key must be a non-empty string');\n }\n if (options?.ifNotExists && options?.ifExists) {\n throw new Error('ifNotExists and ifExists are mutually exclusive');\n }\n const present = this.getLive(key) !== null;\n if (options?.ifNotExists && present) { return false; }\n if (options?.ifExists && !present) { return false; }\n const expiresAt = typeof options?.ttlMs === 'number' ? Date.now() + options.ttlMs : null;\n this.map.set(key, { value, expiresAt });\n return true;\n }\n\n async setMany<T = unknown>(\n entries: Array<{ key: string; value: T; ttlMs?: number }>,\n ): Promise<void> {\n this.throwIfClosed();\n for (const e of entries) {\n if (typeof e.key !== 'string' || e.key.length === 0) {\n throw new Error('KV key must be a non-empty string');\n }\n }\n const now = Date.now();\n for (const e of entries) {\n this.map.set(e.key, {\n value: e.value,\n expiresAt: typeof e.ttlMs === 'number' ? now + e.ttlMs : null,\n });\n }\n }\n\n async setIfNotExists<T = unknown>(\n key: string,\n value: T,\n options?: { ttlMs?: number } & SignalOpts,\n ): Promise<boolean> {\n return this.set(key, value, { ttlMs: options?.ttlMs, ifNotExists: true });\n }\n\n async delete(key: string): Promise<boolean> {\n this.throwIfClosed();\n const existed = this.getLive(key) !== null;\n this.map.delete(key);\n return existed;\n }\n\n async exists(key: string): Promise<boolean> {\n this.throwIfClosed();\n return this.getLive(key) !== null;\n }\n\n async cas<T = unknown>(\n key: string,\n expected: T,\n next: T,\n options?: { ttlMs?: number } & SignalOpts,\n ): Promise<boolean> {\n this.throwIfClosed();\n const current = this.getLive(key);\n const currentValue = current ? current.value : null;\n if (JSON.stringify(currentValue) !== JSON.stringify(expected)) { return false; }\n const expiresAt = typeof options?.ttlMs === 'number'\n ? Date.now() + options.ttlMs\n : current?.expiresAt ?? null;\n this.map.set(key, { value: next, expiresAt });\n return true;\n }\n\n async incr(\n key: string,\n delta = 1,\n options?: { ttlMs?: number } & SignalOpts,\n ): Promise<number> {\n this.throwIfClosed();\n if (!Number.isFinite(delta)) {\n throw new Error('incr delta must be a finite number');\n }\n const current = this.getLive(key);\n if (current && typeof current.value !== 'number') {\n throw new Error(`incr target \"${key}\" is not a number`);\n }\n const nextValue = (current ? (current.value as number) : 0) + delta;\n const expiresAt = typeof options?.ttlMs === 'number'\n ? Date.now() + options.ttlMs\n : current?.expiresAt ?? null;\n this.map.set(key, { value: nextValue, expiresAt });\n return nextValue;\n }\n\n async ttl(key: string): Promise<number | null> {\n this.throwIfClosed();\n const e = this.getLive(key);\n if (!e || e.expiresAt === null) { return null; }\n return Math.max(0, e.expiresAt - Date.now());\n }\n\n async expire(key: string, ttlMs: number): Promise<boolean> {\n this.throwIfClosed();\n const e = this.getLive(key);\n if (!e) { return false; }\n e.expiresAt = Date.now() + ttlMs;\n return true;\n }\n\n async persist(key: string): Promise<boolean> {\n this.throwIfClosed();\n const e = this.getLive(key);\n if (!e) { return false; }\n e.expiresAt = null;\n return true;\n }\n\n scan(\n prefix = '',\n _options?: { batchSize?: number } & SignalOpts,\n ): AsyncIterable<{ key: string; value: unknown }> {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n return {\n async *[Symbol.asyncIterator]() {\n self.throwIfClosed();\n for (const [key, entry] of [...self.map.entries()]) {\n if (self.isExpired(entry)) { self.map.delete(key); continue; }\n if (!key.startsWith(prefix)) { continue; }\n yield { key, value: entry.value };\n }\n },\n };\n }\n\n async ping(): Promise<{ ok: boolean; latencyMs: number }> {\n return { ok: !this.closed, latencyMs: 0 };\n }\n\n async close(): Promise<void> {\n this.closed = true;\n }\n}\n\nexport function createInMemoryKVStore(): InMemoryKVStore {\n return new InMemoryKVStore();\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kb-labs/shared-testing-platform",
3
3
  "description": "Platform setup utilities for testing KB Labs plugins — createTestContext, setupTestPlatform, testCommand",
4
- "version": "2.119.0-canary.f8394d5fd",
4
+ "version": "2.119.1-canary.b53bbee1d",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -18,20 +18,20 @@
18
18
  ],
19
19
  "dependencies": {
20
20
  "vitest": "^3.2.6",
21
- "@kb-labs/core-platform": "2.119.0-canary.f8394d5fd",
22
- "@kb-labs/core-runtime": "2.119.0-canary.f8394d5fd",
23
- "@kb-labs/plugin-contracts": "2.119.0-canary.f8394d5fd",
24
- "@kb-labs/shared-testing": "2.119.0-canary.f8394d5fd"
21
+ "@kb-labs/core-platform": "2.119.1-canary.b53bbee1d",
22
+ "@kb-labs/core-runtime": "2.119.1-canary.b53bbee1d",
23
+ "@kb-labs/shared-testing": "2.119.1-canary.b53bbee1d",
24
+ "@kb-labs/plugin-contracts": "2.119.1-canary.b53bbee1d"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^24.3.3",
28
28
  "rimraf": "^6.0.1",
29
29
  "tsup": "^8.5.0",
30
30
  "typescript": "^5.6.3",
31
- "@kb-labs/devkit": "2.119.0-canary.f8394d5fd"
31
+ "@kb-labs/devkit": "2.119.1-canary.b53bbee1d"
32
32
  },
33
33
  "engines": {
34
- "node": ">=22.0.0",
34
+ "node": ">=24.0.0",
35
35
  "pnpm": ">=9.0.0"
36
36
  },
37
37
  "publishConfig": {