@kb-labs/shared-testing-platform 2.109.0 → 2.110.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.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -570,9 +570,9 @@ async function testCommand(handler, options = {}) {
|
|
|
570
570
|
let exitCode = 0;
|
|
571
571
|
let result;
|
|
572
572
|
let meta;
|
|
573
|
-
if (raw != null && typeof raw === "object" && "
|
|
573
|
+
if (raw != null && typeof raw === "object" && "ok" in raw) {
|
|
574
574
|
const cmdResult = raw;
|
|
575
|
-
exitCode = cmdResult.
|
|
575
|
+
exitCode = cmdResult.ok ? 0 : 1;
|
|
576
576
|
result = cmdResult.result;
|
|
577
577
|
meta = cmdResult.meta;
|
|
578
578
|
} else if (raw === void 0 || raw === null) {
|
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' && 'exitCode' in raw) {\n const cmdResult = raw as CommandResult<TResult>;\n exitCode = cmdResult.exitCode;\n result = cmdResult.result;\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":["../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"]}
|
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.
|
|
4
|
+
"version": "2.110.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
"type-check": "tsc --noEmit"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@kb-labs/core-platform": "^2.
|
|
31
|
-
"@kb-labs/core-runtime": "^2.
|
|
32
|
-
"@kb-labs/plugin-contracts": "^2.
|
|
33
|
-
"@kb-labs/shared-testing": "^2.
|
|
30
|
+
"@kb-labs/core-platform": "^2.110.0",
|
|
31
|
+
"@kb-labs/core-runtime": "^2.110.0",
|
|
32
|
+
"@kb-labs/plugin-contracts": "^2.110.0",
|
|
33
|
+
"@kb-labs/shared-testing": "^2.110.0",
|
|
34
34
|
"vitest": "^3.2.6"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|