@triedotdev/mcp 1.0.138 → 1.0.140

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.
Files changed (74) hide show
  1. package/README.md +184 -38
  2. package/dist/{autonomy-config-TZ6HF4FA.js → autonomy-config-ZCOSTMPD.js} +2 -2
  3. package/dist/{chunk-X3F5QDER.js → chunk-4O2KRHK4.js} +934 -132
  4. package/dist/chunk-4O2KRHK4.js.map +1 -0
  5. package/dist/{chunk-J5EMP4XW.js → chunk-5KJ4UJOY.js} +9 -4
  6. package/dist/chunk-5KJ4UJOY.js.map +1 -0
  7. package/dist/chunk-62POBLFC.js +1925 -0
  8. package/dist/chunk-62POBLFC.js.map +1 -0
  9. package/dist/{chunk-GFFUDJMK.js → chunk-75ADWWUF.js} +13 -13
  10. package/dist/chunk-75ADWWUF.js.map +1 -0
  11. package/dist/{chunk-D3AS5LY7.js → chunk-7OJ6JIPL.js} +39 -604
  12. package/dist/chunk-7OJ6JIPL.js.map +1 -0
  13. package/dist/{chunk-3RRXWX3V.js → chunk-AF2APASP.js} +38 -4
  14. package/dist/{chunk-3RRXWX3V.js.map → chunk-AF2APASP.js.map} +1 -1
  15. package/dist/{chunk-QSWUPSLK.js → chunk-FH335WL5.js} +9 -1
  16. package/dist/chunk-FH335WL5.js.map +1 -0
  17. package/dist/{chunk-Y32FM3MR.js → chunk-FPEMP54L.js} +21 -15
  18. package/dist/chunk-FPEMP54L.js.map +1 -0
  19. package/dist/{chunk-EDDT4ZIH.js → chunk-GXF6JOCN.js} +21 -323
  20. package/dist/chunk-GXF6JOCN.js.map +1 -0
  21. package/dist/chunk-LD7ZEFNY.js +132 -0
  22. package/dist/chunk-LD7ZEFNY.js.map +1 -0
  23. package/dist/chunk-NKHO34UZ.js +467 -0
  24. package/dist/chunk-NKHO34UZ.js.map +1 -0
  25. package/dist/{chunk-YOKQ25IW.js → chunk-OQ4A3RDY.js} +14 -14
  26. package/dist/{chunk-6LLH3TBZ.js → chunk-UOSTOLU7.js} +12 -12
  27. package/dist/{chunk-67GSG2ST.js → chunk-XTTZAQWJ.js} +18 -15
  28. package/dist/chunk-XTTZAQWJ.js.map +1 -0
  29. package/dist/{chunk-FOCXXIXY.js → chunk-YEIJW6X6.js} +2 -2
  30. package/dist/chunk-YOJGSRZK.js +216 -0
  31. package/dist/chunk-YOJGSRZK.js.map +1 -0
  32. package/dist/cli/main.js +573 -59
  33. package/dist/cli/main.js.map +1 -1
  34. package/dist/cli/yolo-daemon.js +15 -13
  35. package/dist/cli/yolo-daemon.js.map +1 -1
  36. package/dist/{client-JTU5TRLB.js → client-INNE2GGZ.js} +2 -2
  37. package/dist/{codebase-index-FNJ4GCBE.js → codebase-index-5SEOESWM.js} +3 -3
  38. package/dist/fast-analyzer-AYLZB5TW.js +216 -0
  39. package/dist/fast-analyzer-AYLZB5TW.js.map +1 -0
  40. package/dist/github-ingester-J2ZFYXVE.js +11 -0
  41. package/dist/{goal-manager-6BJQ36AH.js → goal-manager-ZBWKWEML.js} +3 -3
  42. package/dist/{goal-validator-GISXYANK.js → goal-validator-HNXXUCPW.js} +3 -3
  43. package/dist/{graph-X2FMRQLG.js → graph-J4OGTYCO.js} +2 -2
  44. package/dist/{hypothesis-K3KQJOXJ.js → hypothesis-JCUMZKTG.js} +3 -3
  45. package/dist/index.js +1090 -108
  46. package/dist/index.js.map +1 -1
  47. package/dist/{issue-store-BO5OWLJW.js → issue-store-LZWZIGM7.js} +2 -2
  48. package/dist/linear-ingester-JRDQAIAA.js +11 -0
  49. package/dist/linear-ingester-JRDQAIAA.js.map +1 -0
  50. package/dist/{trie-agent-XMSGMD7E.js → trie-agent-M6PHM6UD.js} +10 -10
  51. package/dist/trie-agent-M6PHM6UD.js.map +1 -0
  52. package/package.json +15 -8
  53. package/dist/chunk-67GSG2ST.js.map +0 -1
  54. package/dist/chunk-D3AS5LY7.js.map +0 -1
  55. package/dist/chunk-EDDT4ZIH.js.map +0 -1
  56. package/dist/chunk-GFFUDJMK.js.map +0 -1
  57. package/dist/chunk-J5EMP4XW.js.map +0 -1
  58. package/dist/chunk-QSWUPSLK.js.map +0 -1
  59. package/dist/chunk-X3F5QDER.js.map +0 -1
  60. package/dist/chunk-Y32FM3MR.js.map +0 -1
  61. package/dist/chunk-Z2P4WST6.js +0 -883
  62. package/dist/chunk-Z2P4WST6.js.map +0 -1
  63. /package/dist/{autonomy-config-TZ6HF4FA.js.map → autonomy-config-ZCOSTMPD.js.map} +0 -0
  64. /package/dist/{chunk-YOKQ25IW.js.map → chunk-OQ4A3RDY.js.map} +0 -0
  65. /package/dist/{chunk-6LLH3TBZ.js.map → chunk-UOSTOLU7.js.map} +0 -0
  66. /package/dist/{chunk-FOCXXIXY.js.map → chunk-YEIJW6X6.js.map} +0 -0
  67. /package/dist/{client-JTU5TRLB.js.map → client-INNE2GGZ.js.map} +0 -0
  68. /package/dist/{codebase-index-FNJ4GCBE.js.map → codebase-index-5SEOESWM.js.map} +0 -0
  69. /package/dist/{goal-manager-6BJQ36AH.js.map → github-ingester-J2ZFYXVE.js.map} +0 -0
  70. /package/dist/{goal-validator-GISXYANK.js.map → goal-manager-ZBWKWEML.js.map} +0 -0
  71. /package/dist/{graph-X2FMRQLG.js.map → goal-validator-HNXXUCPW.js.map} +0 -0
  72. /package/dist/{hypothesis-K3KQJOXJ.js.map → graph-J4OGTYCO.js.map} +0 -0
  73. /package/dist/{issue-store-BO5OWLJW.js.map → hypothesis-JCUMZKTG.js.map} +0 -0
  74. /package/dist/{trie-agent-XMSGMD7E.js.map → issue-store-LZWZIGM7.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config/loader.ts","../src/config/validation.ts"],"sourcesContent":["import { readFile, writeFile, mkdir } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { ConfigValidator, DEFAULT_CONFIG, type TrieConfig } from './validation.js';\nimport { getWorkingDirectory, getTrieDirectory } from '../utils/workspace.js';\nimport { isInteractiveMode } from '../utils/progress.js';\n\nexport async function loadConfig(): Promise<TrieConfig> {\n const validator = new ConfigValidator();\n const configPath = join(getTrieDirectory(getWorkingDirectory(undefined, true)), 'config.json');\n\n try {\n // Look for config in .trie/config.json\n if (!existsSync(configPath)) {\n return DEFAULT_CONFIG;\n }\n\n const configFile = await readFile(configPath, 'utf-8');\n const userConfig = JSON.parse(configFile) as Record<string, unknown>;\n\n // Deep merge with defaults\n const merged = mergeConfig(DEFAULT_CONFIG, userConfig);\n\n // Validate merged config\n const result = validator.validateConfig(merged);\n if (!result.success) {\n // Suppress console output in interactive mode (TUI handles display)\n if (!isInteractiveMode()) {\n console.error('Configuration validation failed:');\n for (const error of result.errors) {\n console.error(` - ${error}`);\n }\n }\n return DEFAULT_CONFIG;\n }\n\n // Environment validation warnings (skip in interactive mode)\n if (!isInteractiveMode()) {\n const envValidation = validator.validateEnvironment();\n for (const warning of envValidation.warnings) {\n console.warn(warning);\n }\n for (const error of envValidation.errors) {\n console.error(error);\n }\n }\n\n return result.data;\n } catch (error) {\n // If no config found, return defaults (suppress in interactive mode)\n if (!isInteractiveMode()) {\n console.error('Failed to load config, using defaults:', error);\n }\n return DEFAULT_CONFIG;\n }\n}\n\nexport async function saveConfig(config: TrieConfig): Promise<void> {\n const configPath = join(getTrieDirectory(getWorkingDirectory(undefined, true)), 'config.json');\n const dir = dirname(configPath);\n\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n\n // Preserve autonomy and other top-level keys (e.g. cursorApiKey) when saving TrieConfig\n let existing: Record<string, unknown> = {};\n if (existsSync(configPath)) {\n try {\n const content = await readFile(configPath, 'utf-8');\n existing = JSON.parse(content) as Record<string, unknown>;\n } catch {\n // Ignore parse errors, overwrite\n }\n }\n\n const toWrite = {\n ...existing,\n ...config,\n // Preserve autonomy block (used by Cursor key, etc.) - TrieConfig doesn't include it\n autonomy: existing.autonomy ?? undefined,\n };\n\n await writeFile(configPath, JSON.stringify(toWrite, null, 2), 'utf-8');\n}\n\nfunction mergeConfig<T extends Record<string, unknown>>(defaults: T, user: Record<string, unknown>): T {\n if (typeof user !== 'object' || user === null || Array.isArray(user)) {\n return { ...defaults };\n }\n\n const result = { ...defaults } as T;\n\n for (const [key, value] of Object.entries(user)) {\n const defaultValue = defaults[key as keyof T];\n if (typeof value === 'object' && value !== null && !Array.isArray(value) && typeof defaultValue === 'object' && defaultValue !== null) {\n result[key as keyof T] = mergeConfig(defaultValue as Record<string, unknown>, value as Record<string, unknown>) as T[keyof T];\n } else {\n result[key as keyof T] = value as T[keyof T];\n }\n }\n\n return result;\n}","import { z } from 'zod';\nimport { existsSync, readFileSync, mkdirSync } from 'fs';\nimport { resolve, join } from 'path';\nimport { getWorkingDirectory, getTrieDirectory } from '../utils/workspace.js';\n\n// API key validation patterns (strict for Anthropic/OpenAI; lenient for integrations)\nconst API_KEY_PATTERNS = {\n anthropic: /^sk-ant-api\\d{2}-[\\w-]{95}$/,\n openai: /^sk-[\\w]{48}$/,\n github: /^ghp_[\\w]{36}$/,\n vercel: /^[\\w]{24}$/,\n linear: /^lin_api_[\\w]{40,60}$/,\n} as const;\n\n// Configuration schemas\nconst ApiKeysSchema = z.object({\n anthropic: z.string().regex(API_KEY_PATTERNS.anthropic, 'Invalid Anthropic API key format').optional(),\n openai: z.string().regex(API_KEY_PATTERNS.openai, 'Invalid OpenAI API key format').optional(),\n // Lenient: accept GitHub classic (ghp_*), fine-grained (github_pat_*), or any string 10+ chars\n github: z.string().min(10).optional(),\n vercel: z.string().regex(API_KEY_PATTERNS.vercel, 'Invalid Vercel token format').optional(),\n linear: z.string().optional(),\n cursor: z.string().optional(),\n});\n\nconst AgentConfigSchema = z.object({\n enabled: z.array(z.string()).optional().default([]),\n disabled: z.array(z.string()).optional().default([]),\n parallel: z.boolean().optional().default(true),\n maxConcurrency: z.number().int().min(1).max(20).optional().default(4),\n timeout: z.number().int().min(1000).max(300000).optional().default(120000), // 2 minutes\n cache: z.boolean().optional().default(true),\n});\n\nconst ComplianceSchema = z.object({\n standards: z.array(z.enum(['SOC2', 'GDPR', 'HIPAA', 'CCPA', 'PCI-DSS'])).optional().default(['SOC2']),\n enforceCompliance: z.boolean().optional().default(false),\n reportFormat: z.enum(['json', 'sarif', 'csv', 'html']).optional().default('json'),\n});\n\nconst OutputSchema = z.object({\n format: z.enum(['console', 'json', 'sarif', 'junit']).optional().default('console'),\n level: z.enum(['critical', 'serious', 'moderate', 'low', 'all']).optional().default('all'),\n interactive: z.boolean().optional().default(false),\n streaming: z.boolean().optional().default(true),\n colors: z.boolean().optional().default(true),\n});\n\nconst PathsSchema = z.object({\n include: z.array(z.string()).optional().default([]),\n exclude: z.array(z.string()).optional().default(['node_modules', 'dist', 'build', '.git']),\n configDir: z.string().optional().default('.trie'),\n outputDir: z.string().optional().default('trie-reports'),\n});\n\nconst IntegrationsSchema = z.object({\n github: z.object({\n enabled: z.boolean().optional().default(false),\n token: z.string().optional(),\n webhook: z.string().url().optional(),\n }).optional(),\n slack: z.object({\n enabled: z.boolean().optional().default(false),\n webhook: z.string().url().optional(),\n channel: z.string().optional(),\n }).optional(),\n jira: z.object({\n enabled: z.boolean().optional().default(false),\n url: z.string().url().optional(),\n token: z.string().optional(),\n project: z.string().optional(),\n }).optional(),\n});\n\n// User identity for attribution tracking\nconst UserSchema = z.object({\n name: z.string().min(1).optional(),\n email: z.string().email().optional(),\n role: z.enum([\n 'developer',\n 'designer', \n 'qa',\n 'devops',\n 'security',\n 'architect',\n 'manager',\n 'contributor'\n ]).optional().default('developer'),\n github: z.string().optional(), // GitHub username\n url: z.string().url().optional(), // Personal/portfolio URL\n});\n\nexport const TrieConfigSchema = z.object({\n version: z.string().optional().default('1.0.0'),\n apiKeys: ApiKeysSchema.optional(),\n agents: AgentConfigSchema.optional(),\n compliance: ComplianceSchema.optional(),\n output: OutputSchema.optional(),\n paths: PathsSchema.optional(),\n integrations: IntegrationsSchema.optional(),\n user: UserSchema.optional(), // User identity for attribution\n});\n\nexport type TrieConfig = z.infer<typeof TrieConfigSchema>;\nexport type ApiKeys = z.infer<typeof ApiKeysSchema>;\nexport type AgentConfig = z.infer<typeof AgentConfigSchema>;\n\n/**\n * Configuration validator with detailed error reporting\n */\nexport class ConfigValidator {\n /**\n * Validate configuration object\n */\n validateConfig(config: unknown): { success: true; data: TrieConfig } | { success: false; errors: string[] } {\n try {\n const validated = TrieConfigSchema.parse(config);\n\n // Additional business logic validation\n const businessErrors = this.validateBusinessLogic(validated);\n if (businessErrors.length > 0) {\n return { success: false, errors: businessErrors };\n }\n\n return { success: true, data: validated };\n } catch (error) {\n if (error instanceof z.ZodError) {\n const errors = error.errors.map(err =>\n `${err.path.join('.')}: ${err.message}`\n );\n return { success: false, errors };\n }\n\n return {\n success: false,\n errors: [`Configuration validation failed: ${error instanceof Error ? error.message : 'Unknown error'}`]\n };\n }\n }\n\n /**\n * Validate environment variables for API keys\n */\n validateEnvironment(): { valid: boolean; warnings: string[]; errors: string[] } {\n const warnings: string[] = [];\n const errors: string[] = [];\n\n // Check for potentially exposed secrets\n const exposedPatterns = [\n 'NEXT_PUBLIC_ANTHROPIC',\n 'REACT_APP_ANTHROPIC',\n 'VITE_ANTHROPIC',\n 'PUBLIC_ANTHROPIC'\n ];\n\n for (const pattern of exposedPatterns) {\n const envVars = Object.keys(process.env).filter(key => key.includes(pattern));\n for (const envVar of envVars) {\n errors.push(`[!] Security risk: API key in client-side environment variable: ${envVar}`);\n }\n }\n\n // Check API key format if present (check env var first, then config)\n let anthropicKey = process.env.ANTHROPIC_API_KEY;\n \n // Also check config file if available (for validation purposes)\n // Note: This is a read-only check for validation, actual usage goes through isAIAvailable()\n if (!anthropicKey) {\n try {\n const configPath = join(getTrieDirectory(getWorkingDirectory(undefined, true)), 'config.json');\n if (existsSync(configPath)) {\n const config = JSON.parse(readFileSync(configPath, 'utf-8'));\n anthropicKey = config.apiKeys?.anthropic;\n }\n } catch {\n // Config file check failed, continue with env var only\n }\n }\n \n if (anthropicKey && !API_KEY_PATTERNS.anthropic.test(anthropicKey)) {\n errors.push('ANTHROPIC_API_KEY does not match expected format');\n }\n\n // Warnings for missing optional keys\n if (!anthropicKey) {\n warnings.push('ANTHROPIC_API_KEY not set - AI features will be disabled. Set in environment, .trie/config.json, or .env file');\n }\n\n if (!process.env.GITHUB_TOKEN && process.env.CI) {\n warnings.push('GITHUB_TOKEN not set - GitHub integration disabled');\n }\n\n return {\n valid: errors.length === 0,\n warnings,\n errors\n };\n }\n\n /**\n * Validate file paths in configuration\n */\n validatePaths(paths: z.infer<typeof PathsSchema>): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (paths?.include) {\n for (const path of paths.include) {\n const resolvedPath = resolve(path);\n if (!existsSync(resolvedPath)) {\n errors.push(`Include path does not exist: ${path}`);\n }\n }\n }\n\n if (paths?.configDir) {\n const configPath = resolve(paths.configDir);\n if (!existsSync(configPath)) {\n try {\n // Try to create the directory\n mkdirSync(configPath, { recursive: true });\n } catch {\n errors.push(`Cannot create config directory: ${paths.configDir}`);\n }\n }\n }\n\n return {\n valid: errors.length === 0,\n errors\n };\n }\n\n /**\n * Validate integration configurations\n */\n validateIntegrations(integrations: z.infer<typeof IntegrationsSchema>): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n // GitHub integration\n if (integrations?.github?.enabled) {\n if (!integrations.github.token) {\n errors.push('GitHub integration enabled but no token provided');\n }\n }\n\n // Slack integration\n if (integrations?.slack?.enabled) {\n if (!integrations.slack.webhook) {\n errors.push('Slack integration enabled but no webhook URL provided');\n }\n }\n\n // JIRA integration\n if (integrations?.jira?.enabled) {\n if (!integrations.jira.url || !integrations.jira.token || !integrations.jira.project) {\n errors.push('JIRA integration enabled but missing required fields (url, token, project)');\n }\n }\n\n return {\n valid: errors.length === 0,\n errors\n };\n }\n\n /**\n * Business logic validation\n */\n private validateBusinessLogic(config: TrieConfig): string[] {\n const errors: string[] = [];\n\n // Agent configuration validation\n if (config.agents?.enabled && config.agents?.disabled) {\n const overlap = config.agents.enabled.filter(agent =>\n config.agents?.disabled?.includes(agent)\n );\n if (overlap.length > 0) {\n errors.push(`Agents cannot be both enabled and disabled: ${overlap.join(', ')}`);\n }\n }\n\n // Concurrency validation\n if (config.agents?.maxConcurrency && config.agents.maxConcurrency > 10) {\n errors.push('maxConcurrency should not exceed 10 for optimal performance');\n }\n\n // Compliance standards validation\n if (config.compliance?.standards) {\n const invalidStandards = config.compliance.standards.filter(standard =>\n !['SOC2', 'GDPR', 'HIPAA', 'CCPA', 'PCI-DSS'].includes(standard)\n );\n if (invalidStandards.length > 0) {\n errors.push(`Invalid compliance standards: ${invalidStandards.join(', ')}`);\n }\n }\n\n // Path validation\n if (config.paths) {\n const pathValidation = this.validatePaths(config.paths);\n errors.push(...pathValidation.errors);\n }\n\n // Integration validation\n if (config.integrations) {\n const integrationValidation = this.validateIntegrations(config.integrations);\n errors.push(...integrationValidation.errors);\n }\n\n return errors;\n }\n\n /**\n * Generate configuration template\n */\n generateTemplate(): TrieConfig {\n return {\n version: '1.0.0',\n agents: {\n enabled: ['security', 'bugs', 'types'],\n disabled: [],\n parallel: true,\n maxConcurrency: 4,\n timeout: 120000,\n cache: true\n },\n compliance: {\n standards: ['SOC2'],\n enforceCompliance: false,\n reportFormat: 'json'\n },\n output: {\n format: 'console',\n level: 'all',\n interactive: false,\n streaming: true,\n colors: true\n },\n paths: {\n include: [],\n exclude: ['node_modules', 'dist', 'build', '.git'],\n configDir: '.trie',\n outputDir: 'trie-reports'\n }\n };\n }\n\n /**\n * Validate and provide suggestions for improvement\n */\n analyze(config: TrieConfig): {\n score: number;\n suggestions: string[];\n securityIssues: string[];\n optimizations: string[];\n } {\n const suggestions: string[] = [];\n const securityIssues: string[] = [];\n const optimizations: string[] = [];\n let score = 100;\n\n // Check for AI enhancement (check config, env var, and .env files)\n let hasApiKey = Boolean(config.apiKeys?.anthropic || process.env.ANTHROPIC_API_KEY);\n if (!hasApiKey) {\n // Check .env files as well\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const envFiles = ['.env', '.env.local', '.env.production'];\n for (const envFile of envFiles) {\n const envPath = join(workDir, envFile);\n if (existsSync(envPath)) {\n const envContent = readFileSync(envPath, 'utf-8');\n if (envContent.includes('ANTHROPIC_API_KEY=')) {\n hasApiKey = true;\n break;\n }\n }\n }\n } catch {\n // .env check failed, continue\n }\n }\n \n if (!hasApiKey) {\n suggestions.push('Add ANTHROPIC_API_KEY to enable AI-powered analysis for better issue detection. Set in environment, .trie/config.json, or .env file');\n score -= 10;\n }\n\n // Check parallel execution\n if (config.agents?.parallel === false) {\n optimizations.push('Enable parallel agent execution for 3-5x faster scans');\n score -= 15;\n }\n\n // Check caching\n if (config.agents?.cache === false) {\n optimizations.push('Enable result caching to speed up repeated scans');\n score -= 10;\n }\n\n // Check compliance standards\n if (!config.compliance?.standards || config.compliance.standards.length === 0) {\n suggestions.push('Configure compliance standards (SOC2, GDPR, etc.) for regulatory requirements');\n score -= 5;\n }\n\n // Check integrations for team collaboration\n const hasIntegrations = config.integrations && (\n config.integrations.github?.enabled ||\n config.integrations.slack?.enabled ||\n config.integrations.jira?.enabled\n );\n if (!hasIntegrations) {\n suggestions.push('Consider enabling GitHub/Slack/JIRA integrations for better team collaboration');\n score -= 5;\n }\n\n // Security checks\n if (config.apiKeys) {\n securityIssues.push('API keys in config file - consider using environment variables instead');\n score -= 20;\n }\n\n return {\n score: Math.max(0, score),\n suggestions,\n securityIssues,\n optimizations\n };\n }\n}\n\n/**\n * Default configuration with security best practices\n */\nexport const DEFAULT_CONFIG: TrieConfig = {\n version: '1.0.0',\n agents: {\n enabled: [],\n disabled: [],\n parallel: true,\n maxConcurrency: 4,\n timeout: 120000,\n cache: true,\n },\n compliance: {\n standards: ['SOC2'],\n enforceCompliance: false,\n reportFormat: 'json',\n },\n output: {\n format: 'console',\n level: 'all',\n interactive: false,\n streaming: true,\n colors: true,\n },\n paths: {\n include: [],\n exclude: ['node_modules', 'dist', 'build', '.git', '.next', '.nuxt', 'coverage'],\n configDir: '.trie',\n outputDir: 'trie-reports',\n },\n};\n\n/**\n * Validate startup configuration\n */\nexport function validateStartupConfig(): {\n valid: boolean;\n config: TrieConfig;\n warnings: string[];\n errors: string[];\n} {\n const validator = new ConfigValidator();\n\n // Validate environment\n const envValidation = validator.validateEnvironment();\n\n // Use default config as base\n const configResult = validator.validateConfig(DEFAULT_CONFIG);\n\n if (!configResult.success) {\n return {\n valid: false,\n config: DEFAULT_CONFIG,\n warnings: envValidation.warnings,\n errors: [...envValidation.errors, ...configResult.errors]\n };\n }\n\n return {\n valid: envValidation.valid,\n config: configResult.data,\n warnings: envValidation.warnings,\n errors: envValidation.errors\n };\n}"],"mappings":"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","names":["existsSync","join","join","existsSync"]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  getGoalManager
3
- } from "./chunk-FOCXXIXY.js";
3
+ } from "./chunk-YEIJW6X6.js";
4
4
  import {
5
5
  getHypothesisEngine
6
- } from "./chunk-67GSG2ST.js";
6
+ } from "./chunk-XTTZAQWJ.js";
7
7
  import {
8
8
  getInsightStore
9
9
  } from "./chunk-3MUCUZ46.js";
