@kb-labs/core-config 2.100.0 → 2.101.0-canary.3f3ceb8f
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 -7
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -10,13 +10,8 @@ import addFormats from 'ajv-formats';
|
|
|
10
10
|
|
|
11
11
|
var __defProp = Object.defineProperty;
|
|
12
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
-
var __esm = (fn, res
|
|
14
|
-
|
|
15
|
-
try {
|
|
16
|
-
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
17
|
-
} catch (e) {
|
|
18
|
-
throw err = [e], e;
|
|
19
|
-
}
|
|
13
|
+
var __esm = (fn, res) => function __init() {
|
|
14
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
20
15
|
};
|
|
21
16
|
var __export = (target, all) => {
|
|
22
17
|
for (var name in all)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors/kb-error.ts","../src/utils/fs-atomic.ts","../src/runtime/runtime.ts","../src/utils/env.ts","../src/utils/product-normalize.ts","../src/utils/paths.ts","../src/index.ts","../src/cache/fs-cache.ts","../src/hash/config-hash.ts","../src/api/read-config.ts","../src/api/read-kb-config.ts","../src/merge/layered-merge.ts","../src/preset/resolve-preset.ts","../src/lockfile/lockfile.ts","../src/api/product-config.ts","../src/profiles/types.ts","../src/profiles/loader.ts","../src/profiles/scope-selector.ts","../src/profiles/resolver.ts","../src/api/init-workspace.ts","../src/api/upsert-lockfile.ts","../src/validation/validate-config.ts","../src/overlay/merge.ts","../src/overlay/loader.ts","../src/api/effective-config.ts"],"names":["path","fs","fsp","stripJsonComments","YAML","findNearestConfig","isPlainObject","writeFileAtomic"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module @kb-labs/core/config/errors\n * Standardized error class for KB Labs with exit code mapping\n */\n\nexport class KbError extends Error {\n constructor(\n public code: string,\n message: string,\n public hint?: string,\n public meta?: unknown\n ) {\n super(message);\n this.name = 'KbError';\n }\n}\n\n/**\n * Maps KbError codes to CLI exit codes\n */\nexport function getExitCode(err: KbError): number {\n if (err.code === 'ERR_FORBIDDEN') {return 3;}\n if (err.code === 'ERR_CONFIG_NOT_FOUND') {return 2;}\n if (err.code === 'ERR_CONFIG_EXISTS_CONFLICT') {return 2;}\n if (err.code === 'ERR_PATH_OUTSIDE_WORKSPACE') {return 2;}\n if (err.code.startsWith('ERR_')) {return 1;}\n return 1;\n}\n\n/**\n * Error codes with their standard hints\n */\nexport const ERROR_HINTS = {\n ERR_CONFIG_NOT_FOUND: 'Create .kb/kb-labs.config.yaml or run: kb init',\n ERR_CONFIG_INVALID: 'Check configuration syntax and required fields',\n ERR_CONFIG_EXISTS_CONFLICT: 'Use --force to overwrite existing configuration',\n ERR_PATH_OUTSIDE_WORKSPACE: 'Check cwd or use a relative path within the workspace',\n ERR_PRESET_NOT_RESOLVED: 'Install the required preset package or check network connectivity',\n ERR_PROFILE_INCOMPATIBLE: 'Profile version is incompatible with current system',\n ERR_PROFILE_NOT_DEFINED: 'Add profiles[] to kb.config.json or pass --profile=<id>',\n ERR_PROFILE_RESOLVE_FAILED: 'Profile registry unavailable. Define profiles[] inside kb.config.json or use workspace presets.',\n ERR_PROFILE_EXTENDS_FAILED: 'Profile extends failed. Check extends reference or install required preset/package.',\n ERR_PROFILE_SCOPE_NOT_FOUND: 'Scope not found. Use --scope=<id> with one of the configured scopes.',\n ERR_PROFILE_SCOPE_CONFLICT: 'Multiple scopes matched. Specify --scope=<id> explicitly.',\n ERR_PROFILE_INVALID_FORMAT: 'Update profiles[] in kb.config.json (Profiles v2) or rerun your plugin setup command.',\n ERR_ARTIFACT_LIMIT_EXCEEDED: 'Remove or split large artifacts, or reduce artifact count',\n ERR_FORBIDDEN: 'Add role in policy.overrides or use preset...',\n} as const;\n\nexport type ErrorCode = keyof typeof ERROR_HINTS;\n","/**\n * @module @kb-labs/core/config/utils/fs-atomic\n * Atomic file write operations using tmp+rename pattern\n */\n\nimport { promises as fs } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { KbError } from '../errors/kb-error';\nimport { dirname } from 'node:path';\n\n/**\n * Write file atomically using tmp+rename pattern\n * This ensures that the file is never partially written in case of crashes\n */\nexport async function writeFileAtomic(\n path: string,\n data: string | Uint8Array\n): Promise<void> {\n const tmp = `${path}.tmp-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n \n try {\n // Ensure parent directory exists\n await fs.mkdir(dirname(path), { recursive: true });\n await fs.mkdir(dirname(tmp), { recursive: true });\n \n // Write to temp file\n await fs.writeFile(tmp, data);\n \n // Atomic rename\n await fs.rename(tmp, path);\n } catch (error) {\n // Clean up temp file if it exists\n try {\n await fs.unlink(tmp);\n } catch {\n // Ignore cleanup errors\n }\n throw error;\n }\n}\n\n/**\n * Ensure a path is within the workspace root\n * Throws ERR_PATH_OUTSIDE_WORKSPACE if the path escapes the workspace\n */\nexport function ensureWithinWorkspace(targetPath: string, workspaceRoot: string): void {\n const absTarget = resolve(targetPath);\n const absRoot = resolve(workspaceRoot);\n \n if (!absTarget.startsWith(absRoot)) {\n throw new KbError(\n 'ERR_PATH_OUTSIDE_WORKSPACE',\n `Refusing to write outside workspace: ${targetPath}`,\n 'Check cwd or use a relative path within the workspace',\n { targetPath, workspaceRoot }\n );\n }\n}\n\n","/**\n * @module @kb-labs/core/config/runtime\n * Infrastructure-only config pipeline (no domain keys).\n * Provides: nearest config discovery, safe JSON read with diagnostics,\n * deep merge that ignores `undefined`, and a generic resolver (defaults→file→env→cli).\n */\n\nimport { promises as fsp } from \"node:fs\";\nimport path from \"node:path\";\nimport type { Diagnostic, FindNearestConfigOpts, JsonReadResult, ProfilesConfig, KBConfig } from \"../types\";\n\n/** Find nearest config file walking up from startDir until stopDir or FS root. */\nexport async function findNearestConfig(opts: FindNearestConfigOpts): Promise<{ path: string | null; tried: string[] }> {\n const start = path.resolve(opts.startDir ?? process.cwd());\n const stop = opts.stopDir ? path.resolve(opts.stopDir) : null;\n\n const tried: string[] = [];\n let dir = start;\n\n while (true) {\n for (const name of opts.filenames) {\n const candidate = path.join(dir, name);\n tried.push(candidate);\n try {\n await fsp.access(candidate);\n return { path: candidate, tried };\n } catch { /* continue */ }\n }\n const parent = path.dirname(dir);\n if (parent === dir) { break; }\n if (stop && (dir === stop || parent === stop)) { break; }\n dir = parent;\n }\n return { path: null, tried };\n}\n\n/** Read JSON with explicit diagnostics (no silent nulls). */\n/** Strip single-line (//) and multi-line (/* *\\/) comments from a JSON string. */\nfunction stripJsonComments(src: string): string {\n let out = '';\n let i = 0;\n const len = src.length;\n while (i < len) {\n if (src[i] === '\"') {\n // String literal — copy verbatim until closing quote.\n out += src[i++];\n while (i < len) {\n if (src[i] === '\\\\') { out += src[i++]; out += src[i++]; continue; }\n out += src[i];\n if (src[i++] === '\"') {break;}\n }\n } else if (src[i] === '/' && src[i + 1] === '/') {\n // Single-line comment — skip to end of line.\n while (i < len && src[i] !== '\\n') {i++;}\n } else if (src[i] === '/' && src[i + 1] === '*') {\n // Multi-line comment — skip to *\\/\n i += 2;\n while (i < len && !(src[i] === '*' && src[i + 1] === '/')) {i++;}\n i += 2;\n } else {\n out += src[i++];\n }\n }\n // Remove trailing commas before } or ] (not valid JSON but allowed in JSONC).\n return out.replace(/,(\\s*[}\\]])/g, '$1');\n}\n\nexport async function readJsonWithDiagnostics<T = unknown>(p: string): Promise<JsonReadResult<T>> {\n const diagnostics: Diagnostic[] = [];\n try {\n const raw = await fsp.readFile(p, \"utf8\");\n try {\n const stripped = p.endsWith('.jsonc') ? stripJsonComments(raw) : raw;\n const data = JSON.parse(stripped) as T;\n return { ok: true, data, diagnostics };\n } catch (e) {\n diagnostics.push({ level: \"error\", code: \"JSON_PARSE_FAILED\", message: `Failed to parse JSON: ${p}`, detail: String(e) });\n return { ok: false, diagnostics };\n }\n } catch (e) {\n diagnostics.push({ level: \"error\", code: \"FILE_READ_FAILED\", message: `Failed to read file: ${p}`, detail: String(e) });\n return { ok: false, diagnostics };\n }\n}\n\n/** Shallow pick of defined fields only. */\nexport function pickDefined<T extends Record<string, unknown>>(obj: T | undefined): Partial<T> {\n if (!obj) { return {}; }\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n if (v !== undefined) { out[k] = v; }\n }\n return out as Partial<T>;\n}\n\n/** Deep merge (objects/arrays), ignoring `undefined` on the overlay. */\nexport function mergeDefined<T>(base: T, over?: Partial<T>): T {\n if (!over) { return base; }\n if (Array.isArray(base) && Array.isArray(over)) {\n return [...base, ...over.filter(v => v !== undefined)] as unknown as T;\n }\n if (isPlainObject(base) && isPlainObject(over)) {\n const baseObj: Record<string, unknown> = base;\n const out: Record<string, unknown> = { ...baseObj };\n for (const [k, v] of Object.entries(over)) {\n if (v === undefined) { continue; }\n if (isPlainObject(baseObj[k]) && isPlainObject(v)) {\n out[k] = mergeDefined(baseObj[k], v);\n } else if (Array.isArray(baseObj[k]) && Array.isArray(v)) {\n out[k] = mergeDefined(baseObj[k], v);\n } else {\n out[k] = v;\n }\n }\n return out as T;\n }\n // Different types → overlay wins if defined\n return (over as T) ?? base;\n}\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && Object.getPrototypeOf(v) === Object.prototype;\n}\n\n/**\n * Policy for a single top-level field during platform ← project merge.\n * - `platform-only` — ignore the project layer's value (emit warning upstream).\n * - `mergeable` — deep-merge (project overrides platform).\n * - `project-only` — take the project value as-is; platform layer is dropped.\n */\nexport type FieldMergePolicy = \"platform-only\" | \"mergeable\" | \"project-only\";\n\nexport interface MergeWithFieldPolicyResult<T> {\n /** Merged config object. */\n value: T;\n /** Top-level field names where the project layer was ignored because the field is `platform-only`. */\n ignoredProjectFields: string[];\n /** Per-field provenance: `'platform'`, `'project'`, or `'both'`. */\n sources: Record<string, \"platform\" | \"project\" | \"both\">;\n}\n\n/**\n * Merge two config layers using a per-field policy map.\n *\n * The `policy` map is keyed by top-level field names on the config object.\n * Fields missing from the map default to `mergeable` — i.e. deep-merge with\n * project overriding platform.\n */\nexport function mergeWithFieldPolicy<T extends object>(\n platform: Partial<T> | undefined,\n project: Partial<T> | undefined,\n policy: Partial<Record<keyof T, FieldMergePolicy>>,\n): MergeWithFieldPolicyResult<T> {\n const out: Record<string, unknown> = {};\n const sources: Record<string, \"platform\" | \"project\" | \"both\"> = {};\n const ignoredProjectFields: string[] = [];\n\n const keys = new Set<string>([\n ...Object.keys(platform ?? {}),\n ...Object.keys(project ?? {}),\n ]);\n\n for (const key of keys) {\n const platformValue = (platform as Record<string, unknown> | undefined)?.[key];\n const projectValue = (project as Record<string, unknown> | undefined)?.[key];\n const fieldPolicy = (policy as Record<string, FieldMergePolicy | undefined>)[key] ?? \"mergeable\";\n\n const hasPlatform = platformValue !== undefined;\n const hasProject = projectValue !== undefined;\n\n if (fieldPolicy === \"platform-only\") {\n if (hasProject) { ignoredProjectFields.push(key); }\n if (hasPlatform) {\n out[key] = platformValue;\n sources[key] = \"platform\";\n }\n continue;\n }\n\n if (fieldPolicy === \"project-only\") {\n if (hasProject) {\n out[key] = projectValue;\n sources[key] = \"project\";\n } else if (hasPlatform) {\n // Platform layer carries a value for a project-only field — drop it silently;\n // it has no semantic meaning at the platform layer.\n continue;\n }\n continue;\n }\n\n // mergeable\n if (hasPlatform && hasProject) {\n out[key] = mergeDefined(platformValue as never, projectValue as never);\n sources[key] = \"both\";\n } else if (hasPlatform) {\n out[key] = platformValue;\n sources[key] = \"platform\";\n } else if (hasProject) {\n out[key] = projectValue;\n sources[key] = \"project\";\n }\n }\n\n return { value: out as T, ignoredProjectFields, sources };\n}\n\nconst SYSTEM_DEFAULTS = {\n profiles: { rootDir: '.kb/profiles', defaultName: 'default', strict: true }\n} as const;\n\nexport interface ResolveConfigArgs<TConfig, _TEnvMap = unknown> {\n defaults: TConfig;\n fileConfig?: Partial<TConfig>;\n envMapper?: (env: NodeJS.ProcessEnv) => Partial<TConfig> | undefined; // product supplies mapping\n cliOverrides?: Partial<TConfig>;\n validate?: (cfg: TConfig) => { ok: boolean; diagnostics?: Diagnostic[] }; // product supplies validation\n}\n\n/**\n * Generic resolver: defaults → fileConfig → envMapper(process.env) → cliOverrides.\n * No domain keys inside; mapping/validation provided by the product/shared layer.\n */\nexport function resolveConfig<TConfig>(args: ResolveConfigArgs<TConfig>): { value: TConfig; diagnostics: Diagnostic[] } {\n const diagnostics: Diagnostic[] = [];\n const envPart = args.envMapper?.(process.env) ?? {};\n\n const merged = mergeDefined(\n mergeDefined(\n mergeDefined(mergeDefined(structuredClone(SYSTEM_DEFAULTS) as unknown as Partial<TConfig>, structuredClone(args.defaults)), args.fileConfig),\n envPart,\n ),\n args.cliOverrides,\n ) as TConfig;\n\n if (args.validate) {\n const res = args.validate(merged);\n if (!res.ok) {\n diagnostics.push({ level: \"error\", code: \"CONFIG_VALIDATION_FAILED\", message: \"Configuration did not pass validation.\" });\n if (res.diagnostics) { diagnostics.push(...res.diagnostics); }\n } else if (res.diagnostics?.length) {\n diagnostics.push(...res.diagnostics);\n }\n }\n\n return { value: merged, diagnostics };\n}\n\nexport { SYSTEM_DEFAULTS };\nexport type { ProfilesConfig, KBConfig };","/**\n * @module @kb-labs/core/utils/env\n * Small helpers to convert ENV strings to typed values.\n */\n\nexport function toBool(v: string | undefined): boolean | undefined {\n if (v === undefined) {return undefined;}\n const s = v.trim().toLowerCase();\n if (s === \"1\" || s === \"true\" || s === \"yes\" || s === \"on\") {return true;}\n if (s === \"0\" || s === \"false\" || s === \"no\" || s === \"off\") {return false;}\n return undefined; // unknown → let caller decide default\n}\n\nexport function toInt(v: string | undefined): number | undefined {\n if (v === undefined) {return undefined;}\n const n = Number(v);\n return Number.isFinite(n) ? n : undefined;\n}","/**\n * @module @kb-labs/core/config/utils/product-normalize\n * Product ID normalization between code (camelCase) and filesystem (kebab-case)\n */\n\nconst FS_MAP = new Map([\n ['aiReview', 'ai-review'],\n ['aiDocs', 'ai-docs'],\n ['devlink', 'devlink'],\n ['release', 'release'],\n ['devkit', 'devkit'],\n ['mind', 'mind'],\n ['workflow', 'workflow'],\n ['analytics', 'analytics'],\n]);\n\n/**\n * Convert product ID to filesystem kebab-case format\n * @param id Product ID (e.g., 'aiReview', 'mind', 'workflow')\n * @returns kebab-case string for filesystem paths\n */\nexport function toFsProduct(id: string): string {\n return FS_MAP.get(id) ?? id;\n}\n\n/**\n * Convert filesystem kebab-case key to product ID\n * @param fsKey kebab-case string from filesystem\n * @returns Product ID (camelCase if mapped, original otherwise)\n */\nexport function toConfigProduct(fsKey: string): string {\n for (const [k, v] of FS_MAP) {\n if (v === fsKey) {return k;}\n }\n return fsKey;\n}\n\n/**\n * Check if a string is a known product ID\n */\nexport function isValidProductId(value: string): boolean {\n return FS_MAP.has(value);\n}\n\n/**\n * Get all known product IDs\n */\nexport function getAllProductIds(): string[] {\n return Array.from(FS_MAP.keys());\n}\n","import path from 'node:path';\n\n/**\n * Get profiles root directory\n */\nexport function getProfilesRootDir(cwd: string): string {\n return path.join(cwd, '.kb', 'profiles');\n}\n\n/**\n * Get product configuration directory\n */\nexport function getProductConfigDir(cwd: string, fsProduct: string): string {\n return path.join(cwd, '.kb', fsProduct);\n}\n\n/**\n * Get product configuration file path\n */\nexport function getProductConfigPath(cwd: string, fsProduct: string): string {\n return path.join(getProductConfigDir(cwd, fsProduct), `${fsProduct}.config.json`);\n}\n\n/**\n * Get .kb root directory\n */\nexport function getKbRootDir(cwd: string): string {\n return path.join(cwd, '.kb');\n}\n\n/**\n * Get lockfile path\n */\nexport function getLockfilePath(cwd: string): string {\n return path.join(getKbRootDir(cwd), 'lock.json');\n}\n\n","// Core exports\nexport * from './types/index.js';\nexport * from './runtime/index.js';\nexport * from './utils/index.js';\nexport * from './utils/paths.js';\n\n// Enhanced config system exports\nexport * from './errors/kb-error.js';\nexport * from './cache/fs-cache.js';\nexport * from './hash/config-hash.js';\nexport * from './api/read-config.js';\nexport * from './api/read-kb-config.js';\nexport * from './merge/layered-merge.js';\nexport * from './api/product-config.js';\nexport * from './preset/resolve-preset.js';\nexport * from './lockfile/lockfile.js';\nexport * from './types/preset.js';\nexport * from './profiles/types.js';\nexport * from './profiles/loader.js';\nexport * from './profiles/scope-selector.js';\nexport * from './profiles/resolver.js';\n\n// Init system exports\nexport * from './types/init.js';\nexport * from './api/init-workspace.js';\nexport * from './api/upsert-lockfile.js';\nexport * from './utils/fs-atomic.js';\n\n// Re-export clearCaches for convenience\nexport { clearCaches } from './cache/fs-cache.js';\n\n// Validation API\nexport { validateProductConfig, registerProductSchema } from './validation/validate-config.js';\n\n// Overlay primitives (`mergeOverlay`, `loadOverlays`) used by the layered\n// loader below and by services that need raw access.\nexport * from './overlay/index.js';\n\n// Canonical layered config loader: platform → project → project overlays.\n// Use this when reading the raw effective config (e.g. plugin sections).\nexport * from './api/effective-config.js';\n","/**\n * @module @kb-labs/core/config/cache/fs-cache\n * LRU cache for filesystem reads with clearCaches() support\n */\n\nimport { promises as fsp } from 'node:fs';\n\ninterface CacheEntry {\n data: unknown;\n mtime: number;\n size: number;\n timestamp: number;\n}\n\ninterface CacheKey {\n absPath: string;\n mtime: number;\n size: number;\n}\n\nclass LRUCache<K, V> {\n private cache = new Map<K, V>();\n private maxSize: number;\n\n constructor(maxSize = 100) {\n this.maxSize = maxSize;\n }\n\n get(key: K): V | undefined {\n const value = this.cache.get(key);\n if (value !== undefined) {\n // Move to end (most recently used)\n this.cache.delete(key);\n this.cache.set(key, value);\n }\n return value;\n }\n\n set(key: K, value: V): void {\n if (this.cache.has(key)) {\n this.cache.delete(key);\n } else if (this.cache.size >= this.maxSize) {\n // Remove least recently used (first item)\n const firstKey = this.cache.keys().next().value;\n if (firstKey !== undefined) {\n this.cache.delete(firstKey);\n }\n }\n this.cache.set(key, value);\n }\n\n delete(key: K): boolean {\n return this.cache.delete(key);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n size(): number {\n return this.cache.size;\n }\n}\n\nclass FSCache {\n private cache = new LRUCache<string, CacheEntry>(100);\n private keyCache = new LRUCache<string, CacheKey>(100);\n\n /**\n * Generate cache key from file path, mtime, and size\n */\n private async getCacheKey(absPath: string): Promise<CacheKey> {\n const keyStr = `key:${absPath}`;\n let key = this.keyCache.get(keyStr);\n \n if (!key) {\n try {\n const stats = await fsp.stat(absPath);\n key = {\n absPath,\n mtime: stats.mtime.getTime(),\n size: stats.size,\n };\n this.keyCache.set(keyStr, key);\n } catch {\n // File doesn't exist or can't be read\n return { absPath, mtime: 0, size: 0 };\n }\n }\n \n return key;\n }\n\n /**\n * Get cached file data if available and not stale\n */\n async get(absPath: string): Promise<unknown> {\n const key = await this.getCacheKey(absPath);\n const cacheKey = `${key.absPath}|${key.mtime}|${key.size}`;\n \n const entry = this.cache.get(cacheKey);\n if (!entry) {\n return null;\n }\n\n // Check if file has been modified since cache\n try {\n const stats = await fsp.stat(absPath);\n if (stats.mtime.getTime() !== key.mtime || stats.size !== key.size) {\n // File changed, remove from cache and update key cache\n this.cache.delete(cacheKey);\n // Update the key cache with new stats\n const newKey = {\n absPath,\n mtime: stats.mtime.getTime(),\n size: stats.size,\n };\n this.keyCache.set(`key:${absPath}`, newKey);\n return null;\n }\n } catch {\n // File no longer exists\n this.cache.delete(cacheKey);\n return null;\n }\n\n return entry.data;\n }\n\n /**\n * Cache file data\n */\n async set(absPath: string, data: unknown): Promise<void> {\n const key = await this.getCacheKey(absPath);\n const cacheKey = `${key.absPath}|${key.mtime}|${key.size}`;\n \n this.cache.set(cacheKey, {\n data,\n mtime: key.mtime,\n size: key.size,\n timestamp: Date.now(),\n });\n }\n\n /**\n * Clear all caches\n */\n clearCaches(): void {\n this.cache.clear();\n this.keyCache.clear();\n }\n\n /**\n * Get cache statistics\n */\n getStats(): { size: number; keySize: number } {\n return {\n size: this.cache.size(),\n keySize: this.keyCache.size(),\n };\n }\n}\n\n// Singleton instance\nconst fsCache = new FSCache();\n\nexport { fsCache, FSCache };\n\n/**\n * Clear all filesystem caches\n */\nexport function clearCaches(): void {\n fsCache.clearCaches();\n}\n","/**\n * @module @kb-labs/core/config/hash/config-hash\n * SHA256 hash computation for configuration objects (lockfile generation)\n */\n\nimport { createHash } from 'node:crypto';\n\n/**\n * Compute SHA256 hash of a configuration object\n * @param obj Configuration object to hash\n * @returns SHA256 hash as hex string\n */\nexport function computeConfigHash(obj: unknown): string {\n // Normalize object for consistent hashing\n const normalized = normalizeForHash(obj);\n const json = JSON.stringify(normalized, null, 0);\n return createHash('sha256').update(json, 'utf8').digest('hex');\n}\n\n/**\n * Normalize object for consistent hashing\n * - Sort object keys\n * - Remove undefined values\n * - Convert to stable representation\n */\nfunction normalizeForHash(obj: unknown): unknown {\n if (obj === null || obj === undefined) {\n return null;\n }\n\n if (typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(normalizeForHash);\n }\n\n // Sort object keys for consistent ordering\n const record = obj as Record<string, unknown>;\n const sortedKeys = Object.keys(record).sort();\n const normalized: Record<string, unknown> = {};\n\n for (const key of sortedKeys) {\n const value = record[key];\n if (value !== undefined) {\n normalized[key] = normalizeForHash(value);\n }\n }\n\n return normalized;\n}\n\n/**\n * Compute hash for multiple config objects\n * @param configs Array of config objects\n * @returns Combined SHA256 hash\n */\nexport function computeConfigsHash(configs: Record<string, unknown>[]): string {\n const combined = configs.reduce<Record<string, unknown>>((acc, config) => {\n return { ...acc, ...config };\n }, {});\n return computeConfigHash(combined);\n}\n","/**\n * @module @kb-labs/core/config/api/read-config\n * Enhanced config file reading with YAML support and find-up\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\nimport { extname } from 'node:path';\nimport YAML from 'yaml';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\nimport { fsCache } from '../cache/fs-cache';\n\nexport interface ConfigFileResult {\n data: unknown;\n format: 'json' | 'yaml';\n path: string;\n}\n\nfunction stripJsonComments(src: string): string {\n let out = '';\n let i = 0;\n const len = src.length;\n while (i < len) {\n if (src[i] === '\"') {\n out += src[i++];\n while (i < len) {\n if (src[i] === '\\\\') { out += src[i++]; out += src[i++]; continue; }\n out += src[i];\n if (src[i++] === '\"') { break; }\n }\n } else if (src[i] === '/' && src[i + 1] === '/') {\n while (i < len && src[i] !== '\\n') { i++; }\n } else if (src[i] === '/' && src[i + 1] === '*') {\n i += 2;\n while (i < len && !(src[i] === '*' && src[i + 1] === '/')) { i++; }\n i += 2;\n } else {\n out += src[i++];\n }\n }\n return out.replace(/,(\\s*[}\\]])/g, '$1');\n}\n\n/**\n * Read config file with format detection and caching\n */\nexport async function readConfigFile(filePath: string): Promise<ConfigFileResult> {\n const absPath = path.resolve(filePath);\n \n // Check cache first\n const cached = await fsCache.get(absPath);\n if (cached !== null && cached !== undefined) {\n return cached as ConfigFileResult;\n }\n\n try {\n const raw = await fsp.readFile(absPath, 'utf-8');\n const ext = extname(absPath).toLowerCase();\n \n let data: unknown;\n let format: 'json' | 'yaml';\n \n if (ext === '.yaml' || ext === '.yml') {\n data = YAML.parse(raw);\n format = 'yaml';\n } else {\n const jsonSource = ext === '.jsonc' ? stripJsonComments(raw) : raw;\n data = JSON.parse(jsonSource);\n format = 'json';\n }\n \n const result: ConfigFileResult = { data, format, path: absPath };\n \n // Cache the result\n await fsCache.set(absPath, result);\n \n return result;\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new KbError(\n 'ERR_CONFIG_INVALID',\n `Failed to parse config file: ${filePath}`,\n ERROR_HINTS.ERR_CONFIG_INVALID,\n { filePath, error: error.message }\n );\n }\n \n throw new KbError(\n 'ERR_CONFIG_NOT_FOUND',\n `Config file not found: ${filePath}`,\n ERROR_HINTS.ERR_CONFIG_NOT_FOUND,\n { filePath, error: error instanceof Error ? error.message : String(error) }\n );\n }\n}\n\n/**\n * Find nearest config file walking up from startDir to git root\n * Prioritizes .kb/kb-labs.config.* over kb-labs.config.* for backward compatibility\n */\nasync function findNearestConfig(\n startDir: string,\n filenames: string[] = []\n): Promise<{ path: string | null; tried: string[] }> {\n const start = path.resolve(startDir);\n const tried: string[] = [];\n let dir = start;\n\n // Default filenames if not provided: prioritize .kb/ location\n const defaultFilenames = [\n '.kb/kb.config.yaml',\n '.kb/kb.config.yml',\n '.kb/kb.config.json',\n ];\n const searchFilenames = filenames.length > 0 ? filenames : defaultFilenames;\n\n while (true) {\n for (const filename of searchFilenames) {\n const candidate = path.join(dir, filename);\n tried.push(candidate);\n \n try {\n await fsp.access(candidate);\n return { path: candidate, tried };\n } catch {\n // Continue to next filename\n }\n }\n \n const parent = path.dirname(dir);\n if (parent === dir) {\n // Reached filesystem root\n break;\n }\n dir = parent;\n }\n \n return { path: null, tried };\n}\n\n/**\n * Find git root directory\n */\nexport async function findGitRoot(startDir: string): Promise<string | null> {\n let dir = path.resolve(startDir);\n \n while (true) {\n try {\n await fsp.access(path.join(dir, '.git'));\n return dir;\n } catch {\n const parent = path.dirname(dir);\n if (parent === dir) {\n break;\n }\n dir = parent;\n }\n }\n \n return null;\n}\n\n/**\n * Read workspace config with find-up to git root\n */\nexport async function readWorkspaceConfig(cwd: string): Promise<ConfigFileResult | null> {\n const { path: configPath } = await findNearestConfig(cwd);\n \n if (!configPath) {\n return null;\n }\n \n return readConfigFile(configPath);\n}\n","/**\n * @module @kb-labs/core-config/api/read-kb-config\n * Find + read kb.config.* files (product-level workspace config).\n */\n\nimport path from 'node:path';\nimport { promises as fsp } from 'node:fs';\nimport { findGitRoot, readConfigFile, type ConfigFileResult } from './read-config';\n\nconst KB_CONFIG_FILENAMES = [\n 'kb.config.jsonc',\n 'kb.config.json',\n 'kb.config.yaml',\n 'kb.config.yml',\n '.kb/kb.config.jsonc',\n '.kb/kb.config.json',\n '.kb/kb.config.yaml',\n '.kb/kb.config.yml',\n];\n\nexport type KbConfigResult = ConfigFileResult;\n\nexport async function findKbConfig(\n cwd: string,\n filenames: string[] = KB_CONFIG_FILENAMES\n): Promise<{ path: string | null; tried: string[] }> {\n const tried: string[] = [];\n const gitRoot = await findGitRoot(cwd);\n const stopDir = gitRoot || path.parse(cwd).root;\n let dir = path.resolve(cwd);\n\n while (true) {\n for (const filename of filenames) {\n const candidate = path.join(dir, filename);\n tried.push(candidate);\n try {\n await fsp.access(candidate);\n return { path: candidate, tried };\n } catch {\n // continue\n }\n }\n\n if (dir === stopDir || dir === path.dirname(dir)) {\n break;\n }\n\n dir = path.dirname(dir);\n }\n\n return { path: null, tried };\n}\n\nexport async function readKbConfig(cwd: string): Promise<KbConfigResult | null> {\n const { path } = await findKbConfig(cwd);\n if (!path) {\n return null;\n }\n return readConfigFile(path);\n}\n\n","/**\n * @module @kb-labs/core/config/merge/layered-merge\n * Layered merge with trace for configuration layers\n */\n\nimport type { ConfigLayer, MergeTrace } from '../types';\n\nexport interface LayeredMergeResult {\n merged: Record<string, unknown>;\n trace: MergeTrace[];\n}\n\n/**\n * Merge configuration layers with detailed trace\n * Arrays are overwritten (not merged)\n * Objects are deeply merged\n */\nexport function layeredMergeWithTrace(layers: ConfigLayer[]): LayeredMergeResult {\n const trace: MergeTrace[] = [];\n \n const isPlainObject = (v: unknown): v is Record<string, unknown> =>\n v !== null && typeof v === 'object' && !Array.isArray(v) && Object.getPrototypeOf(v) === Object.prototype;\n\n const merge = (base: unknown, overlay: unknown, layer: ConfigLayer, path: string[] = []): unknown => {\n // Handle array overwrite\n if (Array.isArray(base) && Array.isArray(overlay)) {\n trace.push({\n path: path.join('.'),\n source: layer.source,\n type: 'overwriteArray',\n layer: layer.label,\n profileRef: layer.source.includes('profile') ? extractProfileRef(layer.source) : undefined,\n presetRef: layer.source.includes('preset') ? extractPresetRef(layer.source) : undefined,\n version: extractVersion(layer.source),\n });\n return overlay;\n }\n \n // Handle object merge\n if (isPlainObject(base) && isPlainObject(overlay)) {\n const result: Record<string, unknown> = { ...base };\n \n for (const [key, value] of Object.entries(overlay)) {\n if (key in base) {\n result[key] = merge(base[key], value, layer, [...path, key]);\n } else {\n trace.push({\n path: [...path, key].join('.'),\n source: layer.source,\n type: 'set',\n layer: layer.label,\n profileRef: layer.source.includes('profile') ? extractProfileRef(layer.source) : undefined,\n presetRef: layer.source.includes('preset') ? extractPresetRef(layer.source) : undefined,\n version: extractVersion(layer.source),\n });\n result[key] = value;\n }\n }\n \n return result;\n }\n \n // Different types or primitive values - overlay wins\n trace.push({\n path: path.join('.'),\n source: layer.source,\n type: 'set',\n layer: layer.label,\n profileRef: layer.source.includes('profile') ? extractProfileRef(layer.source) : undefined,\n presetRef: layer.source.includes('preset') ? extractPresetRef(layer.source) : undefined,\n version: extractVersion(layer.source),\n });\n \n return overlay ?? base;\n };\n \n const merged = layers.reduce<Record<string, unknown>>((acc, layer) => {\n return merge(acc, layer.value, layer) as Record<string, unknown>;\n }, {});\n\n return { merged, trace };\n}\n\n/**\n * Extract profile ref from source string\n */\nfunction extractProfileRef(source: string): string | undefined {\n const match = source.match(/profile[^:]*:[^@]+@(.+)/);\n return match?.[1];\n}\n\n/**\n * Extract preset ref from source string\n */\nfunction extractPresetRef(source: string): string | undefined {\n const match = source.match(/preset[^:]*:@(.+)/);\n return match?.[1];\n}\n\n/**\n * Extract version from source string\n */\nfunction extractVersion(source: string): string | undefined {\n const match = source.match(/@([^:]+)/);\n return match?.[1];\n}\n","/**\n * @module @kb-labs/core/config/preset/resolve-preset\n * Org preset resolution with offline-first npm package loading\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\nimport { toFsProduct } from '../utils/product-normalize';\n\nexport interface PresetInfo {\n name: string;\n version: string;\n path: string;\n config: Record<string, unknown>;\n}\n\n/**\n * Resolve org preset package (offline-first)\n */\nexport async function resolvePreset(\n presetRef: string,\n cwd: string\n): Promise<PresetInfo> {\n // Parse preset reference (e.g., \"@kb-labs/org-preset@1.3.2\")\n const [name, version] = parsePresetRef(presetRef);\n \n // Try local node_modules first (offline-first)\n const localPath = path.join(cwd, 'node_modules', name);\n try {\n const presetInfo = await loadPresetFromPath(localPath, name, version);\n if (presetInfo) {\n return presetInfo;\n }\n } catch {\n // Local preset not found, continue to network resolution\n }\n \n // Try network resolution (this would be implemented with npm/pnpm APIs)\n // For now, we'll throw an error if local resolution fails\n throw new KbError(\n 'ERR_PRESET_NOT_RESOLVED',\n `Preset not found: ${presetRef}`,\n ERROR_HINTS.ERR_PRESET_NOT_RESOLVED,\n { presetRef, cwd }\n );\n}\n\n/**\n * Parse preset reference into name and version\n */\nfunction parsePresetRef(presetRef: string): [string, string] {\n const atIndex = presetRef.lastIndexOf('@');\n if (atIndex === -1) {\n throw new KbError(\n 'ERR_PRESET_REF_INVALID',\n `Invalid preset reference: ${presetRef}`,\n 'Preset references must include version (e.g., @kb-labs/org-preset@1.3.2)',\n { presetRef }\n );\n }\n \n const name = presetRef.substring(0, atIndex);\n const version = presetRef.substring(atIndex + 1);\n \n if (!name || !version) {\n throw new KbError(\n 'ERR_PRESET_REF_INVALID',\n `Invalid preset reference: ${presetRef}`,\n 'Preset references must include both name and version',\n { presetRef }\n );\n }\n \n return [name, version];\n}\n\n/**\n * Load preset from local path\n */\nasync function loadPresetFromPath(\n presetPath: string,\n name: string,\n version: string\n): Promise<PresetInfo | null> {\n try {\n // Check if preset directory exists\n await fsp.access(presetPath);\n \n // Load package.json to verify version\n const packageJsonPath = path.join(presetPath, 'package.json');\n const packageJson = JSON.parse(await fsp.readFile(packageJsonPath, 'utf-8'));\n \n // Verify version matches (supports semver ranges)\n if (!versionMatches(packageJson.version, version)) {\n return null;\n }\n \n // Load preset config\n const configPath = path.join(presetPath, 'config.defaults.json');\n const config = JSON.parse(await fsp.readFile(configPath, 'utf-8'));\n \n return {\n name,\n version: packageJson.version,\n path: presetPath,\n config,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Check if version matches (simple semver range support)\n */\nfunction versionMatches(actualVersion: string, requiredVersion: string): boolean {\n // Simple exact match for now\n // TODO: Implement proper semver range matching\n if (requiredVersion.startsWith('^')) {\n const major = requiredVersion.substring(1).split('.')[0];\n const actualMajor = actualVersion.split('.')[0];\n return major === actualMajor;\n }\n \n return actualVersion === requiredVersion;\n}\n\n/**\n * Get preset config for a specific product\n */\nexport function getPresetConfigForProduct(\n preset: PresetInfo,\n product: string\n): Record<string, unknown> {\n const fsProduct = toFsProduct(product);\n const products = preset.config['products'];\n if (products && typeof products === 'object' && !Array.isArray(products)) {\n return (products as Record<string, Record<string, unknown>>)[fsProduct] ?? {};\n }\n return {};\n}\n\n/**\n * Get preset metadata\n */\nexport function getPresetMetadata(preset: PresetInfo): {\n name: string;\n version: string;\n path: string;\n products: string[];\n} {\n return {\n name: preset.name,\n version: preset.version,\n path: preset.path,\n products: Object.keys(preset.config.products || {}),\n };\n}\n","/**\n * @module @kb-labs/core/config/lockfile/lockfile\n * Lockfile generation and management\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\n// Note: KbError and ERROR_HINTS are available if needed for future error handling\nimport { computeConfigHash } from '../hash/config-hash';\nimport { toFsProduct } from '../utils/product-normalize';\n\nexport interface LockfileData {\n $schema?: string;\n schemaVersion: '1.0';\n orgPreset?: string;\n profile?: string;\n policyBundle?: string;\n hashes: Record<string, string>;\n generatedAt: string;\n}\n\n/**\n * Read lockfile from workspace\n */\nexport async function readLockfile(cwd: string): Promise<LockfileData | null> {\n const lockfilePath = path.join(cwd, '.kb', 'lock.json');\n \n try {\n const lockfileData = await fsp.readFile(lockfilePath, 'utf-8');\n return JSON.parse(lockfileData) as LockfileData;\n } catch {\n // Try old location for backward compatibility\n const oldLockfilePath = path.join(cwd, '.kb', 'lockfile.json');\n try {\n const lockfileData = await fsp.readFile(oldLockfilePath, 'utf-8');\n return JSON.parse(lockfileData) as LockfileData;\n } catch {\n return null;\n }\n }\n}\n\n/**\n * Stable JSON serialization with sorted keys for predictable diffs\n */\nfunction stableStringify(obj: unknown, space = 2): string {\n return JSON.stringify(obj, (key, value: unknown) => {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return Object.keys(value as Record<string, unknown>)\n .sort()\n .reduce((sorted: Record<string, unknown>, k) => {\n sorted[k] = (value as Record<string, unknown>)[k];\n return sorted;\n }, {});\n }\n return value;\n }, space);\n}\n\n/**\n * Write lockfile to workspace\n */\nexport async function writeLockfile(\n cwd: string,\n lockfileData: LockfileData\n): Promise<void> {\n const lockfileDir = path.join(cwd, '.kb');\n const lockfilePath = path.join(lockfileDir, 'lock.json');\n \n // Ensure .kb directory exists\n await fsp.mkdir(lockfileDir, { recursive: true });\n \n // Add schema if not present\n if (!lockfileData.$schema) {\n lockfileData.$schema = 'https://schemas.kb-labs.dev/lockfile.schema.json';\n }\n \n // Use atomic write with stable key ordering\n const { writeFileAtomic } = await import('../utils/fs-atomic');\n await writeFileAtomic(lockfilePath, stableStringify(lockfileData, 2) + '\\n');\n}\n\n/**\n * Update lockfile with new hashes\n */\nexport async function updateLockfile(\n cwd: string,\n updates: {\n orgPreset?: string;\n profile?: string;\n policyBundle?: string;\n configHashes?: Record<string, unknown>;\n }\n): Promise<LockfileData> {\n const existing = await readLockfile(cwd);\n \n const lockfileData: LockfileData = {\n $schema: 'https://schemas.kb-labs.dev/lockfile.schema.json',\n schemaVersion: '1.0',\n orgPreset: updates.orgPreset || existing?.orgPreset,\n profile: updates.profile || existing?.profile,\n policyBundle: updates.policyBundle || existing?.policyBundle,\n hashes: { ...existing?.hashes },\n generatedAt: new Date().toISOString(),\n };\n \n // Update config hashes\n if (updates.configHashes) {\n for (const [product, config] of Object.entries(updates.configHashes)) {\n const fsProduct = toFsProduct(product as string);\n const hash = computeConfigHash(config);\n lockfileData.hashes[fsProduct] = hash;\n }\n }\n \n await writeLockfile(cwd, lockfileData);\n return lockfileData;\n}\n\n/**\n * Get config hash for a product\n */\nexport function getLockfileConfigHash(product: string, config: unknown): string {\n return computeConfigHash(config);\n}\n\n/**\n * Check if lockfile is up to date\n */\nexport async function isLockfileUpToDate(\n cwd: string,\n configs: Record<string, unknown>\n): Promise<boolean> {\n const lockfile = await readLockfile(cwd);\n if (!lockfile) {\n return false;\n }\n \n for (const [product, config] of Object.entries(configs)) {\n const fsProduct = toFsProduct(product as string);\n const currentHash = computeConfigHash(config);\n const lockfileHash = lockfile.hashes[fsProduct];\n \n if (currentHash !== lockfileHash) {\n return false;\n }\n }\n \n return true;\n}\n\n/**\n * Validate lockfile schema\n */\nexport function validateLockfile(lockfileData: unknown): lockfileData is LockfileData {\n if (!lockfileData || typeof lockfileData !== 'object') {\n return false;\n }\n\n const data = lockfileData as Record<string, unknown>;\n\n if (data['schemaVersion'] !== '1.0') {\n return false;\n }\n\n if (!data['hashes'] || typeof data['hashes'] !== 'object') {\n return false;\n }\n\n if (!data['generatedAt'] || typeof data['generatedAt'] !== 'string') {\n return false;\n }\n\n return true;\n}\n\n/**\n * Get lockfile statistics\n */\nexport function getLockfileStats(lockfileData: LockfileData): {\n productCount: number;\n hasOrgPreset: boolean;\n hasProfile: boolean;\n hasPolicyBundle: boolean;\n generatedAt: Date;\n} {\n return {\n productCount: Object.keys(lockfileData.hashes).length,\n hasOrgPreset: !!lockfileData.orgPreset,\n hasProfile: !!lockfileData.profile,\n hasPolicyBundle: !!lockfileData.policyBundle,\n generatedAt: new Date(lockfileData.generatedAt),\n };\n}\n","/**\n * @module @kb-labs/core/config/api/product-config\n * High-level product configuration resolver with layered merge\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\n// Note: KbError and ERROR_HINTS are available if needed for future error handling\nimport { readWorkspaceConfig } from './read-config';\nimport { layeredMergeWithTrace } from '../merge/layered-merge';\nimport { toFsProduct } from '../utils/product-normalize';\nimport type { ResolveOptions, ProductConfigResult, ConfigLayer } from '../types';\nimport { computeConfigHash } from '../hash/config-hash';\nimport { resolvePreset, getPresetConfigForProduct } from '../preset/resolve-preset';\nimport { updateLockfile } from '../lockfile/lockfile';\n\n/**\n * Get product configuration with layered merge and trace\n */\nexport async function getProductConfig<T = Record<string, unknown>>(\n opts: ResolveOptions,\n schema: unknown\n): Promise<ProductConfigResult<T>> {\n const { cwd, product, cli = {}, writeFinal = false, profileLayer } = opts;\n const fsProduct = toFsProduct(product);\n \n // Read workspace configuration\n const workspaceConfig = await readWorkspaceConfig(cwd);\n \n // Build configuration layers\n const layers: ConfigLayer[] = [];\n \n // 1. Runtime defaults\n layers.push({\n label: 'runtime',\n value: getRuntimeDefaults(product),\n source: 'runtime:defaults',\n });\n \n // 2. Profile defaults\n if (profileLayer && profileLayer.products) {\n // profileLayer.products is already the product-specific overlay (not a map of products)\n const profileOverlay = profileLayer.products as Record<string, unknown>;\n\n layers.push({\n label: 'profile',\n value: profileOverlay,\n source: profileLayer.source,\n });\n\n if (profileLayer.scope && profileLayer.scope.products) {\n // profileLayer.scope.products is already the scope-specific overlay\n const scopeOverlay = profileLayer.scope.products as Record<string, unknown>;\n layers.push({\n label: 'profile-scope',\n value: scopeOverlay,\n source: profileLayer.scope.source,\n });\n }\n } else {\n layers.push({\n label: 'profile',\n value: {},\n source: 'profile:none',\n });\n }\n \n // 3. Preset defaults (resolve org preset if configured)\n let presetConfig = {};\n if (workspaceConfig?.data) {\n const workspaceData = workspaceConfig.data as Record<string, unknown>;\n if (workspaceData['$extends']) {\n try {\n const preset = await resolvePreset(workspaceData['$extends'] as string, cwd);\n presetConfig = getPresetConfigForProduct(preset, product);\n \n layers.push({\n label: 'preset',\n value: presetConfig,\n source: `preset:${workspaceData['$extends']}`,\n });\n } catch (error) {\n // Preset resolution failed, continue without preset\n console.warn(`Warning: Could not resolve preset ${workspaceData['$extends']}:`, error);\n }\n }\n }\n \n if (Object.keys(presetConfig).length === 0) {\n layers.push({\n label: 'preset',\n value: {},\n source: 'preset:none',\n });\n }\n \n // 4. Workspace config\n if (workspaceConfig?.data) {\n const workspaceData = (workspaceConfig.data as { products?: Record<string, unknown> })?.products?.[fsProduct] ?? {};\n layers.push({\n label: 'workspace',\n value: workspaceData,\n source: 'workspace:kb-labs.config',\n });\n }\n \n // 5. Local config (.kb/<product>/<product>.config.json)\n const localConfigPath = path.join(cwd, '.kb', fsProduct, `${fsProduct}.config.json`);\n try {\n const localConfig = await fsp.readFile(localConfigPath, 'utf-8');\n const localData = JSON.parse(localConfig);\n layers.push({\n label: 'local',\n value: localData,\n source: `local:.kb/${fsProduct}/${fsProduct}.config.json`,\n });\n } catch {\n // Local config is optional\n }\n \n // 6. CLI overrides\n if (Object.keys(cli).length > 0) {\n layers.push({\n label: 'cli',\n value: cli,\n source: 'cli:overrides',\n });\n }\n \n // Merge all layers\n const { merged, trace } = layeredMergeWithTrace(layers);\n \n // Validate against schema if provided\n if (schema) {\n // Schema validation will be implemented with AJV\n // For now, we'll skip validation\n }\n \n // Write final config if requested\n if (writeFinal) {\n await writeFinalConfig(cwd, fsProduct, merged);\n }\n \n // Update lockfile with config hash\n try {\n const configHash = computeConfigHash(merged);\n \n const configHashes: Record<string, unknown> = {};\n configHashes[product] = configHash;\n await updateLockfile(cwd, {\n configHashes\n });\n } catch (error) {\n // Lockfile update is optional, don't fail the config resolution\n console.warn('Warning: Could not update lockfile:', error);\n }\n \n return {\n config: merged as T,\n trace,\n };\n}\n\n/**\n * Explain product configuration (trace only)\n */\nexport async function explainProductConfig(\n opts: Omit<ResolveOptions, 'writeFinal'>,\n schema: unknown\n): Promise<{ trace: import('../types').MergeTrace[] }> {\n const result = await getProductConfig(opts, schema);\n return { trace: result.trace };\n}\n\n/**\n * Get runtime defaults for a product\n */\nfunction getRuntimeDefaults(product: string): Record<string, unknown> {\n const defaults: Record<string, Record<string, unknown>> = {\n devlink: {\n watch: true,\n build: true,\n },\n release: {\n registry: 'https://registry.npmjs.org',\n strategy: 'semver',\n bump: 'auto',\n strict: true,\n verify: ['audit', 'build', 'tests'],\n publish: { npm: true, github: false },\n rollback: { enabled: true, maxHistory: 5 },\n output: { json: true, md: true, text: true },\n changelog: {\n enabled: true,\n includeTypes: ['feat', 'fix', 'perf', 'refactor', 'revert'],\n excludeTypes: ['chore', 'ci'],\n ignoreAuthors: ['dependabot', 'renovate', 'github-actions[bot]', '*[bot]'],\n collapseMerges: true,\n collapseReverts: true,\n preferMergeSummary: true,\n bumpStrategy: 'independent',\n workspace: true,\n perPackage: true,\n format: 'both',\n level: 'standard',\n locale: 'en',\n cache: true,\n requireAudit: true,\n requireSignedTags: false,\n redactPatterns: ['(?i)token=\\\\w+', '(?i)apikey=\\\\w+', '(https?://[^\\\\s]+@[^\\\\s]+)', '(gh[ps]_[A-Za-z0-9_]+)'],\n maxBodyLength: 500,\n ignoreSubmodules: true,\n },\n git: {\n provider: 'auto',\n autoUnshallow: false,\n },\n },\n aiReview: {\n enabled: true,\n rules: [],\n },\n aiDocs: {\n enabled: true,\n templates: [],\n },\n devkit: {\n sync: true,\n check: true,\n },\n analytics: {\n enabled: true,\n sinks: [],\n buffer: {},\n },\n };\n \n return defaults[product] || {};\n}\n\n/**\n * Write final configuration to .kb/<product>/<product>.config.json\n */\nasync function writeFinalConfig(cwd: string, fsProduct: string, config: Record<string, unknown>): Promise<void> {\n const configDir = path.join(cwd, '.kb', fsProduct);\n const configPath = path.join(configDir, `${fsProduct}.config.json`);\n \n // Ensure directory exists\n await fsp.mkdir(configDir, { recursive: true });\n \n // Write config with schema version\n const finalConfig = {\n $schema: 'https://schemas.kb-labs.dev/config.schema.json',\n schemaVersion: '1.0',\n ...config,\n };\n \n await fsp.writeFile(configPath, JSON.stringify(finalConfig, null, 2));\n}\n\n/**\n * Get configuration hash for lockfile\n */\nexport function getConfigHash(config: unknown): string {\n return computeConfigHash(config);\n}\n","/**\n * @module @kb-labs/core-config/profiles/types\n * Shared ProfileV2 + BundleProfile types and Zod schemas.\n */\n\nimport { z } from 'zod';\n\nconst GlobSchema = z.string().min(1, 'Glob pattern must be a non-empty string');\nconst ProductOverridesSchema = z.record(z.string(), z.unknown());\nconst ProductsMapSchema = z.record(z.string(), ProductOverridesSchema);\n\nexport const ScopeV2Schema = z.object({\n id: z.string().min(1, 'Scope id is required'),\n label: z.string().optional(),\n description: z.string().optional(),\n include: z.array(GlobSchema).min(1, 'include requires at least one glob'),\n exclude: z.array(GlobSchema).optional(),\n products: ProductsMapSchema.optional(),\n default: z.boolean().optional(),\n});\nexport type ScopeV2 = z.infer<typeof ScopeV2Schema>;\n\nexport const ProfileMetaSchema = z.object({\n version: z.string().optional(),\n tags: z.array(z.string()).optional(),\n deprecated: z.boolean().optional(),\n owner: z.string().optional(),\n}).strict();\nexport type ProfileMeta = z.infer<typeof ProfileMetaSchema>;\n\nexport const ProfileV2Schema = z.object({\n id: z.string().min(1, 'Profile id is required'),\n label: z.string().optional(),\n description: z.string().optional(),\n extends: z.string().min(1, 'extends must reference another profile id or preset').optional(),\n scopes: z.array(ScopeV2Schema).optional(),\n products: ProductsMapSchema.optional(),\n meta: ProfileMetaSchema.optional(),\n});\nexport type ProfileV2 = z.infer<typeof ProfileV2Schema>;\n\nexport const ProfilesV2Schema = z.array(ProfileV2Schema);\n\nexport const ResolvedScopeSchema = z.object({\n id: z.string(),\n label: z.string().optional(),\n description: z.string().optional(),\n include: z.array(z.string()),\n exclude: z.array(z.string()).optional(),\n isDefault: z.boolean(),\n products: ProductsMapSchema.optional(),\n});\nexport type ResolvedScope = z.infer<typeof ResolvedScopeSchema>;\n\nexport const BundleProfileSourceSchema = z.enum(['workspace', 'preset', 'npm', 'implicit']);\nexport type BundleProfileSource = z.infer<typeof BundleProfileSourceSchema>;\n\nexport const ProfileTraceSchema = z.object({\n extends: z.array(z.string()).optional(),\n overrides: z.array(z.string()).optional(),\n});\nexport type ProfileTrace = z.infer<typeof ProfileTraceSchema>;\n\nexport const ScopeSelectionSchema = z.object({\n strategy: z.enum(['explicit', 'default', 'auto', 'none']),\n path: z.string().optional(),\n});\nexport type ScopeSelection = z.infer<typeof ScopeSelectionSchema>;\n\nexport const BundleProfileSchema = z.object({\n id: z.string(),\n key: z.string().optional(),\n label: z.string().optional(),\n name: z.string().optional(),\n version: z.string().optional(),\n source: BundleProfileSourceSchema,\n scopes: z.array(ResolvedScopeSchema),\n products: ProductsMapSchema.optional(),\n trace: ProfileTraceSchema.optional(),\n meta: ProfileMetaSchema.optional(),\n productsByScope: z.record(z.string(), ProductsMapSchema).optional(),\n activeScopeId: z.string().optional(),\n activeScope: ResolvedScopeSchema.optional(),\n scopeSelection: ScopeSelectionSchema.optional(),\n});\nexport type BundleProfile = z.infer<typeof BundleProfileSchema>;\n\n","/**\n * @module @kb-labs/core-config/profiles/loader\n * Load + validate profiles[] section from kb.config.*\n */\n\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\nimport { readKbConfig } from '../api/read-kb-config';\nimport {\n ProfilesV2Schema,\n type ProfileV2,\n} from './types';\n\nexport interface ProfilesSectionResult {\n profiles: ProfileV2[];\n sourcePath?: string;\n format?: 'json' | 'yaml';\n}\n\nexport async function readProfilesSection(cwd: string): Promise<ProfilesSectionResult> {\n const kbConfig = await readKbConfig(cwd);\n if (!kbConfig?.data) {\n return { profiles: [] };\n }\n\n const rawProfiles = (kbConfig.data as { profiles?: unknown })?.profiles;\n\n if (rawProfiles === undefined) {\n return {\n profiles: [],\n sourcePath: kbConfig.path,\n format: kbConfig.format,\n };\n }\n\n const parsed = ProfilesV2Schema.safeParse(rawProfiles);\n if (!parsed.success) {\n throw new KbError(\n 'ERR_PROFILE_INVALID_FORMAT',\n 'Invalid profiles[] section in kb.config.',\n ERROR_HINTS.ERR_PROFILE_INVALID_FORMAT,\n {\n issues: parsed.error.issues,\n sourcePath: kbConfig.path,\n }\n );\n }\n\n return {\n profiles: parsed.data,\n sourcePath: kbConfig.path,\n format: kbConfig.format,\n };\n}\n\n","/**\n * @module @kb-labs/core-config/profiles/scope-selector\n * Resolve active scope based on include/exclude globs and CLI flags.\n */\n\nimport path from 'node:path';\nimport picomatch from 'picomatch';\nimport type { BundleProfile, ResolvedScope } from './types';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\n\nexport type ScopeSelectionStrategy = 'explicit' | 'default' | 'auto' | 'none';\n\nexport interface ScopeSelectionOptions {\n bundleProfile: BundleProfile;\n cwd: string;\n executionPath: string;\n scopeId?: string;\n}\n\nexport interface ScopeSelectionResult {\n scope?: ResolvedScope;\n strategy: ScopeSelectionStrategy;\n matchedPath?: string;\n}\n\nexport function selectProfileScope(\n opts: ScopeSelectionOptions\n): ScopeSelectionResult {\n const scopes = opts.bundleProfile.scopes || [];\n if (scopes.length === 0) {\n return { strategy: 'none' };\n }\n\n if (opts.scopeId) {\n const scope = scopes.find((s) => s.id === opts.scopeId);\n if (!scope) {\n throw new KbError(\n 'ERR_PROFILE_SCOPE_NOT_FOUND',\n `Scope \"${opts.scopeId}\" not found in profile \"${opts.bundleProfile.id}\"`,\n ERROR_HINTS.ERR_PROFILE_SCOPE_NOT_FOUND,\n { scopeId: opts.scopeId, available: scopes.map((s) => s.id) }\n );\n }\n return { scope, strategy: 'explicit' };\n }\n\n const defaults = scopes.filter((s) => s.isDefault);\n if (defaults.length > 1) {\n throw new KbError(\n 'ERR_PROFILE_SCOPE_CONFLICT',\n `Multiple default scopes found in profile \"${opts.bundleProfile.id}\"`,\n ERROR_HINTS.ERR_PROFILE_SCOPE_CONFLICT,\n { scopes: defaults.map((s) => s.id) }\n );\n }\n if (defaults.length === 1) {\n return { scope: defaults[0], strategy: 'default' };\n }\n\n const relativePath = normalizePath(\n path.relative(opts.cwd, opts.executionPath)\n );\n const matches = scopes.filter((scope) =>\n scopeMatchesPath(scope, relativePath)\n );\n\n if (matches.length > 1) {\n throw new KbError(\n 'ERR_PROFILE_SCOPE_CONFLICT',\n `Multiple scopes match path \"${relativePath}\"`,\n ERROR_HINTS.ERR_PROFILE_SCOPE_CONFLICT,\n { scopes: matches.map((s) => s.id), path: relativePath }\n );\n }\n\n if (matches.length === 1) {\n return { scope: matches[0], strategy: 'auto', matchedPath: relativePath };\n }\n\n return { strategy: 'none' };\n}\n\nfunction scopeMatchesPath(scope: ResolvedScope, candidate: string): boolean {\n const includes = scope.include && scope.include.length > 0\n ? scope.include\n : ['**/*'];\n const excludeGlobs = scope.exclude || [];\n\n const tester = (glob: string) =>\n picomatch(glob, { dot: true, nocase: false })(candidate);\n\n const includeMatched =\n candidate === '.' ||\n includes.some((glob) => tester(adjustGlob(glob)));\n\n if (!includeMatched) {\n return false;\n }\n\n const excludeMatched = excludeGlobs.some((glob) =>\n tester(adjustGlob(glob))\n );\n\n return !excludeMatched;\n}\n\nfunction normalizePath(p: string): string {\n if (!p || p === '.') {\n return '.';\n }\n const normalized = p.split(path.sep).join('/');\n return normalized || '.';\n}\n\nfunction adjustGlob(glob: string): string {\n if (!glob) {\n return '**/*';\n }\n return glob;\n}\n\n","/**\n * @module @kb-labs/core-config/profiles/resolver\n * Resolve ProfileV2 definitions with extends/merge semantics.\n */\n\nimport path from 'node:path';\nimport { createRequire } from 'node:module';\nimport { promises as fsp } from 'node:fs';\nimport type {\n BundleProfile,\n BundleProfileSource,\n ProfileTrace,\n ProfileV2,\n ScopeV2} from './types';\nimport {\n ProfilesV2Schema\n} from './types';\nimport { readProfilesSection } from './loader';\nimport { readConfigFile } from '../api/read-config';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\n\nconst requireFromHere = createRequire(import.meta.url);\n\nfunction clone<T>(value: T): T {\n if (typeof structuredClone === 'function') {\n return structuredClone(value);\n }\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\ninterface ProfileLayer {\n profile: ProfileV2;\n source: BundleProfileSource | string; // Can be 'workspace' | 'preset' | 'npm' | 'implicit' or 'npm:package#profile'\n sourcePath?: string;\n}\n\nexport interface ResolveProfileOptions {\n cwd: string;\n profileId: string;\n}\n\nexport async function resolveProfile(\n opts: ResolveProfileOptions\n): Promise<BundleProfile> {\n const localProfilesResult = await readProfilesSection(opts.cwd);\n const localProfiles = localProfilesResult.profiles;\n const localPath = localProfilesResult.sourcePath;\n const profileMap = new Map(localProfiles.map((p) => [p.id, p]));\n\n const cache = new Map<string, ProfileLayer>();\n if (localPath) {\n for (const profile of localProfiles) {\n cache.set(profile.id, {\n profile: clone(profile),\n source: 'workspace',\n sourcePath: localPath,\n });\n }\n }\n\n const chain = await resolveProfileChain(\n opts.profileId,\n cache,\n profileMap,\n opts.cwd,\n new Set<string>()\n );\n\n if (chain.length === 0) {\n throw new KbError(\n 'ERR_PROFILE_NOT_DEFINED',\n `Profile \"${opts.profileId}\" not found`,\n ERROR_HINTS.ERR_PROFILE_NOT_DEFINED,\n {\n profileId: opts.profileId,\n available: Array.from(profileMap.keys()),\n }\n );\n }\n\n const bundleProfile = mergeProfileChain(chain);\n\n const productsByScope = buildScopeProductMap(bundleProfile, chain);\n bundleProfile.productsByScope = productsByScope;\n\n return bundleProfile;\n}\n\nasync function resolveProfileChain(\n reference: string,\n cache: Map<string, ProfileLayer>,\n localProfiles: Map<string, ProfileV2>,\n cwd: string,\n seen: Set<string>\n): Promise<ProfileLayer[]> {\n const key = reference;\n if (seen.has(key)) {\n throw new KbError(\n 'ERR_PROFILE_EXTENDS_FAILED',\n `Circular profile extends detected at \"${reference}\"`,\n ERROR_HINTS.ERR_PROFILE_EXTENDS_FAILED,\n { reference, chain: Array.from(seen) }\n );\n }\n seen.add(key);\n\n let layer = cache.get(reference);\n\n if (!layer) {\n if (localProfiles.has(reference)) {\n layer = {\n profile: clone(localProfiles.get(reference)!),\n source: 'workspace',\n };\n } else if (isPackageReference(reference)) {\n layer = await loadPackageProfile(reference, cwd);\n } else {\n throw new KbError(\n 'ERR_PROFILE_NOT_DEFINED',\n `Profile \"${reference}\" not found`,\n ERROR_HINTS.ERR_PROFILE_NOT_DEFINED,\n { reference, available: Array.from(localProfiles.keys()) }\n );\n }\n cache.set(reference, layer);\n }\n\n const result: ProfileLayer[] = [];\n if (layer.profile.extends) {\n const parentChain = await resolveProfileChain(\n layer.profile.extends,\n cache,\n localProfiles,\n cwd,\n seen\n );\n result.push(...parentChain);\n }\n\n result.push(layer);\n seen.delete(key);\n return result;\n}\n\nfunction mergeProfileChain(chain: ProfileLayer[]): BundleProfile {\n const mergedProducts: Record<string, Record<string, unknown>> = {};\n let mergedMeta: Record<string, unknown> | undefined;\n let mergedLabel: string | undefined;\n let mergedDescription: string | undefined;\n let mergedVersion: string | undefined;\n let scopes: ScopeV2[] = [];\n let scopesDefined = false;\n\n for (const layer of chain) {\n const profile = layer.profile;\n mergedLabel = profile.label ?? mergedLabel;\n mergedDescription = profile.description ?? mergedDescription;\n mergedVersion = profile.meta?.version ?? mergedVersion;\n mergedMeta = mergeMeta(mergedMeta, profile.meta);\n\n if (profile.products) {\n for (const [productKey, overrides] of Object.entries(profile.products)) {\n if (!matchedProductOverrides(overrides)) {\n continue;\n }\n const target = (mergedProducts[productKey] ??= {});\n Object.assign(target, clone(overrides));\n }\n }\n\n if (profile.scopes && profile.scopes.length > 0) {\n scopes = clone(profile.scopes);\n scopesDefined = true;\n } else if (!scopesDefined && profile.scopes) {\n scopes = clone(profile.scopes);\n }\n }\n\n const finalLayer = chain[chain.length - 1];\n if (!finalLayer) {\n throw new KbError(\n 'ERR_PROFILE_NOT_DEFINED',\n 'Profile chain is empty',\n ERROR_HINTS.ERR_PROFILE_NOT_DEFINED\n );\n }\n \n const finalId = finalLayer.profile.id;\n const finalSource = finalLayer.source;\n \n const bundleProfile: BundleProfile = {\n id: finalId,\n key: finalId,\n label: mergedLabel,\n name: mergedLabel ?? finalId,\n version: mergedVersion,\n source: finalSource as BundleProfileSource,\n scopes: scopes.map((scope) => ({\n id: scope.id,\n label: scope.label,\n description: scope.description,\n include: scope.include,\n exclude: scope.exclude,\n isDefault: !!scope.default,\n products: scope.products ? clone(scope.products) : undefined,\n })),\n products: Object.keys(mergedProducts).length ? mergedProducts : undefined,\n trace: buildTrace(chain),\n meta: mergedMeta,\n productsByScope: {},\n };\n\n return bundleProfile;\n}\n\nfunction buildScopeProductMap(\n bundleProfile: BundleProfile,\n chain: ProfileLayer[]\n): Record<string, Record<string, Record<string, unknown>>> {\n const map: Record<string, Record<string, Record<string, unknown>>> = {};\n\n for (const scope of bundleProfile.scopes) {\n map[scope.id] = {};\n for (const layer of chain) {\n const matchingScope = layer.profile.scopes?.find((s) => s.id === scope.id);\n if (!matchingScope?.products) {\n continue;\n }\n for (const [productKey, overrides] of Object.entries(matchingScope.products)) {\n if (!matchedProductOverrides(overrides)) {\n continue;\n }\n const scopeMap = map[scope.id];\n if (!scopeMap) {continue;}\n \n const target = scopeMap[productKey];\n if (!target) {\n scopeMap[productKey] = clone(overrides);\n } else {\n Object.assign(target, clone(overrides));\n }\n }\n }\n }\n\n return map;\n}\n\nfunction matchedProductOverrides(\n overrides: unknown\n): overrides is Record<string, unknown> {\n return overrides !== null && typeof overrides === 'object';\n}\n\nfunction buildTrace(chain: ProfileLayer[]): ProfileTrace | undefined {\n if (chain.length <= 1) {\n return undefined;\n }\n\n const extendsList = chain\n .slice(0, -1)\n .map((layer) => {\n // For npm packages, source is already in format \"npm:package#profile\"\n if (typeof layer.source === 'string' && layer.source.startsWith('npm:')) {\n return layer.source;\n }\n // For workspace profiles, use source:profileId format\n return `${layer.source}:${layer.profile.id}`;\n });\n\n return {\n extends: extendsList,\n };\n}\n\nfunction mergeMeta(\n existing: Record<string, unknown> | undefined,\n next?: Record<string, unknown>\n): Record<string, unknown> | undefined {\n if (!next) {\n return existing ? structuredClone(existing) : undefined;\n }\n if (!existing) {\n return structuredClone(next);\n }\n return { ...existing, ...clone(next) };\n}\n\nfunction isPackageReference(ref: string): boolean {\n return ref.includes('/') || ref.startsWith('@');\n}\n\ninterface PackageProfileRef {\n packageName: string;\n profileId: string;\n}\n\nfunction parsePackageReference(ref: string): PackageProfileRef {\n const [pkg, profileId] = ref.split('#');\n return {\n packageName: pkg || '',\n profileId: profileId || 'default',\n };\n}\n\nasync function loadPackageProfile(\n ref: string,\n cwd: string\n): Promise<ProfileLayer> {\n const { packageName, profileId } = parsePackageReference(ref);\n\n let pkgJsonPath: string;\n try {\n pkgJsonPath = requireFromHere.resolve(`${packageName}/package.json`, {\n paths: [cwd],\n });\n } catch {\n throw new KbError(\n 'ERR_PROFILE_EXTENDS_FAILED',\n `Cannot resolve package \"${packageName}\" for profile extends`,\n ERROR_HINTS.ERR_PROFILE_EXTENDS_FAILED,\n { reference: ref }\n );\n }\n\n const pkgDir = path.dirname(pkgJsonPath);\n const candidateConfigs = [\n 'kb.config.json',\n 'kb.config.yaml',\n 'kb.config.yml',\n path.join('config', 'kb.config.json'),\n path.join('config', 'kb.config.yaml'),\n path.join('config', 'kb.config.yml'),\n ];\n\n for (const candidate of candidateConfigs) {\n const fullPath = path.join(pkgDir, candidate);\n try {\n await fsp.access(fullPath);\n } catch {\n continue;\n }\n\n const config = await readConfigFile(fullPath);\n const profiles = (config.data as { profiles?: unknown })?.profiles;\n const parsed = ProfilesV2Schema.safeParse(profiles);\n if (!parsed.success) {\n continue;\n }\n const target = parsed.data.find((p) => p.id === profileId);\n if (!target) {\n continue;\n }\n return {\n profile: clone(target),\n source: `npm:${packageName}#${profileId}`,\n sourcePath: fullPath,\n };\n }\n\n throw new KbError(\n 'ERR_PROFILE_EXTENDS_FAILED',\n `Profile \"${profileId}\" not found in package \"${packageName}\"`,\n ERROR_HINTS.ERR_PROFILE_EXTENDS_FAILED,\n { reference: ref }\n );\n}\n\n","/**\n * @module @kb-labs/core/config/api/init-workspace\n * Initialize workspace configuration with idempotent operations\n */\n\nimport { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport YAML from 'yaml';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\nimport { findGitRoot } from './read-config';\nimport { writeFileAtomic, ensureWithinWorkspace } from '../utils/fs-atomic';\nimport { toFsProduct } from '../utils/product-normalize';\nimport type { InitWorkspaceOptions, InitResult, InitAction } from '../types/init';\n\n/**\n * Generate diff preview (first ~20 lines) for conflicts\n */\nfunction generateDiffPreview(oldContent: string, newContent: string): string {\n const oldLines = oldContent.split('\\n');\n const newLines = newContent.split('\\n');\n const maxLines = 20;\n const diff: string[] = [];\n \n for (let i = 0; i < Math.min(maxLines, Math.max(oldLines.length, newLines.length)); i++) {\n const oldLine = oldLines[i] || '';\n const newLine = newLines[i] || '';\n \n if (oldLine !== newLine) {\n if (oldLine) {diff.push(`- ${oldLine}`);}\n if (newLine) {diff.push(`+ ${newLine}`);}\n }\n }\n \n if (oldLines.length > maxLines || newLines.length > maxLines) {\n diff.push('... truncated');\n }\n \n return diff.slice(0, 20).join('\\n');\n}\n\n/**\n * Find workspace config file, walking up to git root\n * Prioritizes .kb/ location over root\n */\nasync function findWorkspaceConfig(\n cwd: string\n): Promise<{ path: string; format: 'yaml' | 'json' } | null> {\n const filenames = [\n '.kb/kb.config.yaml',\n '.kb/kb.config.yml',\n '.kb/kb.config.json',\n ];\n const gitRoot = await findGitRoot(cwd);\n const stopDir = gitRoot || path.parse(cwd).root;\n \n let dir = path.resolve(cwd);\n \n while (true) {\n for (const filename of filenames) {\n const candidate = path.join(dir, filename);\n try {\n await fs.access(candidate);\n const format = filename.endsWith('.json') ? 'json' : 'yaml';\n return { path: candidate, format };\n } catch {\n // Continue to next filename\n }\n }\n \n // Stop at git root or filesystem root\n if (dir === stopDir || dir === path.dirname(dir)) {\n break;\n }\n dir = path.dirname(dir);\n }\n \n return null;\n}\n\n/**\n * Initialize or update workspace configuration\n */\nexport async function initWorkspaceConfig(\n opts: InitWorkspaceOptions\n): Promise<InitResult> {\n const cwd = path.resolve(opts.cwd);\n const result: InitResult = {\n actions: [],\n created: [],\n updated: [],\n skipped: [],\n warnings: [],\n };\n \n if (opts.profiles && Object.keys(opts.profiles).length > 0) {\n result.warnings.push(\n 'profiles option is deprecated. Define profiles[] inside kb.config.json (Profiles v2).'\n );\n }\n \n // Find existing config\n const existing = await findWorkspaceConfig(cwd);\n const format = existing?.format || opts.format || 'yaml';\n const configFileName = format === 'json' ? 'kb.config.json' : 'kb.config.yaml';\n // Create .kb directory if needed for new configs\n const configPath = existing?.path || path.join(cwd, '.kb', configFileName);\n \n // Ensure we're writing within workspace\n ensureWithinWorkspace(configPath, cwd);\n \n // Build new config structure\n const newConfigProducts: Record<string, unknown> = {};\n const newConfig: Record<string, unknown> = {\n schemaVersion: '1.0',\n products: newConfigProducts,\n };\n\n // Add product sections\n if (opts.products && opts.products.length > 0) {\n for (const product of opts.products) {\n const fsProduct = toFsProduct(product);\n newConfigProducts[product] = {};\n }\n }\n \n // Add preset if specified\n if (opts.presetRef !== undefined) {\n newConfig.$extends = opts.presetRef;\n }\n \n // Check if config already exists\n if (existing) {\n try {\n const existingContent = await fs.readFile(existing.path, 'utf-8');\n const existingData = format === 'json' \n ? JSON.parse(existingContent)\n : YAML.parse(existingContent);\n \n // Merge with existing config (only add missing keys)\n let modified = false;\n \n // Ensure schemaVersion\n if (!existingData.schemaVersion) {\n existingData.schemaVersion = '1.0';\n modified = true;\n }\n \n // Merge products\n if (opts.products) {\n if (!existingData.products) {\n existingData.products = {};\n modified = true;\n }\n for (const product of opts.products) {\n if (!existingData.products[product]) {\n existingData.products[product] = {};\n modified = true;\n }\n }\n }\n \n // Merge preset\n if (opts.presetRef !== undefined && existingData.$extends !== opts.presetRef) {\n existingData.$extends = opts.presetRef;\n modified = true;\n }\n \n if (!modified) {\n // No changes needed\n result.actions.push({ kind: 'skip', path: configPath });\n result.skipped.push(configPath);\n return result;\n }\n \n // Serialize new content\n const newContent = format === 'json'\n ? JSON.stringify(existingData, null, 2) + '\\n'\n : YAML.stringify(existingData);\n \n // Check for conflicts\n if (!opts.force && existingContent !== newContent) {\n const action: InitAction = {\n kind: 'conflict',\n path: configPath,\n previewDiff: generateDiffPreview(existingContent, newContent),\n };\n result.actions.push(action);\n result.warnings.push(`Config file has changes, use --force to overwrite: ${configPath}`);\n return result;\n }\n \n // Write updated config\n if (!opts.dryRun) {\n await writeFileAtomic(configPath, newContent);\n }\n \n result.actions.push({ kind: 'update', path: configPath });\n result.updated.push(configPath);\n } catch (error) {\n throw new KbError(\n 'ERR_CONFIG_INVALID',\n `Failed to read or parse existing config: ${existing.path}`,\n ERROR_HINTS.ERR_CONFIG_INVALID,\n { error: error instanceof Error ? error.message : String(error) }\n );\n }\n } else {\n // Create new config\n const content = format === 'json'\n ? JSON.stringify(newConfig, null, 2) + '\\n'\n : YAML.stringify(newConfig);\n \n if (!opts.dryRun) {\n await writeFileAtomic(configPath, content);\n }\n \n result.actions.push({ kind: 'write', path: configPath });\n result.created.push(configPath);\n }\n \n return result;\n}\n\n","/**\n * @module @kb-labs/core/config/api/upsert-lockfile\n * Upsert lockfile operations\n */\n\nimport path from 'node:path';\nimport { promises as fs } from 'node:fs';\nimport { readLockfile, writeLockfile, type LockfileData } from '../lockfile/lockfile';\nimport { ensureWithinWorkspace } from '../utils/fs-atomic';\nimport type { UpsertLockfileOptions, InitResult } from '../types/init';\n\n/**\n * Upsert lockfile with new references\n */\nexport async function upsertLockfile(\n opts: UpsertLockfileOptions\n): Promise<InitResult> {\n const cwd = path.resolve(opts.cwd);\n const lockfilePath = path.join(cwd, '.kb', 'lock.json');\n const oldLockfilePath = path.join(cwd, '.kb', 'lockfile.json');\n \n const result: InitResult = {\n actions: [],\n created: [],\n updated: [],\n skipped: [],\n warnings: [],\n };\n \n // Ensure we're writing within workspace\n ensureWithinWorkspace(lockfilePath, cwd);\n \n // Check for deprecated lockfile location\n try {\n await fs.access(oldLockfilePath);\n result.warnings.push(\n 'Deprecated lockfile found at .kb/lockfile.json, please migrate to .kb/lock.json'\n );\n } catch {\n // No old lockfile, that's fine\n }\n \n // Read existing lockfile\n const existing = await readLockfile(cwd);\n \n // Build lockfile data\n const lockfileData: LockfileData = {\n $schema: 'https://schemas.kb-labs.dev/lockfile.schema.json',\n schemaVersion: '1.0',\n orgPreset: opts.presetRef !== undefined ? opts.presetRef || undefined : existing?.orgPreset,\n profile: opts.profileRef !== undefined ? opts.profileRef || undefined : existing?.profile,\n policyBundle: opts.policyBundle !== undefined ? opts.policyBundle || undefined : existing?.policyBundle,\n hashes: existing?.hashes || {},\n generatedAt: new Date().toISOString(),\n };\n \n if (!existing) {\n // Creating new lockfile\n if (!opts.dryRun) {\n await writeLockfile(cwd, lockfileData);\n }\n result.actions.push({ kind: 'write', path: lockfilePath });\n result.created.push(lockfilePath);\n } else {\n // Updating existing lockfile\n if (!opts.dryRun) {\n await writeLockfile(cwd, lockfileData);\n }\n result.actions.push({ kind: 'update', path: lockfilePath });\n result.updated.push(lockfilePath);\n }\n \n return result;\n}\n\n","import Ajv from 'ajv';\nimport addFormats from 'ajv-formats';\n\nexport type ValidationResult = { ok: boolean; errors: import('ajv').ErrorObject[] | null };\n\nconst ajv = new Ajv({ allErrors: true, strict: false });\naddFormats(ajv);\n\nconst schemaMap: Record<string, Record<string, unknown>> = {};\n\n/**\n * Temporary schema registry hook – upcoming implementation will register schemas here.\n */\nexport function registerProductSchema(product: string, schema: Record<string, unknown>): void {\n schemaMap[product] = schema;\n}\n\nexport function validateProductConfig(product: string, config: unknown): ValidationResult {\n const schema = schemaMap[product];\n if (!schema) {return { ok: true, errors: null };}\n\n const validate = ajv.compile(schema);\n const ok = validate(config);\n return { ok: !!ok, errors: validate.errors || null };\n}\n","/**\n * @module @kb-labs/core/config/overlay/merge\n *\n * Deep-merge an overlay onto a base config with overlay-specific semantics:\n *\n * - plain objects: recursive merge\n * - scalars: overlay wins\n * - arrays: REPLACE by default (differs from `mergeDefined`, which concatenates)\n * - directive `kb:merge` (sibling key inside an object): per-field strategy\n * map switching arrays to append-mode.\n *\n * Example:\n *\n * base = { adapters: { llm: ['openai'] } }\n * overlay = { adapters: { 'kb:merge': { llm: 'append' }, llm: ['vibeproxy'] } }\n * result = { adapters: { llm: ['openai', 'vibeproxy'] } }\n *\n * The `kb:merge` key is consumed and never appears in the result.\n *\n * Only the `append` strategy is supported in MVP; `prepend`, `unique`, `by-key`\n * are intentionally out of scope.\n */\n\nexport const OVERLAY_DIRECTIVE_KEY = 'kb:merge' as const;\n\nexport type OverlayArrayStrategy = 'append' | 'replace';\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n return typeof v === 'object' && v !== null && Object.getPrototypeOf(v) === Object.prototype;\n}\n\nfunction extractDirective(\n overlay: Record<string, unknown>,\n): Record<string, OverlayArrayStrategy> {\n const raw = overlay[OVERLAY_DIRECTIVE_KEY];\n if (!isPlainObject(raw)) {\n return {};\n }\n const out: Record<string, OverlayArrayStrategy> = {};\n for (const [k, v] of Object.entries(raw)) {\n if (v === 'append' || v === 'replace') {\n out[k] = v;\n } else {\n throw new Error(\n `Invalid kb:merge strategy for \"${k}\": ${JSON.stringify(v)}. Expected \"append\" or \"replace\".`,\n );\n }\n }\n return out;\n}\n\n/**\n * Deep-merge `overlay` onto `base` using overlay semantics.\n *\n * The function never mutates either argument. Arrays in the result are always\n * fresh instances; objects are spread copies.\n */\nexport function mergeOverlay<T>(base: T, overlay: unknown): T {\n // Both arrays: overlay replaces wholesale (override semantics).\n // Append is opt-in via a parent-object directive, so a raw array vs array\n // collision at the top level (or anywhere without a parent directive) is\n // always replace.\n if (Array.isArray(base) && Array.isArray(overlay)) {\n return [...overlay] as unknown as T;\n }\n\n // Both plain objects: recursive merge with directive parsing.\n if (isPlainObject(base) && isPlainObject(overlay)) {\n const directives = extractDirective(overlay);\n const result: Record<string, unknown> = { ...base };\n\n for (const [key, overlayValue] of Object.entries(overlay)) {\n if (key === OVERLAY_DIRECTIVE_KEY) {\n continue;\n }\n const baseValue = result[key];\n const strategy = directives[key];\n\n if (Array.isArray(baseValue) && Array.isArray(overlayValue)) {\n result[key] =\n strategy === 'append'\n ? [...baseValue, ...overlayValue]\n : [...overlayValue];\n } else if (isPlainObject(baseValue) && isPlainObject(overlayValue)) {\n result[key] = mergeOverlay(baseValue, overlayValue);\n } else {\n result[key] = overlayValue;\n }\n }\n\n return result as T;\n }\n\n // Type mismatch or scalar: overlay wins.\n return overlay as T;\n}\n","/**\n * @module @kb-labs/core/config/overlay/loader\n *\n * Discovers and reads `.kb/overlays/*.jsonc` files from a project root, in\n * stable lexicographic order. Each overlay is parsed via the existing\n * `readJsonWithDiagnostics` (so JSONC comments and trailing commas are\n * supported). Files that fail to parse are reported as diagnostics but do not\n * abort the load — callers decide whether to ignore or fail.\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\n\nimport { readJsonWithDiagnostics } from '../runtime/runtime.js';\nimport type { Diagnostic } from '../types/index.js';\n\nexport interface LoadedOverlay {\n /** Absolute path to the overlay file. */\n path: string;\n /** File name (without directory), e.g. `pressure__overlay.jsonc`. */\n name: string;\n /** Parsed contents. Always a plain object — files whose top-level value is\n * not an object are rejected with a diagnostic. */\n data: Record<string, unknown>;\n}\n\nexport interface LoadOverlaysResult {\n overlays: LoadedOverlay[];\n diagnostics: Diagnostic[];\n}\n\n/**\n * Read `.kb/overlays/*.jsonc` from the given project root.\n *\n * - Returns `{ overlays: [], diagnostics: [] }` when the directory does not\n * exist (the common case in projects that don't use overlays).\n * - Files are returned sorted by lexicographic file-name. The merge order at\n * the call site is the same order — later files override earlier ones.\n * - Non-`.jsonc` files in the directory are ignored silently.\n */\nexport async function loadOverlays(projectRoot: string): Promise<LoadOverlaysResult> {\n const dir = path.join(projectRoot, '.kb', 'overlays');\n const diagnostics: Diagnostic[] = [];\n\n let entries: string[];\n try {\n entries = await fsp.readdir(dir);\n } catch (e) {\n const err = e as NodeJS.ErrnoException;\n if (err.code === 'ENOENT') {\n return { overlays: [], diagnostics };\n }\n diagnostics.push({\n level: 'error',\n code: 'OVERLAYS_DIR_READ_FAILED',\n message: `Failed to read overlays directory: ${dir}`,\n detail: String(e),\n });\n return { overlays: [], diagnostics };\n }\n\n const jsoncFiles = entries.filter((name) => name.endsWith('.jsonc')).sort();\n const overlays: LoadedOverlay[] = [];\n\n for (const name of jsoncFiles) {\n const full = path.join(dir, name);\n const read = await readJsonWithDiagnostics<unknown>(full);\n diagnostics.push(...read.diagnostics);\n if (!read.ok) {\n continue;\n }\n const data = read.data;\n if (typeof data !== 'object' || data === null || Array.isArray(data)) {\n diagnostics.push({\n level: 'error',\n code: 'OVERLAY_NOT_OBJECT',\n message: `Overlay must be a JSON object at top level: ${full}`,\n });\n continue;\n }\n overlays.push({ path: full, name, data: data as Record<string, unknown> });\n }\n\n return { overlays, diagnostics };\n}\n","/**\n * @module @kb-labs/core-config/api/effective-config\n *\n * Canonical \"give me the effective raw config\" entry point.\n *\n * Assembles the three configuration layers any KB Labs project may have\n * and returns the deep-merged result plus diagnostics about how it was\n * resolved:\n *\n * 1. `<platformRoot>/.kb/kb.config.*` — platform baseline (installed\n * mode only; absent in solo dev where projectRoot == platformRoot)\n * 2. `<projectRoot>/.kb/kb.config.*` — project layer\n * 3. `<projectRoot>/.kb/overlays/*.jsonc` — scenario overlays applied\n * by `kb-dev ensure --scenario`, lex-sorted\n *\n * Each layer is deep-merged onto the previous via `mergeOverlay`. Overlays\n * are intentionally *project-only* — overlay files placed under the\n * platform root are ignored. Plugins that read their own section from the\n * raw config (gateway.*, mind.*, workflow.*, ...) should use this rather\n * than re-implementing the layering.\n *\n * Returns `null` only when none of the three layers contributed anything.\n *\n * This is complementary to `@kb-labs/core-runtime :: loadPlatformConfig`,\n * which produces the structured `PlatformConfig` view (adapters, core,\n * execution). Use `loadEffectiveConfig` when you need the full raw shape;\n * use `loadPlatformConfig` when you need platform initialisation.\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\n\nimport { readJsonWithDiagnostics, mergeDefined } from '../runtime/runtime.js';\nimport type { Diagnostic } from '../types/index.js';\nimport { loadOverlays } from '../overlay/loader.js';\nimport { mergeOverlay } from '../overlay/merge.js';\n\n// Order matters: each entry is deep-merged onto the previous one within the\n// same root, so the LAST file found wins on conflicts. Convention:\n//\n// 1. `kb.config.jsonc` (root, human-edited template)\n// 2. `kb.config.json` (root, machine-written)\n// 3. `.kb/kb.config.jsonc` (preferred location, human-edited)\n// 4. `.kb/kb.config.json` (preferred location, machine-written — wins)\n//\n// In installed mode `kb-create` writes both `.kb/kb.config.jsonc` (full\n// template snapshot) and `.kb/kb.config.json` (scan-updated authoritative\n// snapshot). Reading only one of them would silently shadow the other —\n// reading both, with `.json` last, lets the scan-derived values override\n// the static template, which matches kb-create's intent.\nconst CONFIG_CANDIDATES = [\n 'kb.config.jsonc',\n 'kb.config.json',\n path.join('.kb', 'kb.config.jsonc'),\n path.join('.kb', 'kb.config.json'),\n] as const;\n\nexport interface EffectiveConfigResult {\n /** Deep-merged effective data (platform ← project ← overlays). */\n data: Record<string, unknown>;\n /**\n * Absolute paths of platform-root config files actually loaded, in merge\n * order. Empty when no platform config file was found (or when\n * `platformRoot` was not provided / equals `projectRoot`).\n */\n platformConfigPaths: string[];\n /** Absolute paths of project-root config files actually loaded, in merge order. */\n projectConfigPaths: string[];\n /**\n * Deprecated single-path alias for the LAST platform config file applied.\n * Prefer `platformConfigPaths`. Kept for callers that only need to know\n * \"did we load any platform config?\".\n */\n platformConfigPath?: string;\n /**\n * Deprecated single-path alias for the LAST project config file applied.\n * Prefer `projectConfigPaths`.\n */\n projectConfigPath?: string;\n /** Absolute paths of overlays applied, in merge order. */\n overlayPaths: string[];\n /** Non-fatal diagnostics (malformed files, layer rejected, etc). */\n diagnostics: Diagnostic[];\n}\n\nexport interface LoadEffectiveConfigOptions {\n /**\n * Optional platform installation root. When provided and distinct from\n * `projectRoot`, its `kb.config.*` is read first and used as the\n * deep-merge baseline. Overlays are *not* read from this root.\n */\n platformRoot?: string;\n}\n\nasync function findAllConfigsInRoot(root: string): Promise<string[]> {\n const found: string[] = [];\n for (const rel of CONFIG_CANDIDATES) {\n const full = path.join(root, rel);\n try {\n await fsp.access(full);\n found.push(full);\n } catch {\n // missing — skip\n }\n }\n return found;\n}\n\n/**\n * Read every config file present at `root`, deep-merging them in\n * CONFIG_CANDIDATES order (later wins). Each file is parsed independently;\n * a malformed or non-object file emits a diagnostic but does not abort the\n * read of the remaining files at this root.\n *\n * Returns the list of paths actually loaded plus the merged data.\n */\nasync function readObjectsAtRoot(\n root: string,\n diagnostics: Diagnostic[],\n): Promise<{ paths: string[]; data: Record<string, unknown> }> {\n const paths = await findAllConfigsInRoot(root);\n let merged: Record<string, unknown> = {};\n const loaded: string[] = [];\n\n for (const configPath of paths) {\n const read = await readJsonWithDiagnostics<unknown>(configPath);\n diagnostics.push(...read.diagnostics);\n // Past this point we record `configPath` as loaded — the file existed,\n // even if its content was unusable. Callers rely on `paths` to\n // distinguish \"layer absent\" from \"layer present but degraded\".\n loaded.push(configPath);\n if (!read.ok) {\n continue;\n }\n const data = read.data;\n if (typeof data !== 'object' || data === null || Array.isArray(data)) {\n diagnostics.push({\n level: 'error',\n code: 'CONFIG_NOT_OBJECT',\n message: `Config must be a JSON object at top level: ${configPath}`,\n });\n continue;\n }\n // Within a single root we layer files (e.g. .jsonc template + .json\n // scan-update) using `mergeDefined` — the SAME semantics\n // `loadPlatformConfig` uses for its platform↔project merge. Arrays\n // concatenate at this layer; overlay-style array REPLACEMENT is\n // reserved for the explicit overlay step below and the `kb:merge`\n // directive within overlays.\n merged = mergeDefined(merged, data as Record<string, unknown>);\n }\n\n return { paths: loaded, data: merged };\n}\n\n/**\n * Load the effective project config — deep-merged across platform → project\n * → project overlays. Returns `null` when nothing contributed.\n */\nexport async function loadEffectiveConfig(\n projectRoot: string,\n options: LoadEffectiveConfigOptions = {},\n): Promise<EffectiveConfigResult | null> {\n const diagnostics: Diagnostic[] = [];\n\n const usePlatform =\n !!options.platformRoot && options.platformRoot !== projectRoot;\n\n const platformLayer = usePlatform\n ? await readObjectsAtRoot(options.platformRoot!, diagnostics)\n : { paths: [] as string[], data: {} as Record<string, unknown> };\n const projectLayer = await readObjectsAtRoot(projectRoot, diagnostics);\n\n const overlayResult = await loadOverlays(projectRoot);\n diagnostics.push(...overlayResult.diagnostics);\n\n const nothingFound =\n platformLayer.paths.length === 0 &&\n projectLayer.paths.length === 0 &&\n overlayResult.overlays.length === 0;\n if (nothingFound) {\n return null;\n }\n\n // Platform ← project: SAME semantics as loadPlatformConfig — `mergeDefined`\n // (arrays concatenate). Keeps both APIs returning the same shape for the\n // shared two-layer step.\n let merged: Record<string, unknown> = mergeDefined(\n platformLayer.data,\n projectLayer.data,\n );\n // Overlays: REPLACE semantics for arrays (with opt-in `kb:merge: append`)\n // — overlays are the explicit override layer, not a deep-merge layer.\n const overlayPaths: string[] = [];\n for (const overlay of overlayResult.overlays) {\n merged = mergeOverlay(merged, overlay.data);\n overlayPaths.push(overlay.path);\n }\n\n return {\n data: merged,\n platformConfigPaths: platformLayer.paths,\n projectConfigPaths: projectLayer.paths,\n platformConfigPath:\n platformLayer.paths[platformLayer.paths.length - 1],\n projectConfigPath: projectLayer.paths[projectLayer.paths.length - 1],\n overlayPaths,\n diagnostics,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors/kb-error.ts","../src/utils/fs-atomic.ts","../src/runtime/runtime.ts","../src/utils/env.ts","../src/utils/product-normalize.ts","../src/utils/paths.ts","../src/index.ts","../src/cache/fs-cache.ts","../src/hash/config-hash.ts","../src/api/read-config.ts","../src/api/read-kb-config.ts","../src/merge/layered-merge.ts","../src/preset/resolve-preset.ts","../src/lockfile/lockfile.ts","../src/api/product-config.ts","../src/profiles/types.ts","../src/profiles/loader.ts","../src/profiles/scope-selector.ts","../src/profiles/resolver.ts","../src/api/init-workspace.ts","../src/api/upsert-lockfile.ts","../src/validation/validate-config.ts","../src/overlay/merge.ts","../src/overlay/loader.ts","../src/api/effective-config.ts"],"names":["path","fs","fsp","stripJsonComments","YAML","findNearestConfig","isPlainObject","writeFileAtomic"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module @kb-labs/core/config/errors\n * Standardized error class for KB Labs with exit code mapping\n */\n\nexport class KbError extends Error {\n constructor(\n public code: string,\n message: string,\n public hint?: string,\n public meta?: unknown\n ) {\n super(message);\n this.name = 'KbError';\n }\n}\n\n/**\n * Maps KbError codes to CLI exit codes\n */\nexport function getExitCode(err: KbError): number {\n if (err.code === 'ERR_FORBIDDEN') {return 3;}\n if (err.code === 'ERR_CONFIG_NOT_FOUND') {return 2;}\n if (err.code === 'ERR_CONFIG_EXISTS_CONFLICT') {return 2;}\n if (err.code === 'ERR_PATH_OUTSIDE_WORKSPACE') {return 2;}\n if (err.code.startsWith('ERR_')) {return 1;}\n return 1;\n}\n\n/**\n * Error codes with their standard hints\n */\nexport const ERROR_HINTS = {\n ERR_CONFIG_NOT_FOUND: 'Create .kb/kb-labs.config.yaml or run: kb init',\n ERR_CONFIG_INVALID: 'Check configuration syntax and required fields',\n ERR_CONFIG_EXISTS_CONFLICT: 'Use --force to overwrite existing configuration',\n ERR_PATH_OUTSIDE_WORKSPACE: 'Check cwd or use a relative path within the workspace',\n ERR_PRESET_NOT_RESOLVED: 'Install the required preset package or check network connectivity',\n ERR_PROFILE_INCOMPATIBLE: 'Profile version is incompatible with current system',\n ERR_PROFILE_NOT_DEFINED: 'Add profiles[] to kb.config.json or pass --profile=<id>',\n ERR_PROFILE_RESOLVE_FAILED: 'Profile registry unavailable. Define profiles[] inside kb.config.json or use workspace presets.',\n ERR_PROFILE_EXTENDS_FAILED: 'Profile extends failed. Check extends reference or install required preset/package.',\n ERR_PROFILE_SCOPE_NOT_FOUND: 'Scope not found. Use --scope=<id> with one of the configured scopes.',\n ERR_PROFILE_SCOPE_CONFLICT: 'Multiple scopes matched. Specify --scope=<id> explicitly.',\n ERR_PROFILE_INVALID_FORMAT: 'Update profiles[] in kb.config.json (Profiles v2) or rerun your plugin setup command.',\n ERR_ARTIFACT_LIMIT_EXCEEDED: 'Remove or split large artifacts, or reduce artifact count',\n ERR_FORBIDDEN: 'Add role in policy.overrides or use preset...',\n} as const;\n\nexport type ErrorCode = keyof typeof ERROR_HINTS;\n","/**\n * @module @kb-labs/core/config/utils/fs-atomic\n * Atomic file write operations using tmp+rename pattern\n */\n\nimport { promises as fs } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { KbError } from '../errors/kb-error';\nimport { dirname } from 'node:path';\n\n/**\n * Write file atomically using tmp+rename pattern\n * This ensures that the file is never partially written in case of crashes\n */\nexport async function writeFileAtomic(\n path: string,\n data: string | Uint8Array\n): Promise<void> {\n const tmp = `${path}.tmp-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n \n try {\n // Ensure parent directory exists\n await fs.mkdir(dirname(path), { recursive: true });\n await fs.mkdir(dirname(tmp), { recursive: true });\n \n // Write to temp file\n await fs.writeFile(tmp, data);\n \n // Atomic rename\n await fs.rename(tmp, path);\n } catch (error) {\n // Clean up temp file if it exists\n try {\n await fs.unlink(tmp);\n } catch {\n // Ignore cleanup errors\n }\n throw error;\n }\n}\n\n/**\n * Ensure a path is within the workspace root\n * Throws ERR_PATH_OUTSIDE_WORKSPACE if the path escapes the workspace\n */\nexport function ensureWithinWorkspace(targetPath: string, workspaceRoot: string): void {\n const absTarget = resolve(targetPath);\n const absRoot = resolve(workspaceRoot);\n \n if (!absTarget.startsWith(absRoot)) {\n throw new KbError(\n 'ERR_PATH_OUTSIDE_WORKSPACE',\n `Refusing to write outside workspace: ${targetPath}`,\n 'Check cwd or use a relative path within the workspace',\n { targetPath, workspaceRoot }\n );\n }\n}\n\n","/**\n * @module @kb-labs/core/config/runtime\n * Infrastructure-only config pipeline (no domain keys).\n * Provides: nearest config discovery, safe JSON read with diagnostics,\n * deep merge that ignores `undefined`, and a generic resolver (defaults→file→env→cli).\n */\n\nimport { promises as fsp } from \"node:fs\";\nimport path from \"node:path\";\nimport type { Diagnostic, FindNearestConfigOpts, JsonReadResult, ProfilesConfig, KBConfig } from \"../types\";\n\n/** Find nearest config file walking up from startDir until stopDir or FS root. */\nexport async function findNearestConfig(opts: FindNearestConfigOpts): Promise<{ path: string | null; tried: string[] }> {\n const start = path.resolve(opts.startDir ?? process.cwd());\n const stop = opts.stopDir ? path.resolve(opts.stopDir) : null;\n\n const tried: string[] = [];\n let dir = start;\n\n while (true) {\n for (const name of opts.filenames) {\n const candidate = path.join(dir, name);\n tried.push(candidate);\n try {\n await fsp.access(candidate);\n return { path: candidate, tried };\n } catch { /* continue */ }\n }\n const parent = path.dirname(dir);\n if (parent === dir) { break; }\n if (stop && (dir === stop || parent === stop)) { break; }\n dir = parent;\n }\n return { path: null, tried };\n}\n\n/** Read JSON with explicit diagnostics (no silent nulls). */\n/** Strip single-line (//) and multi-line (/* *\\/) comments from a JSON string. */\nfunction stripJsonComments(src: string): string {\n let out = '';\n let i = 0;\n const len = src.length;\n while (i < len) {\n if (src[i] === '\"') {\n // String literal — copy verbatim until closing quote.\n out += src[i++];\n while (i < len) {\n if (src[i] === '\\\\') { out += src[i++]; out += src[i++]; continue; }\n out += src[i];\n if (src[i++] === '\"') {break;}\n }\n } else if (src[i] === '/' && src[i + 1] === '/') {\n // Single-line comment — skip to end of line.\n while (i < len && src[i] !== '\\n') {i++;}\n } else if (src[i] === '/' && src[i + 1] === '*') {\n // Multi-line comment — skip to *\\/\n i += 2;\n while (i < len && !(src[i] === '*' && src[i + 1] === '/')) {i++;}\n i += 2;\n } else {\n out += src[i++];\n }\n }\n // Remove trailing commas before } or ] (not valid JSON but allowed in JSONC).\n return out.replace(/,(\\s*[}\\]])/g, '$1');\n}\n\nexport async function readJsonWithDiagnostics<T = unknown>(p: string): Promise<JsonReadResult<T>> {\n const diagnostics: Diagnostic[] = [];\n try {\n const raw = await fsp.readFile(p, \"utf8\");\n try {\n const stripped = p.endsWith('.jsonc') ? stripJsonComments(raw) : raw;\n const data = JSON.parse(stripped) as T;\n return { ok: true, data, diagnostics };\n } catch (e) {\n diagnostics.push({ level: \"error\", code: \"JSON_PARSE_FAILED\", message: `Failed to parse JSON: ${p}`, detail: String(e) });\n return { ok: false, diagnostics };\n }\n } catch (e) {\n diagnostics.push({ level: \"error\", code: \"FILE_READ_FAILED\", message: `Failed to read file: ${p}`, detail: String(e) });\n return { ok: false, diagnostics };\n }\n}\n\n/** Shallow pick of defined fields only. */\nexport function pickDefined<T extends Record<string, unknown>>(obj: T | undefined): Partial<T> {\n if (!obj) { return {}; }\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n if (v !== undefined) { out[k] = v; }\n }\n return out as Partial<T>;\n}\n\n/** Deep merge (objects/arrays), ignoring `undefined` on the overlay. */\nexport function mergeDefined<T>(base: T, over?: Partial<T>): T {\n if (!over) { return base; }\n if (Array.isArray(base) && Array.isArray(over)) {\n return [...base, ...over.filter(v => v !== undefined)] as unknown as T;\n }\n if (isPlainObject(base) && isPlainObject(over)) {\n const baseObj: Record<string, unknown> = base;\n const out: Record<string, unknown> = { ...baseObj };\n for (const [k, v] of Object.entries(over)) {\n if (v === undefined) { continue; }\n if (isPlainObject(baseObj[k]) && isPlainObject(v)) {\n out[k] = mergeDefined(baseObj[k], v);\n } else if (Array.isArray(baseObj[k]) && Array.isArray(v)) {\n out[k] = mergeDefined(baseObj[k], v);\n } else {\n out[k] = v;\n }\n }\n return out as T;\n }\n // Different types → overlay wins if defined\n return (over as T) ?? base;\n}\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && Object.getPrototypeOf(v) === Object.prototype;\n}\n\n/**\n * Policy for a single top-level field during platform ← project merge.\n * - `platform-only` — ignore the project layer's value (emit warning upstream).\n * - `mergeable` — deep-merge (project overrides platform).\n * - `project-only` — take the project value as-is; platform layer is dropped.\n */\nexport type FieldMergePolicy = \"platform-only\" | \"mergeable\" | \"project-only\";\n\nexport interface MergeWithFieldPolicyResult<T> {\n /** Merged config object. */\n value: T;\n /** Top-level field names where the project layer was ignored because the field is `platform-only`. */\n ignoredProjectFields: string[];\n /** Per-field provenance: `'platform'`, `'project'`, or `'both'`. */\n sources: Record<string, \"platform\" | \"project\" | \"both\">;\n}\n\n/**\n * Merge two config layers using a per-field policy map.\n *\n * The `policy` map is keyed by top-level field names on the config object.\n * Fields missing from the map default to `mergeable` — i.e. deep-merge with\n * project overriding platform.\n */\nexport function mergeWithFieldPolicy<T extends object>(\n platform: Partial<T> | undefined,\n project: Partial<T> | undefined,\n policy: Partial<Record<keyof T, FieldMergePolicy>>,\n): MergeWithFieldPolicyResult<T> {\n const out: Record<string, unknown> = {};\n const sources: Record<string, \"platform\" | \"project\" | \"both\"> = {};\n const ignoredProjectFields: string[] = [];\n\n const keys = new Set<string>([\n ...Object.keys(platform ?? {}),\n ...Object.keys(project ?? {}),\n ]);\n\n for (const key of keys) {\n const platformValue = (platform as Record<string, unknown> | undefined)?.[key];\n const projectValue = (project as Record<string, unknown> | undefined)?.[key];\n const fieldPolicy = (policy as Record<string, FieldMergePolicy | undefined>)[key] ?? \"mergeable\";\n\n const hasPlatform = platformValue !== undefined;\n const hasProject = projectValue !== undefined;\n\n if (fieldPolicy === \"platform-only\") {\n if (hasProject) { ignoredProjectFields.push(key); }\n if (hasPlatform) {\n out[key] = platformValue;\n sources[key] = \"platform\";\n }\n continue;\n }\n\n if (fieldPolicy === \"project-only\") {\n if (hasProject) {\n out[key] = projectValue;\n sources[key] = \"project\";\n } else if (hasPlatform) {\n // Platform layer carries a value for a project-only field — drop it silently;\n // it has no semantic meaning at the platform layer.\n continue;\n }\n continue;\n }\n\n // mergeable\n if (hasPlatform && hasProject) {\n out[key] = mergeDefined(platformValue as never, projectValue as never);\n sources[key] = \"both\";\n } else if (hasPlatform) {\n out[key] = platformValue;\n sources[key] = \"platform\";\n } else if (hasProject) {\n out[key] = projectValue;\n sources[key] = \"project\";\n }\n }\n\n return { value: out as T, ignoredProjectFields, sources };\n}\n\nconst SYSTEM_DEFAULTS = {\n profiles: { rootDir: '.kb/profiles', defaultName: 'default', strict: true }\n} as const;\n\nexport interface ResolveConfigArgs<TConfig, _TEnvMap = unknown> {\n defaults: TConfig;\n fileConfig?: Partial<TConfig>;\n envMapper?: (env: NodeJS.ProcessEnv) => Partial<TConfig> | undefined; // product supplies mapping\n cliOverrides?: Partial<TConfig>;\n validate?: (cfg: TConfig) => { ok: boolean; diagnostics?: Diagnostic[] }; // product supplies validation\n}\n\n/**\n * Generic resolver: defaults → fileConfig → envMapper(process.env) → cliOverrides.\n * No domain keys inside; mapping/validation provided by the product/shared layer.\n */\nexport function resolveConfig<TConfig>(args: ResolveConfigArgs<TConfig>): { value: TConfig; diagnostics: Diagnostic[] } {\n const diagnostics: Diagnostic[] = [];\n const envPart = args.envMapper?.(process.env) ?? {};\n\n const merged = mergeDefined(\n mergeDefined(\n mergeDefined(mergeDefined(structuredClone(SYSTEM_DEFAULTS) as unknown as Partial<TConfig>, structuredClone(args.defaults)), args.fileConfig),\n envPart,\n ),\n args.cliOverrides,\n ) as TConfig;\n\n if (args.validate) {\n const res = args.validate(merged);\n if (!res.ok) {\n diagnostics.push({ level: \"error\", code: \"CONFIG_VALIDATION_FAILED\", message: \"Configuration did not pass validation.\" });\n if (res.diagnostics) { diagnostics.push(...res.diagnostics); }\n } else if (res.diagnostics?.length) {\n diagnostics.push(...res.diagnostics);\n }\n }\n\n return { value: merged, diagnostics };\n}\n\nexport { SYSTEM_DEFAULTS };\nexport type { ProfilesConfig, KBConfig };","/**\n * @module @kb-labs/core/utils/env\n * Small helpers to convert ENV strings to typed values.\n */\n\nexport function toBool(v: string | undefined): boolean | undefined {\n if (v === undefined) {return undefined;}\n const s = v.trim().toLowerCase();\n if (s === \"1\" || s === \"true\" || s === \"yes\" || s === \"on\") {return true;}\n if (s === \"0\" || s === \"false\" || s === \"no\" || s === \"off\") {return false;}\n return undefined; // unknown → let caller decide default\n}\n\nexport function toInt(v: string | undefined): number | undefined {\n if (v === undefined) {return undefined;}\n const n = Number(v);\n return Number.isFinite(n) ? n : undefined;\n}","/**\n * @module @kb-labs/core/config/utils/product-normalize\n * Product ID normalization between code (camelCase) and filesystem (kebab-case)\n */\n\nconst FS_MAP = new Map([\n ['aiReview', 'ai-review'],\n ['aiDocs', 'ai-docs'],\n ['devlink', 'devlink'],\n ['release', 'release'],\n ['devkit', 'devkit'],\n ['mind', 'mind'],\n ['workflow', 'workflow'],\n ['analytics', 'analytics'],\n]);\n\n/**\n * Convert product ID to filesystem kebab-case format\n * @param id Product ID (e.g., 'aiReview', 'mind', 'workflow')\n * @returns kebab-case string for filesystem paths\n */\nexport function toFsProduct(id: string): string {\n return FS_MAP.get(id) ?? id;\n}\n\n/**\n * Convert filesystem kebab-case key to product ID\n * @param fsKey kebab-case string from filesystem\n * @returns Product ID (camelCase if mapped, original otherwise)\n */\nexport function toConfigProduct(fsKey: string): string {\n for (const [k, v] of FS_MAP) {\n if (v === fsKey) {return k;}\n }\n return fsKey;\n}\n\n/**\n * Check if a string is a known product ID\n */\nexport function isValidProductId(value: string): boolean {\n return FS_MAP.has(value);\n}\n\n/**\n * Get all known product IDs\n */\nexport function getAllProductIds(): string[] {\n return Array.from(FS_MAP.keys());\n}\n","import path from 'node:path';\n\n/**\n * Get profiles root directory\n */\nexport function getProfilesRootDir(cwd: string): string {\n return path.join(cwd, '.kb', 'profiles');\n}\n\n/**\n * Get product configuration directory\n */\nexport function getProductConfigDir(cwd: string, fsProduct: string): string {\n return path.join(cwd, '.kb', fsProduct);\n}\n\n/**\n * Get product configuration file path\n */\nexport function getProductConfigPath(cwd: string, fsProduct: string): string {\n return path.join(getProductConfigDir(cwd, fsProduct), `${fsProduct}.config.json`);\n}\n\n/**\n * Get .kb root directory\n */\nexport function getKbRootDir(cwd: string): string {\n return path.join(cwd, '.kb');\n}\n\n/**\n * Get lockfile path\n */\nexport function getLockfilePath(cwd: string): string {\n return path.join(getKbRootDir(cwd), 'lock.json');\n}\n\n","// Core exports\nexport * from './types/index.js';\nexport * from './runtime/index.js';\nexport * from './utils/index.js';\nexport * from './utils/paths.js';\n\n// Enhanced config system exports\nexport * from './errors/kb-error.js';\nexport * from './cache/fs-cache.js';\nexport * from './hash/config-hash.js';\nexport * from './api/read-config.js';\nexport * from './api/read-kb-config.js';\nexport * from './merge/layered-merge.js';\nexport * from './api/product-config.js';\nexport * from './preset/resolve-preset.js';\nexport * from './lockfile/lockfile.js';\nexport * from './types/preset.js';\nexport * from './profiles/types.js';\nexport * from './profiles/loader.js';\nexport * from './profiles/scope-selector.js';\nexport * from './profiles/resolver.js';\n\n// Init system exports\nexport * from './types/init.js';\nexport * from './api/init-workspace.js';\nexport * from './api/upsert-lockfile.js';\nexport * from './utils/fs-atomic.js';\n\n// Re-export clearCaches for convenience\nexport { clearCaches } from './cache/fs-cache.js';\n\n// Validation API\nexport { validateProductConfig, registerProductSchema } from './validation/validate-config.js';\n\n// Overlay primitives (`mergeOverlay`, `loadOverlays`) used by the layered\n// loader below and by services that need raw access.\nexport * from './overlay/index.js';\n\n// Canonical layered config loader: platform → project → project overlays.\n// Use this when reading the raw effective config (e.g. plugin sections).\nexport * from './api/effective-config.js';\n","/**\n * @module @kb-labs/core/config/cache/fs-cache\n * LRU cache for filesystem reads with clearCaches() support\n */\n\nimport { promises as fsp } from 'node:fs';\n\ninterface CacheEntry {\n data: unknown;\n mtime: number;\n size: number;\n timestamp: number;\n}\n\ninterface CacheKey {\n absPath: string;\n mtime: number;\n size: number;\n}\n\nclass LRUCache<K, V> {\n private cache = new Map<K, V>();\n private maxSize: number;\n\n constructor(maxSize = 100) {\n this.maxSize = maxSize;\n }\n\n get(key: K): V | undefined {\n const value = this.cache.get(key);\n if (value !== undefined) {\n // Move to end (most recently used)\n this.cache.delete(key);\n this.cache.set(key, value);\n }\n return value;\n }\n\n set(key: K, value: V): void {\n if (this.cache.has(key)) {\n this.cache.delete(key);\n } else if (this.cache.size >= this.maxSize) {\n // Remove least recently used (first item)\n const firstKey = this.cache.keys().next().value;\n if (firstKey !== undefined) {\n this.cache.delete(firstKey);\n }\n }\n this.cache.set(key, value);\n }\n\n delete(key: K): boolean {\n return this.cache.delete(key);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n size(): number {\n return this.cache.size;\n }\n}\n\nclass FSCache {\n private cache = new LRUCache<string, CacheEntry>(100);\n private keyCache = new LRUCache<string, CacheKey>(100);\n\n /**\n * Generate cache key from file path, mtime, and size\n */\n private async getCacheKey(absPath: string): Promise<CacheKey> {\n const keyStr = `key:${absPath}`;\n let key = this.keyCache.get(keyStr);\n \n if (!key) {\n try {\n const stats = await fsp.stat(absPath);\n key = {\n absPath,\n mtime: stats.mtime.getTime(),\n size: stats.size,\n };\n this.keyCache.set(keyStr, key);\n } catch {\n // File doesn't exist or can't be read\n return { absPath, mtime: 0, size: 0 };\n }\n }\n \n return key;\n }\n\n /**\n * Get cached file data if available and not stale\n */\n async get(absPath: string): Promise<unknown> {\n const key = await this.getCacheKey(absPath);\n const cacheKey = `${key.absPath}|${key.mtime}|${key.size}`;\n \n const entry = this.cache.get(cacheKey);\n if (!entry) {\n return null;\n }\n\n // Check if file has been modified since cache\n try {\n const stats = await fsp.stat(absPath);\n if (stats.mtime.getTime() !== key.mtime || stats.size !== key.size) {\n // File changed, remove from cache and update key cache\n this.cache.delete(cacheKey);\n // Update the key cache with new stats\n const newKey = {\n absPath,\n mtime: stats.mtime.getTime(),\n size: stats.size,\n };\n this.keyCache.set(`key:${absPath}`, newKey);\n return null;\n }\n } catch {\n // File no longer exists\n this.cache.delete(cacheKey);\n return null;\n }\n\n return entry.data;\n }\n\n /**\n * Cache file data\n */\n async set(absPath: string, data: unknown): Promise<void> {\n const key = await this.getCacheKey(absPath);\n const cacheKey = `${key.absPath}|${key.mtime}|${key.size}`;\n \n this.cache.set(cacheKey, {\n data,\n mtime: key.mtime,\n size: key.size,\n timestamp: Date.now(),\n });\n }\n\n /**\n * Clear all caches\n */\n clearCaches(): void {\n this.cache.clear();\n this.keyCache.clear();\n }\n\n /**\n * Get cache statistics\n */\n getStats(): { size: number; keySize: number } {\n return {\n size: this.cache.size(),\n keySize: this.keyCache.size(),\n };\n }\n}\n\n// Singleton instance\nconst fsCache = new FSCache();\n\nexport { fsCache, FSCache };\n\n/**\n * Clear all filesystem caches\n */\nexport function clearCaches(): void {\n fsCache.clearCaches();\n}\n","/**\n * @module @kb-labs/core/config/hash/config-hash\n * SHA256 hash computation for configuration objects (lockfile generation)\n */\n\nimport { createHash } from 'node:crypto';\n\n/**\n * Compute SHA256 hash of a configuration object\n * @param obj Configuration object to hash\n * @returns SHA256 hash as hex string\n */\nexport function computeConfigHash(obj: unknown): string {\n // Normalize object for consistent hashing\n const normalized = normalizeForHash(obj);\n const json = JSON.stringify(normalized, null, 0);\n return createHash('sha256').update(json, 'utf8').digest('hex');\n}\n\n/**\n * Normalize object for consistent hashing\n * - Sort object keys\n * - Remove undefined values\n * - Convert to stable representation\n */\nfunction normalizeForHash(obj: unknown): unknown {\n if (obj === null || obj === undefined) {\n return null;\n }\n\n if (typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(normalizeForHash);\n }\n\n // Sort object keys for consistent ordering\n const record = obj as Record<string, unknown>;\n const sortedKeys = Object.keys(record).sort();\n const normalized: Record<string, unknown> = {};\n\n for (const key of sortedKeys) {\n const value = record[key];\n if (value !== undefined) {\n normalized[key] = normalizeForHash(value);\n }\n }\n\n return normalized;\n}\n\n/**\n * Compute hash for multiple config objects\n * @param configs Array of config objects\n * @returns Combined SHA256 hash\n */\nexport function computeConfigsHash(configs: Record<string, unknown>[]): string {\n const combined = configs.reduce<Record<string, unknown>>((acc, config) => {\n return { ...acc, ...config };\n }, {});\n return computeConfigHash(combined);\n}\n","/**\n * @module @kb-labs/core/config/api/read-config\n * Enhanced config file reading with YAML support and find-up\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\nimport { extname } from 'node:path';\nimport YAML from 'yaml';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\nimport { fsCache } from '../cache/fs-cache';\n\nexport interface ConfigFileResult {\n data: unknown;\n format: 'json' | 'yaml';\n path: string;\n}\n\nfunction stripJsonComments(src: string): string {\n let out = '';\n let i = 0;\n const len = src.length;\n while (i < len) {\n if (src[i] === '\"') {\n out += src[i++];\n while (i < len) {\n if (src[i] === '\\\\') { out += src[i++]; out += src[i++]; continue; }\n out += src[i];\n if (src[i++] === '\"') { break; }\n }\n } else if (src[i] === '/' && src[i + 1] === '/') {\n while (i < len && src[i] !== '\\n') { i++; }\n } else if (src[i] === '/' && src[i + 1] === '*') {\n i += 2;\n while (i < len && !(src[i] === '*' && src[i + 1] === '/')) { i++; }\n i += 2;\n } else {\n out += src[i++];\n }\n }\n return out.replace(/,(\\s*[}\\]])/g, '$1');\n}\n\n/**\n * Read config file with format detection and caching\n */\nexport async function readConfigFile(filePath: string): Promise<ConfigFileResult> {\n const absPath = path.resolve(filePath);\n \n // Check cache first\n const cached = await fsCache.get(absPath);\n if (cached !== null && cached !== undefined) {\n return cached as ConfigFileResult;\n }\n\n try {\n const raw = await fsp.readFile(absPath, 'utf-8');\n const ext = extname(absPath).toLowerCase();\n \n let data: unknown;\n let format: 'json' | 'yaml';\n \n if (ext === '.yaml' || ext === '.yml') {\n data = YAML.parse(raw);\n format = 'yaml';\n } else {\n const jsonSource = ext === '.jsonc' ? stripJsonComments(raw) : raw;\n data = JSON.parse(jsonSource);\n format = 'json';\n }\n \n const result: ConfigFileResult = { data, format, path: absPath };\n \n // Cache the result\n await fsCache.set(absPath, result);\n \n return result;\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new KbError(\n 'ERR_CONFIG_INVALID',\n `Failed to parse config file: ${filePath}`,\n ERROR_HINTS.ERR_CONFIG_INVALID,\n { filePath, error: error.message }\n );\n }\n \n throw new KbError(\n 'ERR_CONFIG_NOT_FOUND',\n `Config file not found: ${filePath}`,\n ERROR_HINTS.ERR_CONFIG_NOT_FOUND,\n { filePath, error: error instanceof Error ? error.message : String(error) }\n );\n }\n}\n\n/**\n * Find nearest config file walking up from startDir to git root\n * Prioritizes .kb/kb-labs.config.* over kb-labs.config.* for backward compatibility\n */\nasync function findNearestConfig(\n startDir: string,\n filenames: string[] = []\n): Promise<{ path: string | null; tried: string[] }> {\n const start = path.resolve(startDir);\n const tried: string[] = [];\n let dir = start;\n\n // Default filenames if not provided: prioritize .kb/ location\n const defaultFilenames = [\n '.kb/kb.config.yaml',\n '.kb/kb.config.yml',\n '.kb/kb.config.json',\n ];\n const searchFilenames = filenames.length > 0 ? filenames : defaultFilenames;\n\n while (true) {\n for (const filename of searchFilenames) {\n const candidate = path.join(dir, filename);\n tried.push(candidate);\n \n try {\n await fsp.access(candidate);\n return { path: candidate, tried };\n } catch {\n // Continue to next filename\n }\n }\n \n const parent = path.dirname(dir);\n if (parent === dir) {\n // Reached filesystem root\n break;\n }\n dir = parent;\n }\n \n return { path: null, tried };\n}\n\n/**\n * Find git root directory\n */\nexport async function findGitRoot(startDir: string): Promise<string | null> {\n let dir = path.resolve(startDir);\n \n while (true) {\n try {\n await fsp.access(path.join(dir, '.git'));\n return dir;\n } catch {\n const parent = path.dirname(dir);\n if (parent === dir) {\n break;\n }\n dir = parent;\n }\n }\n \n return null;\n}\n\n/**\n * Read workspace config with find-up to git root\n */\nexport async function readWorkspaceConfig(cwd: string): Promise<ConfigFileResult | null> {\n const { path: configPath } = await findNearestConfig(cwd);\n \n if (!configPath) {\n return null;\n }\n \n return readConfigFile(configPath);\n}\n","/**\n * @module @kb-labs/core-config/api/read-kb-config\n * Find + read kb.config.* files (product-level workspace config).\n */\n\nimport path from 'node:path';\nimport { promises as fsp } from 'node:fs';\nimport { findGitRoot, readConfigFile, type ConfigFileResult } from './read-config';\n\nconst KB_CONFIG_FILENAMES = [\n 'kb.config.jsonc',\n 'kb.config.json',\n 'kb.config.yaml',\n 'kb.config.yml',\n '.kb/kb.config.jsonc',\n '.kb/kb.config.json',\n '.kb/kb.config.yaml',\n '.kb/kb.config.yml',\n];\n\nexport type KbConfigResult = ConfigFileResult;\n\nexport async function findKbConfig(\n cwd: string,\n filenames: string[] = KB_CONFIG_FILENAMES\n): Promise<{ path: string | null; tried: string[] }> {\n const tried: string[] = [];\n const gitRoot = await findGitRoot(cwd);\n const stopDir = gitRoot || path.parse(cwd).root;\n let dir = path.resolve(cwd);\n\n while (true) {\n for (const filename of filenames) {\n const candidate = path.join(dir, filename);\n tried.push(candidate);\n try {\n await fsp.access(candidate);\n return { path: candidate, tried };\n } catch {\n // continue\n }\n }\n\n if (dir === stopDir || dir === path.dirname(dir)) {\n break;\n }\n\n dir = path.dirname(dir);\n }\n\n return { path: null, tried };\n}\n\nexport async function readKbConfig(cwd: string): Promise<KbConfigResult | null> {\n const { path } = await findKbConfig(cwd);\n if (!path) {\n return null;\n }\n return readConfigFile(path);\n}\n\n","/**\n * @module @kb-labs/core/config/merge/layered-merge\n * Layered merge with trace for configuration layers\n */\n\nimport type { ConfigLayer, MergeTrace } from '../types';\n\nexport interface LayeredMergeResult {\n merged: Record<string, unknown>;\n trace: MergeTrace[];\n}\n\n/**\n * Merge configuration layers with detailed trace\n * Arrays are overwritten (not merged)\n * Objects are deeply merged\n */\nexport function layeredMergeWithTrace(layers: ConfigLayer[]): LayeredMergeResult {\n const trace: MergeTrace[] = [];\n \n const isPlainObject = (v: unknown): v is Record<string, unknown> =>\n v !== null && typeof v === 'object' && !Array.isArray(v) && Object.getPrototypeOf(v) === Object.prototype;\n\n const merge = (base: unknown, overlay: unknown, layer: ConfigLayer, path: string[] = []): unknown => {\n // Handle array overwrite\n if (Array.isArray(base) && Array.isArray(overlay)) {\n trace.push({\n path: path.join('.'),\n source: layer.source,\n type: 'overwriteArray',\n layer: layer.label,\n profileRef: layer.source.includes('profile') ? extractProfileRef(layer.source) : undefined,\n presetRef: layer.source.includes('preset') ? extractPresetRef(layer.source) : undefined,\n version: extractVersion(layer.source),\n });\n return overlay;\n }\n \n // Handle object merge\n if (isPlainObject(base) && isPlainObject(overlay)) {\n const result: Record<string, unknown> = { ...base };\n \n for (const [key, value] of Object.entries(overlay)) {\n if (key in base) {\n result[key] = merge(base[key], value, layer, [...path, key]);\n } else {\n trace.push({\n path: [...path, key].join('.'),\n source: layer.source,\n type: 'set',\n layer: layer.label,\n profileRef: layer.source.includes('profile') ? extractProfileRef(layer.source) : undefined,\n presetRef: layer.source.includes('preset') ? extractPresetRef(layer.source) : undefined,\n version: extractVersion(layer.source),\n });\n result[key] = value;\n }\n }\n \n return result;\n }\n \n // Different types or primitive values - overlay wins\n trace.push({\n path: path.join('.'),\n source: layer.source,\n type: 'set',\n layer: layer.label,\n profileRef: layer.source.includes('profile') ? extractProfileRef(layer.source) : undefined,\n presetRef: layer.source.includes('preset') ? extractPresetRef(layer.source) : undefined,\n version: extractVersion(layer.source),\n });\n \n return overlay ?? base;\n };\n \n const merged = layers.reduce<Record<string, unknown>>((acc, layer) => {\n return merge(acc, layer.value, layer) as Record<string, unknown>;\n }, {});\n\n return { merged, trace };\n}\n\n/**\n * Extract profile ref from source string\n */\nfunction extractProfileRef(source: string): string | undefined {\n const match = source.match(/profile[^:]*:[^@]+@(.+)/);\n return match?.[1];\n}\n\n/**\n * Extract preset ref from source string\n */\nfunction extractPresetRef(source: string): string | undefined {\n const match = source.match(/preset[^:]*:@(.+)/);\n return match?.[1];\n}\n\n/**\n * Extract version from source string\n */\nfunction extractVersion(source: string): string | undefined {\n const match = source.match(/@([^:]+)/);\n return match?.[1];\n}\n","/**\n * @module @kb-labs/core/config/preset/resolve-preset\n * Org preset resolution with offline-first npm package loading\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\nimport { toFsProduct } from '../utils/product-normalize';\n\nexport interface PresetInfo {\n name: string;\n version: string;\n path: string;\n config: Record<string, unknown>;\n}\n\n/**\n * Resolve org preset package (offline-first)\n */\nexport async function resolvePreset(\n presetRef: string,\n cwd: string\n): Promise<PresetInfo> {\n // Parse preset reference (e.g., \"@kb-labs/org-preset@1.3.2\")\n const [name, version] = parsePresetRef(presetRef);\n \n // Try local node_modules first (offline-first)\n const localPath = path.join(cwd, 'node_modules', name);\n try {\n const presetInfo = await loadPresetFromPath(localPath, name, version);\n if (presetInfo) {\n return presetInfo;\n }\n } catch {\n // Local preset not found, continue to network resolution\n }\n \n // Try network resolution (this would be implemented with npm/pnpm APIs)\n // For now, we'll throw an error if local resolution fails\n throw new KbError(\n 'ERR_PRESET_NOT_RESOLVED',\n `Preset not found: ${presetRef}`,\n ERROR_HINTS.ERR_PRESET_NOT_RESOLVED,\n { presetRef, cwd }\n );\n}\n\n/**\n * Parse preset reference into name and version\n */\nfunction parsePresetRef(presetRef: string): [string, string] {\n const atIndex = presetRef.lastIndexOf('@');\n if (atIndex === -1) {\n throw new KbError(\n 'ERR_PRESET_REF_INVALID',\n `Invalid preset reference: ${presetRef}`,\n 'Preset references must include version (e.g., @kb-labs/org-preset@1.3.2)',\n { presetRef }\n );\n }\n \n const name = presetRef.substring(0, atIndex);\n const version = presetRef.substring(atIndex + 1);\n \n if (!name || !version) {\n throw new KbError(\n 'ERR_PRESET_REF_INVALID',\n `Invalid preset reference: ${presetRef}`,\n 'Preset references must include both name and version',\n { presetRef }\n );\n }\n \n return [name, version];\n}\n\n/**\n * Load preset from local path\n */\nasync function loadPresetFromPath(\n presetPath: string,\n name: string,\n version: string\n): Promise<PresetInfo | null> {\n try {\n // Check if preset directory exists\n await fsp.access(presetPath);\n \n // Load package.json to verify version\n const packageJsonPath = path.join(presetPath, 'package.json');\n const packageJson = JSON.parse(await fsp.readFile(packageJsonPath, 'utf-8'));\n \n // Verify version matches (supports semver ranges)\n if (!versionMatches(packageJson.version, version)) {\n return null;\n }\n \n // Load preset config\n const configPath = path.join(presetPath, 'config.defaults.json');\n const config = JSON.parse(await fsp.readFile(configPath, 'utf-8'));\n \n return {\n name,\n version: packageJson.version,\n path: presetPath,\n config,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Check if version matches (simple semver range support)\n */\nfunction versionMatches(actualVersion: string, requiredVersion: string): boolean {\n // Simple exact match for now\n // TODO: Implement proper semver range matching\n if (requiredVersion.startsWith('^')) {\n const major = requiredVersion.substring(1).split('.')[0];\n const actualMajor = actualVersion.split('.')[0];\n return major === actualMajor;\n }\n \n return actualVersion === requiredVersion;\n}\n\n/**\n * Get preset config for a specific product\n */\nexport function getPresetConfigForProduct(\n preset: PresetInfo,\n product: string\n): Record<string, unknown> {\n const fsProduct = toFsProduct(product);\n const products = preset.config['products'];\n if (products && typeof products === 'object' && !Array.isArray(products)) {\n return (products as Record<string, Record<string, unknown>>)[fsProduct] ?? {};\n }\n return {};\n}\n\n/**\n * Get preset metadata\n */\nexport function getPresetMetadata(preset: PresetInfo): {\n name: string;\n version: string;\n path: string;\n products: string[];\n} {\n return {\n name: preset.name,\n version: preset.version,\n path: preset.path,\n products: Object.keys(preset.config.products || {}),\n };\n}\n","/**\n * @module @kb-labs/core/config/lockfile/lockfile\n * Lockfile generation and management\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\n// Note: KbError and ERROR_HINTS are available if needed for future error handling\nimport { computeConfigHash } from '../hash/config-hash';\nimport { toFsProduct } from '../utils/product-normalize';\n\nexport interface LockfileData {\n $schema?: string;\n schemaVersion: '1.0';\n orgPreset?: string;\n profile?: string;\n policyBundle?: string;\n hashes: Record<string, string>;\n generatedAt: string;\n}\n\n/**\n * Read lockfile from workspace\n */\nexport async function readLockfile(cwd: string): Promise<LockfileData | null> {\n const lockfilePath = path.join(cwd, '.kb', 'lock.json');\n \n try {\n const lockfileData = await fsp.readFile(lockfilePath, 'utf-8');\n return JSON.parse(lockfileData) as LockfileData;\n } catch {\n // Try old location for backward compatibility\n const oldLockfilePath = path.join(cwd, '.kb', 'lockfile.json');\n try {\n const lockfileData = await fsp.readFile(oldLockfilePath, 'utf-8');\n return JSON.parse(lockfileData) as LockfileData;\n } catch {\n return null;\n }\n }\n}\n\n/**\n * Stable JSON serialization with sorted keys for predictable diffs\n */\nfunction stableStringify(obj: unknown, space = 2): string {\n return JSON.stringify(obj, (key, value: unknown) => {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return Object.keys(value as Record<string, unknown>)\n .sort()\n .reduce((sorted: Record<string, unknown>, k) => {\n sorted[k] = (value as Record<string, unknown>)[k];\n return sorted;\n }, {});\n }\n return value;\n }, space);\n}\n\n/**\n * Write lockfile to workspace\n */\nexport async function writeLockfile(\n cwd: string,\n lockfileData: LockfileData\n): Promise<void> {\n const lockfileDir = path.join(cwd, '.kb');\n const lockfilePath = path.join(lockfileDir, 'lock.json');\n \n // Ensure .kb directory exists\n await fsp.mkdir(lockfileDir, { recursive: true });\n \n // Add schema if not present\n if (!lockfileData.$schema) {\n lockfileData.$schema = 'https://schemas.kb-labs.dev/lockfile.schema.json';\n }\n \n // Use atomic write with stable key ordering\n const { writeFileAtomic } = await import('../utils/fs-atomic');\n await writeFileAtomic(lockfilePath, stableStringify(lockfileData, 2) + '\\n');\n}\n\n/**\n * Update lockfile with new hashes\n */\nexport async function updateLockfile(\n cwd: string,\n updates: {\n orgPreset?: string;\n profile?: string;\n policyBundle?: string;\n configHashes?: Record<string, unknown>;\n }\n): Promise<LockfileData> {\n const existing = await readLockfile(cwd);\n \n const lockfileData: LockfileData = {\n $schema: 'https://schemas.kb-labs.dev/lockfile.schema.json',\n schemaVersion: '1.0',\n orgPreset: updates.orgPreset || existing?.orgPreset,\n profile: updates.profile || existing?.profile,\n policyBundle: updates.policyBundle || existing?.policyBundle,\n hashes: { ...existing?.hashes },\n generatedAt: new Date().toISOString(),\n };\n \n // Update config hashes\n if (updates.configHashes) {\n for (const [product, config] of Object.entries(updates.configHashes)) {\n const fsProduct = toFsProduct(product as string);\n const hash = computeConfigHash(config);\n lockfileData.hashes[fsProduct] = hash;\n }\n }\n \n await writeLockfile(cwd, lockfileData);\n return lockfileData;\n}\n\n/**\n * Get config hash for a product\n */\nexport function getLockfileConfigHash(product: string, config: unknown): string {\n return computeConfigHash(config);\n}\n\n/**\n * Check if lockfile is up to date\n */\nexport async function isLockfileUpToDate(\n cwd: string,\n configs: Record<string, unknown>\n): Promise<boolean> {\n const lockfile = await readLockfile(cwd);\n if (!lockfile) {\n return false;\n }\n \n for (const [product, config] of Object.entries(configs)) {\n const fsProduct = toFsProduct(product as string);\n const currentHash = computeConfigHash(config);\n const lockfileHash = lockfile.hashes[fsProduct];\n \n if (currentHash !== lockfileHash) {\n return false;\n }\n }\n \n return true;\n}\n\n/**\n * Validate lockfile schema\n */\nexport function validateLockfile(lockfileData: unknown): lockfileData is LockfileData {\n if (!lockfileData || typeof lockfileData !== 'object') {\n return false;\n }\n\n const data = lockfileData as Record<string, unknown>;\n\n if (data['schemaVersion'] !== '1.0') {\n return false;\n }\n\n if (!data['hashes'] || typeof data['hashes'] !== 'object') {\n return false;\n }\n\n if (!data['generatedAt'] || typeof data['generatedAt'] !== 'string') {\n return false;\n }\n\n return true;\n}\n\n/**\n * Get lockfile statistics\n */\nexport function getLockfileStats(lockfileData: LockfileData): {\n productCount: number;\n hasOrgPreset: boolean;\n hasProfile: boolean;\n hasPolicyBundle: boolean;\n generatedAt: Date;\n} {\n return {\n productCount: Object.keys(lockfileData.hashes).length,\n hasOrgPreset: !!lockfileData.orgPreset,\n hasProfile: !!lockfileData.profile,\n hasPolicyBundle: !!lockfileData.policyBundle,\n generatedAt: new Date(lockfileData.generatedAt),\n };\n}\n","/**\n * @module @kb-labs/core/config/api/product-config\n * High-level product configuration resolver with layered merge\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\n// Note: KbError and ERROR_HINTS are available if needed for future error handling\nimport { readWorkspaceConfig } from './read-config';\nimport { layeredMergeWithTrace } from '../merge/layered-merge';\nimport { toFsProduct } from '../utils/product-normalize';\nimport type { ResolveOptions, ProductConfigResult, ConfigLayer } from '../types';\nimport { computeConfigHash } from '../hash/config-hash';\nimport { resolvePreset, getPresetConfigForProduct } from '../preset/resolve-preset';\nimport { updateLockfile } from '../lockfile/lockfile';\n\n/**\n * Get product configuration with layered merge and trace\n */\nexport async function getProductConfig<T = Record<string, unknown>>(\n opts: ResolveOptions,\n schema: unknown\n): Promise<ProductConfigResult<T>> {\n const { cwd, product, cli = {}, writeFinal = false, profileLayer } = opts;\n const fsProduct = toFsProduct(product);\n \n // Read workspace configuration\n const workspaceConfig = await readWorkspaceConfig(cwd);\n \n // Build configuration layers\n const layers: ConfigLayer[] = [];\n \n // 1. Runtime defaults\n layers.push({\n label: 'runtime',\n value: getRuntimeDefaults(product),\n source: 'runtime:defaults',\n });\n \n // 2. Profile defaults\n if (profileLayer && profileLayer.products) {\n // profileLayer.products is already the product-specific overlay (not a map of products)\n const profileOverlay = profileLayer.products as Record<string, unknown>;\n\n layers.push({\n label: 'profile',\n value: profileOverlay,\n source: profileLayer.source,\n });\n\n if (profileLayer.scope && profileLayer.scope.products) {\n // profileLayer.scope.products is already the scope-specific overlay\n const scopeOverlay = profileLayer.scope.products as Record<string, unknown>;\n layers.push({\n label: 'profile-scope',\n value: scopeOverlay,\n source: profileLayer.scope.source,\n });\n }\n } else {\n layers.push({\n label: 'profile',\n value: {},\n source: 'profile:none',\n });\n }\n \n // 3. Preset defaults (resolve org preset if configured)\n let presetConfig = {};\n if (workspaceConfig?.data) {\n const workspaceData = workspaceConfig.data as Record<string, unknown>;\n if (workspaceData['$extends']) {\n try {\n const preset = await resolvePreset(workspaceData['$extends'] as string, cwd);\n presetConfig = getPresetConfigForProduct(preset, product);\n \n layers.push({\n label: 'preset',\n value: presetConfig,\n source: `preset:${workspaceData['$extends']}`,\n });\n } catch (error) {\n // Preset resolution failed, continue without preset\n console.warn(`Warning: Could not resolve preset ${workspaceData['$extends']}:`, error);\n }\n }\n }\n \n if (Object.keys(presetConfig).length === 0) {\n layers.push({\n label: 'preset',\n value: {},\n source: 'preset:none',\n });\n }\n \n // 4. Workspace config\n if (workspaceConfig?.data) {\n const workspaceData = (workspaceConfig.data as { products?: Record<string, unknown> })?.products?.[fsProduct] ?? {};\n layers.push({\n label: 'workspace',\n value: workspaceData,\n source: 'workspace:kb-labs.config',\n });\n }\n \n // 5. Local config (.kb/<product>/<product>.config.json)\n const localConfigPath = path.join(cwd, '.kb', fsProduct, `${fsProduct}.config.json`);\n try {\n const localConfig = await fsp.readFile(localConfigPath, 'utf-8');\n const localData = JSON.parse(localConfig);\n layers.push({\n label: 'local',\n value: localData,\n source: `local:.kb/${fsProduct}/${fsProduct}.config.json`,\n });\n } catch {\n // Local config is optional\n }\n \n // 6. CLI overrides\n if (Object.keys(cli).length > 0) {\n layers.push({\n label: 'cli',\n value: cli,\n source: 'cli:overrides',\n });\n }\n \n // Merge all layers\n const { merged, trace } = layeredMergeWithTrace(layers);\n \n // Validate against schema if provided\n if (schema) {\n // Schema validation will be implemented with AJV\n // For now, we'll skip validation\n }\n \n // Write final config if requested\n if (writeFinal) {\n await writeFinalConfig(cwd, fsProduct, merged);\n }\n \n // Update lockfile with config hash\n try {\n const configHash = computeConfigHash(merged);\n \n const configHashes: Record<string, unknown> = {};\n configHashes[product] = configHash;\n await updateLockfile(cwd, {\n configHashes\n });\n } catch (error) {\n // Lockfile update is optional, don't fail the config resolution\n console.warn('Warning: Could not update lockfile:', error);\n }\n \n return {\n config: merged as T,\n trace,\n };\n}\n\n/**\n * Explain product configuration (trace only)\n */\nexport async function explainProductConfig(\n opts: Omit<ResolveOptions, 'writeFinal'>,\n schema: unknown\n): Promise<{ trace: import('../types').MergeTrace[] }> {\n const result = await getProductConfig(opts, schema);\n return { trace: result.trace };\n}\n\n/**\n * Get runtime defaults for a product\n */\nfunction getRuntimeDefaults(product: string): Record<string, unknown> {\n const defaults: Record<string, Record<string, unknown>> = {\n devlink: {\n watch: true,\n build: true,\n },\n release: {\n registry: 'https://registry.npmjs.org',\n strategy: 'semver',\n bump: 'auto',\n strict: true,\n verify: ['audit', 'build', 'tests'],\n publish: { npm: true, github: false },\n rollback: { enabled: true, maxHistory: 5 },\n output: { json: true, md: true, text: true },\n changelog: {\n enabled: true,\n includeTypes: ['feat', 'fix', 'perf', 'refactor', 'revert'],\n excludeTypes: ['chore', 'ci'],\n ignoreAuthors: ['dependabot', 'renovate', 'github-actions[bot]', '*[bot]'],\n collapseMerges: true,\n collapseReverts: true,\n preferMergeSummary: true,\n bumpStrategy: 'independent',\n workspace: true,\n perPackage: true,\n format: 'both',\n level: 'standard',\n locale: 'en',\n cache: true,\n requireAudit: true,\n requireSignedTags: false,\n redactPatterns: ['(?i)token=\\\\w+', '(?i)apikey=\\\\w+', '(https?://[^\\\\s]+@[^\\\\s]+)', '(gh[ps]_[A-Za-z0-9_]+)'],\n maxBodyLength: 500,\n ignoreSubmodules: true,\n },\n git: {\n provider: 'auto',\n autoUnshallow: false,\n },\n },\n aiReview: {\n enabled: true,\n rules: [],\n },\n aiDocs: {\n enabled: true,\n templates: [],\n },\n devkit: {\n sync: true,\n check: true,\n },\n analytics: {\n enabled: true,\n sinks: [],\n buffer: {},\n },\n };\n \n return defaults[product] || {};\n}\n\n/**\n * Write final configuration to .kb/<product>/<product>.config.json\n */\nasync function writeFinalConfig(cwd: string, fsProduct: string, config: Record<string, unknown>): Promise<void> {\n const configDir = path.join(cwd, '.kb', fsProduct);\n const configPath = path.join(configDir, `${fsProduct}.config.json`);\n \n // Ensure directory exists\n await fsp.mkdir(configDir, { recursive: true });\n \n // Write config with schema version\n const finalConfig = {\n $schema: 'https://schemas.kb-labs.dev/config.schema.json',\n schemaVersion: '1.0',\n ...config,\n };\n \n await fsp.writeFile(configPath, JSON.stringify(finalConfig, null, 2));\n}\n\n/**\n * Get configuration hash for lockfile\n */\nexport function getConfigHash(config: unknown): string {\n return computeConfigHash(config);\n}\n","/**\n * @module @kb-labs/core-config/profiles/types\n * Shared ProfileV2 + BundleProfile types and Zod schemas.\n */\n\nimport { z } from 'zod';\n\nconst GlobSchema = z.string().min(1, 'Glob pattern must be a non-empty string');\nconst ProductOverridesSchema = z.record(z.string(), z.unknown());\nconst ProductsMapSchema = z.record(z.string(), ProductOverridesSchema);\n\nexport const ScopeV2Schema = z.object({\n id: z.string().min(1, 'Scope id is required'),\n label: z.string().optional(),\n description: z.string().optional(),\n include: z.array(GlobSchema).min(1, 'include requires at least one glob'),\n exclude: z.array(GlobSchema).optional(),\n products: ProductsMapSchema.optional(),\n default: z.boolean().optional(),\n});\nexport type ScopeV2 = z.infer<typeof ScopeV2Schema>;\n\nexport const ProfileMetaSchema = z.object({\n version: z.string().optional(),\n tags: z.array(z.string()).optional(),\n deprecated: z.boolean().optional(),\n owner: z.string().optional(),\n}).strict();\nexport type ProfileMeta = z.infer<typeof ProfileMetaSchema>;\n\nexport const ProfileV2Schema = z.object({\n id: z.string().min(1, 'Profile id is required'),\n label: z.string().optional(),\n description: z.string().optional(),\n extends: z.string().min(1, 'extends must reference another profile id or preset').optional(),\n scopes: z.array(ScopeV2Schema).optional(),\n products: ProductsMapSchema.optional(),\n meta: ProfileMetaSchema.optional(),\n});\nexport type ProfileV2 = z.infer<typeof ProfileV2Schema>;\n\nexport const ProfilesV2Schema = z.array(ProfileV2Schema);\n\nexport const ResolvedScopeSchema = z.object({\n id: z.string(),\n label: z.string().optional(),\n description: z.string().optional(),\n include: z.array(z.string()),\n exclude: z.array(z.string()).optional(),\n isDefault: z.boolean(),\n products: ProductsMapSchema.optional(),\n});\nexport type ResolvedScope = z.infer<typeof ResolvedScopeSchema>;\n\nexport const BundleProfileSourceSchema = z.enum(['workspace', 'preset', 'npm', 'implicit']);\nexport type BundleProfileSource = z.infer<typeof BundleProfileSourceSchema>;\n\nexport const ProfileTraceSchema = z.object({\n extends: z.array(z.string()).optional(),\n overrides: z.array(z.string()).optional(),\n});\nexport type ProfileTrace = z.infer<typeof ProfileTraceSchema>;\n\nexport const ScopeSelectionSchema = z.object({\n strategy: z.enum(['explicit', 'default', 'auto', 'none']),\n path: z.string().optional(),\n});\nexport type ScopeSelection = z.infer<typeof ScopeSelectionSchema>;\n\nexport const BundleProfileSchema = z.object({\n id: z.string(),\n key: z.string().optional(),\n label: z.string().optional(),\n name: z.string().optional(),\n version: z.string().optional(),\n source: BundleProfileSourceSchema,\n scopes: z.array(ResolvedScopeSchema),\n products: ProductsMapSchema.optional(),\n trace: ProfileTraceSchema.optional(),\n meta: ProfileMetaSchema.optional(),\n productsByScope: z.record(z.string(), ProductsMapSchema).optional(),\n activeScopeId: z.string().optional(),\n activeScope: ResolvedScopeSchema.optional(),\n scopeSelection: ScopeSelectionSchema.optional(),\n});\nexport type BundleProfile = z.infer<typeof BundleProfileSchema>;\n\n","/**\n * @module @kb-labs/core-config/profiles/loader\n * Load + validate profiles[] section from kb.config.*\n */\n\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\nimport { readKbConfig } from '../api/read-kb-config';\nimport {\n ProfilesV2Schema,\n type ProfileV2,\n} from './types';\n\nexport interface ProfilesSectionResult {\n profiles: ProfileV2[];\n sourcePath?: string;\n format?: 'json' | 'yaml';\n}\n\nexport async function readProfilesSection(cwd: string): Promise<ProfilesSectionResult> {\n const kbConfig = await readKbConfig(cwd);\n if (!kbConfig?.data) {\n return { profiles: [] };\n }\n\n const rawProfiles = (kbConfig.data as { profiles?: unknown })?.profiles;\n\n if (rawProfiles === undefined) {\n return {\n profiles: [],\n sourcePath: kbConfig.path,\n format: kbConfig.format,\n };\n }\n\n const parsed = ProfilesV2Schema.safeParse(rawProfiles);\n if (!parsed.success) {\n throw new KbError(\n 'ERR_PROFILE_INVALID_FORMAT',\n 'Invalid profiles[] section in kb.config.',\n ERROR_HINTS.ERR_PROFILE_INVALID_FORMAT,\n {\n issues: parsed.error.issues,\n sourcePath: kbConfig.path,\n }\n );\n }\n\n return {\n profiles: parsed.data,\n sourcePath: kbConfig.path,\n format: kbConfig.format,\n };\n}\n\n","/**\n * @module @kb-labs/core-config/profiles/scope-selector\n * Resolve active scope based on include/exclude globs and CLI flags.\n */\n\nimport path from 'node:path';\nimport picomatch from 'picomatch';\nimport type { BundleProfile, ResolvedScope } from './types';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\n\nexport type ScopeSelectionStrategy = 'explicit' | 'default' | 'auto' | 'none';\n\nexport interface ScopeSelectionOptions {\n bundleProfile: BundleProfile;\n cwd: string;\n executionPath: string;\n scopeId?: string;\n}\n\nexport interface ScopeSelectionResult {\n scope?: ResolvedScope;\n strategy: ScopeSelectionStrategy;\n matchedPath?: string;\n}\n\nexport function selectProfileScope(\n opts: ScopeSelectionOptions\n): ScopeSelectionResult {\n const scopes = opts.bundleProfile.scopes || [];\n if (scopes.length === 0) {\n return { strategy: 'none' };\n }\n\n if (opts.scopeId) {\n const scope = scopes.find((s) => s.id === opts.scopeId);\n if (!scope) {\n throw new KbError(\n 'ERR_PROFILE_SCOPE_NOT_FOUND',\n `Scope \"${opts.scopeId}\" not found in profile \"${opts.bundleProfile.id}\"`,\n ERROR_HINTS.ERR_PROFILE_SCOPE_NOT_FOUND,\n { scopeId: opts.scopeId, available: scopes.map((s) => s.id) }\n );\n }\n return { scope, strategy: 'explicit' };\n }\n\n const defaults = scopes.filter((s) => s.isDefault);\n if (defaults.length > 1) {\n throw new KbError(\n 'ERR_PROFILE_SCOPE_CONFLICT',\n `Multiple default scopes found in profile \"${opts.bundleProfile.id}\"`,\n ERROR_HINTS.ERR_PROFILE_SCOPE_CONFLICT,\n { scopes: defaults.map((s) => s.id) }\n );\n }\n if (defaults.length === 1) {\n return { scope: defaults[0], strategy: 'default' };\n }\n\n const relativePath = normalizePath(\n path.relative(opts.cwd, opts.executionPath)\n );\n const matches = scopes.filter((scope) =>\n scopeMatchesPath(scope, relativePath)\n );\n\n if (matches.length > 1) {\n throw new KbError(\n 'ERR_PROFILE_SCOPE_CONFLICT',\n `Multiple scopes match path \"${relativePath}\"`,\n ERROR_HINTS.ERR_PROFILE_SCOPE_CONFLICT,\n { scopes: matches.map((s) => s.id), path: relativePath }\n );\n }\n\n if (matches.length === 1) {\n return { scope: matches[0], strategy: 'auto', matchedPath: relativePath };\n }\n\n return { strategy: 'none' };\n}\n\nfunction scopeMatchesPath(scope: ResolvedScope, candidate: string): boolean {\n const includes = scope.include && scope.include.length > 0\n ? scope.include\n : ['**/*'];\n const excludeGlobs = scope.exclude || [];\n\n const tester = (glob: string) =>\n picomatch(glob, { dot: true, nocase: false })(candidate);\n\n const includeMatched =\n candidate === '.' ||\n includes.some((glob) => tester(adjustGlob(glob)));\n\n if (!includeMatched) {\n return false;\n }\n\n const excludeMatched = excludeGlobs.some((glob) =>\n tester(adjustGlob(glob))\n );\n\n return !excludeMatched;\n}\n\nfunction normalizePath(p: string): string {\n if (!p || p === '.') {\n return '.';\n }\n const normalized = p.split(path.sep).join('/');\n return normalized || '.';\n}\n\nfunction adjustGlob(glob: string): string {\n if (!glob) {\n return '**/*';\n }\n return glob;\n}\n\n","/**\n * @module @kb-labs/core-config/profiles/resolver\n * Resolve ProfileV2 definitions with extends/merge semantics.\n */\n\nimport path from 'node:path';\nimport { createRequire } from 'node:module';\nimport { promises as fsp } from 'node:fs';\nimport type {\n BundleProfile,\n BundleProfileSource,\n ProfileTrace,\n ProfileV2,\n ScopeV2} from './types';\nimport {\n ProfilesV2Schema\n} from './types';\nimport { readProfilesSection } from './loader';\nimport { readConfigFile } from '../api/read-config';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\n\nconst requireFromHere = createRequire(import.meta.url);\n\nfunction clone<T>(value: T): T {\n if (typeof structuredClone === 'function') {\n return structuredClone(value);\n }\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\ninterface ProfileLayer {\n profile: ProfileV2;\n source: BundleProfileSource | string; // Can be 'workspace' | 'preset' | 'npm' | 'implicit' or 'npm:package#profile'\n sourcePath?: string;\n}\n\nexport interface ResolveProfileOptions {\n cwd: string;\n profileId: string;\n}\n\nexport async function resolveProfile(\n opts: ResolveProfileOptions\n): Promise<BundleProfile> {\n const localProfilesResult = await readProfilesSection(opts.cwd);\n const localProfiles = localProfilesResult.profiles;\n const localPath = localProfilesResult.sourcePath;\n const profileMap = new Map(localProfiles.map((p) => [p.id, p]));\n\n const cache = new Map<string, ProfileLayer>();\n if (localPath) {\n for (const profile of localProfiles) {\n cache.set(profile.id, {\n profile: clone(profile),\n source: 'workspace',\n sourcePath: localPath,\n });\n }\n }\n\n const chain = await resolveProfileChain(\n opts.profileId,\n cache,\n profileMap,\n opts.cwd,\n new Set<string>()\n );\n\n if (chain.length === 0) {\n throw new KbError(\n 'ERR_PROFILE_NOT_DEFINED',\n `Profile \"${opts.profileId}\" not found`,\n ERROR_HINTS.ERR_PROFILE_NOT_DEFINED,\n {\n profileId: opts.profileId,\n available: Array.from(profileMap.keys()),\n }\n );\n }\n\n const bundleProfile = mergeProfileChain(chain);\n\n const productsByScope = buildScopeProductMap(bundleProfile, chain);\n bundleProfile.productsByScope = productsByScope;\n\n return bundleProfile;\n}\n\nasync function resolveProfileChain(\n reference: string,\n cache: Map<string, ProfileLayer>,\n localProfiles: Map<string, ProfileV2>,\n cwd: string,\n seen: Set<string>\n): Promise<ProfileLayer[]> {\n const key = reference;\n if (seen.has(key)) {\n throw new KbError(\n 'ERR_PROFILE_EXTENDS_FAILED',\n `Circular profile extends detected at \"${reference}\"`,\n ERROR_HINTS.ERR_PROFILE_EXTENDS_FAILED,\n { reference, chain: Array.from(seen) }\n );\n }\n seen.add(key);\n\n let layer = cache.get(reference);\n\n if (!layer) {\n if (localProfiles.has(reference)) {\n layer = {\n profile: clone(localProfiles.get(reference)!),\n source: 'workspace',\n };\n } else if (isPackageReference(reference)) {\n layer = await loadPackageProfile(reference, cwd);\n } else {\n throw new KbError(\n 'ERR_PROFILE_NOT_DEFINED',\n `Profile \"${reference}\" not found`,\n ERROR_HINTS.ERR_PROFILE_NOT_DEFINED,\n { reference, available: Array.from(localProfiles.keys()) }\n );\n }\n cache.set(reference, layer);\n }\n\n const result: ProfileLayer[] = [];\n if (layer.profile.extends) {\n const parentChain = await resolveProfileChain(\n layer.profile.extends,\n cache,\n localProfiles,\n cwd,\n seen\n );\n result.push(...parentChain);\n }\n\n result.push(layer);\n seen.delete(key);\n return result;\n}\n\nfunction mergeProfileChain(chain: ProfileLayer[]): BundleProfile {\n const mergedProducts: Record<string, Record<string, unknown>> = {};\n let mergedMeta: Record<string, unknown> | undefined;\n let mergedLabel: string | undefined;\n let mergedDescription: string | undefined;\n let mergedVersion: string | undefined;\n let scopes: ScopeV2[] = [];\n let scopesDefined = false;\n\n for (const layer of chain) {\n const profile = layer.profile;\n mergedLabel = profile.label ?? mergedLabel;\n mergedDescription = profile.description ?? mergedDescription;\n mergedVersion = profile.meta?.version ?? mergedVersion;\n mergedMeta = mergeMeta(mergedMeta, profile.meta);\n\n if (profile.products) {\n for (const [productKey, overrides] of Object.entries(profile.products)) {\n if (!matchedProductOverrides(overrides)) {\n continue;\n }\n const target = (mergedProducts[productKey] ??= {});\n Object.assign(target, clone(overrides));\n }\n }\n\n if (profile.scopes && profile.scopes.length > 0) {\n scopes = clone(profile.scopes);\n scopesDefined = true;\n } else if (!scopesDefined && profile.scopes) {\n scopes = clone(profile.scopes);\n }\n }\n\n const finalLayer = chain[chain.length - 1];\n if (!finalLayer) {\n throw new KbError(\n 'ERR_PROFILE_NOT_DEFINED',\n 'Profile chain is empty',\n ERROR_HINTS.ERR_PROFILE_NOT_DEFINED\n );\n }\n \n const finalId = finalLayer.profile.id;\n const finalSource = finalLayer.source;\n \n const bundleProfile: BundleProfile = {\n id: finalId,\n key: finalId,\n label: mergedLabel,\n name: mergedLabel ?? finalId,\n version: mergedVersion,\n source: finalSource as BundleProfileSource,\n scopes: scopes.map((scope) => ({\n id: scope.id,\n label: scope.label,\n description: scope.description,\n include: scope.include,\n exclude: scope.exclude,\n isDefault: !!scope.default,\n products: scope.products ? clone(scope.products) : undefined,\n })),\n products: Object.keys(mergedProducts).length ? mergedProducts : undefined,\n trace: buildTrace(chain),\n meta: mergedMeta,\n productsByScope: {},\n };\n\n return bundleProfile;\n}\n\nfunction buildScopeProductMap(\n bundleProfile: BundleProfile,\n chain: ProfileLayer[]\n): Record<string, Record<string, Record<string, unknown>>> {\n const map: Record<string, Record<string, Record<string, unknown>>> = {};\n\n for (const scope of bundleProfile.scopes) {\n map[scope.id] = {};\n for (const layer of chain) {\n const matchingScope = layer.profile.scopes?.find((s) => s.id === scope.id);\n if (!matchingScope?.products) {\n continue;\n }\n for (const [productKey, overrides] of Object.entries(matchingScope.products)) {\n if (!matchedProductOverrides(overrides)) {\n continue;\n }\n const scopeMap = map[scope.id];\n if (!scopeMap) {continue;}\n \n const target = scopeMap[productKey];\n if (!target) {\n scopeMap[productKey] = clone(overrides);\n } else {\n Object.assign(target, clone(overrides));\n }\n }\n }\n }\n\n return map;\n}\n\nfunction matchedProductOverrides(\n overrides: unknown\n): overrides is Record<string, unknown> {\n return overrides !== null && typeof overrides === 'object';\n}\n\nfunction buildTrace(chain: ProfileLayer[]): ProfileTrace | undefined {\n if (chain.length <= 1) {\n return undefined;\n }\n\n const extendsList = chain\n .slice(0, -1)\n .map((layer) => {\n // For npm packages, source is already in format \"npm:package#profile\"\n if (typeof layer.source === 'string' && layer.source.startsWith('npm:')) {\n return layer.source;\n }\n // For workspace profiles, use source:profileId format\n return `${layer.source}:${layer.profile.id}`;\n });\n\n return {\n extends: extendsList,\n };\n}\n\nfunction mergeMeta(\n existing: Record<string, unknown> | undefined,\n next?: Record<string, unknown>\n): Record<string, unknown> | undefined {\n if (!next) {\n return existing ? structuredClone(existing) : undefined;\n }\n if (!existing) {\n return structuredClone(next);\n }\n return { ...existing, ...clone(next) };\n}\n\nfunction isPackageReference(ref: string): boolean {\n return ref.includes('/') || ref.startsWith('@');\n}\n\ninterface PackageProfileRef {\n packageName: string;\n profileId: string;\n}\n\nfunction parsePackageReference(ref: string): PackageProfileRef {\n const [pkg, profileId] = ref.split('#');\n return {\n packageName: pkg || '',\n profileId: profileId || 'default',\n };\n}\n\nasync function loadPackageProfile(\n ref: string,\n cwd: string\n): Promise<ProfileLayer> {\n const { packageName, profileId } = parsePackageReference(ref);\n\n let pkgJsonPath: string;\n try {\n pkgJsonPath = requireFromHere.resolve(`${packageName}/package.json`, {\n paths: [cwd],\n });\n } catch {\n throw new KbError(\n 'ERR_PROFILE_EXTENDS_FAILED',\n `Cannot resolve package \"${packageName}\" for profile extends`,\n ERROR_HINTS.ERR_PROFILE_EXTENDS_FAILED,\n { reference: ref }\n );\n }\n\n const pkgDir = path.dirname(pkgJsonPath);\n const candidateConfigs = [\n 'kb.config.json',\n 'kb.config.yaml',\n 'kb.config.yml',\n path.join('config', 'kb.config.json'),\n path.join('config', 'kb.config.yaml'),\n path.join('config', 'kb.config.yml'),\n ];\n\n for (const candidate of candidateConfigs) {\n const fullPath = path.join(pkgDir, candidate);\n try {\n await fsp.access(fullPath);\n } catch {\n continue;\n }\n\n const config = await readConfigFile(fullPath);\n const profiles = (config.data as { profiles?: unknown })?.profiles;\n const parsed = ProfilesV2Schema.safeParse(profiles);\n if (!parsed.success) {\n continue;\n }\n const target = parsed.data.find((p) => p.id === profileId);\n if (!target) {\n continue;\n }\n return {\n profile: clone(target),\n source: `npm:${packageName}#${profileId}`,\n sourcePath: fullPath,\n };\n }\n\n throw new KbError(\n 'ERR_PROFILE_EXTENDS_FAILED',\n `Profile \"${profileId}\" not found in package \"${packageName}\"`,\n ERROR_HINTS.ERR_PROFILE_EXTENDS_FAILED,\n { reference: ref }\n );\n}\n\n","/**\n * @module @kb-labs/core/config/api/init-workspace\n * Initialize workspace configuration with idempotent operations\n */\n\nimport { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport YAML from 'yaml';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\nimport { findGitRoot } from './read-config';\nimport { writeFileAtomic, ensureWithinWorkspace } from '../utils/fs-atomic';\nimport { toFsProduct } from '../utils/product-normalize';\nimport type { InitWorkspaceOptions, InitResult, InitAction } from '../types/init';\n\n/**\n * Generate diff preview (first ~20 lines) for conflicts\n */\nfunction generateDiffPreview(oldContent: string, newContent: string): string {\n const oldLines = oldContent.split('\\n');\n const newLines = newContent.split('\\n');\n const maxLines = 20;\n const diff: string[] = [];\n \n for (let i = 0; i < Math.min(maxLines, Math.max(oldLines.length, newLines.length)); i++) {\n const oldLine = oldLines[i] || '';\n const newLine = newLines[i] || '';\n \n if (oldLine !== newLine) {\n if (oldLine) {diff.push(`- ${oldLine}`);}\n if (newLine) {diff.push(`+ ${newLine}`);}\n }\n }\n \n if (oldLines.length > maxLines || newLines.length > maxLines) {\n diff.push('... truncated');\n }\n \n return diff.slice(0, 20).join('\\n');\n}\n\n/**\n * Find workspace config file, walking up to git root\n * Prioritizes .kb/ location over root\n */\nasync function findWorkspaceConfig(\n cwd: string\n): Promise<{ path: string; format: 'yaml' | 'json' } | null> {\n const filenames = [\n '.kb/kb.config.yaml',\n '.kb/kb.config.yml',\n '.kb/kb.config.json',\n ];\n const gitRoot = await findGitRoot(cwd);\n const stopDir = gitRoot || path.parse(cwd).root;\n \n let dir = path.resolve(cwd);\n \n while (true) {\n for (const filename of filenames) {\n const candidate = path.join(dir, filename);\n try {\n await fs.access(candidate);\n const format = filename.endsWith('.json') ? 'json' : 'yaml';\n return { path: candidate, format };\n } catch {\n // Continue to next filename\n }\n }\n \n // Stop at git root or filesystem root\n if (dir === stopDir || dir === path.dirname(dir)) {\n break;\n }\n dir = path.dirname(dir);\n }\n \n return null;\n}\n\n/**\n * Initialize or update workspace configuration\n */\nexport async function initWorkspaceConfig(\n opts: InitWorkspaceOptions\n): Promise<InitResult> {\n const cwd = path.resolve(opts.cwd);\n const result: InitResult = {\n actions: [],\n created: [],\n updated: [],\n skipped: [],\n warnings: [],\n };\n \n if (opts.profiles && Object.keys(opts.profiles).length > 0) {\n result.warnings.push(\n 'profiles option is deprecated. Define profiles[] inside kb.config.json (Profiles v2).'\n );\n }\n \n // Find existing config\n const existing = await findWorkspaceConfig(cwd);\n const format = existing?.format || opts.format || 'yaml';\n const configFileName = format === 'json' ? 'kb.config.json' : 'kb.config.yaml';\n // Create .kb directory if needed for new configs\n const configPath = existing?.path || path.join(cwd, '.kb', configFileName);\n \n // Ensure we're writing within workspace\n ensureWithinWorkspace(configPath, cwd);\n \n // Build new config structure\n const newConfigProducts: Record<string, unknown> = {};\n const newConfig: Record<string, unknown> = {\n schemaVersion: '1.0',\n products: newConfigProducts,\n };\n\n // Add product sections\n if (opts.products && opts.products.length > 0) {\n for (const product of opts.products) {\n const fsProduct = toFsProduct(product);\n newConfigProducts[product] = {};\n }\n }\n \n // Add preset if specified\n if (opts.presetRef !== undefined) {\n newConfig.$extends = opts.presetRef;\n }\n \n // Check if config already exists\n if (existing) {\n try {\n const existingContent = await fs.readFile(existing.path, 'utf-8');\n const existingData = format === 'json' \n ? JSON.parse(existingContent)\n : YAML.parse(existingContent);\n \n // Merge with existing config (only add missing keys)\n let modified = false;\n \n // Ensure schemaVersion\n if (!existingData.schemaVersion) {\n existingData.schemaVersion = '1.0';\n modified = true;\n }\n \n // Merge products\n if (opts.products) {\n if (!existingData.products) {\n existingData.products = {};\n modified = true;\n }\n for (const product of opts.products) {\n if (!existingData.products[product]) {\n existingData.products[product] = {};\n modified = true;\n }\n }\n }\n \n // Merge preset\n if (opts.presetRef !== undefined && existingData.$extends !== opts.presetRef) {\n existingData.$extends = opts.presetRef;\n modified = true;\n }\n \n if (!modified) {\n // No changes needed\n result.actions.push({ kind: 'skip', path: configPath });\n result.skipped.push(configPath);\n return result;\n }\n \n // Serialize new content\n const newContent = format === 'json'\n ? JSON.stringify(existingData, null, 2) + '\\n'\n : YAML.stringify(existingData);\n \n // Check for conflicts\n if (!opts.force && existingContent !== newContent) {\n const action: InitAction = {\n kind: 'conflict',\n path: configPath,\n previewDiff: generateDiffPreview(existingContent, newContent),\n };\n result.actions.push(action);\n result.warnings.push(`Config file has changes, use --force to overwrite: ${configPath}`);\n return result;\n }\n \n // Write updated config\n if (!opts.dryRun) {\n await writeFileAtomic(configPath, newContent);\n }\n \n result.actions.push({ kind: 'update', path: configPath });\n result.updated.push(configPath);\n } catch (error) {\n throw new KbError(\n 'ERR_CONFIG_INVALID',\n `Failed to read or parse existing config: ${existing.path}`,\n ERROR_HINTS.ERR_CONFIG_INVALID,\n { error: error instanceof Error ? error.message : String(error) }\n );\n }\n } else {\n // Create new config\n const content = format === 'json'\n ? JSON.stringify(newConfig, null, 2) + '\\n'\n : YAML.stringify(newConfig);\n \n if (!opts.dryRun) {\n await writeFileAtomic(configPath, content);\n }\n \n result.actions.push({ kind: 'write', path: configPath });\n result.created.push(configPath);\n }\n \n return result;\n}\n\n","/**\n * @module @kb-labs/core/config/api/upsert-lockfile\n * Upsert lockfile operations\n */\n\nimport path from 'node:path';\nimport { promises as fs } from 'node:fs';\nimport { readLockfile, writeLockfile, type LockfileData } from '../lockfile/lockfile';\nimport { ensureWithinWorkspace } from '../utils/fs-atomic';\nimport type { UpsertLockfileOptions, InitResult } from '../types/init';\n\n/**\n * Upsert lockfile with new references\n */\nexport async function upsertLockfile(\n opts: UpsertLockfileOptions\n): Promise<InitResult> {\n const cwd = path.resolve(opts.cwd);\n const lockfilePath = path.join(cwd, '.kb', 'lock.json');\n const oldLockfilePath = path.join(cwd, '.kb', 'lockfile.json');\n \n const result: InitResult = {\n actions: [],\n created: [],\n updated: [],\n skipped: [],\n warnings: [],\n };\n \n // Ensure we're writing within workspace\n ensureWithinWorkspace(lockfilePath, cwd);\n \n // Check for deprecated lockfile location\n try {\n await fs.access(oldLockfilePath);\n result.warnings.push(\n 'Deprecated lockfile found at .kb/lockfile.json, please migrate to .kb/lock.json'\n );\n } catch {\n // No old lockfile, that's fine\n }\n \n // Read existing lockfile\n const existing = await readLockfile(cwd);\n \n // Build lockfile data\n const lockfileData: LockfileData = {\n $schema: 'https://schemas.kb-labs.dev/lockfile.schema.json',\n schemaVersion: '1.0',\n orgPreset: opts.presetRef !== undefined ? opts.presetRef || undefined : existing?.orgPreset,\n profile: opts.profileRef !== undefined ? opts.profileRef || undefined : existing?.profile,\n policyBundle: opts.policyBundle !== undefined ? opts.policyBundle || undefined : existing?.policyBundle,\n hashes: existing?.hashes || {},\n generatedAt: new Date().toISOString(),\n };\n \n if (!existing) {\n // Creating new lockfile\n if (!opts.dryRun) {\n await writeLockfile(cwd, lockfileData);\n }\n result.actions.push({ kind: 'write', path: lockfilePath });\n result.created.push(lockfilePath);\n } else {\n // Updating existing lockfile\n if (!opts.dryRun) {\n await writeLockfile(cwd, lockfileData);\n }\n result.actions.push({ kind: 'update', path: lockfilePath });\n result.updated.push(lockfilePath);\n }\n \n return result;\n}\n\n","import Ajv from 'ajv';\nimport addFormats from 'ajv-formats';\n\nexport type ValidationResult = { ok: boolean; errors: import('ajv').ErrorObject[] | null };\n\nconst ajv = new Ajv({ allErrors: true, strict: false });\naddFormats(ajv);\n\nconst schemaMap: Record<string, Record<string, unknown>> = {};\n\n/**\n * Temporary schema registry hook – upcoming implementation will register schemas here.\n */\nexport function registerProductSchema(product: string, schema: Record<string, unknown>): void {\n schemaMap[product] = schema;\n}\n\nexport function validateProductConfig(product: string, config: unknown): ValidationResult {\n const schema = schemaMap[product];\n if (!schema) {return { ok: true, errors: null };}\n\n const validate = ajv.compile(schema);\n const ok = validate(config);\n return { ok: !!ok, errors: validate.errors || null };\n}\n","/**\n * @module @kb-labs/core/config/overlay/merge\n *\n * Deep-merge an overlay onto a base config with overlay-specific semantics:\n *\n * - plain objects: recursive merge\n * - scalars: overlay wins\n * - arrays: REPLACE by default (differs from `mergeDefined`, which concatenates)\n * - directive `kb:merge` (sibling key inside an object): per-field strategy\n * map switching arrays to append-mode.\n *\n * Example:\n *\n * base = { adapters: { llm: ['openai'] } }\n * overlay = { adapters: { 'kb:merge': { llm: 'append' }, llm: ['vibeproxy'] } }\n * result = { adapters: { llm: ['openai', 'vibeproxy'] } }\n *\n * The `kb:merge` key is consumed and never appears in the result.\n *\n * Only the `append` strategy is supported in MVP; `prepend`, `unique`, `by-key`\n * are intentionally out of scope.\n */\n\nexport const OVERLAY_DIRECTIVE_KEY = 'kb:merge' as const;\n\nexport type OverlayArrayStrategy = 'append' | 'replace';\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n return typeof v === 'object' && v !== null && Object.getPrototypeOf(v) === Object.prototype;\n}\n\nfunction extractDirective(\n overlay: Record<string, unknown>,\n): Record<string, OverlayArrayStrategy> {\n const raw = overlay[OVERLAY_DIRECTIVE_KEY];\n if (!isPlainObject(raw)) {\n return {};\n }\n const out: Record<string, OverlayArrayStrategy> = {};\n for (const [k, v] of Object.entries(raw)) {\n if (v === 'append' || v === 'replace') {\n out[k] = v;\n } else {\n throw new Error(\n `Invalid kb:merge strategy for \"${k}\": ${JSON.stringify(v)}. Expected \"append\" or \"replace\".`,\n );\n }\n }\n return out;\n}\n\n/**\n * Deep-merge `overlay` onto `base` using overlay semantics.\n *\n * The function never mutates either argument. Arrays in the result are always\n * fresh instances; objects are spread copies.\n */\nexport function mergeOverlay<T>(base: T, overlay: unknown): T {\n // Both arrays: overlay replaces wholesale (override semantics).\n // Append is opt-in via a parent-object directive, so a raw array vs array\n // collision at the top level (or anywhere without a parent directive) is\n // always replace.\n if (Array.isArray(base) && Array.isArray(overlay)) {\n return [...overlay] as unknown as T;\n }\n\n // Both plain objects: recursive merge with directive parsing.\n if (isPlainObject(base) && isPlainObject(overlay)) {\n const directives = extractDirective(overlay);\n const result: Record<string, unknown> = { ...base };\n\n for (const [key, overlayValue] of Object.entries(overlay)) {\n if (key === OVERLAY_DIRECTIVE_KEY) {\n continue;\n }\n const baseValue = result[key];\n const strategy = directives[key];\n\n if (Array.isArray(baseValue) && Array.isArray(overlayValue)) {\n result[key] =\n strategy === 'append'\n ? [...baseValue, ...overlayValue]\n : [...overlayValue];\n } else if (isPlainObject(baseValue) && isPlainObject(overlayValue)) {\n result[key] = mergeOverlay(baseValue, overlayValue);\n } else {\n result[key] = overlayValue;\n }\n }\n\n return result as T;\n }\n\n // Type mismatch or scalar: overlay wins.\n return overlay as T;\n}\n","/**\n * @module @kb-labs/core/config/overlay/loader\n *\n * Discovers and reads `.kb/overlays/*.jsonc` files from a project root, in\n * stable lexicographic order. Each overlay is parsed via the existing\n * `readJsonWithDiagnostics` (so JSONC comments and trailing commas are\n * supported). Files that fail to parse are reported as diagnostics but do not\n * abort the load — callers decide whether to ignore or fail.\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\n\nimport { readJsonWithDiagnostics } from '../runtime/runtime.js';\nimport type { Diagnostic } from '../types/index.js';\n\nexport interface LoadedOverlay {\n /** Absolute path to the overlay file. */\n path: string;\n /** File name (without directory), e.g. `pressure__overlay.jsonc`. */\n name: string;\n /** Parsed contents. Always a plain object — files whose top-level value is\n * not an object are rejected with a diagnostic. */\n data: Record<string, unknown>;\n}\n\nexport interface LoadOverlaysResult {\n overlays: LoadedOverlay[];\n diagnostics: Diagnostic[];\n}\n\n/**\n * Read `.kb/overlays/*.jsonc` from the given project root.\n *\n * - Returns `{ overlays: [], diagnostics: [] }` when the directory does not\n * exist (the common case in projects that don't use overlays).\n * - Files are returned sorted by lexicographic file-name. The merge order at\n * the call site is the same order — later files override earlier ones.\n * - Non-`.jsonc` files in the directory are ignored silently.\n */\nexport async function loadOverlays(projectRoot: string): Promise<LoadOverlaysResult> {\n const dir = path.join(projectRoot, '.kb', 'overlays');\n const diagnostics: Diagnostic[] = [];\n\n let entries: string[];\n try {\n entries = await fsp.readdir(dir);\n } catch (e) {\n const err = e as NodeJS.ErrnoException;\n if (err.code === 'ENOENT') {\n return { overlays: [], diagnostics };\n }\n diagnostics.push({\n level: 'error',\n code: 'OVERLAYS_DIR_READ_FAILED',\n message: `Failed to read overlays directory: ${dir}`,\n detail: String(e),\n });\n return { overlays: [], diagnostics };\n }\n\n const jsoncFiles = entries.filter((name) => name.endsWith('.jsonc')).sort();\n const overlays: LoadedOverlay[] = [];\n\n for (const name of jsoncFiles) {\n const full = path.join(dir, name);\n const read = await readJsonWithDiagnostics<unknown>(full);\n diagnostics.push(...read.diagnostics);\n if (!read.ok) {\n continue;\n }\n const data = read.data;\n if (typeof data !== 'object' || data === null || Array.isArray(data)) {\n diagnostics.push({\n level: 'error',\n code: 'OVERLAY_NOT_OBJECT',\n message: `Overlay must be a JSON object at top level: ${full}`,\n });\n continue;\n }\n overlays.push({ path: full, name, data: data as Record<string, unknown> });\n }\n\n return { overlays, diagnostics };\n}\n","/**\n * @module @kb-labs/core-config/api/effective-config\n *\n * Canonical \"give me the effective raw config\" entry point.\n *\n * Assembles the three configuration layers any KB Labs project may have\n * and returns the deep-merged result plus diagnostics about how it was\n * resolved:\n *\n * 1. `<platformRoot>/.kb/kb.config.*` — platform baseline (installed\n * mode only; absent in solo dev where projectRoot == platformRoot)\n * 2. `<projectRoot>/.kb/kb.config.*` — project layer\n * 3. `<projectRoot>/.kb/overlays/*.jsonc` — scenario overlays applied\n * by `kb-dev ensure --scenario`, lex-sorted\n *\n * Each layer is deep-merged onto the previous via `mergeOverlay`. Overlays\n * are intentionally *project-only* — overlay files placed under the\n * platform root are ignored. Plugins that read their own section from the\n * raw config (gateway.*, mind.*, workflow.*, ...) should use this rather\n * than re-implementing the layering.\n *\n * Returns `null` only when none of the three layers contributed anything.\n *\n * This is complementary to `@kb-labs/core-runtime :: loadPlatformConfig`,\n * which produces the structured `PlatformConfig` view (adapters, core,\n * execution). Use `loadEffectiveConfig` when you need the full raw shape;\n * use `loadPlatformConfig` when you need platform initialisation.\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\n\nimport { readJsonWithDiagnostics, mergeDefined } from '../runtime/runtime.js';\nimport type { Diagnostic } from '../types/index.js';\nimport { loadOverlays } from '../overlay/loader.js';\nimport { mergeOverlay } from '../overlay/merge.js';\n\n// Order matters: each entry is deep-merged onto the previous one within the\n// same root, so the LAST file found wins on conflicts. Convention:\n//\n// 1. `kb.config.jsonc` (root, human-edited template)\n// 2. `kb.config.json` (root, machine-written)\n// 3. `.kb/kb.config.jsonc` (preferred location, human-edited)\n// 4. `.kb/kb.config.json` (preferred location, machine-written — wins)\n//\n// In installed mode `kb-create` writes both `.kb/kb.config.jsonc` (full\n// template snapshot) and `.kb/kb.config.json` (scan-updated authoritative\n// snapshot). Reading only one of them would silently shadow the other —\n// reading both, with `.json` last, lets the scan-derived values override\n// the static template, which matches kb-create's intent.\nconst CONFIG_CANDIDATES = [\n 'kb.config.jsonc',\n 'kb.config.json',\n path.join('.kb', 'kb.config.jsonc'),\n path.join('.kb', 'kb.config.json'),\n] as const;\n\nexport interface EffectiveConfigResult {\n /** Deep-merged effective data (platform ← project ← overlays). */\n data: Record<string, unknown>;\n /**\n * Absolute paths of platform-root config files actually loaded, in merge\n * order. Empty when no platform config file was found (or when\n * `platformRoot` was not provided / equals `projectRoot`).\n */\n platformConfigPaths: string[];\n /** Absolute paths of project-root config files actually loaded, in merge order. */\n projectConfigPaths: string[];\n /**\n * Deprecated single-path alias for the LAST platform config file applied.\n * Prefer `platformConfigPaths`. Kept for callers that only need to know\n * \"did we load any platform config?\".\n */\n platformConfigPath?: string;\n /**\n * Deprecated single-path alias for the LAST project config file applied.\n * Prefer `projectConfigPaths`.\n */\n projectConfigPath?: string;\n /** Absolute paths of overlays applied, in merge order. */\n overlayPaths: string[];\n /** Non-fatal diagnostics (malformed files, layer rejected, etc). */\n diagnostics: Diagnostic[];\n}\n\nexport interface LoadEffectiveConfigOptions {\n /**\n * Optional platform installation root. When provided and distinct from\n * `projectRoot`, its `kb.config.*` is read first and used as the\n * deep-merge baseline. Overlays are *not* read from this root.\n */\n platformRoot?: string;\n}\n\nasync function findAllConfigsInRoot(root: string): Promise<string[]> {\n const found: string[] = [];\n for (const rel of CONFIG_CANDIDATES) {\n const full = path.join(root, rel);\n try {\n await fsp.access(full);\n found.push(full);\n } catch {\n // missing — skip\n }\n }\n return found;\n}\n\n/**\n * Read every config file present at `root`, deep-merging them in\n * CONFIG_CANDIDATES order (later wins). Each file is parsed independently;\n * a malformed or non-object file emits a diagnostic but does not abort the\n * read of the remaining files at this root.\n *\n * Returns the list of paths actually loaded plus the merged data.\n */\nasync function readObjectsAtRoot(\n root: string,\n diagnostics: Diagnostic[],\n): Promise<{ paths: string[]; data: Record<string, unknown> }> {\n const paths = await findAllConfigsInRoot(root);\n let merged: Record<string, unknown> = {};\n const loaded: string[] = [];\n\n for (const configPath of paths) {\n const read = await readJsonWithDiagnostics<unknown>(configPath);\n diagnostics.push(...read.diagnostics);\n // Past this point we record `configPath` as loaded — the file existed,\n // even if its content was unusable. Callers rely on `paths` to\n // distinguish \"layer absent\" from \"layer present but degraded\".\n loaded.push(configPath);\n if (!read.ok) {\n continue;\n }\n const data = read.data;\n if (typeof data !== 'object' || data === null || Array.isArray(data)) {\n diagnostics.push({\n level: 'error',\n code: 'CONFIG_NOT_OBJECT',\n message: `Config must be a JSON object at top level: ${configPath}`,\n });\n continue;\n }\n // Within a single root we layer files (e.g. .jsonc template + .json\n // scan-update) using `mergeDefined` — the SAME semantics\n // `loadPlatformConfig` uses for its platform↔project merge. Arrays\n // concatenate at this layer; overlay-style array REPLACEMENT is\n // reserved for the explicit overlay step below and the `kb:merge`\n // directive within overlays.\n merged = mergeDefined(merged, data as Record<string, unknown>);\n }\n\n return { paths: loaded, data: merged };\n}\n\n/**\n * Load the effective project config — deep-merged across platform → project\n * → project overlays. Returns `null` when nothing contributed.\n */\nexport async function loadEffectiveConfig(\n projectRoot: string,\n options: LoadEffectiveConfigOptions = {},\n): Promise<EffectiveConfigResult | null> {\n const diagnostics: Diagnostic[] = [];\n\n const usePlatform =\n !!options.platformRoot && options.platformRoot !== projectRoot;\n\n const platformLayer = usePlatform\n ? await readObjectsAtRoot(options.platformRoot!, diagnostics)\n : { paths: [] as string[], data: {} as Record<string, unknown> };\n const projectLayer = await readObjectsAtRoot(projectRoot, diagnostics);\n\n const overlayResult = await loadOverlays(projectRoot);\n diagnostics.push(...overlayResult.diagnostics);\n\n const nothingFound =\n platformLayer.paths.length === 0 &&\n projectLayer.paths.length === 0 &&\n overlayResult.overlays.length === 0;\n if (nothingFound) {\n return null;\n }\n\n // Platform ← project: SAME semantics as loadPlatformConfig — `mergeDefined`\n // (arrays concatenate). Keeps both APIs returning the same shape for the\n // shared two-layer step.\n let merged: Record<string, unknown> = mergeDefined(\n platformLayer.data,\n projectLayer.data,\n );\n // Overlays: REPLACE semantics for arrays (with opt-in `kb:merge: append`)\n // — overlays are the explicit override layer, not a deep-merge layer.\n const overlayPaths: string[] = [];\n for (const overlay of overlayResult.overlays) {\n merged = mergeOverlay(merged, overlay.data);\n overlayPaths.push(overlay.path);\n }\n\n return {\n data: merged,\n platformConfigPaths: platformLayer.paths,\n projectConfigPaths: projectLayer.paths,\n platformConfigPath:\n platformLayer.paths[platformLayer.paths.length - 1],\n projectConfigPath: projectLayer.paths[projectLayer.paths.length - 1],\n overlayPaths,\n diagnostics,\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kb-labs/core-config",
|
|
3
3
|
"description": "Core configuration system for KB Labs products, including schema validation, resolution, and merging",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.101.0-canary.3f3ceb8f",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|