@kb-labs/mind-core 2.15.0 → 2.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/error/mind-error.ts","../src/utils/token.ts","../src/utils/hash.ts","../src/utils/paths.ts","../src/utils/math.ts","../src/utils/file-rotation.ts","../src/utils/json.ts","../src/verification/verify-indexes.ts","../src/defaults.ts"],"names":["readFile","dotProduct","path","fsp"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module @kb-labs/mind-core/error\n * Standardized error class for KB Labs Mind\n */\n\nexport class MindError extends Error {\n constructor(\n public code: string,\n message: string,\n public hint?: string,\n public meta?: any\n ) {\n super(message);\n this.name = 'MindError';\n }\n}\n\n/**\n * Maps MindError codes to CLI exit codes\n */\nexport function getExitCode(err: MindError): number {\n if (err.code === 'MIND_FORBIDDEN') {return 3;}\n if (err.code === 'MIND_NO_GIT') {return 2;}\n if (err.code === 'MIND_FS_TIMEOUT') {return 2;}\n if (err.code === 'MIND_PARSE_ERROR') {return 1;}\n if (err.code === 'MIND_PACK_BUDGET_EXCEEDED') {return 1;}\n if (err.code.startsWith('MIND_')) {return 1;}\n return 1;\n}\n\n/**\n * Error codes with their standard hints\n */\nexport const ERROR_HINTS = {\n MIND_NO_GIT: 'Initialize git repository or run from a git repository',\n MIND_FS_TIMEOUT: 'File system operation timed out - try increasing time budget',\n MIND_PARSE_ERROR: 'Failed to parse file - check syntax and try again',\n MIND_PACK_BUDGET_EXCEEDED: 'Context pack exceeds token budget - reduce content or increase budget',\n MIND_FORBIDDEN: 'Operation not permitted - check file permissions',\n MIND_TIME_BUDGET: 'Time budget exceeded - operation completed partially',\n MIND_BAD_FLAGS: 'Invalid command line flags - check values and try again',\n MIND_INVALID_FLAG: 'Invalid flag value - check format and try again',\n MIND_BUNDLE_TIMEOUT: 'Bundle operation timed out - skipped bundle information',\n MIND_FEED_ERROR: 'Mind feed operation failed - check logs for details',\n MIND_INIT_ERROR: 'Mind initialization failed - check permissions and try again',\n MIND_UPDATE_ERROR: 'Mind update operation failed - check logs for details',\n MIND_PACK_ERROR: 'Mind pack operation failed - check logs for details',\n MIND_GIT_ERROR: 'Git operation failed - check git repository status',\n MIND_INDEX_NOT_FOUND: 'Mind indexes not found - run \"kb mind init\" first',\n MIND_INVALID_PATH: 'Invalid file or directory path - check path exists and is accessible',\n MIND_DEPENDENCY_ERROR: 'Dependency resolution failed - check package configuration',\n MIND_BUILD_ERROR: 'Build operation failed - check configuration and try again',\n} as const;\n\nexport type ErrorCode = keyof typeof ERROR_HINTS;\n\n/**\n * Create a MindError with standardized code and hint\n */\nexport function createMindError(\n code: ErrorCode,\n message: string,\n meta?: any\n): MindError {\n return new MindError(code, message, ERROR_HINTS[code], meta);\n}\n\n/**\n * Create a MindError from a generic error\n */\nexport function wrapError(error: unknown, code: ErrorCode = 'MIND_FEED_ERROR'): MindError {\n if (error instanceof MindError) {\n return error;\n }\n \n const message = error instanceof Error ? error.message : String(error);\n return createMindError(code, message, { originalError: error });\n}\n\n/**\n * Check if an error is a MindError\n */\nexport function isMindError(error: unknown): error is MindError {\n return error instanceof MindError;\n}\n","/**\n * Token estimation utilities for KB Labs Mind\n */\n\nimport type { ITokenEstimator } from \"../types/pack\";\n\n/**\n * Default whitespace-aware token estimator\n * Algorithm: ~3.8-4.2 chars/token based on whitespace and code patterns\n */\nexport class DefaultTokenEstimator implements ITokenEstimator {\n private readonly charsPerToken: number = 4.0;\n private readonly codeBonus: number = 0.1; // 10% bonus for code-like content\n private readonly punctuationWeight: number = 0.8;\n\n estimate(text: string): number {\n if (!text || text.length === 0) {return 0;}\n\n // Count words, punctuation, and whitespace\n const words = text.match(/\\b\\w+\\b/g) || [];\n const punctuation = text.match(/[^\\w\\s]/g) || [];\n const whitespace = text.match(/\\s/g) || [];\n \n // Base estimation\n let tokens = words.length;\n \n // Add punctuation with weight\n tokens += punctuation.length * this.punctuationWeight;\n \n // Add whitespace (spaces, newlines, tabs)\n tokens += whitespace.length * 0.3;\n \n // Apply code bonus if content looks like code\n const codeIndicators = text.match(/[{}();=<>]/g) || [];\n if (codeIndicators.length > words.length * 0.1) {\n tokens *= (1 + this.codeBonus);\n }\n \n // Apply character-based adjustment\n const charBasedEstimate = text.length / this.charsPerToken;\n \n // Use the higher of word-based or char-based estimate\n return Math.ceil(Math.max(tokens, charBasedEstimate));\n }\n\n truncate(text: string, maxTokens: number, mode: \"start\"|\"middle\"|\"end\"): string {\n if (this.estimate(text) <= maxTokens) {\n return text;\n }\n\n const lines = text.split('\\n');\n const estimatedTokens = this.estimate(text);\n const ratio = maxTokens / estimatedTokens;\n const targetLines = Math.max(1, Math.floor(lines.length * ratio));\n \n if (targetLines >= lines.length) {return text;}\n\n switch (mode) {\n case 'start':\n return lines.slice(0, targetLines).join('\\n');\n case 'end':\n return lines.slice(-targetLines).join('\\n');\n case 'middle':\n default: {\n const startLines = Math.max(1, Math.floor(targetLines / 2));\n const endLines = Math.max(1, targetLines - startLines);\n const start = lines.slice(0, startLines);\n const end = lines.slice(-endLines);\n return [...start, '...', ...end].join('\\n');\n }\n }\n }\n}\n\n/**\n * Default token estimator instance\n */\nexport const defaultTokenEstimator = new DefaultTokenEstimator();\n\n/**\n * Estimate tokens using default strategy\n */\nexport function estimateTokens(text: string): number {\n return defaultTokenEstimator.estimate(text);\n}\n\n/**\n * Truncate text to token limit using default strategy\n */\nexport function truncateToTokens(\n text: string, \n maxTokens: number, \n mode: \"start\"|\"middle\"|\"end\" = \"middle\"\n): string {\n return defaultTokenEstimator.truncate(text, maxTokens, mode);\n}\n","/**\n * Hashing utilities for KB Labs Mind\n */\n\nimport { createHash } from 'node:crypto';\n\n/**\n * Compute SHA256 hash for string content\n */\nexport function sha256(content: string): string {\n return createHash('sha256').update(content, 'utf8').digest('hex');\n}\n\n/**\n * Compute SHA256 hash for Buffer content\n */\nexport function sha256Buffer(buffer: Buffer): string {\n return createHash('sha256').update(buffer).digest('hex');\n}\n\n/**\n * Compute SHA256 hash for file content (streaming for large files)\n */\nexport async function sha256File(filePath: string): Promise<string> {\n const { readFile } = await import('node:fs/promises');\n const content = await readFile(filePath);\n return sha256Buffer(content);\n}\n","/**\n * Path utilities for KB Labs Mind\n */\n\nimport path from 'node:path';\nimport { existsSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\n\n/**\n * Convert path to POSIX format (forward slashes)\n */\nexport function toPosix(filePath: string): string {\n return filePath.replace(/\\\\/g, '/');\n}\n\n/**\n * Convert POSIX path back to platform-specific format\n */\nexport function fromPosix(posixPath: string): string {\n return posixPath.split('/').join(path.sep);\n}\n\n/**\n * Find workspace root by looking for git repository or monorepo indicators\n * Searches up the directory tree from cwd\n */\nexport async function findWorkspaceRoot(cwd: string): Promise<string> {\n let current = path.resolve(cwd);\n const root = path.parse(current).root;\n\n while (current !== root) {\n // Check for git repository\n if (existsSync(path.join(current, '.git'))) {\n return toPosix(current);\n }\n\n // Check for monorepo indicators\n const packageJsonPath = path.join(current, 'package.json');\n if (existsSync(packageJsonPath)) {\n try {\n const packageJsonContent = await readFile(packageJsonPath, 'utf8');\n const packageJson = JSON.parse(packageJsonContent);\n // Check for workspace configuration\n if (packageJson.workspaces || packageJson.pnpm?.workspace) {\n return toPosix(current);\n }\n } catch {\n // Ignore JSON parse errors\n }\n }\n\n // Check for pnpm-workspace.yaml\n if (existsSync(path.join(current, 'pnpm-workspace.yaml'))) {\n return toPosix(current);\n }\n\n // Move up one directory\n current = path.dirname(current);\n }\n\n // If no workspace found, return the original cwd as POSIX\n return toPosix(cwd);\n}\n\n/**\n * Make path relative to workspace root\n */\nexport function makeRelativeToRoot(absolutePath: string, root: string): string {\n const relative = path.relative(root, absolutePath);\n return toPosix(relative);\n}\n\n/**\n * Check if path should be ignored based on common patterns\n */\nexport function shouldIgnorePath(filePath: string): boolean {\n const posixPath = toPosix(filePath);\n \n const ignorePatterns = [\n 'node_modules/**',\n '.git/**',\n '.kb/**', // except .kb/mind/**\n 'dist/**',\n 'coverage/**',\n '.turbo/**',\n '.vite/**',\n '**/*.log',\n '**/*.tmp',\n '**/*.temp'\n ];\n \n // Simple file extension patterns\n const extensionPatterns = ['.log', '.tmp', '.temp'];\n\n // Special case: allow .kb/mind/** but ignore other .kb/**\n if (posixPath.startsWith('.kb/') && !posixPath.startsWith('.kb/mind/')) {\n return true;\n }\n \n // Allow .kb/mind/** paths\n if (posixPath.startsWith('.kb/mind/')) {\n return false;\n }\n \n // Check simple extension patterns first\n if (extensionPatterns.some(ext => posixPath.endsWith(ext))) {\n return true;\n }\n\n return ignorePatterns.some(pattern => {\n if (pattern.endsWith('/**')) {\n const prefix = pattern.slice(0, -3);\n return posixPath.startsWith(prefix + '/') || posixPath === prefix;\n }\n if (pattern.endsWith('**')) {\n const prefix = pattern.slice(0, -2);\n return posixPath.startsWith(prefix);\n }\n if (pattern.startsWith('**/')) {\n const suffix = pattern.slice(3);\n return posixPath.endsWith(suffix);\n }\n if (pattern.includes('*')) {\n // Simple glob pattern matching\n let regexPattern = pattern.replace(/\\*\\*/g, '.*').replace(/\\*/g, '[^/]*');\n // Handle **/*.ext patterns that should match files in any directory\n if (pattern.startsWith('**/')) {\n regexPattern = '.*' + regexPattern.slice(3);\n }\n const regex = new RegExp('^' + regexPattern + '$');\n return regex.test(posixPath);\n }\n return posixPath.includes(pattern);\n });\n}\n","/**\n * Mathematical utility functions for KB Labs Mind\n */\n\n/**\n * Calculate cosine similarity between two vectors\n *\n * Cosine similarity measures the cosine of the angle between two vectors,\n * producing a value between -1 and 1, where:\n * - 1 means vectors point in the same direction (identical)\n * - 0 means vectors are orthogonal (no similarity)\n * - -1 means vectors point in opposite directions\n *\n * @param a - First vector (array of numbers)\n * @param b - Second vector (array of numbers)\n * @returns Similarity score [0-1], or 0 if vectors have different lengths or zero magnitudes\n *\n * @example\n * ```typescript\n * const similarity = cosineSimilarity([1, 2, 3], [4, 5, 6]);\n * console.log(similarity); // ~0.974\n * ```\n */\nexport function cosineSimilarity(a: number[], b: number[]): number {\n // Vectors must have same dimensionality\n if (a.length !== b.length) {\n return 0;\n }\n\n let dotProduct = 0;\n let normA = 0;\n let normB = 0;\n\n // Calculate dot product and norms in single pass\n for (let i = 0; i < a.length; i++) {\n const av = a[i] ?? 0;\n const bv = b[i] ?? 0;\n dotProduct += av * bv;\n normA += av * av;\n normB += bv * bv;\n }\n\n // Handle zero magnitude vectors (division by zero)\n if (normA === 0 || normB === 0) {\n return 0;\n }\n\n // cosine(θ) = (a · b) / (||a|| * ||b||)\n return dotProduct / Math.sqrt(normA * normB);\n}\n\n/**\n * Calculate dot product of two vectors\n *\n * @param a - First vector\n * @param b - Second vector\n * @returns Dot product, or 0 if vectors have different lengths\n *\n * @example\n * ```typescript\n * const dot = dotProduct([1, 2, 3], [4, 5, 6]);\n * console.log(dot); // 32\n * ```\n */\nexport function dotProduct(a: number[], b: number[]): number {\n if (a.length !== b.length) {\n return 0;\n }\n\n let result = 0;\n for (let i = 0; i < a.length; i++) {\n result += (a[i] ?? 0) * (b[i] ?? 0);\n }\n return result;\n}\n\n/**\n * Calculate magnitude (L2 norm) of a vector\n *\n * @param vec - Input vector\n * @returns Magnitude (Euclidean length)\n *\n * @example\n * ```typescript\n * const mag = magnitude([3, 4]);\n * console.log(mag); // 5\n * ```\n */\nexport function magnitude(vec: number[]): number {\n let sum = 0;\n for (let i = 0; i < vec.length; i++) {\n const v = vec[i] ?? 0;\n sum += v * v;\n }\n return Math.sqrt(sum);\n}\n\n/**\n * Normalize a vector to unit length\n *\n * @param vec - Input vector\n * @returns Normalized vector (magnitude = 1), or original if magnitude is 0\n *\n * @example\n * ```typescript\n * const normalized = normalize([3, 4]);\n * console.log(normalized); // [0.6, 0.8]\n * ```\n */\nexport function normalize(vec: number[]): number[] {\n const mag = magnitude(vec);\n if (mag === 0) {\n return vec;\n }\n return vec.map(v => (v ?? 0) / mag);\n}\n","/**\n * Base class for file-based stores with rotation support\n *\n * Provides JSONL file rotation, segmentation by date, and automatic cleanup.\n * Used by history stores, feedback stores, and other persistent logging mechanisms.\n */\n\nimport path from 'node:path';\nimport type { IStorage } from '@kb-labs/sdk';\n\nexport interface FileRotationOptions {\n /**\n * Base directory path for storing files\n * @default '.kb/mind/store/'\n */\n basePath?: string;\n\n /**\n * Prefix for generated filenames\n * @default 'store-'\n */\n filePrefix?: string;\n\n /**\n * Maximum number of records per file before rotation\n * @default 1000\n */\n maxRecordsPerFile?: number;\n\n /**\n * Maximum number of files to keep (oldest deleted first)\n * @default 30\n */\n maxFiles?: number;\n}\n\n/**\n * Abstract base class for file-based stores with automatic rotation\n *\n * Features:\n * - JSONL format (one JSON object per line)\n * - Date-based file segmentation (YYYYMMDD-timestamp.jsonl)\n * - Automatic rotation when maxRecordsPerFile reached\n * - Automatic cleanup when maxFiles exceeded\n * - Sorted file iteration (oldest to newest)\n *\n * @example\n * ```typescript\n * class MyStore extends FileRotationStore<MyRecord> {\n * async save(record: MyRecord): Promise<void> {\n * return this.appendRecord(record);\n * }\n *\n * async find(criteria: any): Promise<MyRecord[]> {\n * return this.readRecords((rec) => rec.id === criteria.id);\n * }\n * }\n * ```\n */\nexport abstract class FileRotationStore<TRecord> {\n protected readonly basePath: string;\n protected readonly filePrefix: string;\n protected readonly maxRecordsPerFile: number;\n protected readonly maxFiles: number;\n\n constructor(\n protected readonly storage: IStorage,\n options: FileRotationOptions = {}\n ) {\n this.basePath = options.basePath ? this.ensureTrailingSlash(options.basePath) : '.kb/mind/store/';\n this.filePrefix = options.filePrefix ?? 'store-';\n this.maxRecordsPerFile = options.maxRecordsPerFile ?? 1000;\n this.maxFiles = options.maxFiles ?? 30;\n }\n\n /**\n * Append a record to the current writable file\n *\n * Automatically handles:\n * - File rotation when maxRecordsPerFile exceeded\n * - Cleanup when maxFiles exceeded\n * - JSONL formatting\n *\n * @param record - Record to append\n */\n protected async appendRecord(record: TRecord): Promise<void> {\n const target = await this.getWritableFile();\n const line = JSON.stringify({ v: 1, record }) + '\\n';\n\n const existing = await this.storage.read(target);\n const buffer = existing\n ? Buffer.concat([existing, Buffer.from(line, 'utf8')])\n : Buffer.from(line, 'utf8');\n\n await this.storage.write(target, buffer);\n await this.enforceRotation();\n }\n\n /**\n * Read records from all files, optionally filtering\n *\n * @param filter - Optional filter function\n * @param limit - Maximum number of records to return\n * @returns Array of records matching filter\n */\n protected async readRecords(\n filter?: (record: TRecord) => boolean,\n limit?: number\n ): Promise<TRecord[]> {\n const files = await this.getFilesSorted();\n const results: TRecord[] = [];\n\n for (const file of files) {\n if (limit && results.length >= limit) {break;}\n\n const buf = await this.storage.read(file);\n if (!buf) {continue;}\n\n const lines = buf.toString('utf8').split('\\n').filter(Boolean);\n for (const line of lines) {\n if (limit && results.length >= limit) {break;}\n\n try {\n const parsed = JSON.parse(line) as { v: number; record: TRecord };\n const rec = parsed.record;\n\n if (!filter || filter(rec)) {\n results.push(rec);\n }\n } catch {\n // Skip malformed lines\n continue;\n }\n }\n }\n\n return limit ? results.slice(0, limit) : results;\n }\n\n /**\n * Get the current writable file path\n *\n * Creates a new segment if:\n * - No files exist\n * - Latest file has >= maxRecordsPerFile records\n *\n * @returns Path to writable file\n */\n protected async getWritableFile(): Promise<string> {\n const files = await this.getFilesSorted();\n\n if (files.length === 0) {\n return this.segmentPath(Date.now());\n }\n\n const latest = files[files.length - 1]!;\n const buf = await this.storage.read(latest);\n\n if (!buf) {return latest;}\n\n const count = buf.toString('utf8').split('\\n').filter(Boolean).length;\n if (count >= this.maxRecordsPerFile) {\n return this.segmentPath(Date.now());\n }\n\n return latest;\n }\n\n /**\n * Get all store files sorted by timestamp (oldest to newest)\n *\n * @returns Sorted array of file paths\n */\n protected async getFilesSorted(): Promise<string[]> {\n const files = await this.storage.list(this.basePath);\n return files\n .filter((f) => f.startsWith(this.basePath + this.filePrefix) && f.endsWith('.jsonl'))\n .sort();\n }\n\n /**\n * Generate a segment file path from timestamp\n *\n * Format: {filePrefix}YYYYMMDD-{timestamp}.jsonl\n * Example: history-20251209-1733769000123.jsonl\n *\n * @param ts - Unix timestamp in milliseconds\n * @returns Full file path\n */\n protected segmentPath(ts: number): string {\n const date = new Date(ts);\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n const filename = `${this.filePrefix}${year}${month}${day}-${ts}.jsonl`;\n return path.posix.join(this.basePath, filename);\n }\n\n /**\n * Enforce file rotation by deleting oldest files if maxFiles exceeded\n */\n protected async enforceRotation(): Promise<void> {\n const files = await this.getFilesSorted();\n if (files.length <= this.maxFiles) {return;}\n\n const excess = files.length - this.maxFiles;\n const toDelete = files.slice(0, excess);\n await Promise.all(toDelete.map((f: string) => this.storage.delete(f)));\n }\n\n /**\n * Ensure path ends with trailing slash\n */\n protected ensureTrailingSlash(p: string): string {\n return p.endsWith('/') ? p : `${p}/`;\n }\n}\n","/**\n * JSON file operations for KB Labs Mind\n */\n\nimport { promises as fsp } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { sha256 } from \"./hash\";\n\n/**\n * Recursively sort object keys for deterministic output\n */\nfunction sortKeysRecursively(obj: any): any {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(sortKeysRecursively);\n }\n\n const sorted: any = {};\n const keys = Object.keys(obj).sort();\n\n for (const key of keys) {\n sorted[key] = sortKeysRecursively(obj[key]);\n }\n\n return sorted;\n}\n\n/**\n * Read JSON file with error handling\n */\nexport async function readJson<T = any>(filePath: string): Promise<T | null> {\n try {\n const content = await fsp.readFile(filePath, 'utf8');\n return JSON.parse(content) as T;\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n return null;\n }\n throw error;\n }\n}\n\n/**\n * Write JSON file atomically with sorted keys\n */\nexport async function writeJson<T>(filePath: string, data: T): Promise<void> {\n const tmp = `${filePath}.tmp`;\n const sorted = sortKeysRecursively(data);\n const content = JSON.stringify(sorted, null, 2) + '\\n';\n\n // Ensure directory exists\n await fsp.mkdir(dirname(filePath), { recursive: true });\n\n // Write to temp file\n await fsp.writeFile(tmp, content, 'utf8');\n\n // Windows-safe atomic rename\n if (process.platform === \"win32\") {\n try {\n await fsp.unlink(filePath);\n } catch (err: any) {\n if (err.code !== \"ENOENT\") {throw err;}\n }\n }\n\n // Rename tmp to final location\n await fsp.rename(tmp, filePath);\n}\n\n/**\n * Compute hash of JSON content\n */\nexport function computeJsonHash(data: any): string {\n const content = JSON.stringify(sortKeysRecursively(data));\n return sha256(content);\n}\n","/**\n * @module @kb-labs/mind-core/verification\n * Mind index verification utilities\n *\n * Moved from mind-gateway to break circular dependency (TASK-004)\n */\n\nimport { readJson, computeJsonHash } from '../utils/json';\nimport { sha256 } from '../utils/hash';\nimport { promises as fsp } from 'node:fs';\n\nexport interface VerifyResult {\n ok: boolean;\n code: string | null;\n inconsistencies: string[];\n hint: string;\n}\n\n/**\n * Verify Mind index integrity\n *\n * Checks:\n * 1. Main index file exists (.kb/mind/index.json)\n * 2. Individual file hashes match (api-index, deps, recent-diff)\n * 3. Combined index checksum is valid\n * 4. Required files are present\n *\n * @param cwd - Workspace root directory\n * @returns Verification result with inconsistencies list\n *\n * @example\n * ```typescript\n * const result = await verifyIndexes('/path/to/workspace');\n * if (!result.ok) {\n * console.error('Inconsistencies:', result.inconsistencies);\n * console.log('Hint:', result.hint);\n * }\n * ```\n */\nexport async function verifyIndexes(cwd: string): Promise<VerifyResult> {\n const inconsistencies: string[] = [];\n\n try {\n // Load main index\n const index = await readJson(`${cwd}/.kb/mind/index.json`);\n if (!index) {\n return {\n ok: false,\n code: 'MIND_NO_INDEX',\n inconsistencies: ['Main index file not found'],\n hint: 'Run \"kb mind rag-index\" to initialize indexes',\n };\n }\n\n // Load all index files\n const [apiIndex, depsGraph, recentDiff, meta, docs] = await Promise.all([\n readJson(`${cwd}/.kb/mind/api-index.json`),\n readJson(`${cwd}/.kb/mind/deps.json`),\n readJson(`${cwd}/.kb/mind/recent-diff.json`),\n readJson(`${cwd}/.kb/mind/meta.json`),\n readJson(`${cwd}/.kb/mind/docs.json`),\n ]);\n\n // Verify individual file hashes\n if (apiIndex) {\n const computedHash = computeJsonHash(apiIndex);\n if (computedHash !== index.apiIndexHash) {\n inconsistencies.push(\n `API index hash mismatch: expected ${index.apiIndexHash}, got ${computedHash}`\n );\n }\n } else if (index.apiIndexHash) {\n inconsistencies.push('API index file missing but hash is present');\n }\n\n if (depsGraph) {\n const computedHash = computeJsonHash(depsGraph);\n if (computedHash !== index.depsHash) {\n inconsistencies.push(\n `Dependencies hash mismatch: expected ${index.depsHash}, got ${computedHash}`\n );\n }\n } else if (index.depsHash) {\n inconsistencies.push('Dependencies file missing but hash is present');\n }\n\n if (recentDiff) {\n const computedHash = computeJsonHash(recentDiff);\n if (computedHash !== index.recentDiffHash) {\n inconsistencies.push(\n `Recent diff hash mismatch: expected ${index.recentDiffHash}, got ${computedHash}`\n );\n }\n } else if (index.recentDiffHash) {\n inconsistencies.push('Recent diff file missing but hash is present');\n }\n\n // Verify combined index checksum\n const combinedContent = JSON.stringify({\n apiIndex: apiIndex || {},\n deps: depsGraph || {},\n recentDiff: recentDiff || {},\n meta: meta || {},\n docs: docs || {},\n });\n const computedChecksum = sha256(combinedContent);\n\n if (computedChecksum !== index.indexChecksum) {\n inconsistencies.push(\n `Index checksum mismatch: expected ${index.indexChecksum}, got ${computedChecksum}`\n );\n }\n\n // Check for missing files that should exist\n const expectedFiles = ['api-index.json', 'deps.json', 'recent-diff.json'];\n for (const file of expectedFiles) {\n try {\n await fsp.access(`${cwd}/.kb/mind/${file}`);\n } catch {\n inconsistencies.push(`Required index file missing: ${file}`);\n }\n }\n\n const ok = inconsistencies.length === 0;\n const code = ok ? null : 'MIND_INDEX_INCONSISTENT';\n const hint = ok\n ? 'All indexes are consistent and up to date'\n : 'Run \"kb mind rag-index\" to rebuild indexes';\n\n return { ok, code, inconsistencies, hint };\n } catch (error: any) {\n return {\n ok: false,\n code: 'MIND_VERIFY_ERROR',\n inconsistencies: [`Verification failed: ${error.message}`],\n hint: 'Check file permissions and workspace structure',\n };\n }\n}\n","/**\n * Default configurations for KB Labs Mind\n */\n\nimport type { ContextBudget, ContextPreset } from \"./types/pack\";\n\n/**\n * Default context budget\n */\nexport const DEFAULT_BUDGET: ContextBudget = {\n totalTokens: 9000,\n caps: {\n intent_summary: 300,\n product_overview: 600,\n project_meta: 500,\n api_signatures: 2200,\n recent_diffs: 1200,\n docs_overview: 600,\n impl_snippets: 3000,\n configs_profiles: 700,\n },\n truncation: \"middle\",\n};\n\n/**\n * Default context preset\n */\nexport const DEFAULT_PRESET: ContextPreset = {\n name: \"balanced\",\n weight: { \n overview: 1, \n api: 1.2, \n diffs: 1, \n snippets: 1.4, \n configs: 0.6,\n meta: 0.8,\n docs: 0.9\n }\n};\n\n/**\n * Default time budget for indexing operations (ms)\n */\nexport const DEFAULT_TIME_BUDGET_MS = 800;\n\n/**\n * Maximum file size to process (bytes)\n */\nexport const MAX_FILE_SIZE_BYTES = 1.5 * 1024 * 1024; // 1.5MB\n\n/**\n * Maximum lines per snippet\n */\nexport const MAX_SNIPPET_LINES = 60;\n\n/**\n * Generator string for artifacts\n */\nexport function getGenerator(): string {\n return \"kb-labs-mind@0.1.0\";\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/mind/core/src/error/mind-error.ts","../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/mind/core/src/utils/token.ts","../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/mind/core/src/utils/hash.ts","../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/mind/core/src/utils/paths.ts","../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/mind/core/src/utils/math.ts","../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/mind/core/src/utils/file-rotation.ts","../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/mind/core/src/utils/json.ts","../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/mind/core/src/verification/verify-indexes.ts","../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/mind/core/src/defaults.ts"],"names":["readFile","dotProduct","path","fsp"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module @kb-labs/mind-core/error\n * Standardized error class for KB Labs Mind\n */\n\nexport class MindError extends Error {\n constructor(\n public code: string,\n message: string,\n public hint?: string,\n public meta?: any\n ) {\n super(message);\n this.name = 'MindError';\n }\n}\n\n/**\n * Maps MindError codes to CLI exit codes\n */\nexport function getExitCode(err: MindError): number {\n if (err.code === 'MIND_FORBIDDEN') {return 3;}\n if (err.code === 'MIND_NO_GIT') {return 2;}\n if (err.code === 'MIND_FS_TIMEOUT') {return 2;}\n if (err.code === 'MIND_PARSE_ERROR') {return 1;}\n if (err.code === 'MIND_PACK_BUDGET_EXCEEDED') {return 1;}\n if (err.code.startsWith('MIND_')) {return 1;}\n return 1;\n}\n\n/**\n * Error codes with their standard hints\n */\nexport const ERROR_HINTS = {\n MIND_NO_GIT: 'Initialize git repository or run from a git repository',\n MIND_FS_TIMEOUT: 'File system operation timed out - try increasing time budget',\n MIND_PARSE_ERROR: 'Failed to parse file - check syntax and try again',\n MIND_PACK_BUDGET_EXCEEDED: 'Context pack exceeds token budget - reduce content or increase budget',\n MIND_FORBIDDEN: 'Operation not permitted - check file permissions',\n MIND_TIME_BUDGET: 'Time budget exceeded - operation completed partially',\n MIND_BAD_FLAGS: 'Invalid command line flags - check values and try again',\n MIND_INVALID_FLAG: 'Invalid flag value - check format and try again',\n MIND_BUNDLE_TIMEOUT: 'Bundle operation timed out - skipped bundle information',\n MIND_FEED_ERROR: 'Mind feed operation failed - check logs for details',\n MIND_INIT_ERROR: 'Mind initialization failed - check permissions and try again',\n MIND_UPDATE_ERROR: 'Mind update operation failed - check logs for details',\n MIND_PACK_ERROR: 'Mind pack operation failed - check logs for details',\n MIND_GIT_ERROR: 'Git operation failed - check git repository status',\n MIND_INDEX_NOT_FOUND: 'Mind indexes not found - run \"kb mind init\" first',\n MIND_INVALID_PATH: 'Invalid file or directory path - check path exists and is accessible',\n MIND_DEPENDENCY_ERROR: 'Dependency resolution failed - check package configuration',\n MIND_BUILD_ERROR: 'Build operation failed - check configuration and try again',\n} as const;\n\nexport type ErrorCode = keyof typeof ERROR_HINTS;\n\n/**\n * Create a MindError with standardized code and hint\n */\nexport function createMindError(\n code: ErrorCode,\n message: string,\n meta?: any\n): MindError {\n return new MindError(code, message, ERROR_HINTS[code], meta);\n}\n\n/**\n * Create a MindError from a generic error\n */\nexport function wrapError(error: unknown, code: ErrorCode = 'MIND_FEED_ERROR'): MindError {\n if (error instanceof MindError) {\n return error;\n }\n \n const message = error instanceof Error ? error.message : String(error);\n return createMindError(code, message, { originalError: error });\n}\n\n/**\n * Check if an error is a MindError\n */\nexport function isMindError(error: unknown): error is MindError {\n return error instanceof MindError;\n}\n","/**\n * Token estimation utilities for KB Labs Mind\n */\n\nimport type { ITokenEstimator } from \"../types/pack\";\n\n/**\n * Default whitespace-aware token estimator\n * Algorithm: ~3.8-4.2 chars/token based on whitespace and code patterns\n */\nexport class DefaultTokenEstimator implements ITokenEstimator {\n private readonly charsPerToken: number = 4.0;\n private readonly codeBonus: number = 0.1; // 10% bonus for code-like content\n private readonly punctuationWeight: number = 0.8;\n\n estimate(text: string): number {\n if (!text || text.length === 0) {return 0;}\n\n // Count words, punctuation, and whitespace\n const words = text.match(/\\b\\w+\\b/g) || [];\n const punctuation = text.match(/[^\\w\\s]/g) || [];\n const whitespace = text.match(/\\s/g) || [];\n \n // Base estimation\n let tokens = words.length;\n \n // Add punctuation with weight\n tokens += punctuation.length * this.punctuationWeight;\n \n // Add whitespace (spaces, newlines, tabs)\n tokens += whitespace.length * 0.3;\n \n // Apply code bonus if content looks like code\n const codeIndicators = text.match(/[{}();=<>]/g) || [];\n if (codeIndicators.length > words.length * 0.1) {\n tokens *= (1 + this.codeBonus);\n }\n \n // Apply character-based adjustment\n const charBasedEstimate = text.length / this.charsPerToken;\n \n // Use the higher of word-based or char-based estimate\n return Math.ceil(Math.max(tokens, charBasedEstimate));\n }\n\n truncate(text: string, maxTokens: number, mode: \"start\"|\"middle\"|\"end\"): string {\n if (this.estimate(text) <= maxTokens) {\n return text;\n }\n\n const lines = text.split('\\n');\n const estimatedTokens = this.estimate(text);\n const ratio = maxTokens / estimatedTokens;\n const targetLines = Math.max(1, Math.floor(lines.length * ratio));\n \n if (targetLines >= lines.length) {return text;}\n\n switch (mode) {\n case 'start':\n return lines.slice(0, targetLines).join('\\n');\n case 'end':\n return lines.slice(-targetLines).join('\\n');\n case 'middle':\n default: {\n const startLines = Math.max(1, Math.floor(targetLines / 2));\n const endLines = Math.max(1, targetLines - startLines);\n const start = lines.slice(0, startLines);\n const end = lines.slice(-endLines);\n return [...start, '...', ...end].join('\\n');\n }\n }\n }\n}\n\n/**\n * Default token estimator instance\n */\nexport const defaultTokenEstimator = new DefaultTokenEstimator();\n\n/**\n * Estimate tokens using default strategy\n */\nexport function estimateTokens(text: string): number {\n return defaultTokenEstimator.estimate(text);\n}\n\n/**\n * Truncate text to token limit using default strategy\n */\nexport function truncateToTokens(\n text: string, \n maxTokens: number, \n mode: \"start\"|\"middle\"|\"end\" = \"middle\"\n): string {\n return defaultTokenEstimator.truncate(text, maxTokens, mode);\n}\n","/**\n * Hashing utilities for KB Labs Mind\n */\n\nimport { createHash } from 'node:crypto';\n\n/**\n * Compute SHA256 hash for string content\n */\nexport function sha256(content: string): string {\n return createHash('sha256').update(content, 'utf8').digest('hex');\n}\n\n/**\n * Compute SHA256 hash for Buffer content\n */\nexport function sha256Buffer(buffer: Buffer): string {\n return createHash('sha256').update(buffer).digest('hex');\n}\n\n/**\n * Compute SHA256 hash for file content (streaming for large files)\n */\nexport async function sha256File(filePath: string): Promise<string> {\n const { readFile } = await import('node:fs/promises');\n const content = await readFile(filePath);\n return sha256Buffer(content);\n}\n","/**\n * Path utilities for KB Labs Mind\n */\n\nimport path from 'node:path';\nimport { existsSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\n\n/**\n * Convert path to POSIX format (forward slashes)\n */\nexport function toPosix(filePath: string): string {\n return filePath.replace(/\\\\/g, '/');\n}\n\n/**\n * Convert POSIX path back to platform-specific format\n */\nexport function fromPosix(posixPath: string): string {\n return posixPath.split('/').join(path.sep);\n}\n\n/**\n * Find workspace root by looking for git repository or monorepo indicators\n * Searches up the directory tree from cwd\n */\nexport async function findWorkspaceRoot(cwd: string): Promise<string> {\n let current = path.resolve(cwd);\n const root = path.parse(current).root;\n\n while (current !== root) {\n // Check for git repository\n if (existsSync(path.join(current, '.git'))) {\n return toPosix(current);\n }\n\n // Check for monorepo indicators\n const packageJsonPath = path.join(current, 'package.json');\n if (existsSync(packageJsonPath)) {\n try {\n const packageJsonContent = await readFile(packageJsonPath, 'utf8');\n const packageJson = JSON.parse(packageJsonContent);\n // Check for workspace configuration\n if (packageJson.workspaces || packageJson.pnpm?.workspace) {\n return toPosix(current);\n }\n } catch {\n // Ignore JSON parse errors\n }\n }\n\n // Check for pnpm-workspace.yaml\n if (existsSync(path.join(current, 'pnpm-workspace.yaml'))) {\n return toPosix(current);\n }\n\n // Move up one directory\n current = path.dirname(current);\n }\n\n // If no workspace found, return the original cwd as POSIX\n return toPosix(cwd);\n}\n\n/**\n * Make path relative to workspace root\n */\nexport function makeRelativeToRoot(absolutePath: string, root: string): string {\n const relative = path.relative(root, absolutePath);\n return toPosix(relative);\n}\n\n/**\n * Check if path should be ignored based on common patterns\n */\nexport function shouldIgnorePath(filePath: string): boolean {\n const posixPath = toPosix(filePath);\n \n const ignorePatterns = [\n 'node_modules/**',\n '.git/**',\n '.kb/**', // except .kb/mind/**\n 'dist/**',\n 'coverage/**',\n '.turbo/**',\n '.vite/**',\n '**/*.log',\n '**/*.tmp',\n '**/*.temp'\n ];\n \n // Simple file extension patterns\n const extensionPatterns = ['.log', '.tmp', '.temp'];\n\n // Special case: allow .kb/mind/** but ignore other .kb/**\n if (posixPath.startsWith('.kb/') && !posixPath.startsWith('.kb/mind/')) {\n return true;\n }\n \n // Allow .kb/mind/** paths\n if (posixPath.startsWith('.kb/mind/')) {\n return false;\n }\n \n // Check simple extension patterns first\n if (extensionPatterns.some(ext => posixPath.endsWith(ext))) {\n return true;\n }\n\n return ignorePatterns.some(pattern => {\n if (pattern.endsWith('/**')) {\n const prefix = pattern.slice(0, -3);\n return posixPath.startsWith(prefix + '/') || posixPath === prefix;\n }\n if (pattern.endsWith('**')) {\n const prefix = pattern.slice(0, -2);\n return posixPath.startsWith(prefix);\n }\n if (pattern.startsWith('**/')) {\n const suffix = pattern.slice(3);\n return posixPath.endsWith(suffix);\n }\n if (pattern.includes('*')) {\n // Simple glob pattern matching\n let regexPattern = pattern.replace(/\\*\\*/g, '.*').replace(/\\*/g, '[^/]*');\n // Handle **/*.ext patterns that should match files in any directory\n if (pattern.startsWith('**/')) {\n regexPattern = '.*' + regexPattern.slice(3);\n }\n const regex = new RegExp('^' + regexPattern + '$');\n return regex.test(posixPath);\n }\n return posixPath.includes(pattern);\n });\n}\n","/**\n * Mathematical utility functions for KB Labs Mind\n */\n\n/**\n * Calculate cosine similarity between two vectors\n *\n * Cosine similarity measures the cosine of the angle between two vectors,\n * producing a value between -1 and 1, where:\n * - 1 means vectors point in the same direction (identical)\n * - 0 means vectors are orthogonal (no similarity)\n * - -1 means vectors point in opposite directions\n *\n * @param a - First vector (array of numbers)\n * @param b - Second vector (array of numbers)\n * @returns Similarity score [0-1], or 0 if vectors have different lengths or zero magnitudes\n *\n * @example\n * ```typescript\n * const similarity = cosineSimilarity([1, 2, 3], [4, 5, 6]);\n * console.log(similarity); // ~0.974\n * ```\n */\nexport function cosineSimilarity(a: number[], b: number[]): number {\n // Vectors must have same dimensionality\n if (a.length !== b.length) {\n return 0;\n }\n\n let dotProduct = 0;\n let normA = 0;\n let normB = 0;\n\n // Calculate dot product and norms in single pass\n for (let i = 0; i < a.length; i++) {\n const av = a[i] ?? 0;\n const bv = b[i] ?? 0;\n dotProduct += av * bv;\n normA += av * av;\n normB += bv * bv;\n }\n\n // Handle zero magnitude vectors (division by zero)\n if (normA === 0 || normB === 0) {\n return 0;\n }\n\n // cosine(θ) = (a · b) / (||a|| * ||b||)\n return dotProduct / Math.sqrt(normA * normB);\n}\n\n/**\n * Calculate dot product of two vectors\n *\n * @param a - First vector\n * @param b - Second vector\n * @returns Dot product, or 0 if vectors have different lengths\n *\n * @example\n * ```typescript\n * const dot = dotProduct([1, 2, 3], [4, 5, 6]);\n * console.log(dot); // 32\n * ```\n */\nexport function dotProduct(a: number[], b: number[]): number {\n if (a.length !== b.length) {\n return 0;\n }\n\n let result = 0;\n for (let i = 0; i < a.length; i++) {\n result += (a[i] ?? 0) * (b[i] ?? 0);\n }\n return result;\n}\n\n/**\n * Calculate magnitude (L2 norm) of a vector\n *\n * @param vec - Input vector\n * @returns Magnitude (Euclidean length)\n *\n * @example\n * ```typescript\n * const mag = magnitude([3, 4]);\n * console.log(mag); // 5\n * ```\n */\nexport function magnitude(vec: number[]): number {\n let sum = 0;\n for (let i = 0; i < vec.length; i++) {\n const v = vec[i] ?? 0;\n sum += v * v;\n }\n return Math.sqrt(sum);\n}\n\n/**\n * Normalize a vector to unit length\n *\n * @param vec - Input vector\n * @returns Normalized vector (magnitude = 1), or original if magnitude is 0\n *\n * @example\n * ```typescript\n * const normalized = normalize([3, 4]);\n * console.log(normalized); // [0.6, 0.8]\n * ```\n */\nexport function normalize(vec: number[]): number[] {\n const mag = magnitude(vec);\n if (mag === 0) {\n return vec;\n }\n return vec.map(v => (v ?? 0) / mag);\n}\n","/**\n * Base class for file-based stores with rotation support\n *\n * Provides JSONL file rotation, segmentation by date, and automatic cleanup.\n * Used by history stores, feedback stores, and other persistent logging mechanisms.\n */\n\nimport path from 'node:path';\nimport type { IStorage } from '@kb-labs/sdk';\n\nexport interface FileRotationOptions {\n /**\n * Base directory path for storing files\n * @default '.kb/mind/store/'\n */\n basePath?: string;\n\n /**\n * Prefix for generated filenames\n * @default 'store-'\n */\n filePrefix?: string;\n\n /**\n * Maximum number of records per file before rotation\n * @default 1000\n */\n maxRecordsPerFile?: number;\n\n /**\n * Maximum number of files to keep (oldest deleted first)\n * @default 30\n */\n maxFiles?: number;\n}\n\n/**\n * Abstract base class for file-based stores with automatic rotation\n *\n * Features:\n * - JSONL format (one JSON object per line)\n * - Date-based file segmentation (YYYYMMDD-timestamp.jsonl)\n * - Automatic rotation when maxRecordsPerFile reached\n * - Automatic cleanup when maxFiles exceeded\n * - Sorted file iteration (oldest to newest)\n *\n * @example\n * ```typescript\n * class MyStore extends FileRotationStore<MyRecord> {\n * async save(record: MyRecord): Promise<void> {\n * return this.appendRecord(record);\n * }\n *\n * async find(criteria: any): Promise<MyRecord[]> {\n * return this.readRecords((rec) => rec.id === criteria.id);\n * }\n * }\n * ```\n */\nexport abstract class FileRotationStore<TRecord> {\n protected readonly basePath: string;\n protected readonly filePrefix: string;\n protected readonly maxRecordsPerFile: number;\n protected readonly maxFiles: number;\n\n constructor(\n protected readonly storage: IStorage,\n options: FileRotationOptions = {}\n ) {\n this.basePath = options.basePath ? this.ensureTrailingSlash(options.basePath) : '.kb/mind/store/';\n this.filePrefix = options.filePrefix ?? 'store-';\n this.maxRecordsPerFile = options.maxRecordsPerFile ?? 1000;\n this.maxFiles = options.maxFiles ?? 30;\n }\n\n /**\n * Append a record to the current writable file\n *\n * Automatically handles:\n * - File rotation when maxRecordsPerFile exceeded\n * - Cleanup when maxFiles exceeded\n * - JSONL formatting\n *\n * @param record - Record to append\n */\n protected async appendRecord(record: TRecord): Promise<void> {\n const target = await this.getWritableFile();\n const line = JSON.stringify({ v: 1, record }) + '\\n';\n\n const existing = await this.storage.read(target);\n const buffer = existing\n ? Buffer.concat([existing, Buffer.from(line, 'utf8')])\n : Buffer.from(line, 'utf8');\n\n await this.storage.write(target, buffer);\n await this.enforceRotation();\n }\n\n /**\n * Read records from all files, optionally filtering\n *\n * @param filter - Optional filter function\n * @param limit - Maximum number of records to return\n * @returns Array of records matching filter\n */\n protected async readRecords(\n filter?: (record: TRecord) => boolean,\n limit?: number\n ): Promise<TRecord[]> {\n const files = await this.getFilesSorted();\n const results: TRecord[] = [];\n\n for (const file of files) {\n if (limit && results.length >= limit) {break;}\n\n const buf = await this.storage.read(file);\n if (!buf) {continue;}\n\n const lines = buf.toString('utf8').split('\\n').filter(Boolean);\n for (const line of lines) {\n if (limit && results.length >= limit) {break;}\n\n try {\n const parsed = JSON.parse(line) as { v: number; record: TRecord };\n const rec = parsed.record;\n\n if (!filter || filter(rec)) {\n results.push(rec);\n }\n } catch {\n // Skip malformed lines\n continue;\n }\n }\n }\n\n return limit ? results.slice(0, limit) : results;\n }\n\n /**\n * Get the current writable file path\n *\n * Creates a new segment if:\n * - No files exist\n * - Latest file has >= maxRecordsPerFile records\n *\n * @returns Path to writable file\n */\n protected async getWritableFile(): Promise<string> {\n const files = await this.getFilesSorted();\n\n if (files.length === 0) {\n return this.segmentPath(Date.now());\n }\n\n const latest = files[files.length - 1]!;\n const buf = await this.storage.read(latest);\n\n if (!buf) {return latest;}\n\n const count = buf.toString('utf8').split('\\n').filter(Boolean).length;\n if (count >= this.maxRecordsPerFile) {\n return this.segmentPath(Date.now());\n }\n\n return latest;\n }\n\n /**\n * Get all store files sorted by timestamp (oldest to newest)\n *\n * @returns Sorted array of file paths\n */\n protected async getFilesSorted(): Promise<string[]> {\n const files = await this.storage.list(this.basePath);\n return files\n .filter((f) => f.startsWith(this.basePath + this.filePrefix) && f.endsWith('.jsonl'))\n .sort();\n }\n\n /**\n * Generate a segment file path from timestamp\n *\n * Format: {filePrefix}YYYYMMDD-{timestamp}.jsonl\n * Example: history-20251209-1733769000123.jsonl\n *\n * @param ts - Unix timestamp in milliseconds\n * @returns Full file path\n */\n protected segmentPath(ts: number): string {\n const date = new Date(ts);\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n const filename = `${this.filePrefix}${year}${month}${day}-${ts}.jsonl`;\n return path.posix.join(this.basePath, filename);\n }\n\n /**\n * Enforce file rotation by deleting oldest files if maxFiles exceeded\n */\n protected async enforceRotation(): Promise<void> {\n const files = await this.getFilesSorted();\n if (files.length <= this.maxFiles) {return;}\n\n const excess = files.length - this.maxFiles;\n const toDelete = files.slice(0, excess);\n await Promise.all(toDelete.map((f: string) => this.storage.delete(f)));\n }\n\n /**\n * Ensure path ends with trailing slash\n */\n protected ensureTrailingSlash(p: string): string {\n return p.endsWith('/') ? p : `${p}/`;\n }\n}\n","/**\n * JSON file operations for KB Labs Mind\n */\n\nimport { promises as fsp } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { sha256 } from \"./hash\";\n\n/**\n * Recursively sort object keys for deterministic output\n */\nfunction sortKeysRecursively(obj: any): any {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(sortKeysRecursively);\n }\n\n const sorted: any = {};\n const keys = Object.keys(obj).sort();\n\n for (const key of keys) {\n sorted[key] = sortKeysRecursively(obj[key]);\n }\n\n return sorted;\n}\n\n/**\n * Read JSON file with error handling\n */\nexport async function readJson<T = any>(filePath: string): Promise<T | null> {\n try {\n const content = await fsp.readFile(filePath, 'utf8');\n return JSON.parse(content) as T;\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n return null;\n }\n throw error;\n }\n}\n\n/**\n * Write JSON file atomically with sorted keys\n */\nexport async function writeJson<T>(filePath: string, data: T): Promise<void> {\n const tmp = `${filePath}.tmp`;\n const sorted = sortKeysRecursively(data);\n const content = JSON.stringify(sorted, null, 2) + '\\n';\n\n // Ensure directory exists\n await fsp.mkdir(dirname(filePath), { recursive: true });\n\n // Write to temp file\n await fsp.writeFile(tmp, content, 'utf8');\n\n // Windows-safe atomic rename\n if (process.platform === \"win32\") {\n try {\n await fsp.unlink(filePath);\n } catch (err: any) {\n if (err.code !== \"ENOENT\") {throw err;}\n }\n }\n\n // Rename tmp to final location\n await fsp.rename(tmp, filePath);\n}\n\n/**\n * Compute hash of JSON content\n */\nexport function computeJsonHash(data: any): string {\n const content = JSON.stringify(sortKeysRecursively(data));\n return sha256(content);\n}\n","/**\n * @module @kb-labs/mind-core/verification\n * Mind index verification utilities\n *\n * Moved from mind-gateway to break circular dependency (TASK-004)\n */\n\nimport { readJson, computeJsonHash } from '../utils/json';\nimport { sha256 } from '../utils/hash';\nimport { promises as fsp } from 'node:fs';\n\nexport interface VerifyResult {\n ok: boolean;\n code: string | null;\n inconsistencies: string[];\n hint: string;\n}\n\n/**\n * Verify Mind index integrity\n *\n * Checks:\n * 1. Main index file exists (.kb/mind/index.json)\n * 2. Individual file hashes match (api-index, deps, recent-diff)\n * 3. Combined index checksum is valid\n * 4. Required files are present\n *\n * @param cwd - Workspace root directory\n * @returns Verification result with inconsistencies list\n *\n * @example\n * ```typescript\n * const result = await verifyIndexes('/path/to/workspace');\n * if (!result.ok) {\n * console.error('Inconsistencies:', result.inconsistencies);\n * console.log('Hint:', result.hint);\n * }\n * ```\n */\nexport async function verifyIndexes(cwd: string): Promise<VerifyResult> {\n const inconsistencies: string[] = [];\n\n try {\n // Load main index\n const index = await readJson(`${cwd}/.kb/mind/index.json`);\n if (!index) {\n return {\n ok: false,\n code: 'MIND_NO_INDEX',\n inconsistencies: ['Main index file not found'],\n hint: 'Run \"kb mind rag-index\" to initialize indexes',\n };\n }\n\n // Load all index files\n const [apiIndex, depsGraph, recentDiff, meta, docs] = await Promise.all([\n readJson(`${cwd}/.kb/mind/api-index.json`),\n readJson(`${cwd}/.kb/mind/deps.json`),\n readJson(`${cwd}/.kb/mind/recent-diff.json`),\n readJson(`${cwd}/.kb/mind/meta.json`),\n readJson(`${cwd}/.kb/mind/docs.json`),\n ]);\n\n // Verify individual file hashes\n if (apiIndex) {\n const computedHash = computeJsonHash(apiIndex);\n if (computedHash !== index.apiIndexHash) {\n inconsistencies.push(\n `API index hash mismatch: expected ${index.apiIndexHash}, got ${computedHash}`\n );\n }\n } else if (index.apiIndexHash) {\n inconsistencies.push('API index file missing but hash is present');\n }\n\n if (depsGraph) {\n const computedHash = computeJsonHash(depsGraph);\n if (computedHash !== index.depsHash) {\n inconsistencies.push(\n `Dependencies hash mismatch: expected ${index.depsHash}, got ${computedHash}`\n );\n }\n } else if (index.depsHash) {\n inconsistencies.push('Dependencies file missing but hash is present');\n }\n\n if (recentDiff) {\n const computedHash = computeJsonHash(recentDiff);\n if (computedHash !== index.recentDiffHash) {\n inconsistencies.push(\n `Recent diff hash mismatch: expected ${index.recentDiffHash}, got ${computedHash}`\n );\n }\n } else if (index.recentDiffHash) {\n inconsistencies.push('Recent diff file missing but hash is present');\n }\n\n // Verify combined index checksum\n const combinedContent = JSON.stringify({\n apiIndex: apiIndex || {},\n deps: depsGraph || {},\n recentDiff: recentDiff || {},\n meta: meta || {},\n docs: docs || {},\n });\n const computedChecksum = sha256(combinedContent);\n\n if (computedChecksum !== index.indexChecksum) {\n inconsistencies.push(\n `Index checksum mismatch: expected ${index.indexChecksum}, got ${computedChecksum}`\n );\n }\n\n // Check for missing files that should exist\n const expectedFiles = ['api-index.json', 'deps.json', 'recent-diff.json'];\n for (const file of expectedFiles) {\n try {\n await fsp.access(`${cwd}/.kb/mind/${file}`);\n } catch {\n inconsistencies.push(`Required index file missing: ${file}`);\n }\n }\n\n const ok = inconsistencies.length === 0;\n const code = ok ? null : 'MIND_INDEX_INCONSISTENT';\n const hint = ok\n ? 'All indexes are consistent and up to date'\n : 'Run \"kb mind rag-index\" to rebuild indexes';\n\n return { ok, code, inconsistencies, hint };\n } catch (error: any) {\n return {\n ok: false,\n code: 'MIND_VERIFY_ERROR',\n inconsistencies: [`Verification failed: ${error.message}`],\n hint: 'Check file permissions and workspace structure',\n };\n }\n}\n","/**\n * Default configurations for KB Labs Mind\n */\n\nimport type { ContextBudget, ContextPreset } from \"./types/pack\";\n\n/**\n * Default context budget\n */\nexport const DEFAULT_BUDGET: ContextBudget = {\n totalTokens: 9000,\n caps: {\n intent_summary: 300,\n product_overview: 600,\n project_meta: 500,\n api_signatures: 2200,\n recent_diffs: 1200,\n docs_overview: 600,\n impl_snippets: 3000,\n configs_profiles: 700,\n },\n truncation: \"middle\",\n};\n\n/**\n * Default context preset\n */\nexport const DEFAULT_PRESET: ContextPreset = {\n name: \"balanced\",\n weight: { \n overview: 1, \n api: 1.2, \n diffs: 1, \n snippets: 1.4, \n configs: 0.6,\n meta: 0.8,\n docs: 0.9\n }\n};\n\n/**\n * Default time budget for indexing operations (ms)\n */\nexport const DEFAULT_TIME_BUDGET_MS = 800;\n\n/**\n * Maximum file size to process (bytes)\n */\nexport const MAX_FILE_SIZE_BYTES = 1.5 * 1024 * 1024; // 1.5MB\n\n/**\n * Maximum lines per snippet\n */\nexport const MAX_SNIPPET_LINES = 60;\n\n/**\n * Generator string for artifacts\n */\nexport function getGenerator(): string {\n return \"kb-labs-mind@0.1.0\";\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kb-labs/mind-core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.16.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Core contracts, errors, and utilities for KB Labs Mind",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -25,11 +25,11 @@
|
|
|
25
25
|
"tsup": "^8.5.0",
|
|
26
26
|
"typescript": "^5.6.3",
|
|
27
27
|
"vitest": "^3.2.4",
|
|
28
|
-
"@kb-labs/devkit": "2.
|
|
28
|
+
"@kb-labs/devkit": "2.16.0"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@kb-labs/
|
|
32
|
-
"@kb-labs/
|
|
31
|
+
"@kb-labs/sdk": "2.16.0",
|
|
32
|
+
"@kb-labs/mind-types": "2.16.0"
|
|
33
33
|
},
|
|
34
34
|
"engines": {
|
|
35
35
|
"node": ">=20.0.0",
|