@@ -11,27 +11,27 @@ import {
11
11
  GotchaPredictor,
12
12
  findCrossProjectPatterns,
13
13
  recordToGlobalMemory
14
- } from "./chunk-6LLH3TBZ.js";
14
+ } from "./chunk-UOSTOLU7.js";
15
+ import {
16
+ ContextGraph
17
+ } from "./chunk-FH335WL5.js";
15
18
  import {
16
19
  isAIAvailable,
17
20
  runAIAnalysis
18
- } from "./chunk-Y32FM3MR.js";
21
+ } from "./chunk-FPEMP54L.js";
19
22
  import {
20
23
  getProjectState
21
24
  } from "./chunk-LT6VUZG2.js";
22
- import {
23
- getStorage
24
- } from "./chunk-FG467PDD.js";
25
- import {
26
- ContextGraph
27
- } from "./chunk-QSWUPSLK.js";
28
25
  import {
29
26
  autoResolveIssues,
30
27
  getHistoricalInsights,
31
28
  getIssueHash,
32
29
  searchIssues,
33
30
  storeIssues
34
- } from "./chunk-Z2P4WST6.js";
31
+ } from "./chunk-62POBLFC.js";
32
+ import {
33
+ getStorage
34
+ } from "./chunk-FG467PDD.js";
35
35
 
