make-laten 1.1.1 → 1.2.1
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/README.md +3 -3
- package/dist/cli/index.js +306 -65
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +306 -65
- package/dist/cli/index.mjs.map +1 -1
- package/dist/index.js +288 -68
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +274 -67
- package/dist/index.mjs.map +1 -1
- package/dist/mcp/server.js +1032 -75
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/server.mjs +1032 -75
- package/dist/mcp/server.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graph/database.ts","../src/graph/edges.ts","../src/graph/nodes.ts","../src/compress/confidence.ts","../src/compress/file-read.ts","../src/compress/git-diff.ts","../src/compress/grep.ts","../src/compress/output.ts","../src/cache/l1-session.ts","../src/cache/l2-cross.ts","../src/cache/semantic.ts","../src/cache/index.ts","../src/route/tool-router.ts","../src/route/strategy-router.ts","../src/route/index.ts","../src/tool/registry.ts","../src/tool/semantic-tool.ts","../src/tool/index.ts","../src/adapter/claude-code.ts","../src/adapter/codex.ts","../src/adapter/gemini-cli.ts","../src/adapter/hook.ts","../src/adapter/rules.ts","../src/adapter/types.ts","../src/adapter/installer.ts","../src/adapter/detector.ts","../src/adapter/index.ts","../src/learn/pattern-miner.ts","../src/learn/failure-learner.ts","../src/learn/index.ts","../src/correct/auto-correct.ts","../src/correct/index.ts","../src/middleware/pipeline.ts","../src/plugin/loader.ts","../src/security/rate-limiter.ts","../src/logging/logger.ts","../src/error/handler.ts","../src/metrics/collector.ts","../src/session/manager.ts","../src/web/backends/duckduckgo.ts","../src/web/backends/index.ts","../src/web/extractor.ts","../src/web/compressor.ts","../src/web/router.ts","../src/index.ts"],"sourcesContent":["import Database from 'better-sqlite3'\n\nexport type Database = Database.Database\n\nconst SCHEMA = `\nCREATE TABLE IF NOT EXISTS nodes (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n content TEXT NOT NULL,\n original TEXT,\n embedding BLOB,\n metadata TEXT NOT NULL DEFAULT '{}',\n created_at INTEGER NOT NULL DEFAULT (unixepoch()),\n accessed_at INTEGER NOT NULL DEFAULT (unixepoch()),\n access_count INTEGER DEFAULT 0\n);\n\nCREATE TABLE IF NOT EXISTS edges (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n source TEXT NOT NULL,\n target TEXT NOT NULL,\n type TEXT NOT NULL,\n weight REAL DEFAULT 1.0,\n metadata TEXT,\n created_at INTEGER NOT NULL DEFAULT (unixepoch()),\n FOREIGN KEY (source) REFERENCES nodes(id),\n FOREIGN KEY (target) REFERENCES nodes(id)\n);\n\nCREATE INDEX IF NOT EXISTS idx_nodes_type ON nodes(type);\nCREATE INDEX IF NOT EXISTS idx_nodes_created ON nodes(created_at);\nCREATE INDEX IF NOT EXISTS idx_nodes_accessed ON nodes(accessed_at);\nCREATE INDEX IF NOT EXISTS idx_edges_source ON edges(source);\nCREATE INDEX IF NOT EXISTS idx_edges_target ON edges(target);\nCREATE INDEX IF NOT EXISTS idx_edges_type ON edges(type);\n`\n\nexport async function createDatabase(dbPath: string): Promise<Database> {\n const db = new Database(dbPath)\n db.pragma('journal_mode = WAL')\n db.pragma('foreign_keys = ON')\n \n db.exec(SCHEMA)\n \n return db\n}","import type { Database } from './database.js'\n\nexport interface GraphEdge {\n id: number\n source: string\n target: string\n type: string\n weight: number\n metadata?: Record<string, any>\n createdAt: number\n}\n\ninterface EdgeRow {\n id: number\n source: string\n target: string\n type: string\n weight: number\n metadata: string | null\n created_at: number\n}\n\nexport class EdgeStore {\n constructor(private db: Database) {}\n\n async add(edge: Omit<GraphEdge, 'id' | 'createdAt'>): Promise<void> {\n this.db.prepare(`\n INSERT INTO edges (source, target, type, weight, metadata)\n VALUES (?, ?, ?, ?, ?)\n `).run(\n edge.source,\n edge.target,\n edge.type,\n edge.weight,\n edge.metadata ? JSON.stringify(edge.metadata) : null\n )\n }\n\n async getFrom(source: string, type?: string): Promise<GraphEdge[]> {\n let query = 'SELECT * FROM edges WHERE source = ?'\n const params: any[] = [source]\n\n if (type) {\n query += ' AND type = ?'\n params.push(type)\n }\n\n const rows = this.db.prepare(query).all(...params) as EdgeRow[]\n return rows.map(row => this.hydrate(row))\n }\n\n async getTo(target: string, type?: string): Promise<GraphEdge[]> {\n let query = 'SELECT * FROM edges WHERE target = ?'\n const params: any[] = [target]\n\n if (type) {\n query += ' AND type = ?'\n params.push(type)\n }\n\n const rows = this.db.prepare(query).all(...params) as EdgeRow[]\n return rows.map(row => this.hydrate(row))\n }\n\n async delete(source: string, target: string): Promise<void> {\n this.db.prepare('DELETE FROM edges WHERE source = ? AND target = ?').run(source, target)\n }\n\n private hydrate(row: EdgeRow): GraphEdge {\n return {\n id: row.id,\n source: row.source,\n target: row.target,\n type: row.type,\n weight: row.weight,\n metadata: row.metadata ? JSON.parse(row.metadata) : undefined,\n createdAt: row.created_at\n }\n }\n}","import type { Database } from './database.js'\n\nexport interface GraphNode {\n id: string\n type: string\n content: string\n original?: string\n embedding?: Buffer\n metadata: Record<string, any>\n createdAt: number\n accessedAt: number\n accessCount: number\n}\n\ninterface NodeRow {\n id: string\n type: string\n content: string\n original: string | null\n embedding: Buffer | null\n metadata: string\n created_at: number\n accessed_at: number\n access_count: number\n}\n\nexport class NodeStore {\n constructor(private db: Database) {}\n\n async upsert(node: Partial<GraphNode> & { id: string; type: string; content: string }): Promise<void> {\n const stmt = this.db.prepare(`\n INSERT INTO nodes (id, type, content, original, metadata, created_at, accessed_at, access_count)\n VALUES (?, ?, ?, ?, ?, unixepoch(), unixepoch(), 1)\n ON CONFLICT(id) DO UPDATE SET\n content = excluded.content,\n original = excluded.original,\n metadata = excluded.metadata,\n accessed_at = unixepoch(),\n access_count = access_count + 1\n `)\n\n stmt.run(\n node.id,\n node.type,\n node.content,\n node.original || null,\n JSON.stringify(node.metadata || {})\n )\n }\n\n async get(id: string): Promise<GraphNode | null> {\n // Update access count and timestamp\n this.db.prepare(`\n UPDATE nodes SET accessed_at = unixepoch(), access_count = access_count + 1\n WHERE id = ?\n `).run(id)\n\n // Get node\n const row = this.db.prepare('SELECT * FROM nodes WHERE id = ?').get(id) as NodeRow | undefined\n if (!row) return null\n\n return this.hydrate(row)\n }\n\n async delete(id: string): Promise<void> {\n this.db.prepare('DELETE FROM edges WHERE source = ? OR target = ?').run(id, id)\n this.db.prepare('DELETE FROM nodes WHERE id = ?').run(id)\n }\n\n async listByType(type: string): Promise<GraphNode[]> {\n const rows = this.db.prepare('SELECT * FROM nodes WHERE type = ?').all(type) as NodeRow[]\n return rows.map(row => this.hydrate(row))\n }\n\n private hydrate(row: NodeRow): GraphNode {\n return {\n id: row.id,\n type: row.type,\n content: row.content,\n original: row.original || undefined,\n embedding: row.embedding || undefined,\n metadata: JSON.parse(row.metadata),\n createdAt: row.created_at,\n accessedAt: row.accessed_at,\n accessCount: row.access_count\n }\n }\n}\n","export function calculateConfidence(original: string, compressed: string): number {\n if (!original.length) return 0\n\n let score = 1.0\n\n // Penalize if too much dropped\n const ratio = compressed.length / original.length\n if (ratio < 0.01) score -= 0.5\n else if (ratio < 0.05) score -= 0.3\n\n // Penalize if code blocks were modified\n if (codeBlocksModified(original, compressed)) score -= 0.4\n\n // Bonus for known patterns\n if (isKnownPattern(original)) score += 0.1\n\n return Math.max(0, Math.min(1, score))\n}\n\nfunction codeBlocksModified(original: string, compressed: string): boolean {\n const codeBlockRegex = /```[\\s\\S]*?```/g\n const originalBlocks = original.match(codeBlockRegex) || []\n const compressedBlocks = compressed.match(codeBlockRegex) || []\n\n if (originalBlocks.length !== compressedBlocks.length) return true\n\n for (let i = 0; i < originalBlocks.length; i++) {\n if (originalBlocks[i] !== compressedBlocks[i]) return true\n }\n\n return false\n}\n\nfunction isKnownPattern(content: string): boolean {\n const patterns = [\n /export\\s+(default\\s+)?(function|class|const|let|var)/,\n /import\\s+.*from\\s+['\"]/\n ]\n return patterns.some(p => p.test(content))\n}\n","import type { Compressor, CompressedResult, FileReadInput } from './types.js'\nimport { calculateConfidence } from './confidence.js'\n\nexport class FileReadCompressor implements Compressor {\n async compress(input: unknown): Promise<CompressedResult> {\n const { content, filePath, language } = input as FileReadInput\n \n const signatures = this.extractSignatures(content, language)\n const exports = this.extractExports(content)\n \n const lines = [\n `// ${filePath} (${content.split('\\n').length} lines)`,\n '',\n ...signatures,\n '',\n '// Exports:',\n ...exports\n ]\n \n const compressed = lines.join('\\n')\n \n return {\n content: compressed,\n original: content,\n confidence: calculateConfidence(content, compressed),\n metadata: {\n strategy: 'signatures',\n originalLines: content.split('\\n').length,\n compressedLines: lines.length,\n savings: 1 - (compressed.length / content.length)\n }\n }\n }\n\n async decompress(compressed: CompressedResult): Promise<unknown> {\n return compressed.original\n }\n\n private extractSignatures(content: string, language?: string): string[] {\n const signatures: string[] = []\n const lines = content.split('\\n')\n \n for (const line of lines) {\n const trimmed = line.trim()\n \n if (/^(export\\s+)?(async\\s+)?function\\s+\\w+/.test(trimmed)) {\n signatures.push(trimmed.replace(/\\{[\\s\\S]*$/, '{ ... }'))\n }\n \n if (/^(export\\s+)?class\\s+\\w+/.test(trimmed)) {\n signatures.push(trimmed)\n }\n \n if (/^(export\\s+)?(type|interface)\\s+\\w+/.test(trimmed)) {\n signatures.push(trimmed)\n }\n }\n \n return signatures\n }\n\n private extractExports(content: string): string[] {\n const exports: string[] = []\n const exportRegex = /export\\s+(default\\s+)?(function|class|const|let|var|type|interface)\\s+(\\w+)/g\n let match\n \n while ((match = exportRegex.exec(content)) !== null) {\n exports.push(` - ${match[3]} (${match[2]})`)\n }\n \n return exports\n }\n}\n","import type { Compressor, CompressedResult, GitDiffInput } from './types.js'\nimport { calculateConfidence } from './confidence.js'\n\nexport class GitDiffCompressor implements Compressor {\n async compress(input: unknown): Promise<CompressedResult> {\n const { diff } = input as GitDiffInput\n \n // Parse diff into hunks\n const hunks = this.parseDiff(diff)\n \n // Condense each hunk\n const condensed = hunks.map(hunk => ({\n file: hunk.file,\n changes: this.condenseHunk(hunk),\n stats: { additions: hunk.additions, deletions: hunk.deletions }\n }))\n \n // Format output\n const lines: string[] = []\n for (const hunk of condensed) {\n if (hunk.changes.length > 0) {\n lines.push(`${hunk.file} (+${hunk.stats.additions} -${hunk.stats.deletions})`)\n lines.push(...hunk.changes)\n }\n }\n \n const compressed = lines.join('\\n')\n \n return {\n content: compressed,\n original: diff,\n confidence: calculateConfidence(diff, compressed),\n metadata: {\n strategy: 'condensed',\n filesChanged: condensed.length,\n savings: 1 - (compressed.length / diff.length)\n }\n }\n }\n\n async decompress(compressed: CompressedResult): Promise<unknown> {\n return compressed.original\n }\n\n private parseDiff(diff: string): Hunk[] {\n const hunks: Hunk[] = []\n const lines = diff.split('\\n')\n \n let currentHunk: Hunk | null = null\n \n for (const line of lines) {\n if (line.startsWith('diff --git')) {\n if (currentHunk) hunks.push(currentHunk)\n const fileMatch = line.match(/b\\/(.+)/)\n currentHunk = {\n file: fileMatch?.[1] || 'unknown',\n lines: [],\n additions: 0,\n deletions: 0\n }\n } else if (currentHunk) {\n if (line.startsWith('+')) {\n currentHunk.additions++\n currentHunk.lines.push({ type: 'addition', content: line.slice(1) })\n } else if (line.startsWith('-')) {\n currentHunk.deletions++\n currentHunk.lines.push({ type: 'deletion', content: line.slice(1) })\n }\n }\n }\n \n if (currentHunk) hunks.push(currentHunk)\n return hunks\n }\n\n private condenseHunk(hunk: Hunk): string[] {\n return hunk.lines\n .filter(l => l.type === 'addition' || l.type === 'deletion')\n .map(l => `${l.type === 'addition' ? '+' : '-'} ${l.content}`)\n }\n}\n\ninterface Hunk {\n file: string\n lines: { type: string; content: string }[]\n additions: number\n deletions: number\n}\n","import type { Compressor, CompressedResult, GrepInput } from './types.js'\nimport { calculateConfidence } from './confidence.js'\n\nexport class GrepCompressor implements Compressor {\n async compress(input: unknown): Promise<CompressedResult> {\n const { results } = input as GrepInput\n \n // Group by file\n const grouped = this.groupByFile(results)\n \n // Format output\n const lines: string[] = []\n for (const [file, matches] of grouped) {\n lines.push(`${file} (${matches.length} matches)`)\n const unique = this.deduplicate(matches)\n for (const match of unique) {\n lines.push(` L${match.line}: ${match.content}`)\n }\n }\n \n const compressed = lines.join('\\n')\n const original = results.map(r => `${r.file}:${r.line}: ${r.content}`).join('\\n')\n \n return {\n content: compressed,\n original,\n confidence: calculateConfidence(original, compressed),\n metadata: {\n strategy: 'grouped',\n totalMatches: results.length,\n uniqueFiles: grouped.size,\n savings: 1 - (compressed.length / original.length)\n }\n }\n }\n\n async decompress(compressed: CompressedResult): Promise<unknown> {\n return compressed.original\n }\n\n private groupByFile(results: GrepInput['results']): Map<string, GrepInput['results']> {\n const grouped = new Map<string, GrepInput['results']>()\n \n for (const result of results) {\n const existing = grouped.get(result.file) || []\n existing.push(result)\n grouped.set(result.file, existing)\n }\n \n return grouped\n }\n\n private deduplicate(matches: GrepInput['results']): GrepInput['results'] {\n const seen = new Set<string>()\n return matches.filter(match => {\n const key = match.content.trim()\n if (seen.has(key)) return false\n seen.add(key)\n return true\n })\n }\n}\n","export interface CompressOptions {\n maxLength?: number\n removeWhitespace?: boolean\n prettyPrint?: boolean\n}\n\nexport class OutputCompressor {\n static compress(input: string, options: CompressOptions = {}): string {\n const { maxLength = 1000, removeWhitespace = false, prettyPrint = false } = options\n\n let output = input\n\n if (removeWhitespace) {\n output = output.replace(/\\s+/g, ' ').trim()\n }\n\n try {\n const parsed = JSON.parse(output)\n if (prettyPrint) {\n output = JSON.stringify(parsed, null, 2)\n } else {\n output = JSON.stringify(parsed)\n }\n } catch {\n // Not JSON, keep as-is\n }\n\n if (output.length > maxLength) {\n const suffix = '...[truncated]'\n output = output.substring(0, maxLength - suffix.length) + suffix\n }\n\n return output\n }\n}","export interface CacheEntry {\n content: string\n metadata: Record<string, any>\n}\n\nexport interface CacheStats {\n hits: number\n misses: number\n size: number\n hitRate: number\n}\n\nexport class SessionCache {\n private store = new Map<string, CacheEntry>()\n private hits = 0\n private misses = 0\n\n get(key: string): CacheEntry | null {\n const entry = this.store.get(key)\n if (entry) {\n this.hits++\n return entry\n }\n this.misses++\n return null\n }\n\n set(key: string, value: CacheEntry): void {\n this.store.set(key, value)\n }\n\n clear(): void {\n this.store.clear()\n this.hits = 0\n this.misses = 0\n }\n\n stats(): CacheStats {\n const total = this.hits + this.misses\n return {\n hits: this.hits,\n misses: this.misses,\n size: this.store.size,\n hitRate: total > 0 ? this.hits / total : 0\n }\n }\n}\n","import type { Database } from '../graph/database.js'\nimport type { CacheEntry } from './l1-session.js'\n\ninterface CacheOptions {\n ttl?: number\n}\n\nexport class CrossSessionCache {\n constructor(private db: Database) {}\n\n async get(key: string): Promise<CacheEntry | null> {\n const row = this.db.prepare(`\n SELECT content, metadata, created_at \n FROM nodes \n WHERE id = ? AND type = 'cache'\n `).get(key) as { content: string; metadata: string; created_at: number } | undefined\n\n if (!row) return null\n\n const metadata = JSON.parse(row.metadata)\n if (metadata.ttl) {\n const age = Date.now() / 1000 - row.created_at\n if (age > metadata.ttl) {\n this.db.prepare('DELETE FROM nodes WHERE id = ?').run(key)\n return null\n }\n }\n\n this.db.prepare(`\n UPDATE nodes SET accessed_at = unixepoch(), access_count = access_count + 1\n WHERE id = ?\n `).run(key)\n\n return {\n content: row.content,\n metadata: JSON.parse(row.metadata)\n }\n }\n\n async set(key: string, value: CacheEntry, options?: CacheOptions): Promise<void> {\n this.db.prepare(`\n INSERT INTO nodes (id, type, content, metadata, created_at, accessed_at, access_count)\n VALUES (?, 'cache', ?, ?, unixepoch(), unixepoch(), 1)\n ON CONFLICT(id) DO UPDATE SET\n content = excluded.content,\n metadata = excluded.metadata,\n accessed_at = unixepoch(),\n access_count = access_count + 1\n `).run(key, value.content, JSON.stringify({ ...value.metadata, ttl: options?.ttl }))\n }\n\n async delete(key: string): Promise<void> {\n this.db.prepare('DELETE FROM nodes WHERE id = ?').run(key)\n }\n\n async clear(): Promise<void> {\n this.db.prepare(\"DELETE FROM nodes WHERE type = 'cache'\").run()\n }\n}\n","import type { SemanticCacheEntry, SemanticSearchResult } from './types.js'\n\nexport class SemanticCache {\n private entries: SemanticCacheEntry[] = []\n\n store(content: string, embedding: number[], metadata: Record<string, any> = {}): SemanticCacheEntry {\n const entry: SemanticCacheEntry = {\n id: `sc${this.entries.length + 1}`,\n content,\n embedding,\n metadata,\n createdAt: Date.now()\n }\n this.entries.push(entry)\n return entry\n }\n\n search(query: number[], minSimilarity: number = 0.8): SemanticSearchResult[] {\n const results: SemanticSearchResult[] = []\n\n for (const entry of this.entries) {\n const similarity = this.cosineSimilarity(query, entry.embedding)\n if (similarity >= minSimilarity) {\n results.push({ entry, similarity })\n }\n }\n\n return results.sort((a, b) => b.similarity - a.similarity)\n }\n\n getAll(): SemanticCacheEntry[] {\n return this.entries\n }\n\n private cosineSimilarity(a: number[], b: number[]): number {\n if (a.length !== b.length) return 0\n \n let dotProduct = 0\n let normA = 0\n let normB = 0\n\n for (let i = 0; i < a.length; i++) {\n dotProduct += a[i] * b[i]\n normA += a[i] * a[i]\n normB += b[i] * b[i]\n }\n\n return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB))\n }\n}","import type { Database } from '../graph/database.js'\nimport { SessionCache, type CacheEntry, type CacheStats } from './l1-session.js'\nimport { CrossSessionCache } from './l2-cross.js'\nimport { SemanticCache } from './semantic.js'\n\nexport interface UnifiedCacheStats {\n l1: CacheStats\n l2: { size: number }\n}\n\nexport function createCacheManager(db?: Database) {\n const session = new SessionCache()\n const crossSession = db ? new CrossSessionCache(db) : (null as any)\n const semantic = new SemanticCache()\n\n return {\n session,\n crossSession,\n semantic\n }\n}\n\nexport function makeLatenCache(db: Database) {\n const l1 = new SessionCache()\n const l2 = new CrossSessionCache(db)\n\n return {\n l1,\n l2,\n\n async get(key: string): Promise<CacheEntry | null> {\n const l1Result = l1.get(key)\n if (l1Result) return l1Result\n\n const l2Result = await l2.get(key)\n if (l2Result) {\n l1.set(key, l2Result)\n return l2Result\n }\n\n return null\n },\n\n async set(key: string, value: CacheEntry, options?: { ttl?: number }): Promise<void> {\n l1.set(key, value)\n await l2.set(key, value, options)\n },\n\n async invalidate(pattern: string): Promise<void> {\n l1.clear()\n await l2.clear()\n },\n\n stats(): UnifiedCacheStats {\n return {\n l1: l1.stats(),\n l2: { size: 0 }\n }\n }\n }\n}\n\nexport { SessionCache, CrossSessionCache, SemanticCache }\nexport type { CacheEntry, CacheStats }\n","import type { RouteInput, ToolRoute, CompressorType } from './types.js'\n\nexport class ToolRouter {\n private rules: RouteRule[] = [\n {\n matcher: (input) => input.type === 'file',\n compressor: 'file-read',\n confidence: 0.95,\n reason: 'File read detected'\n },\n {\n matcher: (input) => input.type === 'grep',\n compressor: 'grep',\n confidence: 0.95,\n reason: 'Grep results detected'\n },\n {\n matcher: (input) => input.type === 'git-diff',\n compressor: 'git-diff',\n confidence: 0.95,\n reason: 'Git diff detected'\n }\n ]\n\n route(input: RouteInput): ToolRoute {\n for (const rule of this.rules) {\n if (rule.matcher(input)) {\n return {\n tool: 'compress',\n compressor: rule.compressor,\n confidence: rule.confidence,\n reason: rule.reason\n }\n }\n }\n\n return {\n tool: 'compress',\n confidence: 0.1,\n reason: 'No matching route found'\n }\n }\n\n addRule(rule: RouteRule): void {\n this.rules.push(rule)\n }\n}\n\ninterface RouteRule {\n matcher: (input: RouteInput) => boolean\n compressor: CompressorType\n confidence: number\n reason: string\n}","import type { RouteContext, StrategyRoute, StrategyType } from './types.js'\n\nexport class StrategyRouter {\n private thresholds = {\n small: 500,\n large: 5000\n }\n\n select(context: RouteContext): StrategyRoute {\n if (context.userPreference) {\n return {\n strategy: context.userPreference,\n reason: `User preference: ${context.userPreference}`,\n savings: this.estimateSavings(context.userPreference)\n }\n }\n\n const fileSize = context.fileSize || 0\n\n if (fileSize >= this.thresholds.large) {\n return {\n strategy: 'aggressive',\n reason: `large file (${fileSize} bytes)`,\n savings: 0.6\n }\n }\n\n if (fileSize <= this.thresholds.small) {\n return {\n strategy: 'conservative',\n reason: `small file (${fileSize} bytes)`,\n savings: 0.2\n }\n }\n\n return {\n strategy: 'balanced',\n reason: `Medium file (${fileSize} bytes)`,\n savings: 0.4\n }\n }\n\n private estimateSavings(strategy: StrategyType): number {\n switch (strategy) {\n case 'aggressive': return 0.6\n case 'balanced': return 0.4\n case 'conservative': return 0.2\n }\n }\n}\n","import { ToolRouter } from './tool-router.js'\nimport { StrategyRouter } from './strategy-router.js'\nimport type { RouteInput, RouteContext, ToolRoute, StrategyRoute } from './types.js'\n\nexport function createRouter() {\n const tool = new ToolRouter()\n const strategy = new StrategyRouter()\n\n return {\n tool,\n strategy,\n route: (input: RouteInput): ToolRoute => tool.route(input),\n selectStrategy: (context: RouteContext): StrategyRoute => strategy.select(context)\n }\n}\n\nexport type { ToolRoute, StrategyRoute, RouteInput, RouteContext }\nexport { ToolRouter } from './tool-router.js'\nexport { StrategyRouter } from './strategy-router.js'\n","export interface Tool {\n name: string\n description: string\n execute: (input: any) => Promise<any>\n}\n\nexport class ToolRegistry {\n private tools = new Map<string, Tool>()\n\n register(name: string, tool: Tool): void {\n this.tools.set(name, tool)\n }\n\n get(name: string): Tool | undefined {\n return this.tools.get(name)\n }\n\n list(): Tool[] {\n return Array.from(this.tools.values())\n }\n\n has(name: string): boolean {\n return this.tools.has(name)\n }\n\n unregister(name: string): boolean {\n return this.tools.delete(name)\n }\n}","export interface SemanticToolConfig {\n intent: string\n inputTypes: string[]\n outputType: string\n}\n\nexport class SemanticTool {\n public readonly name: string\n public readonly intent: string\n private inputTypes: Set<string>\n public readonly outputType: string\n\n constructor(name: string, config: SemanticToolConfig) {\n this.name = name\n this.intent = config.intent\n this.inputTypes = new Set(config.inputTypes)\n this.outputType = config.outputType\n }\n\n supportsInput(inputType: string): boolean {\n return this.inputTypes.has(inputType)\n }\n\n describe(): string {\n return `${this.name}: ${this.intent} (${Array.from(this.inputTypes).join(', ')} → ${this.outputType})`\n }\n}\n","import { ToolRegistry, type Tool } from './registry.js'\nimport { SemanticTool } from './semantic-tool.js'\n\nexport function createToolRegistry(): ToolRegistry {\n const registry = new ToolRegistry()\n\n registry.register('compress', {\n name: 'compress',\n description: 'Compress content to reduce tokens',\n execute: async (input) => ({ content: 'compressed', confidence: 0.9 })\n })\n\n registry.register('cache', {\n name: 'cache',\n description: 'Cache content for reuse',\n execute: async (input) => ({ content: 'cached', confidence: 1.0 })\n })\n\n registry.register('graph', {\n name: 'graph',\n description: 'Store in knowledge graph',\n execute: async (input) => ({ stored: true })\n })\n\n return registry\n}\n\nexport function getSemanticTools(): SemanticTool[] {\n return [\n new SemanticTool('compress', {\n intent: 'Reduce token usage',\n inputTypes: ['file', 'grep', 'git-diff'],\n outputType: 'compressed'\n }),\n new SemanticTool('cache', {\n intent: 'Store for reuse',\n inputTypes: ['compressed', 'original'],\n outputType: 'cached'\n }),\n new SemanticTool('graph', {\n intent: 'Build knowledge base',\n inputTypes: ['any'],\n outputType: 'stored'\n })\n ]\n}\n\nexport { ToolRegistry } from './registry.js'\nexport { SemanticTool } from './semantic-tool.js'\nexport type { Tool } from './registry.js'\n","import type { AgentAdapter, AdapterOutput, AdapterRequest } from './types.js'\n\nexport class ClaudeCodeAdapter implements AgentAdapter {\n name = 'claude-code'\n version = '1.0.0'\n type = 'hook' as const\n\n format(input: AdapterRequest): AdapterOutput {\n const { content, context } = input\n \n const formatted = this.formatForClaude(content, context)\n \n return {\n output: formatted,\n format: 'claude',\n metadata: {\n filePath: context?.filePath,\n timestamp: Date.now()\n }\n }\n }\n\n parse(output: string): any {\n return { content: output, parsed: true }\n }\n\n private formatForClaude(content: string, context?: Record<string, any>): string {\n const parts: string[] = []\n \n if (context?.filePath) {\n parts.push(`**File:** \\`${context.filePath}\\``)\n }\n \n parts.push(content)\n \n return parts.join('\\n\\n')\n }\n}","import type { AgentAdapter, AdapterOutput, AdapterRequest } from './types.js'\n\nexport class CodexAdapter implements AgentAdapter {\n name = 'codex'\n version = '1.0.0'\n type = 'hook' as const\n\n format(input: AdapterRequest): AdapterOutput {\n const { content, context } = input\n \n const formatted = this.formatForCodex(content, context)\n \n return {\n output: formatted,\n format: 'codex',\n metadata: {\n timestamp: Date.now()\n }\n }\n }\n\n parse(output: string): any {\n try {\n return JSON.parse(output)\n } catch {\n return { content: output }\n }\n }\n\n private formatForCodex(content: string, context?: Record<string, any>): string {\n if (context?.expectJson) {\n return JSON.stringify({ content, timestamp: Date.now() })\n }\n return content\n }\n}\n","import type { AgentAdapter, AdapterOutput, AdapterRequest } from './types.js'\n\nexport class GeminiCliAdapter implements AgentAdapter {\n name = 'gemini-cli'\n version = '1.0.0'\n type = 'hook' as const\n\n format(input: AdapterRequest): AdapterOutput {\n const { content, context } = input\n \n const formatted = this.formatForGemini(content, context)\n const multimodal = context?.includeImage || false\n \n return {\n output: formatted,\n format: 'gemini',\n metadata: {\n multimodal,\n imagePath: context?.imagePath,\n timestamp: Date.now()\n }\n }\n }\n\n parse(output: string): any {\n return { content: output, parsed: true }\n }\n\n private formatForGemini(content: string, context?: Record<string, any>): string {\n const parts: string[] = [content]\n \n if (context?.includeImage && context?.imagePath) {\n parts.push(`[Image: ${context.imagePath}]`)\n }\n \n return parts.join('\\n')\n }\n}\n","import fs from 'fs/promises'\nimport path from 'path'\nimport type { AgentAdapter, AdapterOutput, AdapterRequest, ToolCall, ToolResult, HookConfig } from './types.js'\n\nexport class HookAdapter implements AgentAdapter {\n name: string\n version = '1.0.0'\n type = 'hook' as const\n private hooks: HookConfig = {}\n\n constructor(name: string) {\n this.name = name\n }\n\n format(input: AdapterRequest): AdapterOutput {\n const { content, context } = input\n const parts: string[] = []\n\n if (context?.filePath) {\n parts.push(`**File:** \\`${context.filePath}\\``)\n }\n\n parts.push(content)\n\n return {\n output: parts.join('\\n\\n'),\n format: this.name,\n metadata: { filePath: context?.filePath, timestamp: Date.now() }\n }\n }\n\n parse(output: string): any {\n return { content: output, parsed: true }\n }\n\n setHooks(hooks: HookConfig): void {\n this.hooks = hooks\n }\n\n async intercept(toolCall: ToolCall): Promise<ToolCall | null> {\n if (this.hooks.preToolUse) {\n return this.hooks.preToolUse(toolCall)\n }\n return toolCall\n }\n\n async postProcess(result: ToolResult): Promise<ToolResult> {\n if (this.hooks.postToolUse) {\n return this.hooks.postToolUse(result)\n }\n return result\n }\n\n async install(agentPath: string): Promise<void> {\n const hooksDir = path.join(agentPath, 'hooks')\n await fs.mkdir(hooksDir, { recursive: true })\n\n const preToolHook = `#!/usr/bin/env node\nconst { readFileSync } = require('fs');\nconst input = JSON.parse(readFileSync('/dev/stdin', 'utf-8'));\n\nif (input.tool === 'Read' || input.tool === 'Bash') {\n process.env.MAKE_LATEN_INTERCEPT = '1';\n}\n\nprocess.stdout.write(JSON.stringify(input));\n`\n const postToolHook = `#!/usr/bin/env node\nconst { readFileSync } = require('fs');\nconst input = JSON.parse(readFileSync('/dev/stdin', 'utf-8'));\n\nif (input.output && input.output.length > 10000) {\n input.output = input.output.slice(0, 10000) + '\\\\n... (truncated by make-laten)';\n}\n\nprocess.stdout.write(JSON.stringify(input));\n`\n\n await fs.writeFile(path.join(hooksDir, 'pre-tool-use.js'), preToolHook)\n await fs.writeFile(path.join(hooksDir, 'post-tool-use.js'), postToolHook)\n }\n\n async uninstall(agentPath: string): Promise<void> {\n const hooksDir = path.join(agentPath, 'hooks')\n try {\n await fs.rm(path.join(hooksDir, 'pre-tool-use.js'), { force: true })\n await fs.rm(path.join(hooksDir, 'post-tool-use.js'), { force: true })\n } catch {}\n }\n\n async isInstalled(agentPath: string): Promise<boolean> {\n try {\n await fs.access(path.join(agentPath, 'hooks', 'pre-tool-use.js'))\n return true\n } catch {\n return false\n }\n }\n}\n","import fs from 'fs/promises'\nimport path from 'path'\nimport type { AgentAdapter, AdapterOutput, AdapterRequest } from './types.js'\nimport { AGENT_CONFIGS } from './types.js'\n\nconst RULES_TEMPLATE = `\n# make-laten efficiency rules\n\n## Token Optimization\n- When reading files, prefer using \\`make-laten read <file>\\` for compressed output\n- When searching code, prefer using \\`make-laten grep <pattern>\\` for grouped results\n- When checking git status, prefer using \\`make-laten git diff\\` for condensed output\n\n## Caching\n- make-laten automatically caches frequently accessed files\n- Use \\`make-laten cache stats\\` to see cache performance\n- Use \\`make-laten cache clear\\` to reset cache if needed\n\n## Web Search\n- Use \\`make-laten search <query>\\` for optimized web search\n- Use \\`make-laten fetch <url>\\` for compressed web fetch\n`\n\nexport class RulesAdapter implements AgentAdapter {\n name: string\n version = '1.0.0'\n type = 'rules' as const\n\n constructor(agentName: string) {\n this.name = agentName\n }\n\n format(input: AdapterRequest): AdapterOutput {\n return {\n output: input.content,\n format: 'markdown',\n metadata: { agent: this.name, timestamp: Date.now() }\n }\n }\n\n parse(output: string): any {\n return { content: output }\n }\n\n async install(agentPath: string): Promise<void> {\n const config = AGENT_CONFIGS[this.name]\n if (!config?.rulesFile) {\n throw new Error(`No rules file configured for ${this.name}`)\n }\n\n const rulesPath = path.join(agentPath, config.rulesFile)\n const existing = await fs.readFile(rulesPath, 'utf-8').catch(() => '')\n\n if (existing.includes('make-laten')) {\n return\n }\n\n await fs.mkdir(path.dirname(rulesPath), { recursive: true })\n await fs.writeFile(rulesPath, existing + '\\n\\n' + RULES_TEMPLATE)\n }\n\n async uninstall(agentPath: string): Promise<void> {\n const config = AGENT_CONFIGS[this.name]\n if (!config?.rulesFile) return\n\n const rulesPath = path.join(agentPath, config.rulesFile)\n try {\n let content = await fs.readFile(rulesPath, 'utf-8')\n const marker = '# make-laten efficiency rules'\n const idx = content.indexOf(marker)\n if (idx !== -1) {\n const endIdx = content.indexOf('\\n#', idx + marker.length)\n content = content.slice(0, idx).trim() + '\\n' + (endIdx !== -1 ? content.slice(endIdx) : '')\n await fs.writeFile(rulesPath, content.trim() + '\\n')\n }\n } catch {}\n }\n\n async isInstalled(agentPath: string): Promise<boolean> {\n const config = AGENT_CONFIGS[this.name]\n if (!config?.rulesFile) return false\n\n try {\n const content = await fs.readFile(path.join(agentPath, config.rulesFile), 'utf-8')\n return content.includes('make-laten')\n } catch {\n return false\n }\n }\n}\n","export type AdapterType = 'hook' | 'plugin' | 'rules' | 'proxy' | 'mcp'\n\nexport interface AgentAdapter {\n name: string\n version: string\n type: AdapterType\n format: (input: any) => AdapterOutput\n parse?: (output: string) => any\n install?(agentPath: string): Promise<void>\n uninstall?(agentPath: string): Promise<void>\n isInstalled?(agentPath: string): Promise<boolean>\n}\n\nexport interface AgentInfo {\n name: string\n type: AdapterType\n path: string\n version: string | null\n detected: boolean\n}\n\nexport interface ToolCall {\n name: string\n params: Record<string, any>\n timestamp?: number\n}\n\nexport interface ToolResult {\n name: string\n output: string\n success: boolean\n metadata?: Record<string, any>\n}\n\nexport interface AdapterConfig {\n maxTokens?: number\n supportsStreaming?: boolean\n supportsImages?: boolean\n customHeaders?: Record<string, string>\n}\n\nexport interface AdapterOutput {\n output: string\n format: string\n metadata?: Record<string, any>\n}\n\nexport interface AdapterRequest {\n content: string\n context?: Record<string, any>\n}\n\nexport interface HookConfig {\n preToolUse?: (toolCall: ToolCall) => Promise<ToolCall | null>\n postToolUse?: (result: ToolResult) => Promise<ToolResult>\n}\n\nexport const AGENT_CONFIGS: Record<string, { type: AdapterType; rulesFile?: string; configPath?: string }> = {\n 'claude-code': { type: 'hook' },\n 'codex': { type: 'hook' },\n 'gemini-cli': { type: 'hook' },\n 'cursor': { type: 'rules', rulesFile: '.cursorrules' },\n 'windsurf': { type: 'rules', rulesFile: '.windsurfrules' },\n 'cline': { type: 'rules', rulesFile: '.clinerules' },\n 'copilot': { type: 'rules', rulesFile: '.github/copilot-instructions.md' }\n}\n","import fs from 'fs/promises'\nimport path from 'path'\nimport { exec } from 'child_process'\nimport { promisify } from 'util'\n\nconst execAsync = promisify(exec)\n\nconst RULES_CONTENT = `\n# make-laten efficiency rules\n\n## Token Optimization\n- When reading files, use \\`make-laten read <file>\\` for compressed output\n- When searching code, use \\`make-laten grep <pattern>\\` for grouped results\n- When checking git, use \\`make-laten git diff\\` for condensed output\n- When fetching web, use \\`make-laten fetch <url>\\` for compressed content\n\n## Quick Commands\n- \\`mread <file>\\` — alias for make-laten read\n- \\`mgrep <pattern>\\` — alias for make-laten grep\n- \\`mdiff\\` — alias for make-laten git diff\n- \\`msearch <query>\\` — alias for make-laten search\n- \\`mfetch <url>\\` — alias for make-laten fetch\n`\n\ninterface AgentSetup {\n name: string\n detected: () => Promise<boolean>\n install: () => Promise<void>\n uninstall: () => Promise<void>\n}\n\nfunction getHome(): string {\n return process.env.HOME || process.env.USERPROFILE || ''\n}\n\nasync function commandExists(cmd: string): Promise<boolean> {\n try {\n await execAsync(`which ${cmd}`, { timeout: 3000 })\n return true\n } catch {\n return false\n }\n}\n\nasync function fileContains(filePath: string, text: string): Promise<boolean> {\n try {\n const content = await fs.readFile(filePath, 'utf-8')\n return content.includes(text)\n } catch {\n return false\n }\n}\n\nconst agents: AgentSetup[] = [\n {\n name: 'terminal (shell aliases)',\n detected: async () => true,\n install: async () => {\n const shellInit = await execAsync('echo $SHELL').then(r => r.stdout.trim())\n const rcFile = shellInit.includes('zsh') ? '.zshrc' : '.bashrc'\n const rcPath = path.join(getHome(), rcFile)\n const marker = 'make-laten shell'\n\n let existing = ''\n try { existing = await fs.readFile(rcPath, 'utf-8') } catch {}\n\n if (!existing.includes(marker)) {\n const npmRoot = await execAsync('npm root -g').then(r => r.stdout.trim())\n const initScript = `\\n# make-laten shell integration\\nsource ${npmRoot}/make-laten/shell/init.sh\\n`\n await fs.appendFile(rcPath, initScript)\n }\n },\n uninstall: async () => {\n const shellInit = await execAsync('echo $SHELL').then(r => r.stdout.trim())\n const rcFile = shellInit.includes('zsh') ? '.zshrc' : '.bashrc'\n const rcPath = path.join(getHome(), rcFile)\n try {\n let content = await fs.readFile(rcPath, 'utf-8')\n content = content.replace(/\\n# make-laten shell integration\\nsource .*\\/make-laten\\/shell\\/init\\.sh\\n/g, '')\n await fs.writeFile(rcPath, content)\n } catch {}\n }\n },\n {\n name: 'claude-code',\n detected: async () => commandExists('claude'),\n install: async () => {\n const hooksDir = path.join(getHome(), '.claude', 'hooks')\n await fs.mkdir(hooksDir, { recursive: true })\n\n const preHook = `#!/usr/bin/env node\nconst { readFileSync } = require('fs');\nconst input = JSON.parse(readFileSync('/dev/stdin', 'utf-8'));\nif (input.tool === 'Read' || input.tool === 'Bash') {\n process.env.MAKE_LATEN_INTERCEPT = '1';\n}\nprocess.stdout.write(JSON.stringify(input));`\n\n const postHook = `#!/usr/bin/env node\nconst { readFileSync } = require('fs');\nconst input = JSON.parse(readFileSync('/dev/stdin', 'utf-8'));\nif (input.output && input.output.length > 10000) {\n input.output = input.output.slice(0, 10000) + '\\\\n... (truncated by make-laten)';\n}\nprocess.stdout.write(JSON.stringify(input));`\n\n await fs.writeFile(path.join(hooksDir, 'pre-tool-use.js'), preHook)\n await fs.writeFile(path.join(hooksDir, 'post-tool-use.js'), postHook)\n },\n uninstall: async () => {\n const hooksDir = path.join(getHome(), '.claude', 'hooks')\n try { await fs.rm(path.join(hooksDir, 'pre-tool-use.js'), { force: true }) } catch {}\n try { await fs.rm(path.join(hooksDir, 'post-tool-use.js'), { force: true }) } catch {}\n }\n },\n {\n name: 'cursor',\n detected: async () => {\n try { await fs.access(path.join(getHome(), '.cursor')); return true } catch { return false }\n },\n install: async () => {\n const rulesDir = path.join(getHome(), '.cursor', 'rules')\n await fs.mkdir(rulesDir, { recursive: true })\n const ruleFile = path.join(rulesDir, 'make-laten.mdc')\n const content = `---\\ndescription: make-laten efficiency rules\\nglobs:\\n---\\n${RULES_CONTENT}`\n await fs.writeFile(ruleFile, content)\n },\n uninstall: async () => {\n try { await fs.rm(path.join(getHome(), '.cursor', 'rules', 'make-laten.mdc'), { force: true }) } catch {}\n }\n },\n {\n name: 'codex',\n detected: async () => commandExists('codex'),\n install: async () => {\n const agentsMd = path.join(process.cwd(), 'AGENTS.md')\n let existing = ''\n try { existing = await fs.readFile(agentsMd, 'utf-8') } catch {}\n if (!existing.includes('make-laten')) {\n const content = existing + '\\n\\n## make-laten Integration\\n' + RULES_CONTENT\n await fs.writeFile(agentsMd, content)\n }\n },\n uninstall: async () => {\n try {\n let content = await fs.readFile(path.join(process.cwd(), 'AGENTS.md'), 'utf-8')\n content = content.replace(/\\n## make-laten Integration[\\s\\S]*$/, '')\n await fs.writeFile(path.join(process.cwd(), 'AGENTS.md'), content.trim() + '\\n')\n } catch {}\n }\n },\n {\n name: 'windsurf',\n detected: async () => {\n try { await fs.access(path.join(process.cwd(), '.windsurf')); return true } catch {\n try { await fs.access(path.join(getHome(), '.windsurf')); return true } catch { return false }\n }\n },\n install: async () => {\n const rulesPath = path.join(process.cwd(), '.windsurfrules')\n let existing = ''\n try { existing = await fs.readFile(rulesPath, 'utf-8') } catch {}\n if (!existing.includes('make-laten')) {\n await fs.writeFile(rulesPath, existing + '\\n\\n' + RULES_CONTENT)\n }\n },\n uninstall: async () => {\n try {\n let content = await fs.readFile(path.join(process.cwd(), '.windsurfrules'), 'utf-8')\n content = content.replace(/\\n# make-laten efficiency rules[\\s\\S]*$/, '')\n await fs.writeFile(path.join(process.cwd(), '.windsurfrules'), content.trim() + '\\n')\n } catch {}\n }\n },\n {\n name: 'cline',\n detected: async () => {\n try { await fs.access(path.join(process.cwd(), '.clinerules')); return true } catch {\n try { await fs.access(path.join(getHome(), '.cline')); return true } catch { return false }\n }\n },\n install: async () => {\n const rulesPath = path.join(process.cwd(), '.clinerules')\n let existing = ''\n try { existing = await fs.readFile(rulesPath, 'utf-8') } catch {}\n if (!existing.includes('make-laten')) {\n await fs.writeFile(rulesPath, existing + '\\n\\n' + RULES_CONTENT)\n }\n },\n uninstall: async () => {\n try {\n let content = await fs.readFile(path.join(process.cwd(), '.clinerules'), 'utf-8')\n content = content.replace(/\\n# make-laten efficiency rules[\\s\\S]*$/, '')\n await fs.writeFile(path.join(process.cwd(), '.clinerules'), content.trim() + '\\n')\n } catch {}\n }\n },\n {\n name: 'copilot',\n detected: async () => {\n try { await fs.access(path.join(process.cwd(), '.github')); return true } catch { return false }\n },\n install: async () => {\n const dir = path.join(process.cwd(), '.github')\n await fs.mkdir(dir, { recursive: true })\n const instructionsPath = path.join(dir, 'copilot-instructions.md')\n let existing = ''\n try { existing = await fs.readFile(instructionsPath, 'utf-8') } catch {}\n if (!existing.includes('make-laten')) {\n await fs.writeFile(instructionsPath, existing + '\\n\\n## make-laten Efficiency\\n' + RULES_CONTENT)\n }\n },\n uninstall: async () => {\n try {\n let content = await fs.readFile(path.join(process.cwd(), '.github', 'copilot-instructions.md'), 'utf-8')\n content = content.replace(/\\n## make-laten Efficiency[\\s\\S]*$/, '')\n await fs.writeFile(path.join(process.cwd(), '.github', 'copilot-instructions.md'), content.trim() + '\\n')\n } catch {}\n }\n },\n {\n name: 'opencode',\n detected: async () => {\n try { await fs.access(path.join(getHome(), '.config', 'opencode')); return true } catch { return false }\n },\n install: async () => {\n const skillsDir = path.join(getHome(), '.config', 'opencode', 'skills', 'make-laten')\n await fs.mkdir(skillsDir, { recursive: true })\n\n const npmRoot = await execAsync('npm root -g').then(r => r.stdout.trim())\n const skillSrc = path.join(npmRoot, 'make-laten', 'skills', 'SKILL.md')\n\n try {\n const skillContent = await fs.readFile(skillSrc, 'utf-8')\n await fs.writeFile(path.join(skillsDir, 'SKILL.md'), skillContent)\n } catch {\n await fs.writeFile(path.join(skillsDir, 'SKILL.md'), `---\\nname: make-laten\\ndescription: Token optimization toolkit\\n---\\n\\n# make-laten Skill\\n\\nUse make-laten CLI commands for all file/code/git operations.\\n`)\n }\n },\n uninstall: async () => {\n try { await fs.rm(path.join(getHome(), '.config', 'opencode', 'skills', 'make-laten'), { recursive: true, force: true }) } catch {}\n }\n }\n]\n\nexport class Installer {\n async install(): Promise<{ installed: string[]; skipped: string[] }> {\n const installed: string[] = []\n const skipped: string[] = []\n\n for (const agent of agents) {\n try {\n const detected = await agent.detected()\n if (detected) {\n await agent.install()\n installed.push(agent.name)\n } else {\n skipped.push(agent.name)\n }\n } catch {\n skipped.push(agent.name)\n }\n }\n\n return { installed, skipped }\n }\n\n async uninstall(): Promise<{ removed: string[] }> {\n const removed: string[] = []\n\n for (const agent of agents) {\n try {\n await agent.uninstall()\n removed.push(agent.name)\n } catch {}\n }\n\n return { removed }\n }\n\n async status(): Promise<{ name: string; detected: boolean; installed: boolean }[]> {\n const result: { name: string; detected: boolean; installed: boolean }[] = []\n\n for (const agent of agents) {\n try {\n const detected = await agent.detected()\n result.push({ name: agent.name, detected, installed: false })\n } catch {\n result.push({ name: agent.name, detected: false, installed: false })\n }\n }\n\n return result\n }\n}\n","import { exec } from 'child_process'\nimport { promisify } from 'util'\nimport fs from 'fs/promises'\nimport path from 'path'\nimport type { AgentInfo } from './types.js'\nimport { AGENT_CONFIGS } from './types.js'\n\nconst execAsync = promisify(exec)\n\nexport class AgentDetector {\n async detectAgents(): Promise<AgentInfo[]> {\n const agents: AgentInfo[] = []\n\n for (const [name, config] of Object.entries(AGENT_CONFIGS)) {\n const detected = await this.detectAgent(name, config.type)\n if (detected) {\n agents.push(detected)\n }\n }\n\n return agents\n }\n\n async detectAgent(name: string, type: string): Promise<AgentInfo | null> {\n const commands: Record<string, string> = {\n 'claude-code': 'claude --version',\n 'codex': 'codex --version',\n 'gemini-cli': 'gemini --version'\n }\n\n if (commands[name]) {\n try {\n const { stdout } = await execAsync(commands[name], { timeout: 5000 })\n const version = stdout.trim().split('\\n')[0]\n const agentPath = await this.getAgentPath(name)\n return { name, type: type as any, path: agentPath, version, detected: true }\n } catch {\n return null\n }\n }\n\n if (type === 'rules') {\n const rulesPath = AGENT_CONFIGS[name]?.rulesFile\n if (rulesPath) {\n try {\n await fs.access(path.join(process.cwd(), rulesPath))\n return { name, type: type as any, path: process.cwd(), version: null, detected: true }\n } catch {\n return null\n }\n }\n }\n\n return null\n }\n\n async getAgentPath(name: string): Promise<string> {\n const home = process.env.HOME || process.env.USERPROFILE || ''\n const paths: Record<string, string> = {\n 'claude-code': path.join(home, '.claude'),\n 'codex': path.join(home, '.codex'),\n 'gemini-cli': path.join(home, '.gemini')\n }\n return paths[name] || path.join(home, `.${name}`)\n }\n\n async hasCommand(cmd: string): Promise<boolean> {\n try {\n await execAsync(`which ${cmd}`, { timeout: 3000 })\n return true\n } catch {\n return false\n }\n }\n}\n","import { ClaudeCodeAdapter } from './claude-code.js'\nimport { CodexAdapter } from './codex.js'\nimport { GeminiCliAdapter } from './gemini-cli.js'\nimport { HookAdapter } from './hook.js'\nimport { RulesAdapter } from './rules.js'\nimport { Installer } from './installer.js'\nimport { AgentDetector } from './detector.js'\nimport type { AgentAdapter, AgentInfo, AdapterType } from './types.js'\n\nconst adapters = new Map<string, AgentAdapter>()\n\nadapters.set('claude-code', new ClaudeCodeAdapter())\nadapters.set('codex', new CodexAdapter())\nadapters.set('gemini-cli', new GeminiCliAdapter())\n\nexport function getAdapter(name: string): AgentAdapter | undefined {\n return adapters.get(name)\n}\n\nexport function getAdapters(): AgentAdapter[] {\n return Array.from(adapters.values())\n}\n\nexport function createAdapter(config: AgentAdapter): AgentAdapter {\n return config\n}\n\nexport function registerAdapter(name: string, adapter: AgentAdapter): void {\n adapters.set(name, adapter)\n}\n\nexport function createHookAdapter(name: string): HookAdapter {\n return new HookAdapter(name)\n}\n\nexport function createRulesAdapter(name: string): RulesAdapter {\n return new RulesAdapter(name)\n}\n\nexport function createInstaller(): Installer {\n return new Installer()\n}\n\nexport function createDetector(): AgentDetector {\n return new AgentDetector()\n}\n\nexport type { AgentAdapter, AgentInfo, AdapterConfig, AdapterOutput, AdapterType } from './types.js'\nexport { AGENT_CONFIGS } from './types.js'\nexport { ClaudeCodeAdapter } from './claude-code.js'\nexport { CodexAdapter } from './codex.js'\nexport { GeminiCliAdapter } from './gemini-cli.js'\nexport { HookAdapter } from './hook.js'\nexport { RulesAdapter } from './rules.js'\nexport { Installer } from './installer.js'\nexport { AgentDetector } from './detector.js'\n","import type { Pattern, PatternType } from './types.js'\n\ninterface Operation {\n type: string\n input: any\n output?: any\n error?: string\n success: boolean\n}\n\nexport class PatternMiner {\n private operations: Operation[] = []\n private patterns: Map<string, Pattern> = new Map()\n\n record(operation: Operation): void {\n this.operations.push(operation)\n \n if (operation.success) {\n this.updatePatterns(operation)\n }\n }\n\n getPatterns(): Pattern[] {\n return Array.from(this.patterns.values())\n }\n\n getPatternsByType(type: PatternType): Pattern[] {\n return this.getPatterns().filter(p => p.type === type)\n }\n\n private updatePatterns(operation: Operation): void {\n const key = operation.type\n const existing = this.patterns.get(key)\n \n if (existing) {\n existing.count++\n existing.confidence = Math.min(0.99, existing.confidence + 0.05)\n } else {\n this.patterns.set(key, {\n id: `p${this.patterns.size + 1}`,\n type: operation.type as PatternType,\n pattern: JSON.stringify(operation.input),\n confidence: 0.5,\n count: 1\n })\n }\n }\n}\n","import type { Failure } from './types.js'\n\ninterface FailureRecord extends Failure {\n count: number\n}\n\nexport class FailureLearner {\n private failures: Map<string, FailureRecord> = new Map()\n\n record(failure: Omit<Failure, 'id' | 'timestamp'>): void {\n const key = `${failure.type}:${failure.error}`\n const existing = this.failures.get(key)\n \n if (existing) {\n existing.count++\n } else {\n this.failures.set(key, {\n id: `f${this.failures.size + 1}`,\n ...failure,\n timestamp: Date.now(),\n count: 1\n })\n }\n }\n\n getFailures(): Failure[] {\n return Array.from(this.failures.values())\n }\n\n getFailuresByType(type: string): Failure[] {\n return this.getFailures().filter(f => f.type === type)\n }\n\n getSuggestions(type: string): string[] {\n const failures = Array.from(this.failures.values()).filter(f => f.type === type)\n const suggestions: string[] = []\n \n for (const failure of failures) {\n if (failure.error.includes('not found')) {\n suggestions.push('check if file exists before processing')\n }\n if (failure.error.includes('permission')) {\n suggestions.push('verify file permissions')\n }\n if (failure.count > 2) {\n suggestions.push(`recurring issue: ${failure.error}`)\n }\n }\n \n return [...new Set(suggestions)]\n }\n}\n","import { PatternMiner } from './pattern-miner.js'\nimport { FailureLearner } from './failure-learner.js'\n\nexport function createLearner() {\n const patterns = new PatternMiner()\n const failures = new FailureLearner()\n\n return {\n patterns,\n failures,\n record: (op: any) => {\n patterns.record(op)\n if (!op.success) {\n failures.record({\n type: op.type,\n error: op.error || 'Unknown error',\n context: op.input\n })\n }\n }\n }\n}\n\nexport { PatternMiner } from './pattern-miner.js'\nexport { FailureLearner } from './failure-learner.js'\n","import type { Correction, CorrectionRule } from './types.js'\n\nexport class AutoCorrect {\n private rules: CorrectionRule[] = []\n private corrections: Correction[] = []\n private appliedCount = 0\n\n addRule(rule: CorrectionRule): void {\n this.rules.push(rule)\n }\n\n getRules(): CorrectionRule[] {\n return this.rules\n }\n\n correct(input: string): string {\n let output = input\n\n for (const rule of this.rules) {\n if (typeof rule.pattern === 'string') {\n if (output.includes(rule.pattern)) {\n output = output.split(rule.pattern).join(rule.replacement)\n this.recordCorrection(input, output, rule.name)\n }\n } else {\n const matches = output.match(rule.pattern)\n if (matches) {\n output = output.replace(rule.pattern, rule.replacement)\n this.recordCorrection(input, output, rule.name)\n }\n }\n }\n\n return output\n }\n\n getStats(): { applied: number; corrections: Correction[] } {\n return {\n applied: this.appliedCount,\n corrections: this.corrections\n }\n }\n\n private recordCorrection(original: string, corrected: string, ruleName: string): void {\n this.appliedCount++\n this.corrections.push({\n id: `c${this.corrections.length + 1}`,\n original,\n corrected,\n rule: ruleName,\n confidence: 0.9\n })\n }\n}\n","import { AutoCorrect } from './auto-correct.js'\nimport type { CorrectionRule } from './types.js'\n\nconst defaultRules: CorrectionRule[] = [\n {\n name: 'fix-typo-teh',\n description: 'Fix \"teh\" typo',\n pattern: 'teh',\n replacement: 'the'\n },\n {\n name: 'fix-typo-recieve',\n description: 'Fix \"recieve\" typo',\n pattern: 'recieve',\n replacement: 'receive'\n }\n]\n\nexport function createCorrector(rules: CorrectionRule[] = defaultRules) {\n const engine = new AutoCorrect()\n \n for (const rule of rules) {\n engine.addRule(rule)\n }\n\n return {\n engine,\n rules: engine.getRules(),\n correct: (input: string) => engine.correct(input)\n }\n}\n\nexport { AutoCorrect } from './auto-correct.js'\nexport type { Correction, CorrectionRule } from './types.js'\n","import type { Middleware, MiddlewareContext, MiddlewareResult } from './types.js'\n\nexport class Pipeline {\n private middlewares: Middleware[] = []\n\n use(middleware: Middleware): this {\n this.middlewares.push(middleware)\n return this\n }\n\n size(): number {\n return this.middlewares.length\n }\n\n async execute(ctx: MiddlewareContext): Promise<MiddlewareResult> {\n let index = 0\n\n const next = async (ctx: MiddlewareContext): Promise<MiddlewareResult> => {\n if (index >= this.middlewares.length) {\n return { output: ctx.input, metadata: ctx.metadata }\n }\n\n const middleware = this.middlewares[index++]\n return middleware(ctx, next)\n }\n\n return next(ctx)\n }\n}\n","import type { Plugin, PluginContext } from './types.js'\n\nexport class PluginLoader {\n private plugins: Map<string, Plugin> = new Map()\n\n register(plugin: Plugin): void {\n this.plugins.set(plugin.name, plugin)\n }\n\n get(name: string): Plugin | undefined {\n return this.plugins.get(name)\n }\n\n has(name: string): boolean {\n return this.plugins.has(name)\n }\n\n getAll(): Plugin[] {\n return Array.from(this.plugins.values())\n }\n\n async initializeAll(ctx: PluginContext): Promise<void> {\n for (const plugin of this.plugins.values()) {\n await plugin.initialize(ctx)\n }\n }\n\n async destroyAll(): Promise<void> {\n for (const plugin of this.plugins.values()) {\n if (plugin.destroy) {\n await plugin.destroy()\n }\n }\n }\n}\n","interface RateLimiterConfig {\n maxRequests: number\n windowMs: number\n}\n\ninterface RequestRecord {\n count: number\n resetAt: number\n}\n\nexport class RateLimiter {\n private config: RateLimiterConfig\n private records: Map<string, RequestRecord> = new Map()\n\n constructor(config: RateLimiterConfig) {\n this.config = config\n }\n\n allow(key: string): boolean {\n const now = Date.now()\n const record = this.records.get(key)\n\n if (!record || now > record.resetAt) {\n this.records.set(key, { count: 1, resetAt: now + this.config.windowMs })\n return true\n }\n\n if (record.count >= this.config.maxRequests) {\n return false\n }\n\n record.count++\n return true\n }\n\n getUsage(key: string): number {\n const record = this.records.get(key)\n if (!record || Date.now() > record.resetAt) {\n return 0\n }\n return record.count\n }\n\n reset(key: string): void {\n this.records.delete(key)\n }\n}","type LogLevel = 'debug' | 'info' | 'warn' | 'error'\n\ninterface LogEntry {\n level: LogLevel\n message: string\n metadata?: Record<string, any>\n timestamp: number\n}\n\ninterface LoggerConfig {\n level: LogLevel\n handler: (entry: LogEntry) => void\n}\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3\n}\n\nexport class Logger {\n private config: LoggerConfig\n\n constructor(config: LoggerConfig) {\n this.config = config\n }\n\n debug(message: string, metadata?: Record<string, any>): void {\n this.log('debug', message, metadata)\n }\n\n info(message: string, metadata?: Record<string, any>): void {\n this.log('info', message, metadata)\n }\n\n warn(message: string, metadata?: Record<string, any>): void {\n this.log('warn', message, metadata)\n }\n\n error(message: string, metadata?: Record<string, any>): void {\n this.log('error', message, metadata)\n }\n\n private log(level: LogLevel, message: string, metadata?: Record<string, any>): void {\n if (LOG_LEVELS[level] >= LOG_LEVELS[this.config.level]) {\n this.config.handler({\n level,\n message,\n metadata,\n timestamp: Date.now()\n })\n }\n }\n}","interface ErrorResult {\n handled: boolean\n category: string\n suggestions: string[]\n}\n\ninterface ErrorStats {\n total: number\n byCategory: Record<string, number>\n}\n\nexport class ErrorHandler {\n private errors: Error[] = []\n\n handle(error: Error): ErrorResult {\n this.errors.push(error)\n\n const category = this.categorize(error)\n const suggestions = this.getSuggestions(error)\n\n return {\n handled: true,\n category,\n suggestions\n }\n }\n\n getStats(): ErrorStats {\n const byCategory: Record<string, number> = {}\n for (const error of this.errors) {\n const cat = this.categorize(error)\n byCategory[cat] = (byCategory[cat] || 0) + 1\n }\n return { total: this.errors.length, byCategory }\n }\n\n private categorize(error: Error): string {\n if (error.message.includes('not found')) return 'not-found'\n if (error.message.includes('permission')) return 'permission'\n if (error.message.includes('timeout')) return 'timeout'\n return 'unknown'\n }\n\n private getSuggestions(error: Error): string[] {\n const suggestions: string[] = []\n if (error.message.includes('not found')) {\n suggestions.push('check if file or resource exists')\n }\n if (error.message.includes('permission')) {\n suggestions.push('verify access permissions')\n }\n if (error.message.includes('timeout')) {\n suggestions.push('increase timeout or retry')\n }\n return suggestions\n }\n}","interface HistogramStats {\n avg: number\n min: number\n max: number\n count: number\n}\n\nexport class MetricsCollector {\n private counters: Map<string, number> = new Map()\n private gauges: Map<string, number> = new Map()\n private histograms: Map<string, number[]> = new Map()\n\n increment(name: string, value: number = 1): void {\n this.counters.set(name, (this.counters.get(name) || 0) + value)\n }\n\n getCounter(name: string): number {\n return this.counters.get(name) || 0\n }\n\n setGauge(name: string, value: number): void {\n this.gauges.set(name, value)\n }\n\n getGauge(name: string): number {\n return this.gauges.get(name) || 0\n }\n\n record(name: string, value: number): void {\n const values = this.histograms.get(name) || []\n values.push(value)\n this.histograms.set(name, values)\n }\n\n getHistogram(name: string): HistogramStats {\n const values = this.histograms.get(name) || []\n if (values.length === 0) {\n return { avg: 0, min: 0, max: 0, count: 0 }\n }\n\n return {\n avg: values.reduce((a, b) => a + b, 0) / values.length,\n min: Math.min(...values),\n max: Math.max(...values),\n count: values.length\n }\n }\n\n reset(): void {\n this.counters.clear()\n this.gauges.clear()\n this.histograms.clear()\n }\n}","interface Session {\n id: string\n userId: string\n createdAt: number\n lastAccessedAt: number\n}\n\ninterface SessionManagerConfig {\n timeoutMs: number\n}\n\nexport class SessionManager {\n private config: SessionManagerConfig\n private sessions: Map<string, Session> = new Map()\n\n constructor(config: SessionManagerConfig) {\n this.config = config\n }\n\n create(userId: string): Session {\n const session: Session = {\n id: `s${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n userId,\n createdAt: Date.now(),\n lastAccessedAt: Date.now()\n }\n this.sessions.set(session.id, session)\n return session\n }\n\n get(id: string): Session | undefined {\n const session = this.sessions.get(id)\n if (session && Date.now() - session.lastAccessedAt > this.config.timeoutMs) {\n this.sessions.delete(id)\n return undefined\n }\n if (session) {\n session.lastAccessedAt = Date.now()\n }\n return session\n }\n\n destroy(id: string): void {\n this.sessions.delete(id)\n }\n\n getActive(): Session[] {\n const now = Date.now()\n return Array.from(this.sessions.values()).filter(\n s => now - s.lastAccessedAt <= this.config.timeoutMs\n )\n }\n}","import type { WebBackend, SearchOptions, SearchResult } from '../types.js'\n\nexport class DuckDuckGoBackend implements WebBackend {\n name = 'duckduckgo'\n\n isAvailable(): boolean {\n return true\n }\n\n async search(query: string, options?: SearchOptions): Promise<SearchResult[]> {\n const maxResults = options?.maxResults || 5\n\n const url = `https://html.duckduckgo.com/html/?q=${encodeURIComponent(query)}`\n const response = await fetch(url, {\n headers: {\n 'User-Agent': 'Mozilla/5.0 (compatible; make-laten/0.1.0)'\n }\n })\n\n const html = await response.text()\n return this.parseResults(html, maxResults)\n }\n\n private parseResults(html: string, maxResults: number): SearchResult[] {\n const results: SearchResult[] = []\n const resultRegex = /<a[^>]*class=\"result__a\"[^>]*href=\"([^\"]*)\"[^>]*>([\\s\\S]*?)<\\/a>/gi\n const snippetRegex = /<a[^>]*class=\"result__snippet\"[^>]*>([\\s\\S]*?)<\\/a>/gi\n let match: RegExpExecArray | null\n\n const urls: string[] = []\n const titles: string[] = []\n\n while ((match = resultRegex.exec(html)) !== null && urls.length < maxResults) {\n const rawUrl = match[1]\n const urlMatch = rawUrl.match(/uddg=([^&]+)/)\n const url = urlMatch ? decodeURIComponent(urlMatch[1]) : rawUrl\n const title = this.stripTags(match[2]).trim()\n\n if (url && title) {\n urls.push(url)\n titles.push(title)\n }\n }\n\n const snippets: string[] = []\n while ((match = snippetRegex.exec(html)) !== null && snippets.length < maxResults) {\n snippets.push(this.stripTags(match[1]).trim())\n }\n\n for (let i = 0; i < urls.length; i++) {\n results.push({\n title: titles[i],\n url: urls[i],\n snippet: snippets[i] || '',\n score: 1 - (i * 0.1)\n })\n }\n\n return results\n }\n\n private stripTags(html: string): string {\n return html.replace(/<[^>]+>/g, '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/'/g, \"'\").replace(/"/g, '\"')\n }\n}\n","import type { WebBackend, SearchOptions, SearchResult } from '../types.js'\nimport { DuckDuckGoBackend } from './duckduckgo.js'\n\nexport { DuckDuckGoBackend } from './duckduckgo.js'\n\nexport function selectBackend(preferred?: string): WebBackend {\n const backends: WebBackend[] = [\n new DuckDuckGoBackend()\n ]\n\n if (preferred) {\n const found = backends.find(b => b.name === preferred)\n if (found) return found\n }\n\n return backends.find(b => b.isAvailable()) || backends[0]\n}\n","import type { SemanticIR, SectionIR, CodeExample } from './types.js'\n\ninterface ParsedNode {\n tag: string\n text: string\n children: ParsedNode[]\n}\n\nfunction parseSimpleHTML(html: string): ParsedNode[] {\n const nodes: ParsedNode[] = []\n const tagRegex = /<(\\w+)([^>]*)>([\\s\\S]*?)<\\/\\1>/g\n let match: RegExpExecArray | null\n\n while ((match = tagRegex.exec(html)) !== null) {\n const tag = match[1]\n const content = match[3]\n\n if (['script', 'style', 'noscript'].includes(tag)) continue\n\n nodes.push({\n tag,\n text: stripTags(content).trim(),\n children: content.includes('<') ? parseSimpleHTML(content) : []\n })\n }\n\n return nodes\n}\n\nfunction stripTags(html: string): string {\n return html.replace(/<[^>]+>/g, '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '\"').replace(/'/g, \"'\")\n}\n\nfunction extractTitle(html: string): string {\n const titleMatch = html.match(/<title[^>]*>([\\s\\S]*?)<\\/title>/i)\n if (titleMatch) return stripTags(titleMatch[1]).trim()\n\n const h1Match = html.match(/<h1[^>]*>([\\s\\S]*?)<\\/h1>/i)\n if (h1Match) return stripTags(h1Match[1]).trim()\n\n return 'Untitled'\n}\n\nfunction extractSections(html: string): SectionIR[] {\n const sections: SectionIR[] = []\n const headingRegex = /<h([1-6])[^>]*>([\\s\\S]*?)<\\/h\\1>/gi\n let match: RegExpExecArray | null\n\n while ((match = headingRegex.exec(html)) !== null) {\n const level = parseInt(match[1])\n const heading = stripTags(match[2]).trim()\n\n const startPos = match.index + match[0].length\n const nextHeading = html.substring(startPos).match(/<h[1-6]/i)\n const endPos = nextHeading ? startPos + nextHeading.index! : html.length\n const content = stripTags(html.substring(startPos, endPos)).trim()\n\n if (!content) continue\n\n const importance = level <= 2 ? 'primary' : level <= 4 ? 'secondary' : 'tertiary'\n\n sections.push({ heading, level, content, importance })\n }\n\n return sections\n}\n\nfunction extractCodeExamples(html: string): CodeExample[] {\n const examples: CodeExample[] = []\n const codeRegex = /<(?:pre|code)[^>]*>[\\s\\S]*?<(?:code|\\/pre)[^>]*>/gi\n const blockRegex = /<pre[^>]*><code[^>]*class=\"[^\"]*language-(\\w+)[^\"]*\"[^>]*>([\\s\\S]*?)<\\/code><\\/pre>/gi\n let match: RegExpExecArray | null\n\n while ((match = blockRegex.exec(html)) !== null) {\n const language = match[1]\n const code = stripTags(match[2]).trim()\n\n if (code.length > 10) {\n examples.push({ language, code })\n }\n }\n\n const inlineRegex = /<code[^>]*class=\"[^\"]*language-(\\w+)[^\"]*\"[^>]*>([\\s\\S]*?)<\\/code>/gi\n while ((match = inlineRegex.exec(html)) !== null) {\n const language = match[1]\n const code = stripTags(match[2]).trim()\n\n if (code.length > 20 && !examples.some(e => e.code === code)) {\n examples.push({ language, code })\n }\n }\n\n return examples.slice(0, 10)\n}\n\nfunction extractKeyPoints(sections: SectionIR[]): string[] {\n const keyPoints: string[] = []\n\n for (const section of sections.filter(s => s.importance === 'primary')) {\n const sentences = section.content.split(/[.!?\\n]+/).filter(s => s.trim().length > 10)\n if (sentences.length > 0) {\n keyPoints.push(sentences[0].trim())\n }\n }\n\n return keyPoints.slice(0, 5)\n}\n\nfunction classifyPurpose(html: string, sections: SectionIR[]): SemanticIR['purpose'] {\n const text = (html + ' ' + sections.map(s => s.heading).join(' ')).toLowerCase()\n\n if (text.includes('api reference') || text.includes('endpoint') || text.includes('parameters')) return 'reference'\n if (text.includes('tutorial') || text.includes('step by step') || text.includes('getting started')) return 'tutorial'\n if (text.includes('blog') || text.includes('published') || text.includes('author')) return 'blog'\n if (text.includes('install') || text.includes('quickstart') || text.includes('overview')) return 'documentation'\n\n return 'documentation'\n}\n\nexport function extractSemantic(html: string, url: string): SemanticIR {\n const title = extractTitle(html)\n const sections = extractSections(html)\n const codeExamples = extractCodeExamples(html)\n const keyPoints = extractKeyPoints(sections)\n const purpose = classifyPurpose(html, sections)\n\n return {\n type: 'webpage',\n url,\n title,\n purpose,\n sections,\n keyPoints,\n codeExamples,\n metadata: {\n language: html.match(/lang=\"(\\w+)\"/)?.[1] || 'en',\n author: html.match(/<meta[^>]*name=\"author\"[^>]*content=\"([^\"]+)\"/i)?.[1],\n tags: html.match(/<meta[^>]*name=\"keywords\"[^>]*content=\"([^\"]+)\"/i)?.[1]?.split(',').map(t => t.trim())\n }\n }\n}\n","import type { SemanticIR, SectionIR } from './types.js'\n\nexport interface CompressOptions {\n maxTokens?: number\n includeCode?: boolean\n includeSections?: 'all' | 'primary' | 'none'\n}\n\nexport function compressWebContent(semantic: SemanticIR, options: CompressOptions = {}): string {\n const { maxTokens = 1000, includeCode = true, includeSections = 'all' } = options\n const lines: string[] = []\n\n lines.push(`# ${semantic.title}`)\n lines.push(`URL: ${semantic.url}`)\n lines.push(`Purpose: ${semantic.purpose}`)\n lines.push('')\n\n if (semantic.keyPoints.length > 0) {\n lines.push('## Key Points')\n for (const point of semantic.keyPoints) {\n lines.push(`- ${point}`)\n }\n lines.push('')\n }\n\n const filteredSections = filterSections(semantic.sections, includeSections)\n\n for (const section of filteredSections) {\n const content = truncateContent(section.content, 500)\n lines.push(`## ${section.heading}`)\n lines.push(content)\n lines.push('')\n }\n\n if (includeCode && semantic.codeExamples.length > 0) {\n const topExamples = semantic.codeExamples.slice(0, 3)\n lines.push('## Code Examples')\n for (const example of topExamples) {\n lines.push(`\\`\\`\\`${example.language}`)\n lines.push(truncateContent(example.code, 300))\n lines.push('```')\n lines.push('')\n }\n }\n\n let result = lines.join('\\n')\n\n const estimatedTokens = estimateTokens(result)\n if (estimatedTokens > maxTokens) {\n result = truncateByTokens(result, maxTokens)\n }\n\n return result\n}\n\nfunction filterSections(sections: SectionIR[], mode: 'all' | 'primary' | 'none'): SectionIR[] {\n if (mode === 'none') return []\n if (mode === 'primary') return sections.filter(s => s.importance === 'primary')\n return sections\n}\n\nfunction truncateContent(content: string, maxLength: number): string {\n if (content.length <= maxLength) return content\n return content.slice(0, maxLength) + '...'\n}\n\nfunction estimateTokens(text: string): number {\n return Math.ceil(text.length / 4)\n}\n\nfunction truncateByTokens(text: string, maxTokens: number): string {\n const maxChars = maxTokens * 4\n if (text.length <= maxChars) return text\n\n const truncated = text.slice(0, maxChars)\n const lastNewline = truncated.lastIndexOf('\\n')\n\n return truncated.slice(0, lastNewline > 0 ? lastNewline : maxChars) + '\\n\\n... (truncated)'\n}\n","import type { SearchOptions, SearchResult, FetchOptions, FetchResult } from './types.js'\nimport { selectBackend } from './backends/index.js'\nimport { extractSemantic } from './extractor.js'\nimport { compressWebContent } from './compressor.js'\n\nexport class WebRouter {\n private fetchCache: Map<string, FetchResult> = new Map()\n private searchCache: Map<string, SearchResult[]> = new Map()\n private cacheTtl: number\n\n constructor(options?: { cacheTtlMs?: number }) {\n this.cacheTtl = options?.cacheTtlMs || 60 * 60 * 1000\n }\n\n async search(query: string, options?: SearchOptions): Promise<SearchResult[]> {\n const cacheKey = `search:${query}:${JSON.stringify(options || {})}`\n\n const cached = this.searchCache.get(cacheKey)\n if (cached && this.isFresh(cacheKey)) {\n return cached\n }\n\n const backend = selectBackend(options?.backend)\n const results = await backend.search(query, options)\n\n this.searchCache.set(cacheKey, results)\n this.storeFreshness(cacheKey)\n\n return results\n }\n\n async fetch(url: string, options?: FetchOptions): Promise<FetchResult> {\n const cacheKey = `fetch:${url}:${options?.format || 'text'}`\n\n if (options?.cache !== false) {\n const cached = this.fetchCache.get(cacheKey)\n if (cached && this.isFresh(cacheKey)) {\n return cached\n }\n }\n\n const startTime = Date.now()\n const response = await fetch(url)\n const html = await response.text()\n const originalSize = html.length\n\n let content: string\n let semantic = undefined\n\n if (options?.extract !== false) {\n semantic = extractSemantic(html, url)\n content = compressWebContent(semantic, {\n includeCode: true,\n includeSections: options?.format === 'html' ? 'all' : 'primary'\n })\n } else {\n content = html\n }\n\n const compressedSize = content.length\n const result: FetchResult = {\n url,\n title: semantic?.title || extractSimpleTitle(html),\n content,\n semantic,\n metadata: {\n fetchTime: Date.now() - startTime,\n originalSize,\n compressedSize,\n savings: 1 - (compressedSize / originalSize)\n }\n }\n\n if (options?.cache !== false) {\n this.fetchCache.set(cacheKey, result)\n this.storeFreshness(cacheKey)\n }\n\n return result\n }\n\n async extract(url: string): Promise<FetchResult> {\n return this.fetch(url, { extract: true, compress: true })\n }\n\n async summarize(content: string, options?: { maxTokens?: number }): Promise<string> {\n const lines = content.split('\\n')\n const summaryLines: string[] = []\n let tokenCount = 0\n const maxTokens = options?.maxTokens || 200\n\n for (const line of lines) {\n const lineTokens = Math.ceil(line.length / 4)\n if (tokenCount + lineTokens > maxTokens) break\n\n if (line.startsWith('#') || line.startsWith('-') || line.startsWith('*')) {\n summaryLines.push(line)\n tokenCount += lineTokens\n }\n }\n\n if (summaryLines.length === 0 && lines.length > 0) {\n for (const line of lines.slice(0, 5)) {\n const lineTokens = Math.ceil(line.length / 4)\n if (tokenCount + lineTokens > maxTokens) break\n summaryLines.push(line)\n tokenCount += lineTokens\n }\n }\n\n return summaryLines.join('\\n')\n }\n\n clearCache(): void {\n this.fetchCache.clear()\n this.searchCache.clear()\n }\n\n getCacheStats(): { fetchSize: number; searchSize: number } {\n return {\n fetchSize: this.fetchCache.size,\n searchSize: this.searchCache.size\n }\n }\n\n private isFresh(key: string): boolean {\n const timestamp = this.freshness.get(key)\n if (!timestamp) return false\n return Date.now() - timestamp < this.cacheTtl\n }\n\n private storeFreshness(key: string): void {\n this.freshness.set(key, Date.now())\n }\n\n private freshness: Map<string, number> = new Map()\n}\n\nfunction extractSimpleTitle(html: string): string {\n const titleMatch = html.match(/<title[^>]*>([\\s\\S]*?)<\\/title>/i)\n return titleMatch ? titleMatch[1].replace(/<[^>]+>/g, '').trim() : 'Untitled'\n}\n","export const VERSION = '0.1.0'\n\nexport * from './graph/index.js'\nexport * from './compress/index.js'\nexport * from './cache/index.js'\nexport * from './route/index.js'\nexport * from './tool/index.js'\nexport * from './adapter/index.js'\nexport * from './learn/index.js'\nexport * from './correct/index.js'\nexport * from './middleware/index.js'\nexport * from './plugin/index.js'\nexport * from './security/index.js'\nexport * from './logging/index.js'\nexport * from './error/index.js'\nexport * from './metrics/index.js'\nexport * from './session/index.js'\nexport * from './web/index.js'\n"],"mappings":"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","names":["fs","path","path","fs","fs","path","path","fs","exec","promisify","fs","path","execAsync","promisify","exec","agents","fs","path","ctx"]}
|
|
1
|
+
{"version":3,"sources":["../src/graph/database.ts","../src/graph/edges.ts","../src/graph/nodes.ts","../src/compress/confidence.ts","../src/compress/strip.ts","../src/compress/structure.ts","../src/compress/truncate.ts","../src/compress/file-read.ts","../src/compress/git-diff.ts","../src/compress/git-status.ts","../src/compress/grep.ts","../src/compress/output.ts","../src/cache/l1-session.ts","../src/cache/l2-cross.ts","../src/cache/semantic.ts","../src/cache/index.ts","../src/route/tool-router.ts","../src/route/strategy-router.ts","../src/route/index.ts","../src/tool/registry.ts","../src/tool/semantic-tool.ts","../src/tool/index.ts","../src/adapter/claude-code.ts","../src/adapter/codex.ts","../src/adapter/gemini-cli.ts","../src/adapter/hook.ts","../src/adapter/rules.ts","../src/adapter/types.ts","../src/adapter/installer.ts","../src/adapter/detector.ts","../src/adapter/index.ts","../src/learn/pattern-miner.ts","../src/learn/failure-learner.ts","../src/learn/index.ts","../src/correct/auto-correct.ts","../src/correct/index.ts","../src/middleware/pipeline.ts","../src/plugin/loader.ts","../src/security/rate-limiter.ts","../src/logging/logger.ts","../src/error/handler.ts","../src/metrics/collector.ts","../src/session/manager.ts","../src/web/backends/duckduckgo.ts","../src/web/backends/index.ts","../src/web/extractor.ts","../src/web/compressor.ts","../src/web/router.ts","../src/index.ts"],"sourcesContent":["import Database from 'better-sqlite3'\n\nexport type Database = Database.Database\n\nconst SCHEMA = `\nCREATE TABLE IF NOT EXISTS nodes (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n content TEXT NOT NULL,\n original TEXT,\n embedding BLOB,\n metadata TEXT NOT NULL DEFAULT '{}',\n created_at INTEGER NOT NULL DEFAULT (unixepoch()),\n accessed_at INTEGER NOT NULL DEFAULT (unixepoch()),\n access_count INTEGER DEFAULT 0\n);\n\nCREATE TABLE IF NOT EXISTS edges (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n source TEXT NOT NULL,\n target TEXT NOT NULL,\n type TEXT NOT NULL,\n weight REAL DEFAULT 1.0,\n metadata TEXT,\n created_at INTEGER NOT NULL DEFAULT (unixepoch()),\n FOREIGN KEY (source) REFERENCES nodes(id),\n FOREIGN KEY (target) REFERENCES nodes(id)\n);\n\nCREATE INDEX IF NOT EXISTS idx_nodes_type ON nodes(type);\nCREATE INDEX IF NOT EXISTS idx_nodes_created ON nodes(created_at);\nCREATE INDEX IF NOT EXISTS idx_nodes_accessed ON nodes(accessed_at);\nCREATE INDEX IF NOT EXISTS idx_edges_source ON edges(source);\nCREATE INDEX IF NOT EXISTS idx_edges_target ON edges(target);\nCREATE INDEX IF NOT EXISTS idx_edges_type ON edges(type);\n`\n\nexport async function createDatabase(dbPath: string): Promise<Database> {\n const db = new Database(dbPath)\n db.pragma('journal_mode = WAL')\n db.pragma('foreign_keys = ON')\n \n db.exec(SCHEMA)\n \n return db\n}","import type { Database } from './database.js'\n\nexport interface GraphEdge {\n id: number\n source: string\n target: string\n type: string\n weight: number\n metadata?: Record<string, any>\n createdAt: number\n}\n\ninterface EdgeRow {\n id: number\n source: string\n target: string\n type: string\n weight: number\n metadata: string | null\n created_at: number\n}\n\nexport class EdgeStore {\n constructor(private db: Database) {}\n\n async add(edge: Omit<GraphEdge, 'id' | 'createdAt'>): Promise<void> {\n this.db.prepare(`\n INSERT INTO edges (source, target, type, weight, metadata)\n VALUES (?, ?, ?, ?, ?)\n `).run(\n edge.source,\n edge.target,\n edge.type,\n edge.weight,\n edge.metadata ? JSON.stringify(edge.metadata) : null\n )\n }\n\n async getFrom(source: string, type?: string): Promise<GraphEdge[]> {\n let query = 'SELECT * FROM edges WHERE source = ?'\n const params: any[] = [source]\n\n if (type) {\n query += ' AND type = ?'\n params.push(type)\n }\n\n const rows = this.db.prepare(query).all(...params) as EdgeRow[]\n return rows.map(row => this.hydrate(row))\n }\n\n async getTo(target: string, type?: string): Promise<GraphEdge[]> {\n let query = 'SELECT * FROM edges WHERE target = ?'\n const params: any[] = [target]\n\n if (type) {\n query += ' AND type = ?'\n params.push(type)\n }\n\n const rows = this.db.prepare(query).all(...params) as EdgeRow[]\n return rows.map(row => this.hydrate(row))\n }\n\n async delete(source: string, target: string): Promise<void> {\n this.db.prepare('DELETE FROM edges WHERE source = ? AND target = ?').run(source, target)\n }\n\n private hydrate(row: EdgeRow): GraphEdge {\n return {\n id: row.id,\n source: row.source,\n target: row.target,\n type: row.type,\n weight: row.weight,\n metadata: row.metadata ? JSON.parse(row.metadata) : undefined,\n createdAt: row.created_at\n }\n }\n}","import type { Database } from './database.js'\n\nexport interface GraphNode {\n id: string\n type: string\n content: string\n original?: string\n embedding?: Buffer\n metadata: Record<string, any>\n createdAt: number\n accessedAt: number\n accessCount: number\n}\n\ninterface NodeRow {\n id: string\n type: string\n content: string\n original: string | null\n embedding: Buffer | null\n metadata: string\n created_at: number\n accessed_at: number\n access_count: number\n}\n\nexport class NodeStore {\n constructor(private db: Database) {}\n\n async upsert(node: Partial<GraphNode> & { id: string; type: string; content: string }): Promise<void> {\n const stmt = this.db.prepare(`\n INSERT INTO nodes (id, type, content, original, metadata, created_at, accessed_at, access_count)\n VALUES (?, ?, ?, ?, ?, unixepoch(), unixepoch(), 1)\n ON CONFLICT(id) DO UPDATE SET\n content = excluded.content,\n original = excluded.original,\n metadata = excluded.metadata,\n accessed_at = unixepoch(),\n access_count = access_count + 1\n `)\n\n stmt.run(\n node.id,\n node.type,\n node.content,\n node.original || null,\n JSON.stringify(node.metadata || {})\n )\n }\n\n async get(id: string): Promise<GraphNode | null> {\n // Update access count and timestamp\n this.db.prepare(`\n UPDATE nodes SET accessed_at = unixepoch(), access_count = access_count + 1\n WHERE id = ?\n `).run(id)\n\n // Get node\n const row = this.db.prepare('SELECT * FROM nodes WHERE id = ?').get(id) as NodeRow | undefined\n if (!row) return null\n\n return this.hydrate(row)\n }\n\n async delete(id: string): Promise<void> {\n this.db.prepare('DELETE FROM edges WHERE source = ? OR target = ?').run(id, id)\n this.db.prepare('DELETE FROM nodes WHERE id = ?').run(id)\n }\n\n async listByType(type: string): Promise<GraphNode[]> {\n const rows = this.db.prepare('SELECT * FROM nodes WHERE type = ?').all(type) as NodeRow[]\n return rows.map(row => this.hydrate(row))\n }\n\n private hydrate(row: NodeRow): GraphNode {\n return {\n id: row.id,\n type: row.type,\n content: row.content,\n original: row.original || undefined,\n embedding: row.embedding || undefined,\n metadata: JSON.parse(row.metadata),\n createdAt: row.created_at,\n accessedAt: row.accessed_at,\n accessCount: row.access_count\n }\n }\n}\n","export function calculateConfidence(original: string, compressed: string): number {\n if (!original.length) return 0\n\n let score = 1.0\n\n // Penalize if too much dropped\n const ratio = compressed.length / original.length\n if (ratio < 0.01) score -= 0.5\n else if (ratio < 0.05) score -= 0.3\n\n // Penalize if code blocks were modified\n if (codeBlocksModified(original, compressed)) score -= 0.4\n\n // Bonus for known patterns\n if (isKnownPattern(original)) score += 0.1\n\n return Math.max(0, Math.min(1, score))\n}\n\nfunction codeBlocksModified(original: string, compressed: string): boolean {\n const codeBlockRegex = /```[\\s\\S]*?```/g\n const originalBlocks = original.match(codeBlockRegex) || []\n const compressedBlocks = compressed.match(codeBlockRegex) || []\n\n if (originalBlocks.length !== compressedBlocks.length) return true\n\n for (let i = 0; i < originalBlocks.length; i++) {\n if (originalBlocks[i] !== compressedBlocks[i]) return true\n }\n\n return false\n}\n\nfunction isKnownPattern(content: string): boolean {\n const patterns = [\n /export\\s+(default\\s+)?(function|class|const|let|var)/,\n /import\\s+.*from\\s+['\"]/\n ]\n return patterns.some(p => p.test(content))\n}\n","export function stripImports(content: string): string {\n return content\n .replace(/^import\\s+[\\s\\S]*?from\\s+['\"][^'\"]+['\"]\\s*;?\\s*$/gm, '')\n .replace(/^import\\s+['\"][^'\"]+['\"]\\s*;?\\s*$/gm, '')\n .replace(/^import\\s+\\{[^}]*\\}\\s+from\\s+['\"][^'\"]+['\"]\\s*;?\\s*$/gm, '')\n .split('\\n')\n .filter(l => l.trim() !== '')\n .join('\\n')\n}\n\nexport function stripComments(content: string): string {\n let result = content.replace(/(?<![\"'`])\\/\\/.*$/gm, '')\n result = result.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')\n return result\n .split('\\n')\n .filter(l => l.trim() !== '')\n .join('\\n')\n}\n\nexport function stripBlankLines(content: string): string {\n return content.replace(/\\n{3,}/g, '\\n\\n')\n}\n\nexport function stripWhitespace(content: string): string {\n return content.replace(/[ \\t]+$/gm, '')\n}\n\nexport function stripAll(content: string): string {\n let result = content\n result = stripImports(result)\n result = stripComments(result)\n result = stripBlankLines(result)\n result = stripWhitespace(result)\n return result.trim()\n}\n","export function extractExports(content: string): string {\n const lines = content.split('\\n')\n const exports: string[] = []\n\n for (const line of lines) {\n const trimmed = line.trim()\n if (/^export\\s+(default\\s+)?/.test(trimmed)) {\n if (trimmed.includes('{') && !trimmed.includes('}')) {\n exports.push(trimmed.replace(/\\{[\\s\\S]*$/, '{ ... }'))\n } else {\n exports.push(trimmed)\n }\n }\n }\n\n return exports.join('\\n')\n}\n\nexport function extractClassMethods(content: string): string {\n const classRegex = /class\\s+\\w+[^{]*\\{([\\s\\S]*?)\\n\\}/g\n const methods: string[] = []\n\n let match\n while ((match = classRegex.exec(content)) !== null) {\n const classBody = match[1]\n const methodRegex = /(^\\s*(?:public|private|protected|static|async|abstract|\\s)*\\w+\\s*\\([^)]*\\)(?:\\s*:\\s*[^{]+)?)\\s*\\{/gm\n\n let methodMatch\n while ((methodMatch = methodRegex.exec(classBody)) !== null) {\n methods.push(methodMatch[1].trim())\n }\n }\n\n return methods.join('\\n')\n}\n\nexport function extractFunctionSignatures(content: string): string {\n const funcRegex = /(export\\s+)?(async\\s+)?function\\s+\\w+\\s*\\([^)]*\\)(?:\\s*:\\s*[^{]+)?\\s*\\{/g\n const signatures: string[] = []\n\n let match\n while ((match = funcRegex.exec(content)) !== null) {\n signatures.push(match[0].replace(/\\{$/, ''))\n }\n\n return signatures.join('\\n')\n}\n\nexport function extractTypeDefinitions(content: string): string {\n const typeRegex = /(export\\s+)?(interface|type)\\s+\\w+[^{]*\\{[^}]*\\}|(export\\s+)?type\\s+\\w+\\s*=[^;]+;?/g\n const types: string[] = []\n\n let match\n while ((match = typeRegex.exec(content)) !== null) {\n types.push(match[0].trim())\n }\n\n return types.join('\\n')\n}\n","export function smartTruncate(content: string, maxTokens: number): string {\n const lines = content.split('\\n')\n const estimatedTokens = Math.ceil(content.length / 4)\n\n if (estimatedTokens <= maxTokens) return content\n\n const targetLines = Math.round(maxTokens * 4 / (content.length / lines.length))\n const headerLines = Math.floor(targetLines * 0.3)\n const footerLines = Math.floor(targetLines * 0.3)\n const omitted = lines.length - headerLines - footerLines\n\n const header = lines.slice(0, headerLines)\n const footer = lines.slice(-footerLines)\n\n return [...header, `\\n... [${omitted} lines omitted] ...\\n`, ...footer].join('\\n')\n}\n\nexport function truncateByTokens(text: string, maxTokens: number): string {\n const maxChars = maxTokens * 4\n if (text.length <= maxChars) return text\n\n const truncated = text.slice(0, maxChars)\n const lastNewline = truncated.lastIndexOf('\\n')\n\n return truncated.slice(0, lastNewline > 0 ? lastNewline : maxChars) + '\\n\\n... (truncated)'\n}\n\nexport function preserveContext(lines: string[], targetIndex: number, before: number, after: number): string[] {\n const start = Math.max(0, targetIndex - before)\n const end = Math.min(lines.length, targetIndex + after + 1)\n return lines.slice(start, end)\n}\n","import type { Compressor, CompressedResult, FileReadInput } from './types.js'\nimport { calculateConfidence } from './confidence.js'\nimport { stripAll } from './strip.js'\nimport { extractExports, extractClassMethods, extractFunctionSignatures, extractTypeDefinitions } from './structure.js'\nimport { smartTruncate } from './truncate.js'\n\nexport class FileReadCompressor implements Compressor {\n async compress(input: unknown): Promise<CompressedResult> {\n const { content, filePath, language } = input as FileReadInput\n\n const lines = content.split('\\n').length\n const tokens = Math.ceil(content.length / 4)\n\n if (tokens < 200) {\n return {\n content: content,\n original: content,\n confidence: 1.0,\n metadata: {\n strategy: 'passthrough',\n originalLines: lines,\n compressedLines: lines,\n savings: 0\n }\n }\n }\n\n const stripped = stripAll(content)\n\n const exports = extractExports(stripped)\n const classes = extractClassMethods(stripped)\n const functions = extractFunctionSignatures(stripped)\n const types = extractTypeDefinitions(stripped)\n\n const sections = [\n `// ${filePath} (${content.split('\\n').length} lines)`,\n '',\n '// Exports:',\n exports,\n '',\n '// Classes:',\n classes,\n '',\n '// Functions:',\n functions,\n '',\n '// Types:',\n types\n ].filter(l => l !== '' && !l.endsWith(':'))\n\n let compressed = sections.join('\\n')\n\n const maxTokens = 2000\n compressed = smartTruncate(compressed, maxTokens)\n\n return {\n content: compressed,\n original: content,\n confidence: calculateConfidence(content, compressed),\n metadata: {\n strategy: 'hybrid',\n originalLines: content.split('\\n').length,\n compressedLines: compressed.split('\\n').length,\n savings: 1 - (compressed.length / content.length)\n }\n }\n }\n\n async decompress(compressed: CompressedResult): Promise<unknown> {\n return compressed.original\n }\n}\n","import type { Compressor, CompressedResult, GitDiffInput } from './types.js'\nimport { calculateConfidence } from './confidence.js'\n\nexport class GitDiffCompressor implements Compressor {\n async compress(input: unknown): Promise<CompressedResult> {\n const { diff } = input as GitDiffInput\n\n const files = this.parseDiff(diff)\n\n const lines: string[] = []\n\n const totalAdd = files.reduce((s, f) => s + f.additions, 0)\n const totalDel = files.reduce((s, f) => s + f.deletions, 0)\n lines.push(`# ${files.length} files changed: +${totalAdd} -${totalDel}`)\n lines.push('')\n\n for (const file of files) {\n lines.push(`${file.path} (+${file.additions} -${file.deletions})`)\n\n const changes = file.lines\n .filter(l => l.type === 'add' || l.type === 'del')\n .map(l => `${l.type === 'add' ? '+' : '-'}${l.content}`)\n\n const limited = changes.slice(0, 20)\n lines.push(...limited)\n\n if (changes.length > 20) {\n lines.push(`... [${changes.length - 20} more changes]`)\n }\n\n lines.push('')\n }\n\n const compressed = lines.join('\\n')\n\n return {\n content: compressed,\n original: diff,\n confidence: calculateConfidence(diff, compressed),\n metadata: {\n strategy: 'condensed',\n filesChanged: files.length,\n savings: 1 - (compressed.length / diff.length)\n }\n }\n }\n\n async decompress(compressed: CompressedResult): Promise<unknown> {\n return compressed.original\n }\n\n private parseDiff(diff: string): FileDiff[] {\n const files: FileDiff[] = []\n const lines = diff.split('\\n')\n\n let current: FileDiff | null = null\n\n for (const line of lines) {\n if (line.startsWith('diff --git')) {\n if (current) files.push(current)\n const match = line.match(/b\\/(.+)/)\n current = {\n path: match?.[1] || 'unknown',\n additions: 0,\n deletions: 0,\n lines: []\n }\n } else if (current) {\n if (line.startsWith('+')) {\n current.additions++\n current.lines.push({ type: 'add', content: line.slice(1) })\n } else if (line.startsWith('-')) {\n current.deletions++\n current.lines.push({ type: 'del', content: line.slice(1) })\n }\n }\n }\n\n if (current) files.push(current)\n return files\n }\n}\n\ninterface FileDiff {\n path: string\n additions: number\n deletions: number\n lines: { type: string; content: string }[]\n}\n","import type { Compressor, CompressedResult } from './types.js'\nimport { calculateConfidence } from './confidence.js'\n\nexport class GitStatusCompressor implements Compressor {\n async compress(input: unknown): Promise<CompressedResult> {\n const { status } = input as { status: string }\n\n const statusLines = status.split('\\n').filter(Boolean).length\n const tokens = Math.ceil(status.length / 4)\n\n if (tokens < 10) {\n return {\n content: status,\n original: status,\n confidence: 1.0,\n metadata: {\n strategy: 'passthrough',\n totalFiles: statusLines,\n savings: 0\n }\n }\n }\n\n const files = this.parseStatus(status)\n const grouped = this.groupByStatus(files)\n\n const lines: string[] = []\n\n for (const [statusType, statusFiles] of grouped) {\n const label = this.statusLabel(statusType)\n lines.push(`${label} (${statusFiles.length})`)\n\n const compressed = this.compressPaths(statusFiles.map(f => f.path))\n lines.push(...compressed)\n lines.push('')\n }\n\n const compressed = lines.join('\\n')\n\n return {\n content: compressed,\n original: status,\n confidence: calculateConfidence(status, compressed),\n metadata: {\n strategy: 'grouped',\n totalFiles: files.length,\n savings: 1 - (compressed.length / status.length)\n }\n }\n }\n\n async decompress(compressed: CompressedResult): Promise<unknown> {\n return compressed.original\n }\n\n private parseStatus(status: string): { status: string; path: string }[] {\n return status.split('\\n')\n .filter(Boolean)\n .map(line => {\n const match = line.match(/^(\\?\\?|[MADRC]+\\s+)(.+)$/)\n if (match) {\n return { status: match[1].trim(), path: match[2] }\n }\n return { status: line[0], path: line.slice(3) }\n })\n }\n\n private groupByStatus(files: { status: string; path: string }[]): Map<string, { status: string; path: string }[]> {\n const grouped = new Map<string, { status: string; path: string }[]>()\n\n for (const file of files) {\n const existing = grouped.get(file.status) || []\n existing.push(file)\n grouped.set(file.status, existing)\n }\n\n return grouped\n }\n\n private statusLabel(status: string): string {\n const labels: Record<string, string> = {\n 'M': 'Modified',\n 'A': 'Added',\n 'D': 'Deleted',\n '??': 'Untracked',\n 'R': 'Renamed'\n }\n return labels[status] || `Status ${status}`\n }\n\n private compressPaths(paths: string[]): string[] {\n if (paths.length <= 3) return paths.map(p => ` ${p}`)\n\n const parts = paths.map(p => p.split('/'))\n const minLength = Math.min(...parts.map(p => p.length))\n\n let commonIndex = 0\n for (let i = 0; i < minLength; i++) {\n if (parts.every(p => p[i] === parts[0][i])) {\n commonIndex = i\n } else {\n break\n }\n }\n\n if (commonIndex > 0) {\n const prefix = parts[0].slice(0, commonIndex).join('/')\n const suffixes = paths.map(p => p.slice(prefix.length + 1))\n return [` ${prefix}/`, ...suffixes.map(s => ` ${s}`)]\n }\n\n return paths.map(p => ` ${p}`)\n }\n}\n","import type { Compressor, CompressedResult, GrepInput } from './types.js'\nimport { calculateConfidence } from './confidence.js'\n\nexport class GrepCompressor implements Compressor {\n async compress(input: unknown): Promise<CompressedResult> {\n const { results } = input as GrepInput\n \n // Group by file\n const grouped = this.groupByFile(results)\n \n // Format output\n const lines: string[] = []\n for (const [file, matches] of grouped) {\n lines.push(`${file} (${matches.length} matches)`)\n const unique = this.deduplicate(matches)\n for (const match of unique) {\n lines.push(` L${match.line}: ${match.content}`)\n }\n }\n \n const compressed = lines.join('\\n')\n const original = results.map(r => `${r.file}:${r.line}: ${r.content}`).join('\\n')\n \n return {\n content: compressed,\n original,\n confidence: calculateConfidence(original, compressed),\n metadata: {\n strategy: 'grouped',\n totalMatches: results.length,\n uniqueFiles: grouped.size,\n savings: 1 - (compressed.length / original.length)\n }\n }\n }\n\n async decompress(compressed: CompressedResult): Promise<unknown> {\n return compressed.original\n }\n\n private groupByFile(results: GrepInput['results']): Map<string, GrepInput['results']> {\n const grouped = new Map<string, GrepInput['results']>()\n \n for (const result of results) {\n const existing = grouped.get(result.file) || []\n existing.push(result)\n grouped.set(result.file, existing)\n }\n \n return grouped\n }\n\n private deduplicate(matches: GrepInput['results']): GrepInput['results'] {\n const seen = new Set<string>()\n return matches.filter(match => {\n const key = match.content.trim()\n if (seen.has(key)) return false\n seen.add(key)\n return true\n })\n }\n}\n","export interface CompressOptions {\n maxLength?: number\n removeWhitespace?: boolean\n prettyPrint?: boolean\n}\n\nexport class OutputCompressor {\n static compress(input: string, options: CompressOptions = {}): string {\n const { maxLength = 1000, removeWhitespace = false, prettyPrint = false } = options\n\n let output = input\n\n if (removeWhitespace) {\n output = output.replace(/\\s+/g, ' ').trim()\n }\n\n try {\n const parsed = JSON.parse(output)\n if (prettyPrint) {\n output = JSON.stringify(parsed, null, 2)\n } else {\n output = JSON.stringify(parsed)\n }\n } catch {\n // Not JSON, keep as-is\n }\n\n if (output.length > maxLength) {\n const suffix = '...[truncated]'\n output = output.substring(0, maxLength - suffix.length) + suffix\n }\n\n return output\n }\n}","export interface CacheEntry {\n content: string\n metadata: Record<string, any>\n}\n\nexport interface CacheStats {\n hits: number\n misses: number\n size: number\n hitRate: number\n}\n\nexport class SessionCache {\n private store = new Map<string, CacheEntry>()\n private hits = 0\n private misses = 0\n\n get(key: string): CacheEntry | null {\n const entry = this.store.get(key)\n if (entry) {\n this.hits++\n return entry\n }\n this.misses++\n return null\n }\n\n set(key: string, value: CacheEntry): void {\n this.store.set(key, value)\n }\n\n clear(): void {\n this.store.clear()\n this.hits = 0\n this.misses = 0\n }\n\n stats(): CacheStats {\n const total = this.hits + this.misses\n return {\n hits: this.hits,\n misses: this.misses,\n size: this.store.size,\n hitRate: total > 0 ? this.hits / total : 0\n }\n }\n}\n","import type { Database } from '../graph/database.js'\nimport type { CacheEntry } from './l1-session.js'\n\ninterface CacheOptions {\n ttl?: number\n}\n\nexport class CrossSessionCache {\n constructor(private db: Database) {}\n\n async get(key: string): Promise<CacheEntry | null> {\n const row = this.db.prepare(`\n SELECT content, metadata, created_at \n FROM nodes \n WHERE id = ? AND type = 'cache'\n `).get(key) as { content: string; metadata: string; created_at: number } | undefined\n\n if (!row) return null\n\n const metadata = JSON.parse(row.metadata)\n if (metadata.ttl) {\n const age = Date.now() / 1000 - row.created_at\n if (age > metadata.ttl) {\n this.db.prepare('DELETE FROM nodes WHERE id = ?').run(key)\n return null\n }\n }\n\n this.db.prepare(`\n UPDATE nodes SET accessed_at = unixepoch(), access_count = access_count + 1\n WHERE id = ?\n `).run(key)\n\n return {\n content: row.content,\n metadata: JSON.parse(row.metadata)\n }\n }\n\n async set(key: string, value: CacheEntry, options?: CacheOptions): Promise<void> {\n this.db.prepare(`\n INSERT INTO nodes (id, type, content, metadata, created_at, accessed_at, access_count)\n VALUES (?, 'cache', ?, ?, unixepoch(), unixepoch(), 1)\n ON CONFLICT(id) DO UPDATE SET\n content = excluded.content,\n metadata = excluded.metadata,\n accessed_at = unixepoch(),\n access_count = access_count + 1\n `).run(key, value.content, JSON.stringify({ ...value.metadata, ttl: options?.ttl }))\n }\n\n async delete(key: string): Promise<void> {\n this.db.prepare('DELETE FROM nodes WHERE id = ?').run(key)\n }\n\n async clear(): Promise<void> {\n this.db.prepare(\"DELETE FROM nodes WHERE type = 'cache'\").run()\n }\n}\n","import type { SemanticCacheEntry, SemanticSearchResult } from './types.js'\n\nexport class SemanticCache {\n private entries: SemanticCacheEntry[] = []\n\n store(content: string, embedding: number[], metadata: Record<string, any> = {}): SemanticCacheEntry {\n const entry: SemanticCacheEntry = {\n id: `sc${this.entries.length + 1}`,\n content,\n embedding,\n metadata,\n createdAt: Date.now()\n }\n this.entries.push(entry)\n return entry\n }\n\n search(query: number[], minSimilarity: number = 0.8): SemanticSearchResult[] {\n const results: SemanticSearchResult[] = []\n\n for (const entry of this.entries) {\n const similarity = this.cosineSimilarity(query, entry.embedding)\n if (similarity >= minSimilarity) {\n results.push({ entry, similarity })\n }\n }\n\n return results.sort((a, b) => b.similarity - a.similarity)\n }\n\n getAll(): SemanticCacheEntry[] {\n return this.entries\n }\n\n private cosineSimilarity(a: number[], b: number[]): number {\n if (a.length !== b.length) return 0\n \n let dotProduct = 0\n let normA = 0\n let normB = 0\n\n for (let i = 0; i < a.length; i++) {\n dotProduct += a[i] * b[i]\n normA += a[i] * a[i]\n normB += b[i] * b[i]\n }\n\n return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB))\n }\n}","import type { Database } from '../graph/database.js'\nimport { SessionCache, type CacheEntry, type CacheStats } from './l1-session.js'\nimport { CrossSessionCache } from './l2-cross.js'\nimport { SemanticCache } from './semantic.js'\n\nexport interface UnifiedCacheStats {\n l1: CacheStats\n l2: { size: number }\n}\n\nexport function createCacheManager(db?: Database) {\n const session = new SessionCache()\n const crossSession = db ? new CrossSessionCache(db) : (null as any)\n const semantic = new SemanticCache()\n\n return {\n session,\n crossSession,\n semantic\n }\n}\n\nexport function makeLatenCache(db: Database) {\n const l1 = new SessionCache()\n const l2 = new CrossSessionCache(db)\n\n return {\n l1,\n l2,\n\n async get(key: string): Promise<CacheEntry | null> {\n const l1Result = l1.get(key)\n if (l1Result) return l1Result\n\n const l2Result = await l2.get(key)\n if (l2Result) {\n l1.set(key, l2Result)\n return l2Result\n }\n\n return null\n },\n\n async set(key: string, value: CacheEntry, options?: { ttl?: number }): Promise<void> {\n l1.set(key, value)\n await l2.set(key, value, options)\n },\n\n async invalidate(pattern: string): Promise<void> {\n l1.clear()\n await l2.clear()\n },\n\n stats(): UnifiedCacheStats {\n return {\n l1: l1.stats(),\n l2: { size: 0 }\n }\n }\n }\n}\n\nexport { SessionCache, CrossSessionCache, SemanticCache }\nexport type { CacheEntry, CacheStats }\n","import type { RouteInput, ToolRoute, CompressorType } from './types.js'\n\nexport class ToolRouter {\n private rules: RouteRule[] = [\n {\n matcher: (input) => input.type === 'file',\n compressor: 'file-read',\n confidence: 0.95,\n reason: 'File read detected'\n },\n {\n matcher: (input) => input.type === 'grep',\n compressor: 'grep',\n confidence: 0.95,\n reason: 'Grep results detected'\n },\n {\n matcher: (input) => input.type === 'git-diff',\n compressor: 'git-diff',\n confidence: 0.95,\n reason: 'Git diff detected'\n }\n ]\n\n route(input: RouteInput): ToolRoute {\n for (const rule of this.rules) {\n if (rule.matcher(input)) {\n return {\n tool: 'compress',\n compressor: rule.compressor,\n confidence: rule.confidence,\n reason: rule.reason\n }\n }\n }\n\n return {\n tool: 'compress',\n confidence: 0.1,\n reason: 'No matching route found'\n }\n }\n\n addRule(rule: RouteRule): void {\n this.rules.push(rule)\n }\n}\n\ninterface RouteRule {\n matcher: (input: RouteInput) => boolean\n compressor: CompressorType\n confidence: number\n reason: string\n}","import type { RouteContext, StrategyRoute, StrategyType } from './types.js'\n\nexport class StrategyRouter {\n private thresholds = {\n small: 500,\n large: 5000\n }\n\n select(context: RouteContext): StrategyRoute {\n if (context.userPreference) {\n return {\n strategy: context.userPreference,\n reason: `User preference: ${context.userPreference}`,\n savings: this.estimateSavings(context.userPreference)\n }\n }\n\n const fileSize = context.fileSize || 0\n\n if (fileSize >= this.thresholds.large) {\n return {\n strategy: 'aggressive',\n reason: `large file (${fileSize} bytes)`,\n savings: 0.6\n }\n }\n\n if (fileSize <= this.thresholds.small) {\n return {\n strategy: 'conservative',\n reason: `small file (${fileSize} bytes)`,\n savings: 0.2\n }\n }\n\n return {\n strategy: 'balanced',\n reason: `Medium file (${fileSize} bytes)`,\n savings: 0.4\n }\n }\n\n private estimateSavings(strategy: StrategyType): number {\n switch (strategy) {\n case 'aggressive': return 0.6\n case 'balanced': return 0.4\n case 'conservative': return 0.2\n }\n }\n}\n","import { ToolRouter } from './tool-router.js'\nimport { StrategyRouter } from './strategy-router.js'\nimport type { RouteInput, RouteContext, ToolRoute, StrategyRoute } from './types.js'\n\nexport function createRouter() {\n const tool = new ToolRouter()\n const strategy = new StrategyRouter()\n\n return {\n tool,\n strategy,\n route: (input: RouteInput): ToolRoute => tool.route(input),\n selectStrategy: (context: RouteContext): StrategyRoute => strategy.select(context)\n }\n}\n\nexport type { ToolRoute, StrategyRoute, RouteInput, RouteContext }\nexport { ToolRouter } from './tool-router.js'\nexport { StrategyRouter } from './strategy-router.js'\n","export interface Tool {\n name: string\n description: string\n execute: (input: any) => Promise<any>\n}\n\nexport class ToolRegistry {\n private tools = new Map<string, Tool>()\n\n register(name: string, tool: Tool): void {\n this.tools.set(name, tool)\n }\n\n get(name: string): Tool | undefined {\n return this.tools.get(name)\n }\n\n list(): Tool[] {\n return Array.from(this.tools.values())\n }\n\n has(name: string): boolean {\n return this.tools.has(name)\n }\n\n unregister(name: string): boolean {\n return this.tools.delete(name)\n }\n}","export interface SemanticToolConfig {\n intent: string\n inputTypes: string[]\n outputType: string\n}\n\nexport class SemanticTool {\n public readonly name: string\n public readonly intent: string\n private inputTypes: Set<string>\n public readonly outputType: string\n\n constructor(name: string, config: SemanticToolConfig) {\n this.name = name\n this.intent = config.intent\n this.inputTypes = new Set(config.inputTypes)\n this.outputType = config.outputType\n }\n\n supportsInput(inputType: string): boolean {\n return this.inputTypes.has(inputType)\n }\n\n describe(): string {\n return `${this.name}: ${this.intent} (${Array.from(this.inputTypes).join(', ')} → ${this.outputType})`\n }\n}\n","import { ToolRegistry, type Tool } from './registry.js'\nimport { SemanticTool } from './semantic-tool.js'\n\nexport function createToolRegistry(): ToolRegistry {\n const registry = new ToolRegistry()\n\n registry.register('compress', {\n name: 'compress',\n description: 'Compress content to reduce tokens',\n execute: async (input) => ({ content: 'compressed', confidence: 0.9 })\n })\n\n registry.register('cache', {\n name: 'cache',\n description: 'Cache content for reuse',\n execute: async (input) => ({ content: 'cached', confidence: 1.0 })\n })\n\n registry.register('graph', {\n name: 'graph',\n description: 'Store in knowledge graph',\n execute: async (input) => ({ stored: true })\n })\n\n return registry\n}\n\nexport function getSemanticTools(): SemanticTool[] {\n return [\n new SemanticTool('compress', {\n intent: 'Reduce token usage',\n inputTypes: ['file', 'grep', 'git-diff'],\n outputType: 'compressed'\n }),\n new SemanticTool('cache', {\n intent: 'Store for reuse',\n inputTypes: ['compressed', 'original'],\n outputType: 'cached'\n }),\n new SemanticTool('graph', {\n intent: 'Build knowledge base',\n inputTypes: ['any'],\n outputType: 'stored'\n })\n ]\n}\n\nexport { ToolRegistry } from './registry.js'\nexport { SemanticTool } from './semantic-tool.js'\nexport type { Tool } from './registry.js'\n","import type { AgentAdapter, AdapterOutput, AdapterRequest } from './types.js'\n\nexport class ClaudeCodeAdapter implements AgentAdapter {\n name = 'claude-code'\n version = '1.0.0'\n type = 'hook' as const\n\n format(input: AdapterRequest): AdapterOutput {\n const { content, context } = input\n \n const formatted = this.formatForClaude(content, context)\n \n return {\n output: formatted,\n format: 'claude',\n metadata: {\n filePath: context?.filePath,\n timestamp: Date.now()\n }\n }\n }\n\n parse(output: string): any {\n return { content: output, parsed: true }\n }\n\n private formatForClaude(content: string, context?: Record<string, any>): string {\n const parts: string[] = []\n \n if (context?.filePath) {\n parts.push(`**File:** \\`${context.filePath}\\``)\n }\n \n parts.push(content)\n \n return parts.join('\\n\\n')\n }\n}","import type { AgentAdapter, AdapterOutput, AdapterRequest } from './types.js'\n\nexport class CodexAdapter implements AgentAdapter {\n name = 'codex'\n version = '1.0.0'\n type = 'hook' as const\n\n format(input: AdapterRequest): AdapterOutput {\n const { content, context } = input\n \n const formatted = this.formatForCodex(content, context)\n \n return {\n output: formatted,\n format: 'codex',\n metadata: {\n timestamp: Date.now()\n }\n }\n }\n\n parse(output: string): any {\n try {\n return JSON.parse(output)\n } catch {\n return { content: output }\n }\n }\n\n private formatForCodex(content: string, context?: Record<string, any>): string {\n if (context?.expectJson) {\n return JSON.stringify({ content, timestamp: Date.now() })\n }\n return content\n }\n}\n","import type { AgentAdapter, AdapterOutput, AdapterRequest } from './types.js'\n\nexport class GeminiCliAdapter implements AgentAdapter {\n name = 'gemini-cli'\n version = '1.0.0'\n type = 'hook' as const\n\n format(input: AdapterRequest): AdapterOutput {\n const { content, context } = input\n \n const formatted = this.formatForGemini(content, context)\n const multimodal = context?.includeImage || false\n \n return {\n output: formatted,\n format: 'gemini',\n metadata: {\n multimodal,\n imagePath: context?.imagePath,\n timestamp: Date.now()\n }\n }\n }\n\n parse(output: string): any {\n return { content: output, parsed: true }\n }\n\n private formatForGemini(content: string, context?: Record<string, any>): string {\n const parts: string[] = [content]\n \n if (context?.includeImage && context?.imagePath) {\n parts.push(`[Image: ${context.imagePath}]`)\n }\n \n return parts.join('\\n')\n }\n}\n","import fs from 'fs/promises'\nimport path from 'path'\nimport type { AgentAdapter, AdapterOutput, AdapterRequest, ToolCall, ToolResult, HookConfig } from './types.js'\n\nexport class HookAdapter implements AgentAdapter {\n name: string\n version = '1.0.0'\n type = 'hook' as const\n private hooks: HookConfig = {}\n\n constructor(name: string) {\n this.name = name\n }\n\n format(input: AdapterRequest): AdapterOutput {\n const { content, context } = input\n const parts: string[] = []\n\n if (context?.filePath) {\n parts.push(`**File:** \\`${context.filePath}\\``)\n }\n\n parts.push(content)\n\n return {\n output: parts.join('\\n\\n'),\n format: this.name,\n metadata: { filePath: context?.filePath, timestamp: Date.now() }\n }\n }\n\n parse(output: string): any {\n return { content: output, parsed: true }\n }\n\n setHooks(hooks: HookConfig): void {\n this.hooks = hooks\n }\n\n async intercept(toolCall: ToolCall): Promise<ToolCall | null> {\n if (this.hooks.preToolUse) {\n return this.hooks.preToolUse(toolCall)\n }\n return toolCall\n }\n\n async postProcess(result: ToolResult): Promise<ToolResult> {\n if (this.hooks.postToolUse) {\n return this.hooks.postToolUse(result)\n }\n return result\n }\n\n async install(agentPath: string): Promise<void> {\n const hooksDir = path.join(agentPath, 'hooks')\n await fs.mkdir(hooksDir, { recursive: true })\n\n const preToolHook = `#!/usr/bin/env node\nconst { readFileSync } = require('fs');\nconst input = JSON.parse(readFileSync('/dev/stdin', 'utf-8'));\n\nif (input.tool === 'Read' || input.tool === 'Bash') {\n process.env.MAKE_LATEN_INTERCEPT = '1';\n}\n\nprocess.stdout.write(JSON.stringify(input));\n`\n const postToolHook = `#!/usr/bin/env node\nconst { readFileSync } = require('fs');\nconst input = JSON.parse(readFileSync('/dev/stdin', 'utf-8'));\n\nif (input.output && input.output.length > 10000) {\n input.output = input.output.slice(0, 10000) + '\\\\n... (truncated by make-laten)';\n}\n\nprocess.stdout.write(JSON.stringify(input));\n`\n\n await fs.writeFile(path.join(hooksDir, 'pre-tool-use.js'), preToolHook)\n await fs.writeFile(path.join(hooksDir, 'post-tool-use.js'), postToolHook)\n }\n\n async uninstall(agentPath: string): Promise<void> {\n const hooksDir = path.join(agentPath, 'hooks')\n try {\n await fs.rm(path.join(hooksDir, 'pre-tool-use.js'), { force: true })\n await fs.rm(path.join(hooksDir, 'post-tool-use.js'), { force: true })\n } catch {}\n }\n\n async isInstalled(agentPath: string): Promise<boolean> {\n try {\n await fs.access(path.join(agentPath, 'hooks', 'pre-tool-use.js'))\n return true\n } catch {\n return false\n }\n }\n}\n","import fs from 'fs/promises'\nimport path from 'path'\nimport type { AgentAdapter, AdapterOutput, AdapterRequest } from './types.js'\nimport { AGENT_CONFIGS } from './types.js'\n\nconst RULES_TEMPLATE = `\n# make-laten efficiency rules\n\n## Token Optimization\n- When reading files, prefer using \\`make-laten read <file>\\` for compressed output\n- When searching code, prefer using \\`make-laten grep <pattern>\\` for grouped results\n- When checking git status, prefer using \\`make-laten git diff\\` for condensed output\n\n## Caching\n- make-laten automatically caches frequently accessed files\n- Use \\`make-laten cache stats\\` to see cache performance\n- Use \\`make-laten cache clear\\` to reset cache if needed\n\n## Web Search\n- Use \\`make-laten search <query>\\` for optimized web search\n- Use \\`make-laten fetch <url>\\` for compressed web fetch\n`\n\nexport class RulesAdapter implements AgentAdapter {\n name: string\n version = '1.0.0'\n type = 'rules' as const\n\n constructor(agentName: string) {\n this.name = agentName\n }\n\n format(input: AdapterRequest): AdapterOutput {\n return {\n output: input.content,\n format: 'markdown',\n metadata: { agent: this.name, timestamp: Date.now() }\n }\n }\n\n parse(output: string): any {\n return { content: output }\n }\n\n async install(agentPath: string): Promise<void> {\n const config = AGENT_CONFIGS[this.name]\n if (!config?.rulesFile) {\n throw new Error(`No rules file configured for ${this.name}`)\n }\n\n const rulesPath = path.join(agentPath, config.rulesFile)\n const existing = await fs.readFile(rulesPath, 'utf-8').catch(() => '')\n\n if (existing.includes('make-laten')) {\n return\n }\n\n await fs.mkdir(path.dirname(rulesPath), { recursive: true })\n await fs.writeFile(rulesPath, existing + '\\n\\n' + RULES_TEMPLATE)\n }\n\n async uninstall(agentPath: string): Promise<void> {\n const config = AGENT_CONFIGS[this.name]\n if (!config?.rulesFile) return\n\n const rulesPath = path.join(agentPath, config.rulesFile)\n try {\n let content = await fs.readFile(rulesPath, 'utf-8')\n const marker = '# make-laten efficiency rules'\n const idx = content.indexOf(marker)\n if (idx !== -1) {\n const endIdx = content.indexOf('\\n#', idx + marker.length)\n content = content.slice(0, idx).trim() + '\\n' + (endIdx !== -1 ? content.slice(endIdx) : '')\n await fs.writeFile(rulesPath, content.trim() + '\\n')\n }\n } catch {}\n }\n\n async isInstalled(agentPath: string): Promise<boolean> {\n const config = AGENT_CONFIGS[this.name]\n if (!config?.rulesFile) return false\n\n try {\n const content = await fs.readFile(path.join(agentPath, config.rulesFile), 'utf-8')\n return content.includes('make-laten')\n } catch {\n return false\n }\n }\n}\n","export type AdapterType = 'hook' | 'plugin' | 'rules' | 'proxy' | 'mcp'\n\nexport interface AgentAdapter {\n name: string\n version: string\n type: AdapterType\n format: (input: any) => AdapterOutput\n parse?: (output: string) => any\n install?(agentPath: string): Promise<void>\n uninstall?(agentPath: string): Promise<void>\n isInstalled?(agentPath: string): Promise<boolean>\n}\n\nexport interface AgentInfo {\n name: string\n type: AdapterType\n path: string\n version: string | null\n detected: boolean\n}\n\nexport interface ToolCall {\n name: string\n params: Record<string, any>\n timestamp?: number\n}\n\nexport interface ToolResult {\n name: string\n output: string\n success: boolean\n metadata?: Record<string, any>\n}\n\nexport interface AdapterConfig {\n maxTokens?: number\n supportsStreaming?: boolean\n supportsImages?: boolean\n customHeaders?: Record<string, string>\n}\n\nexport interface AdapterOutput {\n output: string\n format: string\n metadata?: Record<string, any>\n}\n\nexport interface AdapterRequest {\n content: string\n context?: Record<string, any>\n}\n\nexport interface HookConfig {\n preToolUse?: (toolCall: ToolCall) => Promise<ToolCall | null>\n postToolUse?: (result: ToolResult) => Promise<ToolResult>\n}\n\nexport const AGENT_CONFIGS: Record<string, { type: AdapterType; rulesFile?: string; configPath?: string }> = {\n 'claude-code': { type: 'hook' },\n 'codex': { type: 'hook' },\n 'gemini-cli': { type: 'hook' },\n 'cursor': { type: 'rules', rulesFile: '.cursorrules' },\n 'windsurf': { type: 'rules', rulesFile: '.windsurfrules' },\n 'cline': { type: 'rules', rulesFile: '.clinerules' },\n 'copilot': { type: 'rules', rulesFile: '.github/copilot-instructions.md' }\n}\n","import fs from 'fs/promises'\nimport path from 'path'\nimport { exec } from 'child_process'\nimport { promisify } from 'util'\n\nconst execAsync = promisify(exec)\n\nconst RULES_CONTENT = `\n# make-laten efficiency rules\n\n## Token Optimization\n- When reading files, use \\`make-laten read <file>\\` for compressed output\n- When searching code, use \\`make-laten grep <pattern>\\` for grouped results\n- When checking git, use \\`make-laten git diff\\` for condensed output\n- When fetching web, use \\`make-laten fetch <url>\\` for compressed content\n\n## Quick Commands\n- \\`mread <file>\\` — alias for make-laten read\n- \\`mgrep <pattern>\\` — alias for make-laten grep\n- \\`mdiff\\` — alias for make-laten git diff\n- \\`msearch <query>\\` — alias for make-laten search\n- \\`mfetch <url>\\` — alias for make-laten fetch\n`\n\ninterface AgentSetup {\n name: string\n detected: () => Promise<boolean>\n install: () => Promise<void>\n uninstall: () => Promise<void>\n}\n\nfunction getHome(): string {\n return process.env.HOME || process.env.USERPROFILE || ''\n}\n\nasync function commandExists(cmd: string): Promise<boolean> {\n try {\n await execAsync(`which ${cmd}`, { timeout: 3000 })\n return true\n } catch {\n return false\n }\n}\n\nasync function fileContains(filePath: string, text: string): Promise<boolean> {\n try {\n const content = await fs.readFile(filePath, 'utf-8')\n return content.includes(text)\n } catch {\n return false\n }\n}\n\nconst agents: AgentSetup[] = [\n {\n name: 'terminal (shell aliases)',\n detected: async () => true,\n install: async () => {\n const shellInit = await execAsync('echo $SHELL').then(r => r.stdout.trim())\n const rcFile = shellInit.includes('zsh') ? '.zshrc' : '.bashrc'\n const rcPath = path.join(getHome(), rcFile)\n const marker = 'make-laten shell'\n\n let existing = ''\n try { existing = await fs.readFile(rcPath, 'utf-8') } catch {}\n\n if (!existing.includes(marker)) {\n const npmRoot = await execAsync('npm root -g').then(r => r.stdout.trim())\n const initScript = `\\n# make-laten shell integration\\nsource ${npmRoot}/make-laten/shell/init.sh\\n`\n await fs.appendFile(rcPath, initScript)\n }\n },\n uninstall: async () => {\n const shellInit = await execAsync('echo $SHELL').then(r => r.stdout.trim())\n const rcFile = shellInit.includes('zsh') ? '.zshrc' : '.bashrc'\n const rcPath = path.join(getHome(), rcFile)\n try {\n let content = await fs.readFile(rcPath, 'utf-8')\n content = content.replace(/\\n# make-laten shell integration\\nsource .*\\/make-laten\\/shell\\/init\\.sh\\n/g, '')\n await fs.writeFile(rcPath, content)\n } catch {}\n }\n },\n {\n name: 'claude-code',\n detected: async () => commandExists('claude'),\n install: async () => {\n const hooksDir = path.join(getHome(), '.claude', 'hooks')\n await fs.mkdir(hooksDir, { recursive: true })\n\n const preHook = `#!/usr/bin/env node\nconst { readFileSync } = require('fs');\nconst input = JSON.parse(readFileSync('/dev/stdin', 'utf-8'));\nif (input.tool === 'Read' || input.tool === 'Bash') {\n process.env.MAKE_LATEN_INTERCEPT = '1';\n}\nprocess.stdout.write(JSON.stringify(input));`\n\n const postHook = `#!/usr/bin/env node\nconst { readFileSync } = require('fs');\nconst input = JSON.parse(readFileSync('/dev/stdin', 'utf-8'));\nif (input.output && input.output.length > 10000) {\n input.output = input.output.slice(0, 10000) + '\\\\n... (truncated by make-laten)';\n}\nprocess.stdout.write(JSON.stringify(input));`\n\n await fs.writeFile(path.join(hooksDir, 'pre-tool-use.js'), preHook)\n await fs.writeFile(path.join(hooksDir, 'post-tool-use.js'), postHook)\n },\n uninstall: async () => {\n const hooksDir = path.join(getHome(), '.claude', 'hooks')\n try { await fs.rm(path.join(hooksDir, 'pre-tool-use.js'), { force: true }) } catch {}\n try { await fs.rm(path.join(hooksDir, 'post-tool-use.js'), { force: true }) } catch {}\n }\n },\n {\n name: 'cursor',\n detected: async () => {\n try { await fs.access(path.join(getHome(), '.cursor')); return true } catch { return false }\n },\n install: async () => {\n const rulesDir = path.join(getHome(), '.cursor', 'rules')\n await fs.mkdir(rulesDir, { recursive: true })\n const ruleFile = path.join(rulesDir, 'make-laten.mdc')\n const content = `---\\ndescription: make-laten efficiency rules\\nglobs:\\n---\\n${RULES_CONTENT}`\n await fs.writeFile(ruleFile, content)\n },\n uninstall: async () => {\n try { await fs.rm(path.join(getHome(), '.cursor', 'rules', 'make-laten.mdc'), { force: true }) } catch {}\n }\n },\n {\n name: 'codex',\n detected: async () => commandExists('codex'),\n install: async () => {\n const agentsMd = path.join(process.cwd(), 'AGENTS.md')\n let existing = ''\n try { existing = await fs.readFile(agentsMd, 'utf-8') } catch {}\n if (!existing.includes('make-laten')) {\n const content = existing + '\\n\\n## make-laten Integration\\n' + RULES_CONTENT\n await fs.writeFile(agentsMd, content)\n }\n },\n uninstall: async () => {\n try {\n let content = await fs.readFile(path.join(process.cwd(), 'AGENTS.md'), 'utf-8')\n content = content.replace(/\\n## make-laten Integration[\\s\\S]*$/, '')\n await fs.writeFile(path.join(process.cwd(), 'AGENTS.md'), content.trim() + '\\n')\n } catch {}\n }\n },\n {\n name: 'windsurf',\n detected: async () => {\n try { await fs.access(path.join(process.cwd(), '.windsurf')); return true } catch {\n try { await fs.access(path.join(getHome(), '.windsurf')); return true } catch { return false }\n }\n },\n install: async () => {\n const rulesPath = path.join(process.cwd(), '.windsurfrules')\n let existing = ''\n try { existing = await fs.readFile(rulesPath, 'utf-8') } catch {}\n if (!existing.includes('make-laten')) {\n await fs.writeFile(rulesPath, existing + '\\n\\n' + RULES_CONTENT)\n }\n },\n uninstall: async () => {\n try {\n let content = await fs.readFile(path.join(process.cwd(), '.windsurfrules'), 'utf-8')\n content = content.replace(/\\n# make-laten efficiency rules[\\s\\S]*$/, '')\n await fs.writeFile(path.join(process.cwd(), '.windsurfrules'), content.trim() + '\\n')\n } catch {}\n }\n },\n {\n name: 'cline',\n detected: async () => {\n try { await fs.access(path.join(process.cwd(), '.clinerules')); return true } catch {\n try { await fs.access(path.join(getHome(), '.cline')); return true } catch { return false }\n }\n },\n install: async () => {\n const rulesPath = path.join(process.cwd(), '.clinerules')\n let existing = ''\n try { existing = await fs.readFile(rulesPath, 'utf-8') } catch {}\n if (!existing.includes('make-laten')) {\n await fs.writeFile(rulesPath, existing + '\\n\\n' + RULES_CONTENT)\n }\n },\n uninstall: async () => {\n try {\n let content = await fs.readFile(path.join(process.cwd(), '.clinerules'), 'utf-8')\n content = content.replace(/\\n# make-laten efficiency rules[\\s\\S]*$/, '')\n await fs.writeFile(path.join(process.cwd(), '.clinerules'), content.trim() + '\\n')\n } catch {}\n }\n },\n {\n name: 'copilot',\n detected: async () => {\n try { await fs.access(path.join(process.cwd(), '.github')); return true } catch { return false }\n },\n install: async () => {\n const dir = path.join(process.cwd(), '.github')\n await fs.mkdir(dir, { recursive: true })\n const instructionsPath = path.join(dir, 'copilot-instructions.md')\n let existing = ''\n try { existing = await fs.readFile(instructionsPath, 'utf-8') } catch {}\n if (!existing.includes('make-laten')) {\n await fs.writeFile(instructionsPath, existing + '\\n\\n## make-laten Efficiency\\n' + RULES_CONTENT)\n }\n },\n uninstall: async () => {\n try {\n let content = await fs.readFile(path.join(process.cwd(), '.github', 'copilot-instructions.md'), 'utf-8')\n content = content.replace(/\\n## make-laten Efficiency[\\s\\S]*$/, '')\n await fs.writeFile(path.join(process.cwd(), '.github', 'copilot-instructions.md'), content.trim() + '\\n')\n } catch {}\n }\n },\n {\n name: 'opencode',\n detected: async () => {\n try { await fs.access(path.join(getHome(), '.config', 'opencode')); return true } catch { return false }\n },\n install: async () => {\n const skillsDir = path.join(getHome(), '.config', 'opencode', 'skills', 'make-laten')\n await fs.mkdir(skillsDir, { recursive: true })\n\n const npmRoot = await execAsync('npm root -g').then(r => r.stdout.trim())\n const skillSrc = path.join(npmRoot, 'make-laten', 'skills', 'SKILL.md')\n\n try {\n const skillContent = await fs.readFile(skillSrc, 'utf-8')\n await fs.writeFile(path.join(skillsDir, 'SKILL.md'), skillContent)\n } catch {\n await fs.writeFile(path.join(skillsDir, 'SKILL.md'), `---\\nname: make-laten\\ndescription: Token optimization toolkit\\n---\\n\\n# make-laten Skill\\n\\nUse make-laten CLI commands for all file/code/git operations.\\n`)\n }\n },\n uninstall: async () => {\n try { await fs.rm(path.join(getHome(), '.config', 'opencode', 'skills', 'make-laten'), { recursive: true, force: true }) } catch {}\n }\n }\n]\n\nexport class Installer {\n async install(): Promise<{ installed: string[]; skipped: string[] }> {\n const installed: string[] = []\n const skipped: string[] = []\n\n for (const agent of agents) {\n try {\n const detected = await agent.detected()\n if (detected) {\n await agent.install()\n installed.push(agent.name)\n } else {\n skipped.push(agent.name)\n }\n } catch {\n skipped.push(agent.name)\n }\n }\n\n return { installed, skipped }\n }\n\n async uninstall(): Promise<{ removed: string[] }> {\n const removed: string[] = []\n\n for (const agent of agents) {\n try {\n await agent.uninstall()\n removed.push(agent.name)\n } catch {}\n }\n\n return { removed }\n }\n\n async status(): Promise<{ name: string; detected: boolean; installed: boolean }[]> {\n const result: { name: string; detected: boolean; installed: boolean }[] = []\n\n for (const agent of agents) {\n try {\n const detected = await agent.detected()\n result.push({ name: agent.name, detected, installed: false })\n } catch {\n result.push({ name: agent.name, detected: false, installed: false })\n }\n }\n\n return result\n }\n}\n","import { exec } from 'child_process'\nimport { promisify } from 'util'\nimport fs from 'fs/promises'\nimport path from 'path'\nimport type { AgentInfo } from './types.js'\nimport { AGENT_CONFIGS } from './types.js'\n\nconst execAsync = promisify(exec)\n\nexport class AgentDetector {\n async detectAgents(): Promise<AgentInfo[]> {\n const agents: AgentInfo[] = []\n\n for (const [name, config] of Object.entries(AGENT_CONFIGS)) {\n const detected = await this.detectAgent(name, config.type)\n if (detected) {\n agents.push(detected)\n }\n }\n\n return agents\n }\n\n async detectAgent(name: string, type: string): Promise<AgentInfo | null> {\n const commands: Record<string, string> = {\n 'claude-code': 'claude --version',\n 'codex': 'codex --version',\n 'gemini-cli': 'gemini --version'\n }\n\n if (commands[name]) {\n try {\n const { stdout } = await execAsync(commands[name], { timeout: 5000 })\n const version = stdout.trim().split('\\n')[0]\n const agentPath = await this.getAgentPath(name)\n return { name, type: type as any, path: agentPath, version, detected: true }\n } catch {\n return null\n }\n }\n\n if (type === 'rules') {\n const rulesPath = AGENT_CONFIGS[name]?.rulesFile\n if (rulesPath) {\n try {\n await fs.access(path.join(process.cwd(), rulesPath))\n return { name, type: type as any, path: process.cwd(), version: null, detected: true }\n } catch {\n return null\n }\n }\n }\n\n return null\n }\n\n async getAgentPath(name: string): Promise<string> {\n const home = process.env.HOME || process.env.USERPROFILE || ''\n const paths: Record<string, string> = {\n 'claude-code': path.join(home, '.claude'),\n 'codex': path.join(home, '.codex'),\n 'gemini-cli': path.join(home, '.gemini')\n }\n return paths[name] || path.join(home, `.${name}`)\n }\n\n async hasCommand(cmd: string): Promise<boolean> {\n try {\n await execAsync(`which ${cmd}`, { timeout: 3000 })\n return true\n } catch {\n return false\n }\n }\n}\n","import { ClaudeCodeAdapter } from './claude-code.js'\nimport { CodexAdapter } from './codex.js'\nimport { GeminiCliAdapter } from './gemini-cli.js'\nimport { HookAdapter } from './hook.js'\nimport { RulesAdapter } from './rules.js'\nimport { Installer } from './installer.js'\nimport { AgentDetector } from './detector.js'\nimport type { AgentAdapter, AgentInfo, AdapterType } from './types.js'\n\nconst adapters = new Map<string, AgentAdapter>()\n\nadapters.set('claude-code', new ClaudeCodeAdapter())\nadapters.set('codex', new CodexAdapter())\nadapters.set('gemini-cli', new GeminiCliAdapter())\n\nexport function getAdapter(name: string): AgentAdapter | undefined {\n return adapters.get(name)\n}\n\nexport function getAdapters(): AgentAdapter[] {\n return Array.from(adapters.values())\n}\n\nexport function createAdapter(config: AgentAdapter): AgentAdapter {\n return config\n}\n\nexport function registerAdapter(name: string, adapter: AgentAdapter): void {\n adapters.set(name, adapter)\n}\n\nexport function createHookAdapter(name: string): HookAdapter {\n return new HookAdapter(name)\n}\n\nexport function createRulesAdapter(name: string): RulesAdapter {\n return new RulesAdapter(name)\n}\n\nexport function createInstaller(): Installer {\n return new Installer()\n}\n\nexport function createDetector(): AgentDetector {\n return new AgentDetector()\n}\n\nexport type { AgentAdapter, AgentInfo, AdapterConfig, AdapterOutput, AdapterType } from './types.js'\nexport { AGENT_CONFIGS } from './types.js'\nexport { ClaudeCodeAdapter } from './claude-code.js'\nexport { CodexAdapter } from './codex.js'\nexport { GeminiCliAdapter } from './gemini-cli.js'\nexport { HookAdapter } from './hook.js'\nexport { RulesAdapter } from './rules.js'\nexport { Installer } from './installer.js'\nexport { AgentDetector } from './detector.js'\n","import type { Pattern, PatternType } from './types.js'\n\ninterface Operation {\n type: string\n input: any\n output?: any\n error?: string\n success: boolean\n}\n\nexport class PatternMiner {\n private operations: Operation[] = []\n private patterns: Map<string, Pattern> = new Map()\n\n record(operation: Operation): void {\n this.operations.push(operation)\n \n if (operation.success) {\n this.updatePatterns(operation)\n }\n }\n\n getPatterns(): Pattern[] {\n return Array.from(this.patterns.values())\n }\n\n getPatternsByType(type: PatternType): Pattern[] {\n return this.getPatterns().filter(p => p.type === type)\n }\n\n private updatePatterns(operation: Operation): void {\n const key = operation.type\n const existing = this.patterns.get(key)\n \n if (existing) {\n existing.count++\n existing.confidence = Math.min(0.99, existing.confidence + 0.05)\n } else {\n this.patterns.set(key, {\n id: `p${this.patterns.size + 1}`,\n type: operation.type as PatternType,\n pattern: JSON.stringify(operation.input),\n confidence: 0.5,\n count: 1\n })\n }\n }\n}\n","import type { Failure } from './types.js'\n\ninterface FailureRecord extends Failure {\n count: number\n}\n\nexport class FailureLearner {\n private failures: Map<string, FailureRecord> = new Map()\n\n record(failure: Omit<Failure, 'id' | 'timestamp'>): void {\n const key = `${failure.type}:${failure.error}`\n const existing = this.failures.get(key)\n \n if (existing) {\n existing.count++\n } else {\n this.failures.set(key, {\n id: `f${this.failures.size + 1}`,\n ...failure,\n timestamp: Date.now(),\n count: 1\n })\n }\n }\n\n getFailures(): Failure[] {\n return Array.from(this.failures.values())\n }\n\n getFailuresByType(type: string): Failure[] {\n return this.getFailures().filter(f => f.type === type)\n }\n\n getSuggestions(type: string): string[] {\n const failures = Array.from(this.failures.values()).filter(f => f.type === type)\n const suggestions: string[] = []\n \n for (const failure of failures) {\n if (failure.error.includes('not found')) {\n suggestions.push('check if file exists before processing')\n }\n if (failure.error.includes('permission')) {\n suggestions.push('verify file permissions')\n }\n if (failure.count > 2) {\n suggestions.push(`recurring issue: ${failure.error}`)\n }\n }\n \n return [...new Set(suggestions)]\n }\n}\n","import { PatternMiner } from './pattern-miner.js'\nimport { FailureLearner } from './failure-learner.js'\n\nexport function createLearner() {\n const patterns = new PatternMiner()\n const failures = new FailureLearner()\n\n return {\n patterns,\n failures,\n record: (op: any) => {\n patterns.record(op)\n if (!op.success) {\n failures.record({\n type: op.type,\n error: op.error || 'Unknown error',\n context: op.input\n })\n }\n }\n }\n}\n\nexport { PatternMiner } from './pattern-miner.js'\nexport { FailureLearner } from './failure-learner.js'\n","import type { Correction, CorrectionRule } from './types.js'\n\nexport class AutoCorrect {\n private rules: CorrectionRule[] = []\n private corrections: Correction[] = []\n private appliedCount = 0\n\n addRule(rule: CorrectionRule): void {\n this.rules.push(rule)\n }\n\n getRules(): CorrectionRule[] {\n return this.rules\n }\n\n correct(input: string): string {\n let output = input\n\n for (const rule of this.rules) {\n if (typeof rule.pattern === 'string') {\n if (output.includes(rule.pattern)) {\n output = output.split(rule.pattern).join(rule.replacement)\n this.recordCorrection(input, output, rule.name)\n }\n } else {\n const matches = output.match(rule.pattern)\n if (matches) {\n output = output.replace(rule.pattern, rule.replacement)\n this.recordCorrection(input, output, rule.name)\n }\n }\n }\n\n return output\n }\n\n getStats(): { applied: number; corrections: Correction[] } {\n return {\n applied: this.appliedCount,\n corrections: this.corrections\n }\n }\n\n private recordCorrection(original: string, corrected: string, ruleName: string): void {\n this.appliedCount++\n this.corrections.push({\n id: `c${this.corrections.length + 1}`,\n original,\n corrected,\n rule: ruleName,\n confidence: 0.9\n })\n }\n}\n","import { AutoCorrect } from './auto-correct.js'\nimport type { CorrectionRule } from './types.js'\n\nconst defaultRules: CorrectionRule[] = [\n {\n name: 'fix-typo-teh',\n description: 'Fix \"teh\" typo',\n pattern: 'teh',\n replacement: 'the'\n },\n {\n name: 'fix-typo-recieve',\n description: 'Fix \"recieve\" typo',\n pattern: 'recieve',\n replacement: 'receive'\n }\n]\n\nexport function createCorrector(rules: CorrectionRule[] = defaultRules) {\n const engine = new AutoCorrect()\n \n for (const rule of rules) {\n engine.addRule(rule)\n }\n\n return {\n engine,\n rules: engine.getRules(),\n correct: (input: string) => engine.correct(input)\n }\n}\n\nexport { AutoCorrect } from './auto-correct.js'\nexport type { Correction, CorrectionRule } from './types.js'\n","import type { Middleware, MiddlewareContext, MiddlewareResult } from './types.js'\n\nexport class Pipeline {\n private middlewares: Middleware[] = []\n\n use(middleware: Middleware): this {\n this.middlewares.push(middleware)\n return this\n }\n\n size(): number {\n return this.middlewares.length\n }\n\n async execute(ctx: MiddlewareContext): Promise<MiddlewareResult> {\n let index = 0\n\n const next = async (ctx: MiddlewareContext): Promise<MiddlewareResult> => {\n if (index >= this.middlewares.length) {\n return { output: ctx.input, metadata: ctx.metadata }\n }\n\n const middleware = this.middlewares[index++]\n return middleware(ctx, next)\n }\n\n return next(ctx)\n }\n}\n","import type { Plugin, PluginContext } from './types.js'\n\nexport class PluginLoader {\n private plugins: Map<string, Plugin> = new Map()\n\n register(plugin: Plugin): void {\n this.plugins.set(plugin.name, plugin)\n }\n\n get(name: string): Plugin | undefined {\n return this.plugins.get(name)\n }\n\n has(name: string): boolean {\n return this.plugins.has(name)\n }\n\n getAll(): Plugin[] {\n return Array.from(this.plugins.values())\n }\n\n async initializeAll(ctx: PluginContext): Promise<void> {\n for (const plugin of this.plugins.values()) {\n await plugin.initialize(ctx)\n }\n }\n\n async destroyAll(): Promise<void> {\n for (const plugin of this.plugins.values()) {\n if (plugin.destroy) {\n await plugin.destroy()\n }\n }\n }\n}\n","interface RateLimiterConfig {\n maxRequests: number\n windowMs: number\n}\n\ninterface RequestRecord {\n count: number\n resetAt: number\n}\n\nexport class RateLimiter {\n private config: RateLimiterConfig\n private records: Map<string, RequestRecord> = new Map()\n\n constructor(config: RateLimiterConfig) {\n this.config = config\n }\n\n allow(key: string): boolean {\n const now = Date.now()\n const record = this.records.get(key)\n\n if (!record || now > record.resetAt) {\n this.records.set(key, { count: 1, resetAt: now + this.config.windowMs })\n return true\n }\n\n if (record.count >= this.config.maxRequests) {\n return false\n }\n\n record.count++\n return true\n }\n\n getUsage(key: string): number {\n const record = this.records.get(key)\n if (!record || Date.now() > record.resetAt) {\n return 0\n }\n return record.count\n }\n\n reset(key: string): void {\n this.records.delete(key)\n }\n}","type LogLevel = 'debug' | 'info' | 'warn' | 'error'\n\ninterface LogEntry {\n level: LogLevel\n message: string\n metadata?: Record<string, any>\n timestamp: number\n}\n\ninterface LoggerConfig {\n level: LogLevel\n handler: (entry: LogEntry) => void\n}\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3\n}\n\nexport class Logger {\n private config: LoggerConfig\n\n constructor(config: LoggerConfig) {\n this.config = config\n }\n\n debug(message: string, metadata?: Record<string, any>): void {\n this.log('debug', message, metadata)\n }\n\n info(message: string, metadata?: Record<string, any>): void {\n this.log('info', message, metadata)\n }\n\n warn(message: string, metadata?: Record<string, any>): void {\n this.log('warn', message, metadata)\n }\n\n error(message: string, metadata?: Record<string, any>): void {\n this.log('error', message, metadata)\n }\n\n private log(level: LogLevel, message: string, metadata?: Record<string, any>): void {\n if (LOG_LEVELS[level] >= LOG_LEVELS[this.config.level]) {\n this.config.handler({\n level,\n message,\n metadata,\n timestamp: Date.now()\n })\n }\n }\n}","interface ErrorResult {\n handled: boolean\n category: string\n suggestions: string[]\n}\n\ninterface ErrorStats {\n total: number\n byCategory: Record<string, number>\n}\n\nexport class ErrorHandler {\n private errors: Error[] = []\n\n handle(error: Error): ErrorResult {\n this.errors.push(error)\n\n const category = this.categorize(error)\n const suggestions = this.getSuggestions(error)\n\n return {\n handled: true,\n category,\n suggestions\n }\n }\n\n getStats(): ErrorStats {\n const byCategory: Record<string, number> = {}\n for (const error of this.errors) {\n const cat = this.categorize(error)\n byCategory[cat] = (byCategory[cat] || 0) + 1\n }\n return { total: this.errors.length, byCategory }\n }\n\n private categorize(error: Error): string {\n if (error.message.includes('not found')) return 'not-found'\n if (error.message.includes('permission')) return 'permission'\n if (error.message.includes('timeout')) return 'timeout'\n return 'unknown'\n }\n\n private getSuggestions(error: Error): string[] {\n const suggestions: string[] = []\n if (error.message.includes('not found')) {\n suggestions.push('check if file or resource exists')\n }\n if (error.message.includes('permission')) {\n suggestions.push('verify access permissions')\n }\n if (error.message.includes('timeout')) {\n suggestions.push('increase timeout or retry')\n }\n return suggestions\n }\n}","interface HistogramStats {\n avg: number\n min: number\n max: number\n count: number\n}\n\nexport class MetricsCollector {\n private counters: Map<string, number> = new Map()\n private gauges: Map<string, number> = new Map()\n private histograms: Map<string, number[]> = new Map()\n\n increment(name: string, value: number = 1): void {\n this.counters.set(name, (this.counters.get(name) || 0) + value)\n }\n\n getCounter(name: string): number {\n return this.counters.get(name) || 0\n }\n\n setGauge(name: string, value: number): void {\n this.gauges.set(name, value)\n }\n\n getGauge(name: string): number {\n return this.gauges.get(name) || 0\n }\n\n record(name: string, value: number): void {\n const values = this.histograms.get(name) || []\n values.push(value)\n this.histograms.set(name, values)\n }\n\n getHistogram(name: string): HistogramStats {\n const values = this.histograms.get(name) || []\n if (values.length === 0) {\n return { avg: 0, min: 0, max: 0, count: 0 }\n }\n\n return {\n avg: values.reduce((a, b) => a + b, 0) / values.length,\n min: Math.min(...values),\n max: Math.max(...values),\n count: values.length\n }\n }\n\n reset(): void {\n this.counters.clear()\n this.gauges.clear()\n this.histograms.clear()\n }\n}","interface Session {\n id: string\n userId: string\n createdAt: number\n lastAccessedAt: number\n}\n\ninterface SessionManagerConfig {\n timeoutMs: number\n}\n\nexport class SessionManager {\n private config: SessionManagerConfig\n private sessions: Map<string, Session> = new Map()\n\n constructor(config: SessionManagerConfig) {\n this.config = config\n }\n\n create(userId: string): Session {\n const session: Session = {\n id: `s${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n userId,\n createdAt: Date.now(),\n lastAccessedAt: Date.now()\n }\n this.sessions.set(session.id, session)\n return session\n }\n\n get(id: string): Session | undefined {\n const session = this.sessions.get(id)\n if (session && Date.now() - session.lastAccessedAt > this.config.timeoutMs) {\n this.sessions.delete(id)\n return undefined\n }\n if (session) {\n session.lastAccessedAt = Date.now()\n }\n return session\n }\n\n destroy(id: string): void {\n this.sessions.delete(id)\n }\n\n getActive(): Session[] {\n const now = Date.now()\n return Array.from(this.sessions.values()).filter(\n s => now - s.lastAccessedAt <= this.config.timeoutMs\n )\n }\n}","import type { WebBackend, SearchOptions, SearchResult } from '../types.js'\n\nexport class DuckDuckGoBackend implements WebBackend {\n name = 'duckduckgo'\n\n isAvailable(): boolean {\n return true\n }\n\n async search(query: string, options?: SearchOptions): Promise<SearchResult[]> {\n const maxResults = options?.maxResults || 5\n\n const url = `https://html.duckduckgo.com/html/?q=${encodeURIComponent(query)}`\n const response = await fetch(url, {\n headers: {\n 'User-Agent': 'Mozilla/5.0 (compatible; make-laten/0.1.0)'\n }\n })\n\n const html = await response.text()\n return this.parseResults(html, maxResults)\n }\n\n private parseResults(html: string, maxResults: number): SearchResult[] {\n const results: SearchResult[] = []\n const resultRegex = /<a[^>]*class=\"result__a\"[^>]*href=\"([^\"]*)\"[^>]*>([\\s\\S]*?)<\\/a>/gi\n const snippetRegex = /<a[^>]*class=\"result__snippet\"[^>]*>([\\s\\S]*?)<\\/a>/gi\n let match: RegExpExecArray | null\n\n const urls: string[] = []\n const titles: string[] = []\n\n while ((match = resultRegex.exec(html)) !== null && urls.length < maxResults) {\n const rawUrl = match[1]\n const urlMatch = rawUrl.match(/uddg=([^&]+)/)\n const url = urlMatch ? decodeURIComponent(urlMatch[1]) : rawUrl\n const title = this.stripTags(match[2]).trim()\n\n if (url && title) {\n urls.push(url)\n titles.push(title)\n }\n }\n\n const snippets: string[] = []\n while ((match = snippetRegex.exec(html)) !== null && snippets.length < maxResults) {\n snippets.push(this.stripTags(match[1]).trim())\n }\n\n for (let i = 0; i < urls.length; i++) {\n results.push({\n title: titles[i],\n url: urls[i],\n snippet: snippets[i] || '',\n score: 1 - (i * 0.1)\n })\n }\n\n return results\n }\n\n private stripTags(html: string): string {\n return html.replace(/<[^>]+>/g, '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/'/g, \"'\").replace(/"/g, '\"')\n }\n}\n","import type { WebBackend, SearchOptions, SearchResult } from '../types.js'\nimport { DuckDuckGoBackend } from './duckduckgo.js'\n\nexport { DuckDuckGoBackend } from './duckduckgo.js'\n\nexport function selectBackend(preferred?: string): WebBackend {\n const backends: WebBackend[] = [\n new DuckDuckGoBackend()\n ]\n\n if (preferred) {\n const found = backends.find(b => b.name === preferred)\n if (found) return found\n }\n\n return backends.find(b => b.isAvailable()) || backends[0]\n}\n","import type { SemanticIR, SectionIR, CodeExample } from './types.js'\n\ninterface ParsedNode {\n tag: string\n text: string\n children: ParsedNode[]\n}\n\nfunction parseSimpleHTML(html: string): ParsedNode[] {\n const nodes: ParsedNode[] = []\n const tagRegex = /<(\\w+)([^>]*)>([\\s\\S]*?)<\\/\\1>/g\n let match: RegExpExecArray | null\n\n while ((match = tagRegex.exec(html)) !== null) {\n const tag = match[1]\n const content = match[3]\n\n if (['script', 'style', 'noscript'].includes(tag)) continue\n\n nodes.push({\n tag,\n text: stripTags(content).trim(),\n children: content.includes('<') ? parseSimpleHTML(content) : []\n })\n }\n\n return nodes\n}\n\nfunction stripTags(html: string): string {\n return html.replace(/<[^>]+>/g, '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '\"').replace(/'/g, \"'\")\n}\n\nfunction extractTitle(html: string): string {\n const titleMatch = html.match(/<title[^>]*>([\\s\\S]*?)<\\/title>/i)\n if (titleMatch) return stripTags(titleMatch[1]).trim()\n\n const h1Match = html.match(/<h1[^>]*>([\\s\\S]*?)<\\/h1>/i)\n if (h1Match) return stripTags(h1Match[1]).trim()\n\n return 'Untitled'\n}\n\nfunction extractSections(html: string): SectionIR[] {\n const sections: SectionIR[] = []\n const headingRegex = /<h([1-6])[^>]*>([\\s\\S]*?)<\\/h\\1>/gi\n let match: RegExpExecArray | null\n\n while ((match = headingRegex.exec(html)) !== null) {\n const level = parseInt(match[1])\n const heading = stripTags(match[2]).trim()\n\n const startPos = match.index + match[0].length\n const nextHeading = html.substring(startPos).match(/<h[1-6]/i)\n const endPos = nextHeading ? startPos + nextHeading.index! : html.length\n const content = stripTags(html.substring(startPos, endPos)).trim()\n\n if (!content) continue\n\n const importance = level <= 2 ? 'primary' : level <= 4 ? 'secondary' : 'tertiary'\n\n sections.push({ heading, level, content, importance })\n }\n\n return sections\n}\n\nfunction extractCodeExamples(html: string): CodeExample[] {\n const examples: CodeExample[] = []\n const codeRegex = /<(?:pre|code)[^>]*>[\\s\\S]*?<(?:code|\\/pre)[^>]*>/gi\n const blockRegex = /<pre[^>]*><code[^>]*class=\"[^\"]*language-(\\w+)[^\"]*\"[^>]*>([\\s\\S]*?)<\\/code><\\/pre>/gi\n let match: RegExpExecArray | null\n\n while ((match = blockRegex.exec(html)) !== null) {\n const language = match[1]\n const code = stripTags(match[2]).trim()\n\n if (code.length > 10) {\n examples.push({ language, code })\n }\n }\n\n const inlineRegex = /<code[^>]*class=\"[^\"]*language-(\\w+)[^\"]*\"[^>]*>([\\s\\S]*?)<\\/code>/gi\n while ((match = inlineRegex.exec(html)) !== null) {\n const language = match[1]\n const code = stripTags(match[2]).trim()\n\n if (code.length > 20 && !examples.some(e => e.code === code)) {\n examples.push({ language, code })\n }\n }\n\n return examples.slice(0, 10)\n}\n\nfunction extractKeyPoints(sections: SectionIR[]): string[] {\n const keyPoints: string[] = []\n\n for (const section of sections.filter(s => s.importance === 'primary')) {\n const sentences = section.content.split(/[.!?\\n]+/).filter(s => s.trim().length > 10)\n if (sentences.length > 0) {\n keyPoints.push(sentences[0].trim())\n }\n }\n\n return keyPoints.slice(0, 5)\n}\n\nfunction classifyPurpose(html: string, sections: SectionIR[]): SemanticIR['purpose'] {\n const text = (html + ' ' + sections.map(s => s.heading).join(' ')).toLowerCase()\n\n if (text.includes('api reference') || text.includes('endpoint') || text.includes('parameters')) return 'reference'\n if (text.includes('tutorial') || text.includes('step by step') || text.includes('getting started')) return 'tutorial'\n if (text.includes('blog') || text.includes('published') || text.includes('author')) return 'blog'\n if (text.includes('install') || text.includes('quickstart') || text.includes('overview')) return 'documentation'\n\n return 'documentation'\n}\n\nexport function extractSemantic(html: string, url: string): SemanticIR {\n const title = extractTitle(html)\n const sections = extractSections(html)\n const codeExamples = extractCodeExamples(html)\n const keyPoints = extractKeyPoints(sections)\n const purpose = classifyPurpose(html, sections)\n\n return {\n type: 'webpage',\n url,\n title,\n purpose,\n sections,\n keyPoints,\n codeExamples,\n metadata: {\n language: html.match(/lang=\"(\\w+)\"/)?.[1] || 'en',\n author: html.match(/<meta[^>]*name=\"author\"[^>]*content=\"([^\"]+)\"/i)?.[1],\n tags: html.match(/<meta[^>]*name=\"keywords\"[^>]*content=\"([^\"]+)\"/i)?.[1]?.split(',').map(t => t.trim())\n }\n }\n}\n","import type { SemanticIR, SectionIR } from './types.js'\n\nexport interface CompressOptions {\n maxTokens?: number\n includeCode?: boolean\n includeSections?: 'all' | 'primary' | 'none'\n}\n\nexport function compressWebContent(semantic: SemanticIR, options: CompressOptions = {}): string {\n const { maxTokens = 1000, includeCode = true, includeSections = 'all' } = options\n const lines: string[] = []\n\n lines.push(`# ${semantic.title}`)\n lines.push(`URL: ${semantic.url}`)\n lines.push(`Purpose: ${semantic.purpose}`)\n lines.push('')\n\n if (semantic.keyPoints.length > 0) {\n lines.push('## Key Points')\n for (const point of semantic.keyPoints) {\n lines.push(`- ${point}`)\n }\n lines.push('')\n }\n\n const filteredSections = filterSections(semantic.sections, includeSections)\n\n for (const section of filteredSections) {\n const content = truncateContent(section.content, 500)\n lines.push(`## ${section.heading}`)\n lines.push(content)\n lines.push('')\n }\n\n if (includeCode && semantic.codeExamples.length > 0) {\n const topExamples = semantic.codeExamples.slice(0, 3)\n lines.push('## Code Examples')\n for (const example of topExamples) {\n lines.push(`\\`\\`\\`${example.language}`)\n lines.push(truncateContent(example.code, 300))\n lines.push('```')\n lines.push('')\n }\n }\n\n let result = lines.join('\\n')\n\n const estimatedTokens = estimateTokens(result)\n if (estimatedTokens > maxTokens) {\n result = truncateByTokens(result, maxTokens)\n }\n\n return result\n}\n\nfunction filterSections(sections: SectionIR[], mode: 'all' | 'primary' | 'none'): SectionIR[] {\n if (mode === 'none') return []\n if (mode === 'primary') return sections.filter(s => s.importance === 'primary')\n return sections\n}\n\nfunction truncateContent(content: string, maxLength: number): string {\n if (content.length <= maxLength) return content\n return content.slice(0, maxLength) + '...'\n}\n\nfunction estimateTokens(text: string): number {\n return Math.ceil(text.length / 4)\n}\n\nfunction truncateByTokens(text: string, maxTokens: number): string {\n const maxChars = maxTokens * 4\n if (text.length <= maxChars) return text\n\n const truncated = text.slice(0, maxChars)\n const lastNewline = truncated.lastIndexOf('\\n')\n\n return truncated.slice(0, lastNewline > 0 ? lastNewline : maxChars) + '\\n\\n... (truncated)'\n}\n","import type { SearchOptions, SearchResult, FetchOptions, FetchResult } from './types.js'\nimport { selectBackend } from './backends/index.js'\nimport { extractSemantic } from './extractor.js'\nimport { compressWebContent } from './compressor.js'\n\nexport class WebRouter {\n private fetchCache: Map<string, FetchResult> = new Map()\n private searchCache: Map<string, SearchResult[]> = new Map()\n private cacheTtl: number\n\n constructor(options?: { cacheTtlMs?: number }) {\n this.cacheTtl = options?.cacheTtlMs || 60 * 60 * 1000\n }\n\n async search(query: string, options?: SearchOptions): Promise<SearchResult[]> {\n const cacheKey = `search:${query}:${JSON.stringify(options || {})}`\n\n const cached = this.searchCache.get(cacheKey)\n if (cached && this.isFresh(cacheKey)) {\n return cached\n }\n\n const backend = selectBackend(options?.backend)\n const results = await backend.search(query, options)\n\n this.searchCache.set(cacheKey, results)\n this.storeFreshness(cacheKey)\n\n return results\n }\n\n async fetch(url: string, options?: FetchOptions): Promise<FetchResult> {\n const cacheKey = `fetch:${url}:${options?.format || 'text'}`\n\n if (options?.cache !== false) {\n const cached = this.fetchCache.get(cacheKey)\n if (cached && this.isFresh(cacheKey)) {\n return cached\n }\n }\n\n const startTime = Date.now()\n const response = await fetch(url)\n const html = await response.text()\n const originalSize = html.length\n\n let content: string\n let semantic = undefined\n\n if (options?.extract !== false) {\n semantic = extractSemantic(html, url)\n content = compressWebContent(semantic, {\n includeCode: true,\n includeSections: options?.format === 'html' ? 'all' : 'primary'\n })\n } else {\n content = html\n }\n\n const compressedSize = content.length\n const result: FetchResult = {\n url,\n title: semantic?.title || extractSimpleTitle(html),\n content,\n semantic,\n metadata: {\n fetchTime: Date.now() - startTime,\n originalSize,\n compressedSize,\n savings: 1 - (compressedSize / originalSize)\n }\n }\n\n if (options?.cache !== false) {\n this.fetchCache.set(cacheKey, result)\n this.storeFreshness(cacheKey)\n }\n\n return result\n }\n\n async extract(url: string): Promise<FetchResult> {\n return this.fetch(url, { extract: true, compress: true })\n }\n\n async summarize(content: string, options?: { maxTokens?: number }): Promise<string> {\n const lines = content.split('\\n')\n const summaryLines: string[] = []\n let tokenCount = 0\n const maxTokens = options?.maxTokens || 200\n\n for (const line of lines) {\n const lineTokens = Math.ceil(line.length / 4)\n if (tokenCount + lineTokens > maxTokens) break\n\n if (line.startsWith('#') || line.startsWith('-') || line.startsWith('*')) {\n summaryLines.push(line)\n tokenCount += lineTokens\n }\n }\n\n if (summaryLines.length === 0 && lines.length > 0) {\n for (const line of lines.slice(0, 5)) {\n const lineTokens = Math.ceil(line.length / 4)\n if (tokenCount + lineTokens > maxTokens) break\n summaryLines.push(line)\n tokenCount += lineTokens\n }\n }\n\n return summaryLines.join('\\n')\n }\n\n clearCache(): void {\n this.fetchCache.clear()\n this.searchCache.clear()\n }\n\n getCacheStats(): { fetchSize: number; searchSize: number } {\n return {\n fetchSize: this.fetchCache.size,\n searchSize: this.searchCache.size\n }\n }\n\n private isFresh(key: string): boolean {\n const timestamp = this.freshness.get(key)\n if (!timestamp) return false\n return Date.now() - timestamp < this.cacheTtl\n }\n\n private storeFreshness(key: string): void {\n this.freshness.set(key, Date.now())\n }\n\n private freshness: Map<string, number> = new Map()\n}\n\nfunction extractSimpleTitle(html: string): string {\n const titleMatch = html.match(/<title[^>]*>([\\s\\S]*?)<\\/title>/i)\n return titleMatch ? titleMatch[1].replace(/<[^>]+>/g, '').trim() : 'Untitled'\n}\n","export const VERSION = '0.1.0'\n\nexport * from './graph/index.js'\nexport * from './compress/index.js'\nexport * from './cache/index.js'\nexport * from './route/index.js'\nexport * from './tool/index.js'\nexport * from './adapter/index.js'\nexport * from './learn/index.js'\nexport * from './correct/index.js'\nexport * from './middleware/index.js'\nexport * from './plugin/index.js'\nexport * from './security/index.js'\nexport * from './logging/index.js'\nexport * from './error/index.js'\nexport * from './metrics/index.js'\nexport * from './session/index.js'\nexport * from './web/index.js'\n"],"mappings":"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","names":["compressed","fs","path","path","fs","fs","path","path","fs","exec","promisify","fs","path","execAsync","promisify","exec","agents","fs","path","ctx","truncateByTokens"]}
|