36
36
  // src/agent/trie-agent.ts
37
37
  import { basename as basename2 } from "path";
@@ -1677,7 +1677,7 @@ var TrieAgent = class {
1677
1677
  try {
1678
1678
  const { IncidentIndex } = await import("./incident-index-BWW2UEY7.js");
1679
1679
  const { TriePatternDiscovery } = await import("./pattern-discovery-F7LU5K6E.js");
1680
- const { ContextGraph: ContextGraph2 } = await import("./graph-X2FMRQLG.js");
1680
+ const { ContextGraph: ContextGraph2 } = await import("./graph-J4OGTYCO.js");
1681
1681
  const graph = new ContextGraph2(this.projectPath);
1682
1682
  const incidentIndex = await IncidentIndex.build(graph, this.projectPath);
1683
1683
  const discovery = new TriePatternDiscovery(graph, incidentIndex);
@@ -1934,7 +1934,7 @@ var TrieAgent = class {
1934
1934
  await this.projectState.recordScan();
1935
1935
  try {
1936
1936
  const riskLevel = issues.filter((i) => i.severity === "critical").length > 0 ? "critical" : issues.filter((i) => i.severity === "serious").length >= 3 ? "high" : issues.length > 10 ? "medium" : "low";
1937
- const { calculateAdaptiveScanFrequency } = await import("./goal-manager-6BJQ36AH.js");
1937
+ const { calculateAdaptiveScanFrequency } = await import("./goal-manager-ZBWKWEML.js");
1938
1938
  const result = await calculateAdaptiveScanFrequency(riskLevel);
1939
1939
  await this.projectState.setScanFrequency(result.frequencyMs);
1940
1940
  } catch {
@@ -2163,4 +2163,4 @@ export {
2163
2163
  TrieAgent,
2164
2164
  getTrieAgent
2165
2165
  };
2166
- //# sourceMappingURL=chunk-YOKQ25IW.js.map
2166
+ //# sourceMappingURL=chunk-OQ4A3RDY.js.map
@@ -1,18 +1,9 @@
1
1
  import {
2
2
  tryGetClient
3
- } from "./chunk-Y32FM3MR.js";
4
- import {
5
- scanForVulnerabilities
6
- } from "./chunk-F4NJ4CBP.js";
7
- import {
8
- scanForVibeCodeIssues
9
- } from "./chunk-IXO4G4D3.js";
10
- import {
11
- getStorage
12
- } from "./chunk-FG467PDD.js";
3
+ } from "./chunk-FPEMP54L.js";
13
4
  import {
14
5
  searchIssues
15
- } from "./chunk-Z2P4WST6.js";
6
+ } from "./chunk-62POBLFC.js";
16
7
  import {
17
8
  BackupManager,
18
9
  GlobalPatternsIndexSchema,
@@ -21,6 +12,15 @@ import {
21
12
  import {
22
13
  atomicWriteJSON
23
14
  } from "./chunk-43X6JBEM.js";
15
+ import {
16
+ scanForVulnerabilities
17
+ } from "./chunk-F4NJ4CBP.js";
18
+ import {
19
+ scanForVibeCodeIssues
20
+ } from "./chunk-IXO4G4D3.js";
21
+ import {
22
+ getStorage
23
+ } from "./chunk-FG467PDD.js";
24
24
 
25
25
  // src/memory/global-memory.ts
26
26
  import { mkdir, writeFile, readFile, readdir } from "fs/promises";
@@ -466,4 +466,4 @@ export {
466
466
  searchGlobalPatterns,
467
467
  GotchaPredictor
468
468
  };
469
- //# sourceMappingURL=chunk-6LLH3TBZ.js.map
469
+ //# sourceMappingURL=chunk-UOSTOLU7.js.map
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-LT6VUZG2.js";
7
7
  import {
8
8
  searchIssues
9
- } from "./chunk-Z2P4WST6.js";
9
+ } from "./chunk-62POBLFC.js";
10
10
 
11
11
  // src/agent/hypothesis.ts
12
12
  import { dirname } from "path";
@@ -122,11 +122,10 @@ var HypothesisEngine = class {
122
122
  await this.projectState.addEvidence(hypothesis.id, e);
123
123
  }
124
124
  generated.push(hypothesis);
125
- if (generated.length >= 2) break;
125
+ if (generated.length >= 4) break;
126
126
  }
127
127
  }
128
128
  } catch (error) {
129
- console.error("Failed to auto-generate hypotheses:", error);
130
129
  }
131
130
  return generated;
132
131
  }
@@ -135,7 +134,7 @@ var HypothesisEngine = class {
135
134
  * This enables fully agentic hypothesis creation based on actual codebase observations
136
135
  */
137
136
  async generateHypothesesWithAI(context) {
138
- const { isAIAvailable, runAIAnalysis } = await import("./client-JTU5TRLB.js");
137
+ const { isAIAvailable, runAIAnalysis } = await import("./client-INNE2GGZ.js");
139
138
  if (!isAIAvailable()) {
140
139
  return [];
141
140
  }
@@ -197,7 +196,8 @@ Return empty array [] if no novel hypotheses can be generated from the data.`;
197
196
  const result = await runAIAnalysis({
198
197
  systemPrompt: "You are an expert code quality analyst who identifies patterns and generates testable hypotheses.",
199
198
  userPrompt: prompt,
200
- maxTokens: 1024,
199
+ maxTokens: 2048,
200
+ // Increased to prevent truncation of hypothesis generation
201
201
  temperature: 0.7
202
202
  // Higher temperature for creative hypothesis generation
203
203
  });
@@ -212,9 +212,9 @@ Return empty array [] if no novel hypotheses can be generated from the data.`;
212
212
  } catch {
213
213
  return generated;
214
214
  }
215
- for (const aiHypo of aiHypotheses.slice(0, 3)) {
215
+ for (const aiHypo of aiHypotheses.slice(0, 5)) {
216
216
  const isDuplicate = existingStatements.some(
217
- (existing2) => existing2.toLowerCase().includes(aiHypo.statement.toLowerCase().slice(0, 30))
217
+ (existing2) => existing2.toLowerCase() === aiHypo.statement.toLowerCase() || existing2.toLowerCase().includes(aiHypo.statement.toLowerCase()) || aiHypo.statement.toLowerCase().includes(existing2.toLowerCase())
218
218
  );
219
219
  if (isDuplicate) continue;
220
220
  const hypothesis = await this.createHypothesis(aiHypo.statement, {
@@ -231,7 +231,6 @@ Return empty array [] if no novel hypotheses can be generated from the data.`;
231
231
  generated.push(hypothesis);
232
232
  }
233
233
  } catch (error) {
234
- console.error("Failed to generate hypotheses with AI:", error);
235
234
  }
236
235
  return generated;
237
236
  }
@@ -261,8 +260,8 @@ Return empty array [] if no novel hypotheses can be generated from the data.`;
261
260
  }
262
261
  const dayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
263
262
  const dayDistribution = Object.entries(dayOfWeekCounts).sort(([a], [b]) => Number(a) - Number(b)).map(([day, count]) => `${dayNames[Number(day)]}: ${count}`).join(", ");
264
- const topDirs = Object.entries(fileCounts).sort(([, a], [, b]) => b - a).slice(0, 5).map(([dir, count]) => `${dir}: ${count}`).join(", ");
265
- const topAgents = Object.entries(agentCounts).sort(([, a], [, b]) => b - a).slice(0, 5).map(([agent, count]) => `${agent}: ${count}`).join(", ");
263
+ const topDirs = Object.entries(fileCounts).sort(([, a], [, b]) => b - a).slice(0, 8).map(([dir, count]) => `${dir}: ${count}`).join(", ");
264
+ const topAgents = Object.entries(agentCounts).sort(([, a], [, b]) => b - a).slice(0, 8).map(([agent, count]) => `${agent}: ${count}`).join(", ");
266
265
  return `Total Issues: ${totalIssues}
267
266
  Severities: ${Object.entries(severityCounts).map(([s, c]) => `${s}=${c}`).join(", ")}
268
267
  Top Agents: ${topAgents}
@@ -419,19 +418,20 @@ Day Distribution: ${dayDistribution}`;
419
418
  }
420
419
  await this.projectState.updateHypothesisAccuracy();
421
420
  } catch (error) {
422
- console.error("Failed to update hypothesis confidence:", error);
423
421
  }
424
422
  return analyses;
425
423
  }
426
424
  /**
427
425
  * Analyze a single hypothesis
428
426
  */
429
- async analyzeHypothesis(hypothesis) {
427
+ async analyzeHypothesis(hypothesis, signal) {
428
+ if (signal?.aborted) throw new DOMException("Scan cancelled", "AbortError");
430
429
  const issues = await searchIssues("", {
431
430
  workDir: this.projectPath,
432
431
  limit: 100,
433
432
  includeResolved: false
434
433
  });
434
+ if (signal?.aborted) throw new DOMException("Scan cancelled", "AbortError");
435
435
  const template = HYPOTHESIS_TEMPLATES.find(
436
436
  (t) => t.statement.toLowerCase() === hypothesis.statement.toLowerCase()
437
437
  );
@@ -451,6 +451,7 @@ Day Distribution: ${dayDistribution}`;
451
451
  }
452
452
  }
453
453
  let statusChange;
454
+ if (signal?.aborted) throw new DOMException("Scan cancelled", "AbortError");
454
455
  if (newConfidence >= 0.8 && hypothesis.evidence.length >= 3) {
455
456
  statusChange = "validated";
456
457
  await this.projectState.updateHypothesis(hypothesis.id, {
@@ -699,15 +700,17 @@ function getHypothesisEngine(projectPath) {
699
700
  function clearHypothesisEngines() {
700
701
  hypothesisEngines.clear();
701
702
  }
702
- async function gatherEvidenceForHypothesis(hypothesisId, projectPath) {
703
+ async function gatherEvidenceForHypothesis(hypothesisId, projectPath, signal) {
704
+ if (signal?.aborted) throw new DOMException("Scan cancelled", "AbortError");
703
705
  const engine = getHypothesisEngine(projectPath);
704
706
  const projectState = getProjectState(projectPath);
705
707
  await projectState.load();
708
+ if (signal?.aborted) throw new DOMException("Scan cancelled", "AbortError");
706
709
  const hypothesis = projectState.getAllHypotheses().find((h) => h.id === hypothesisId);
707
710
  if (!hypothesis) {
708
711
  throw new Error(`Hypothesis ${hypothesisId} not found`);
709
712
  }
710
- const analysis = await engine.analyzeHypothesis(hypothesis);
713
+ const analysis = await engine.analyzeHypothesis(hypothesis, signal);
711
714
  return analysis.recentEvidence.map((e) => ({
712
715
  supports: e.type === "supporting",
713
716
  description: e.description,
@@ -721,4 +724,4 @@ export {
721
724
  clearHypothesisEngines,
722
725
  gatherEvidenceForHypothesis
723
726
  };
724
- //# sourceMappingURL=chunk-67GSG2ST.js.map
727
+ //# sourceMappingURL=chunk-XTTZAQWJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/agent/hypothesis.ts"],"sourcesContent":["/**\n * Hypothesis System - Self-improving hypothesis generation and validation\n * \n * Features:\n * - Generate hypotheses from patterns\n * - Track evidence for/against hypotheses\n * - Auto-validate/invalidate based on evidence\n * - Adjust confidence over time\n * - Learn from hypothesis outcomes\n */\n\nimport type { Hypothesis } from './project-state.js';\nimport { getProjectState } from './project-state.js';\nimport { getInsightStore, type Insight } from './insight-store.js';\nimport { searchIssues } from '../memory/issue-store.js';\nimport { dirname } from 'path';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Hypothesis template for auto-generation\n */\nexport interface HypothesisTemplate {\n category: 'timing' | 'pattern' | 'team' | 'code' | 'general';\n statement: string;\n testCriteria: string;\n minConfidence: number;\n dataRequired: string[];\n}\n\n/**\n * Evidence for a hypothesis\n */\nexport interface HypothesisEvidence {\n type: 'supporting' | 'contradicting';\n description: string;\n weight: number; // 0-1\n timestamp: string;\n}\n\n/**\n * Hypothesis analysis result\n */\nexport interface HypothesisAnalysis {\n hypothesis: Hypothesis;\n recentEvidence: HypothesisEvidence[];\n confidenceChange: number;\n statusChange?: 'validated' | 'invalidated';\n actionRequired: boolean;\n}\n\n// ============================================================================\n// Hypothesis Templates\n// ============================================================================\n\nconst HYPOTHESIS_TEMPLATES: HypothesisTemplate[] = [\n {\n category: 'timing',\n statement: 'Issues spike after weekend deployments',\n testCriteria: 'Compare Monday issue counts to other days',\n minConfidence: 0.3,\n dataRequired: ['issue_timestamps', 'deployment_data'],\n },\n {\n category: 'timing',\n statement: 'Code quality declines on Fridays',\n testCriteria: 'Compare Friday issue introduction rate to weekly average',\n minConfidence: 0.3,\n dataRequired: ['issue_timestamps'],\n },\n {\n category: 'pattern',\n statement: 'Auth-related code has the highest incident rate',\n testCriteria: 'Compare auth/ issue count to other directories',\n minConfidence: 0.4,\n dataRequired: ['issue_files'],\n },\n {\n category: 'pattern',\n statement: 'Security issues cluster in specific directories',\n testCriteria: 'Check if security issues are concentrated (>50% in <3 dirs)',\n minConfidence: 0.4,\n dataRequired: ['issue_files', 'issue_agents'],\n },\n {\n category: 'code',\n statement: 'Files with multiple authors have more issues',\n testCriteria: 'Correlate file author count with issue count',\n minConfidence: 0.4,\n dataRequired: ['issue_files', 'git_blame'],\n },\n {\n category: 'code',\n statement: 'Recently modified files are more likely to have issues',\n testCriteria: 'Compare issue rate for recent vs old files',\n minConfidence: 0.3,\n dataRequired: ['issue_timestamps', 'file_modification_times'],\n },\n {\n category: 'pattern',\n statement: 'Critical issues often come in clusters',\n testCriteria: 'Check temporal clustering of critical issues',\n minConfidence: 0.3,\n dataRequired: ['issue_timestamps', 'issue_severities'],\n },\n];\n\n// ============================================================================\n// HypothesisEngine Class\n// ============================================================================\n\n/**\n * Engine for generating and validating hypotheses\n */\nexport class HypothesisEngine {\n private projectPath: string;\n private projectState;\n private insightStore;\n \n constructor(projectPath: string) {\n this.projectPath = projectPath;\n this.projectState = getProjectState(projectPath);\n this.insightStore = getInsightStore(projectPath);\n }\n \n /**\n * Create a new hypothesis\n */\n async createHypothesis(statement: string, options?: {\n category?: Hypothesis['category'];\n testCriteria?: string;\n initialConfidence?: number;\n autoGenerated?: boolean;\n }): Promise<Hypothesis> {\n const hypothesis: Hypothesis = {\n id: `hyp-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n statement,\n confidence: options?.initialConfidence ?? 0,\n status: 'proposed',\n evidence: [],\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n testCriteria: options?.testCriteria,\n category: options?.category ?? 'general',\n autoGenerated: options?.autoGenerated ?? false,\n };\n \n await this.projectState.addHypothesis(hypothesis);\n \n return hypothesis;\n }\n \n /**\n * Auto-generate hypotheses based on detected patterns\n */\n async autoGenerateHypotheses(): Promise<Hypothesis[]> {\n const generated: Hypothesis[] = [];\n \n try {\n // Get existing hypotheses to avoid duplicates\n await this.projectState.load();\n const existing = this.projectState.getAllHypotheses();\n const existingStatements = new Set(existing.map(h => h.statement.toLowerCase()));\n \n // Get data for pattern detection\n const issues = await searchIssues('', {\n workDir: this.projectPath,\n limit: 500,\n includeResolved: true,\n });\n \n if (issues.length < 10) {\n return generated; // Not enough data\n }\n \n // Check each template for applicability\n for (const template of HYPOTHESIS_TEMPLATES) {\n // Skip if already have similar hypothesis\n if (existingStatements.has(template.statement.toLowerCase())) {\n continue;\n }\n \n // Check if we have enough evidence to propose this hypothesis\n const evidence = await this.gatherInitialEvidence(template, issues);\n \n if (evidence.length > 0 && evidence[0]!.weight >= template.minConfidence) {\n const hypothesis = await this.createHypothesis(template.statement, {\n category: template.category,\n testCriteria: template.testCriteria,\n initialConfidence: evidence[0]!.weight,\n autoGenerated: true,\n });\n \n // Add initial evidence\n for (const e of evidence) {\n await this.projectState.addEvidence(hypothesis.id, e);\n }\n \n generated.push(hypothesis);\n \n // Allow more hypotheses to avoid truncating insights\n if (generated.length >= 4) break;\n }\n }\n \n } catch (error) {\n // Silently handle auto-generation failures\n }\n \n return generated;\n }\n \n /**\n * Use Claude AI to generate novel hypotheses from observed patterns\n * This enables fully agentic hypothesis creation based on actual codebase observations\n */\n async generateHypothesesWithAI(context: {\n recentIssues?: any[];\n patterns?: string[];\n observations?: string[];\n }): Promise<Hypothesis[]> {\n const { isAIAvailable, runAIAnalysis } = await import('../ai/client.js');\n \n if (!isAIAvailable()) {\n return []; // Fall back to template-based generation\n }\n \n const generated: Hypothesis[] = [];\n \n try {\n // Get existing hypotheses to avoid duplicates\n await this.projectState.load();\n const existing = this.projectState.getAllHypotheses();\n const existingStatements = existing.map(h => h.statement);\n \n // Get recent issue data\n const issues = context.recentIssues || await searchIssues('', {\n workDir: this.projectPath,\n limit: 100,\n includeResolved: true,\n });\n \n if (issues.length < 5) {\n return generated; // Not enough data for AI\n }\n \n // Build context for Claude\n const issuesSummary = this.summarizeIssuesForAI(issues);\n const patternsSummary = context.patterns?.join('\\n') || 'No explicit patterns provided';\n const observationsSummary = context.observations?.join('\\n') || 'No explicit observations provided';\n \n const prompt = `You are an AI agent observing a codebase over time. Based on the patterns below, generate 1-3 testable hypotheses about this codebase's quality patterns.\n\n## Recent Issues Summary\n${issuesSummary}\n\n## Observed Patterns\n${patternsSummary}\n\n## Additional Observations\n${observationsSummary}\n\n## Existing Hypotheses (avoid duplicates)\n${existingStatements.length > 0 ? existingStatements.map(s => `- ${s}`).join('\\n') : 'None yet'}\n\nGenerate hypotheses that are:\n1. Specific and testable (can be validated with data)\n2. Actionable (if validated, can guide improvements)\n3. Novel (not duplicates of existing hypotheses)\n4. Based on real patterns in the data above\n\nReturn ONLY a JSON array of hypotheses. Each hypothesis must have:\n- \"statement\": Clear, concise hypothesis statement\n- \"category\": One of: \"timing\", \"pattern\", \"team\", \"code\", \"general\"\n- \"testCriteria\": How to test this hypothesis\n- \"confidence\": Initial confidence (0-1)\n- \"reasoning\": Why you think this hypothesis is worth testing\n\nExample format:\n[\n {\n \"statement\": \"Authentication code changes correlate with security issues\",\n \"category\": \"pattern\",\n \"testCriteria\": \"Track auth file changes and subsequent security issue rates\",\n \"confidence\": 0.6,\n \"reasoning\": \"65% of security issues occur in files modified in the past week\"\n }\n]\n\nReturn empty array [] if no novel hypotheses can be generated from the data.`;\n \n const result = await runAIAnalysis({\n systemPrompt: 'You are an expert code quality analyst who identifies patterns and generates testable hypotheses.',\n userPrompt: prompt,\n maxTokens: 2048, // Increased to prevent truncation of hypothesis generation\n temperature: 0.7, // Higher temperature for creative hypothesis generation\n });\n \n if (!result.success || !result.content.trim()) {\n return generated;\n }\n \n // Parse AI response\n let aiHypotheses: Array<{\n statement: string;\n category: Hypothesis['category'];\n testCriteria: string;\n confidence: number;\n reasoning: string;\n }> = [];\n \n try {\n const cleaned = result.content.replace(/```json?\\n?|\\n?```/g, '').trim();\n aiHypotheses = JSON.parse(cleaned);\n if (!Array.isArray(aiHypotheses)) aiHypotheses = [];\n } catch {\n return generated; // AI response wasn't valid JSON\n }\n \n // Create hypotheses from AI suggestions - process all to avoid truncation\n for (const aiHypo of aiHypotheses.slice(0, 5)) { // Increased limit to reduce truncation\n // Check for duplicates - compare full statements to avoid truncation issues\n const isDuplicate = existingStatements.some(existing =>\n existing.toLowerCase() === aiHypo.statement.toLowerCase() ||\n existing.toLowerCase().includes(aiHypo.statement.toLowerCase()) ||\n aiHypo.statement.toLowerCase().includes(existing.toLowerCase())\n );\n \n if (isDuplicate) continue;\n \n const hypothesis = await this.createHypothesis(aiHypo.statement, {\n category: aiHypo.category,\n testCriteria: aiHypo.testCriteria,\n initialConfidence: Math.max(0.3, Math.min(0.7, aiHypo.confidence)),\n autoGenerated: true,\n });\n \n // Add AI reasoning as initial evidence\n await this.projectState.addEvidence(hypothesis.id, {\n type: 'supporting',\n description: `AI observed: ${aiHypo.reasoning}`,\n weight: aiHypo.confidence,\n });\n \n generated.push(hypothesis);\n }\n \n } catch (error) {\n // Silently handle AI generation failures\n }\n \n return generated;\n }\n \n /**\n * Summarize issues for AI context\n */\n private summarizeIssuesForAI(issues: Array<{ issue: any; score: number }>): string {\n const totalIssues = issues.length;\n \n // Severity breakdown\n const severityCounts: Record<string, number> = {};\n for (const { issue } of issues) {\n severityCounts[issue.severity] = (severityCounts[issue.severity] || 0) + 1;\n }\n \n // Agent breakdown\n const agentCounts: Record<string, number> = {};\n for (const { issue } of issues) {\n agentCounts[issue.agent] = (agentCounts[issue.agent] || 0) + 1;\n }\n \n // File/directory patterns\n const fileCounts: Record<string, number> = {};\n for (const { issue } of issues) {\n const dir = dirname(issue.file);\n fileCounts[dir] = (fileCounts[dir] || 0) + 1;\n }\n \n // Time patterns\n const dayOfWeekCounts: Record<number, number> = {};\n for (const { issue } of issues) {\n const date = new Date(issue.timestamp);\n const day = date.getDay();\n dayOfWeekCounts[day] = (dayOfWeekCounts[day] || 0) + 1;\n }\n \n const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n const dayDistribution = Object.entries(dayOfWeekCounts)\n .sort(([a], [b]) => Number(a) - Number(b))\n .map(([day, count]) => `${dayNames[Number(day)]}: ${count}`)\n .join(', ');\n \n const topDirs = Object.entries(fileCounts)\n .sort(([, a], [, b]) => b - a)\n .slice(0, 8) // Increased to show more context without truncation\n .map(([dir, count]) => `${dir}: ${count}`)\n .join(', ');\n\n const topAgents = Object.entries(agentCounts)\n .sort(([, a], [, b]) => b - a)\n .slice(0, 8) // Increased to show more context without truncation\n .map(([agent, count]) => `${agent}: ${count}`)\n .join(', ');\n \n return `Total Issues: ${totalIssues}\nSeverities: ${Object.entries(severityCounts).map(([s, c]) => `${s}=${c}`).join(', ')}\nTop Agents: ${topAgents}\nTop Directories: ${topDirs}\nDay Distribution: ${dayDistribution}`;\n }\n \n /**\n * Gather initial evidence for a hypothesis template\n */\n private async gatherInitialEvidence(\n template: HypothesisTemplate,\n issues: Array<{ issue: any; score: number }>\n ): Promise<HypothesisEvidence[]> {\n const evidence: HypothesisEvidence[] = [];\n \n switch (template.category) {\n case 'timing':\n evidence.push(...this.analyzeTimingPatterns(template, issues));\n break;\n case 'pattern':\n evidence.push(...this.analyzeLocationPatterns(template, issues));\n break;\n case 'code':\n evidence.push(...this.analyzeCodePatterns(template, issues));\n break;\n }\n \n return evidence;\n }\n \n /**\n * Analyze timing patterns in issues\n */\n private analyzeTimingPatterns(\n template: HypothesisTemplate,\n issues: Array<{ issue: any; score: number }>\n ): HypothesisEvidence[] {\n const evidence: HypothesisEvidence[] = [];\n \n // Analyze day-of-week patterns\n const dayOfWeekCounts: Record<number, number> = {};\n for (const { issue } of issues) {\n const date = new Date(issue.timestamp);\n const day = date.getDay();\n dayOfWeekCounts[day] = (dayOfWeekCounts[day] || 0) + 1;\n }\n \n // Check for Friday pattern\n if (template.statement.includes('Friday')) {\n const fridayCount = dayOfWeekCounts[5] || 0;\n const avgOtherDays = (Object.values(dayOfWeekCounts).reduce((a, b) => a + b, 0) - fridayCount) / 4;\n \n if (fridayCount > avgOtherDays * 1.5) {\n evidence.push({\n type: 'supporting',\n description: `Friday has ${((fridayCount / avgOtherDays - 1) * 100).toFixed(0)}% more issues than average`,\n weight: Math.min(0.8, 0.3 + (fridayCount / avgOtherDays - 1) * 0.2),\n timestamp: new Date().toISOString(),\n });\n } else {\n evidence.push({\n type: 'contradicting',\n description: 'Friday issue count is not significantly higher',\n weight: 0.3,\n timestamp: new Date().toISOString(),\n });\n }\n }\n \n // Check for Monday/weekend pattern\n if (template.statement.includes('weekend') || template.statement.includes('Monday')) {\n const mondayCount = dayOfWeekCounts[1] || 0;\n const avgOtherDays = (Object.values(dayOfWeekCounts).reduce((a, b) => a + b, 0) - mondayCount) / 4;\n \n if (mondayCount > avgOtherDays * 1.5) {\n evidence.push({\n type: 'supporting',\n description: `Monday has ${((mondayCount / avgOtherDays - 1) * 100).toFixed(0)}% more issues than average`,\n weight: Math.min(0.8, 0.3 + (mondayCount / avgOtherDays - 1) * 0.2),\n timestamp: new Date().toISOString(),\n });\n }\n }\n \n return evidence;\n }\n \n /**\n * Analyze location patterns in issues\n */\n private analyzeLocationPatterns(\n template: HypothesisTemplate,\n issues: Array<{ issue: any; score: number }>\n ): HypothesisEvidence[] {\n const evidence: HypothesisEvidence[] = [];\n \n // Analyze directory distribution\n const dirCounts: Record<string, number> = {};\n for (const { issue } of issues) {\n const dir = dirname(issue.file);\n dirCounts[dir] = (dirCounts[dir] || 0) + 1;\n }\n \n const sortedDirs = Object.entries(dirCounts)\n .sort(([, a], [, b]) => b - a);\n \n // Check for auth pattern\n if (template.statement.includes('Auth')) {\n const authDirs = sortedDirs.filter(([dir]) => \n dir.toLowerCase().includes('auth') || \n dir.toLowerCase().includes('login') ||\n dir.toLowerCase().includes('session')\n );\n \n const authCount = authDirs.reduce((sum, [, count]) => sum + count, 0);\n const percentage = (authCount / issues.length) * 100;\n \n if (percentage >= 20) {\n evidence.push({\n type: 'supporting',\n description: `Auth-related code has ${percentage.toFixed(0)}% of issues`,\n weight: Math.min(0.85, 0.4 + percentage / 100),\n timestamp: new Date().toISOString(),\n });\n }\n }\n \n // Check for clustering pattern - intentionally analyze top 3 for clustering metric\n if (template.statement.includes('cluster')) {\n const topThreeDirs = sortedDirs.slice(0, 3); // Clustering analysis requires top N comparison\n const topThreeCount = topThreeDirs.reduce((sum, [, count]) => sum + count, 0);\n const percentage = (topThreeCount / issues.length) * 100;\n \n if (percentage >= 50) {\n evidence.push({\n type: 'supporting',\n description: `Top 3 directories have ${percentage.toFixed(0)}% of issues`,\n weight: Math.min(0.8, 0.3 + percentage / 100),\n timestamp: new Date().toISOString(),\n });\n }\n }\n \n return evidence;\n }\n \n /**\n * Analyze code patterns\n */\n private analyzeCodePatterns(\n template: HypothesisTemplate,\n issues: Array<{ issue: any; score: number }>\n ): HypothesisEvidence[] {\n const evidence: HypothesisEvidence[] = [];\n \n // Analyze temporal clustering (critical issues in bursts)\n if (template.statement.includes('cluster')) {\n const criticalIssues = issues.filter(r => r.issue.severity === 'critical');\n \n if (criticalIssues.length >= 3) {\n // Check if critical issues are clustered in time\n const timestamps = criticalIssues\n .map(r => new Date(r.issue.timestamp).getTime())\n .sort((a, b) => a - b);\n \n let clusteredCount = 0;\n for (let i = 1; i < timestamps.length; i++) {\n // If within 24 hours of previous\n if (timestamps[i]! - timestamps[i - 1]! < 24 * 60 * 60 * 1000) {\n clusteredCount++;\n }\n }\n \n const clusterRatio = clusteredCount / (timestamps.length - 1);\n \n if (clusterRatio >= 0.5) {\n evidence.push({\n type: 'supporting',\n description: `${(clusterRatio * 100).toFixed(0)}% of critical issues occur within 24h of another`,\n weight: Math.min(0.75, 0.3 + clusterRatio * 0.4),\n timestamp: new Date().toISOString(),\n });\n }\n }\n }\n \n return evidence;\n }\n \n /**\n * Update confidence scores based on new data\n */\n async updateConfidenceFromOutcomes(): Promise<HypothesisAnalysis[]> {\n const analyses: HypothesisAnalysis[] = [];\n \n try {\n await this.projectState.load();\n const activeHypotheses = this.projectState.getActiveHypotheses();\n \n for (const hypothesis of activeHypotheses) {\n const analysis = await this.analyzeHypothesis(hypothesis);\n analyses.push(analysis);\n \n // Create insight if hypothesis was validated or invalidated\n if (analysis.statusChange && this.insightStore.canCreateInsight('hypothesis-update')) {\n const insight = this.createHypothesisInsight(analysis);\n await this.insightStore.addInsight(insight);\n await this.insightStore.markInsightCreated('hypothesis-update');\n }\n }\n \n // Update hypothesis accuracy metric\n await this.projectState.updateHypothesisAccuracy();\n \n } catch (error) {\n // Silently handle confidence update failures\n }\n \n return analyses;\n }\n \n /**\n * Analyze a single hypothesis\n */\n private async analyzeHypothesis(hypothesis: Hypothesis, signal?: AbortSignal): Promise<HypothesisAnalysis> {\n if (signal?.aborted) throw new DOMException('Scan cancelled', 'AbortError');\n\n // Get recent issues for new evidence\n const issues = await searchIssues('', {\n workDir: this.projectPath,\n limit: 100,\n includeResolved: false,\n });\n if (signal?.aborted) throw new DOMException('Scan cancelled', 'AbortError');\n\n // Find the matching template\n const template = HYPOTHESIS_TEMPLATES.find(t => \n t.statement.toLowerCase() === hypothesis.statement.toLowerCase()\n );\n \n const recentEvidence: HypothesisEvidence[] = [];\n \n if (template) {\n recentEvidence.push(...await this.gatherInitialEvidence(template, issues));\n } else {\n // For user-created hypotheses, use semantic evidence gathering\n recentEvidence.push(...this.gatherSemanticEvidence(hypothesis, issues));\n }\n \n // Calculate confidence change\n const oldConfidence = hypothesis.confidence;\n let newConfidence = oldConfidence;\n \n for (const evidence of recentEvidence) {\n if (evidence.type === 'supporting') {\n newConfidence = Math.min(1, newConfidence + evidence.weight * 0.1);\n } else {\n newConfidence = Math.max(0, newConfidence - evidence.weight * 0.1);\n }\n }\n \n // Determine status change\n let statusChange: 'validated' | 'invalidated' | undefined;\n \n if (signal?.aborted) throw new DOMException('Scan cancelled', 'AbortError');\n\n if (newConfidence >= 0.8 && hypothesis.evidence.length >= 3) {\n statusChange = 'validated';\n await this.projectState.updateHypothesis(hypothesis.id, {\n status: 'validated',\n confidence: newConfidence,\n validatedAt: new Date().toISOString(),\n });\n } else if (newConfidence <= 0.2 && hypothesis.evidence.length >= 3) {\n statusChange = 'invalidated';\n await this.projectState.updateHypothesis(hypothesis.id, {\n status: 'invalidated',\n confidence: newConfidence,\n });\n } else {\n // Just update confidence\n await this.projectState.updateHypothesis(hypothesis.id, {\n confidence: newConfidence,\n });\n }\n \n // Add new evidence\n for (const evidence of recentEvidence) {\n await this.projectState.addEvidence(hypothesis.id, evidence);\n }\n \n const analysis: HypothesisAnalysis = {\n hypothesis: { ...hypothesis, confidence: newConfidence },\n recentEvidence,\n confidenceChange: newConfidence - oldConfidence,\n actionRequired: statusChange !== undefined,\n };\n \n if (statusChange) {\n analysis.statusChange = statusChange;\n }\n \n return analysis;\n }\n \n /**\n * Gather evidence for user-created hypotheses using semantic matching\n * \n * This enables agentic tracking for natural language hypotheses like:\n * - \"Mondays have more bugs than Fridays\"\n * - \"Code reviews reduce bug rate\"\n * - \"Security issues cluster in auth code\"\n */\n private gatherSemanticEvidence(\n hypothesis: Hypothesis,\n issues: Array<{ issue: any; score: number }>\n ): HypothesisEvidence[] {\n const evidence: HypothesisEvidence[] = [];\n const stmt = hypothesis.statement.toLowerCase();\n \n // Time-based hypotheses (days of week patterns)\n if (stmt.includes('monday') || stmt.includes('friday') || stmt.includes('weekend') ||\n stmt.includes('morning') || stmt.includes('afternoon')) {\n const dayNames = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];\n const dayOfWeekCounts: Record<number, number> = { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0 };\n \n for (const { issue } of issues) {\n const date = new Date(issue.timestamp);\n const day = date.getDay();\n dayOfWeekCounts[day] = (dayOfWeekCounts[day] || 0) + 1;\n }\n \n const totalIssues = Object.values(dayOfWeekCounts).reduce((a, b) => a + b, 0);\n const avgPerDay = totalIssues / 7;\n \n // Check each day mentioned\n for (let dayIdx = 0; dayIdx < 7; dayIdx++) {\n const dayName = dayNames[dayIdx]!;\n if (stmt.includes(dayName)) {\n const dayCount = dayOfWeekCounts[dayIdx] || 0;\n \n if (stmt.includes('more') || stmt.includes('higher') || stmt.includes('spike')) {\n // Testing if this day has MORE issues\n if (dayCount > avgPerDay * 1.3) {\n evidence.push({\n type: 'supporting',\n description: `${dayName.charAt(0).toUpperCase() + dayName.slice(1)} has ${dayCount} issues (${((dayCount/avgPerDay - 1) * 100).toFixed(0)}% above average)`,\n weight: Math.min(0.7, 0.3 + (dayCount / avgPerDay - 1) * 0.3),\n timestamp: new Date().toISOString(),\n });\n } else {\n evidence.push({\n type: 'contradicting',\n description: `${dayName.charAt(0).toUpperCase() + dayName.slice(1)} has average or below average issue count`,\n weight: 0.3,\n timestamp: new Date().toISOString(),\n });\n }\n } else if (stmt.includes('fewer') || stmt.includes('less') || stmt.includes('reduce')) {\n // Testing if this day has FEWER issues\n if (dayCount < avgPerDay * 0.7) {\n evidence.push({\n type: 'supporting',\n description: `${dayName.charAt(0).toUpperCase() + dayName.slice(1)} has ${dayCount} issues (${((1 - dayCount/avgPerDay) * 100).toFixed(0)}% below average)`,\n weight: Math.min(0.7, 0.3 + (1 - dayCount / avgPerDay) * 0.3),\n timestamp: new Date().toISOString(),\n });\n }\n }\n }\n }\n }\n \n // Code review hypotheses\n if (stmt.includes('review') || stmt.includes('pr') || stmt.includes('pull request')) {\n // Look for patterns in reviewed vs unreviewed code (approximated by commit patterns)\n const recentIssues = issues.slice(0, 30); // Most recent\n const olderIssues = issues.slice(30); // Older\n \n if (recentIssues.length >= 10 && olderIssues.length >= 10) {\n const recentRate = recentIssues.length;\n const olderRate = olderIssues.length;\n \n if (stmt.includes('reduce') || stmt.includes('fewer') || stmt.includes('less')) {\n if (recentRate < olderRate) {\n evidence.push({\n type: 'supporting',\n description: `Recent period has ${((1 - recentRate/olderRate) * 100).toFixed(0)}% fewer issues`,\n weight: Math.min(0.6, 0.3 + (1 - recentRate/olderRate) * 0.3),\n timestamp: new Date().toISOString(),\n });\n } else {\n evidence.push({\n type: 'contradicting',\n description: `Issue rate has not decreased recently`,\n weight: 0.2,\n timestamp: new Date().toISOString(),\n });\n }\n }\n }\n }\n \n // Directory/location clustering hypotheses\n if (stmt.includes('cluster') || stmt.includes('concentrate') || stmt.includes('auth') ||\n stmt.includes('specific') || stmt.includes('certain files')) {\n const dirCounts: Record<string, number> = {};\n for (const { issue } of issues) {\n const dir = dirname(issue.file);\n dirCounts[dir] = (dirCounts[dir] || 0) + 1;\n }\n \n const sortedDirs = Object.entries(dirCounts).sort(([, a], [, b]) => b - a);\n const topThreeCount = sortedDirs.slice(0, 3).reduce((sum, [, count]) => sum + count, 0); // Top 3 analysis for clustering detection\n const totalCount = issues.length;\n const concentration = topThreeCount / totalCount;\n \n if (concentration >= 0.5) {\n evidence.push({\n type: 'supporting',\n description: `Top 3 directories have ${(concentration * 100).toFixed(0)}% of issues (concentrated)`,\n weight: Math.min(0.7, 0.3 + concentration * 0.4),\n timestamp: new Date().toISOString(),\n });\n } else {\n evidence.push({\n type: 'contradicting',\n description: `Issues are distributed across many directories`,\n weight: 0.3,\n timestamp: new Date().toISOString(),\n });\n }\n }\n \n // Severity trend hypotheses\n if (stmt.includes('critical') || stmt.includes('security') || stmt.includes('severity')) {\n const criticalCount = issues.filter(r => r.issue.severity === 'critical').length;\n const seriousCount = issues.filter(r => r.issue.severity === 'serious').length;\n const highSeverityRatio = (criticalCount + seriousCount) / issues.length;\n \n if (stmt.includes('increase') || stmt.includes('more') || stmt.includes('rise')) {\n if (highSeverityRatio > 0.3) {\n evidence.push({\n type: 'supporting',\n description: `${(highSeverityRatio * 100).toFixed(0)}% of issues are high severity`,\n weight: Math.min(0.7, 0.3 + highSeverityRatio),\n timestamp: new Date().toISOString(),\n });\n }\n } else if (stmt.includes('decrease') || stmt.includes('fewer') || stmt.includes('reduce')) {\n if (highSeverityRatio < 0.2) {\n evidence.push({\n type: 'supporting',\n description: `Only ${(highSeverityRatio * 100).toFixed(0)}% of issues are high severity`,\n weight: 0.5,\n timestamp: new Date().toISOString(),\n });\n }\n }\n }\n \n // Agent/skill specific hypotheses\n const agents = ['security', 'performance', 'accessibility', 'test', 'typecheck', 'bug-finding'];\n for (const agent of agents) {\n if (stmt.includes(agent) || stmt.includes(agent.replace('-', ' '))) {\n const agentIssues = issues.filter(r => r.issue.agent === agent);\n const agentRatio = agentIssues.length / issues.length;\n \n if (stmt.includes('most') || stmt.includes('majority') || stmt.includes('main')) {\n if (agentRatio > 0.4) {\n evidence.push({\n type: 'supporting',\n description: `${agent} accounts for ${(agentRatio * 100).toFixed(0)}% of issues`,\n weight: Math.min(0.7, 0.3 + agentRatio),\n timestamp: new Date().toISOString(),\n });\n } else {\n evidence.push({\n type: 'contradicting',\n description: `${agent} only accounts for ${(agentRatio * 100).toFixed(0)}% of issues`,\n weight: 0.3,\n timestamp: new Date().toISOString(),\n });\n }\n }\n }\n }\n \n return evidence;\n }\n \n /**\n * Create an insight for hypothesis status change\n */\n private createHypothesisInsight(analysis: HypothesisAnalysis): Insight {\n const isValidated = analysis.statusChange === 'validated';\n \n return {\n id: `insight-hyp-${analysis.hypothesis.id}`,\n type: isValidated ? 'celebration' : 'observation',\n message: isValidated\n ? `Hypothesis confirmed: \"${analysis.hypothesis.statement}\"`\n : `Hypothesis disproven: \"${analysis.hypothesis.statement}\"`,\n context: `Confidence: ${(analysis.hypothesis.confidence * 100).toFixed(0)}%. ${analysis.recentEvidence.length} evidence points analyzed.`,\n relatedIssues: [],\n priority: 5,\n timestamp: Date.now(),\n dismissed: false,\n category: 'pattern',\n details: {\n examples: analysis.recentEvidence.map(e => `${e.type}: ${e.description}`),\n },\n };\n }\n \n /**\n * Get hypothesis by ID\n */\n async getHypothesis(hypothesisId: string): Promise<Hypothesis | undefined> {\n await this.projectState.load();\n return this.projectState.getHypothesis(hypothesisId);\n }\n \n /**\n * Get all hypotheses\n */\n async getAllHypotheses(): Promise<Hypothesis[]> {\n await this.projectState.load();\n return this.projectState.getAllHypotheses();\n }\n \n /**\n * Get validated hypotheses\n */\n async getValidatedHypotheses(): Promise<Hypothesis[]> {\n await this.projectState.load();\n return this.projectState.getValidatedHypotheses();\n }\n \n /**\n * Get hypothesis accuracy stats\n */\n getAccuracy(): number {\n const metrics = this.projectState.getMetrics();\n return metrics.hypothesisAccuracy;\n }\n}\n\n// ============================================================================\n// Singleton Management\n// ============================================================================\n\nconst hypothesisEngines: Map<string, HypothesisEngine> = new Map();\n\n/**\n * Get the HypothesisEngine for a project (singleton per project)\n */\nexport function getHypothesisEngine(projectPath: string): HypothesisEngine {\n let engine = hypothesisEngines.get(projectPath);\n if (!engine) {\n engine = new HypothesisEngine(projectPath);\n hypothesisEngines.set(projectPath, engine);\n }\n return engine;\n}\n\n/**\n * Clear all HypothesisEngine instances (for testing)\n */\nexport function clearHypothesisEngines(): void {\n hypothesisEngines.clear();\n}\n\n/**\n * Gather evidence for a specific hypothesis (manual check from UI)\n */\nexport async function gatherEvidenceForHypothesis(\n hypothesisId: string,\n projectPath: string,\n signal?: AbortSignal\n): Promise<Array<{ supports: boolean; description: string; weight: number }>> {\n if (signal?.aborted) throw new DOMException('Scan cancelled', 'AbortError');\n\n const engine = getHypothesisEngine(projectPath);\n const projectState = getProjectState(projectPath);\n await projectState.load();\n if (signal?.aborted) throw new DOMException('Scan cancelled', 'AbortError');\n\n const hypothesis = projectState.getAllHypotheses().find(h => h.id === hypothesisId);\n if (!hypothesis) {\n throw new Error(`Hypothesis ${hypothesisId} not found`);\n }\n\n // Get the analysis - access private method via bracket notation\n const analysis = await (engine as any).analyzeHypothesis(hypothesis, signal);\n \n // Convert evidence to simpler format\n return analysis.recentEvidence.map((e: HypothesisEvidence) => ({\n supports: e.type === 'supporting',\n description: e.description,\n weight: e.weight,\n }));\n}\n"],"mappings":"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","names":["existing"]}
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  getMemoryStats,
9
9
  searchIssues
10
- } from "./chunk-Z2P4WST6.js";
10
+ } from "./chunk-62POBLFC.js";
11
11
 
12
12
  // src/agent/goal-manager.ts
13
13
  import { basename } from "path";
@@ -648,4 +648,4 @@ export {
648
648
  getGoalManager,
649
649
  clearGoalManagers
650
650
  };
651
- //# sourceMappingURL=chunk-FOCXXIXY.js.map
651
+ //# sourceMappingURL=chunk-YEIJW6X6.js.map