codeguardian-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +348 -0
  3. package/dist/agent/agentTools.d.ts +26 -0
  4. package/dist/agent/agentTools.d.ts.map +1 -0
  5. package/dist/agent/agentTools.js +699 -0
  6. package/dist/agent/agentTools.js.map +1 -0
  7. package/dist/agent/autoValidator.d.ts +110 -0
  8. package/dist/agent/autoValidator.d.ts.map +1 -0
  9. package/dist/agent/autoValidator.js +964 -0
  10. package/dist/agent/autoValidator.js.map +1 -0
  11. package/dist/agent/fileWatcher.d.ts +28 -0
  12. package/dist/agent/fileWatcher.d.ts.map +1 -0
  13. package/dist/agent/fileWatcher.js +88 -0
  14. package/dist/agent/fileWatcher.js.map +1 -0
  15. package/dist/agent/guardianPersistence.d.ts +98 -0
  16. package/dist/agent/guardianPersistence.d.ts.map +1 -0
  17. package/dist/agent/guardianPersistence.js +296 -0
  18. package/dist/agent/guardianPersistence.js.map +1 -0
  19. package/dist/agent/mcpNotifications.d.ts +38 -0
  20. package/dist/agent/mcpNotifications.d.ts.map +1 -0
  21. package/dist/agent/mcpNotifications.js +81 -0
  22. package/dist/agent/mcpNotifications.js.map +1 -0
  23. package/dist/analyzers/aiPatterns.d.ts +16 -0
  24. package/dist/analyzers/aiPatterns.d.ts.map +1 -0
  25. package/dist/analyzers/aiPatterns.js +103 -0
  26. package/dist/analyzers/aiPatterns.js.map +1 -0
  27. package/dist/analyzers/antiPatterns.d.ts +60 -0
  28. package/dist/analyzers/antiPatterns.d.ts.map +1 -0
  29. package/dist/analyzers/antiPatterns.js +198 -0
  30. package/dist/analyzers/antiPatterns.js.map +1 -0
  31. package/dist/analyzers/builtinTypes.d.ts +18 -0
  32. package/dist/analyzers/builtinTypes.d.ts.map +1 -0
  33. package/dist/analyzers/builtinTypes.js +1275 -0
  34. package/dist/analyzers/builtinTypes.js.map +1 -0
  35. package/dist/analyzers/complexity.d.ts +14 -0
  36. package/dist/analyzers/complexity.d.ts.map +1 -0
  37. package/dist/analyzers/complexity.js +610 -0
  38. package/dist/analyzers/complexity.js.map +1 -0
  39. package/dist/analyzers/findingVerifier.d.ts +59 -0
  40. package/dist/analyzers/findingVerifier.d.ts.map +1 -0
  41. package/dist/analyzers/findingVerifier.js +1169 -0
  42. package/dist/analyzers/findingVerifier.js.map +1 -0
  43. package/dist/analyzers/impactAnalyzer.d.ts +53 -0
  44. package/dist/analyzers/impactAnalyzer.d.ts.map +1 -0
  45. package/dist/analyzers/impactAnalyzer.js +152 -0
  46. package/dist/analyzers/impactAnalyzer.js.map +1 -0
  47. package/dist/analyzers/languageDetector.d.ts +48 -0
  48. package/dist/analyzers/languageDetector.d.ts.map +1 -0
  49. package/dist/analyzers/languageDetector.js +404 -0
  50. package/dist/analyzers/languageDetector.js.map +1 -0
  51. package/dist/analyzers/parsers/incrementalParser.d.ts +53 -0
  52. package/dist/analyzers/parsers/incrementalParser.d.ts.map +1 -0
  53. package/dist/analyzers/parsers/incrementalParser.js +193 -0
  54. package/dist/analyzers/parsers/incrementalParser.js.map +1 -0
  55. package/dist/analyzers/parsers/scopeResolver.d.ts +92 -0
  56. package/dist/analyzers/parsers/scopeResolver.d.ts.map +1 -0
  57. package/dist/analyzers/parsers/scopeResolver.js +324 -0
  58. package/dist/analyzers/parsers/scopeResolver.js.map +1 -0
  59. package/dist/analyzers/parsers/semanticIndex.d.ts +127 -0
  60. package/dist/analyzers/parsers/semanticIndex.d.ts.map +1 -0
  61. package/dist/analyzers/parsers/semanticIndex.js +429 -0
  62. package/dist/analyzers/parsers/semanticIndex.js.map +1 -0
  63. package/dist/analyzers/parsers/sessionDiffAnalyzer.d.ts +42 -0
  64. package/dist/analyzers/parsers/sessionDiffAnalyzer.d.ts.map +1 -0
  65. package/dist/analyzers/parsers/sessionDiffAnalyzer.js +233 -0
  66. package/dist/analyzers/parsers/sessionDiffAnalyzer.js.map +1 -0
  67. package/dist/analyzers/parsers/treeSitterParser.d.ts +76 -0
  68. package/dist/analyzers/parsers/treeSitterParser.d.ts.map +1 -0
  69. package/dist/analyzers/parsers/treeSitterParser.js +709 -0
  70. package/dist/analyzers/parsers/treeSitterParser.js.map +1 -0
  71. package/dist/analyzers/relevanceScorer.d.ts +43 -0
  72. package/dist/analyzers/relevanceScorer.d.ts.map +1 -0
  73. package/dist/analyzers/relevanceScorer.js +200 -0
  74. package/dist/analyzers/relevanceScorer.js.map +1 -0
  75. package/dist/analyzers/standardLibrary.d.ts +22 -0
  76. package/dist/analyzers/standardLibrary.d.ts.map +1 -0
  77. package/dist/analyzers/standardLibrary.js +211 -0
  78. package/dist/analyzers/standardLibrary.js.map +1 -0
  79. package/dist/analyzers/symbolGraph.d.ts +30 -0
  80. package/dist/analyzers/symbolGraph.d.ts.map +1 -0
  81. package/dist/analyzers/symbolGraph.js +380 -0
  82. package/dist/analyzers/symbolGraph.js.map +1 -0
  83. package/dist/analyzers/symbolTable.d.ts +18 -0
  84. package/dist/analyzers/symbolTable.d.ts.map +1 -0
  85. package/dist/analyzers/symbolTable.js +176 -0
  86. package/dist/analyzers/symbolTable.js.map +1 -0
  87. package/dist/analyzers/typeChecker.d.ts +13 -0
  88. package/dist/analyzers/typeChecker.d.ts.map +1 -0
  89. package/dist/analyzers/typeChecker.js +580 -0
  90. package/dist/analyzers/typeChecker.js.map +1 -0
  91. package/dist/analyzers/usagePatterns.d.ts +42 -0
  92. package/dist/analyzers/usagePatterns.d.ts.map +1 -0
  93. package/dist/analyzers/usagePatterns.js +75 -0
  94. package/dist/analyzers/usagePatterns.js.map +1 -0
  95. package/dist/api-contract/context/backend.d.ts +19 -0
  96. package/dist/api-contract/context/backend.d.ts.map +1 -0
  97. package/dist/api-contract/context/backend.js +64 -0
  98. package/dist/api-contract/context/backend.js.map +1 -0
  99. package/dist/api-contract/context/contract.d.ts +34 -0
  100. package/dist/api-contract/context/contract.d.ts.map +1 -0
  101. package/dist/api-contract/context/contract.js +306 -0
  102. package/dist/api-contract/context/contract.js.map +1 -0
  103. package/dist/api-contract/context/frontend.d.ts +19 -0
  104. package/dist/api-contract/context/frontend.d.ts.map +1 -0
  105. package/dist/api-contract/context/frontend.js +64 -0
  106. package/dist/api-contract/context/frontend.js.map +1 -0
  107. package/dist/api-contract/detector.d.ts +28 -0
  108. package/dist/api-contract/detector.d.ts.map +1 -0
  109. package/dist/api-contract/detector.js +393 -0
  110. package/dist/api-contract/detector.js.map +1 -0
  111. package/dist/api-contract/extractors/python.d.ts +32 -0
  112. package/dist/api-contract/extractors/python.d.ts.map +1 -0
  113. package/dist/api-contract/extractors/python.js +521 -0
  114. package/dist/api-contract/extractors/python.js.map +1 -0
  115. package/dist/api-contract/extractors/pythonAstUtils.d.ts +44 -0
  116. package/dist/api-contract/extractors/pythonAstUtils.d.ts.map +1 -0
  117. package/dist/api-contract/extractors/pythonAstUtils.js +489 -0
  118. package/dist/api-contract/extractors/pythonAstUtils.js.map +1 -0
  119. package/dist/api-contract/extractors/tsAstUtils.d.ts +47 -0
  120. package/dist/api-contract/extractors/tsAstUtils.d.ts.map +1 -0
  121. package/dist/api-contract/extractors/tsAstUtils.js +173 -0
  122. package/dist/api-contract/extractors/tsAstUtils.js.map +1 -0
  123. package/dist/api-contract/extractors/typescript.d.ts +32 -0
  124. package/dist/api-contract/extractors/typescript.d.ts.map +1 -0
  125. package/dist/api-contract/extractors/typescript.js +666 -0
  126. package/dist/api-contract/extractors/typescript.js.map +1 -0
  127. package/dist/api-contract/index.d.ts +104 -0
  128. package/dist/api-contract/index.d.ts.map +1 -0
  129. package/dist/api-contract/index.js +232 -0
  130. package/dist/api-contract/index.js.map +1 -0
  131. package/dist/api-contract/types.d.ts +151 -0
  132. package/dist/api-contract/types.d.ts.map +1 -0
  133. package/dist/api-contract/types.js +19 -0
  134. package/dist/api-contract/types.js.map +1 -0
  135. package/dist/api-contract/validators/endpoint.d.ts +21 -0
  136. package/dist/api-contract/validators/endpoint.d.ts.map +1 -0
  137. package/dist/api-contract/validators/endpoint.js +224 -0
  138. package/dist/api-contract/validators/endpoint.js.map +1 -0
  139. package/dist/api-contract/validators/index.d.ts +40 -0
  140. package/dist/api-contract/validators/index.d.ts.map +1 -0
  141. package/dist/api-contract/validators/index.js +875 -0
  142. package/dist/api-contract/validators/index.js.map +1 -0
  143. package/dist/api-contract/validators/parameter.d.ts +17 -0
  144. package/dist/api-contract/validators/parameter.d.ts.map +1 -0
  145. package/dist/api-contract/validators/parameter.js +250 -0
  146. package/dist/api-contract/validators/parameter.js.map +1 -0
  147. package/dist/api-contract/validators/type.d.ts +38 -0
  148. package/dist/api-contract/validators/type.d.ts.map +1 -0
  149. package/dist/api-contract/validators/type.js +244 -0
  150. package/dist/api-contract/validators/type.js.map +1 -0
  151. package/dist/context/apiContract/complexTypeSupport.d.ts +83 -0
  152. package/dist/context/apiContract/complexTypeSupport.d.ts.map +1 -0
  153. package/dist/context/apiContract/complexTypeSupport.js +665 -0
  154. package/dist/context/apiContract/complexTypeSupport.js.map +1 -0
  155. package/dist/context/apiContract/graphqlSupport.d.ts +105 -0
  156. package/dist/context/apiContract/graphqlSupport.d.ts.map +1 -0
  157. package/dist/context/apiContract/graphqlSupport.js +671 -0
  158. package/dist/context/apiContract/graphqlSupport.js.map +1 -0
  159. package/dist/context/apiContract/index.d.ts +14 -0
  160. package/dist/context/apiContract/index.d.ts.map +1 -0
  161. package/dist/context/apiContract/index.js +17 -0
  162. package/dist/context/apiContract/index.js.map +1 -0
  163. package/dist/context/apiContract/webSocketSupport.d.ts +104 -0
  164. package/dist/context/apiContract/webSocketSupport.d.ts.map +1 -0
  165. package/dist/context/apiContract/webSocketSupport.js +465 -0
  166. package/dist/context/apiContract/webSocketSupport.js.map +1 -0
  167. package/dist/context/apiContractContext.d.ts +15 -0
  168. package/dist/context/apiContractContext.d.ts.map +1 -0
  169. package/dist/context/apiContractContext.js +979 -0
  170. package/dist/context/apiContractContext.js.map +1 -0
  171. package/dist/context/apiContractExtraction.d.ts +52 -0
  172. package/dist/context/apiContractExtraction.d.ts.map +1 -0
  173. package/dist/context/apiContractExtraction.js +438 -0
  174. package/dist/context/apiContractExtraction.js.map +1 -0
  175. package/dist/context/contextLineage.d.ts +79 -0
  176. package/dist/context/contextLineage.d.ts.map +1 -0
  177. package/dist/context/contextLineage.js +259 -0
  178. package/dist/context/contextLineage.js.map +1 -0
  179. package/dist/context/contextOrchestrator.d.ts +57 -0
  180. package/dist/context/contextOrchestrator.d.ts.map +1 -0
  181. package/dist/context/contextOrchestrator.js +162 -0
  182. package/dist/context/contextOrchestrator.js.map +1 -0
  183. package/dist/context/intentTracker.d.ts +73 -0
  184. package/dist/context/intentTracker.d.ts.map +1 -0
  185. package/dist/context/intentTracker.js +168 -0
  186. package/dist/context/intentTracker.js.map +1 -0
  187. package/dist/context/projectContext.d.ts +219 -0
  188. package/dist/context/projectContext.d.ts.map +1 -0
  189. package/dist/context/projectContext.js +1984 -0
  190. package/dist/context/projectContext.js.map +1 -0
  191. package/dist/prompts/index.d.ts +17 -0
  192. package/dist/prompts/index.d.ts.map +1 -0
  193. package/dist/prompts/index.js +260 -0
  194. package/dist/prompts/index.js.map +1 -0
  195. package/dist/prompts/library.d.ts +51 -0
  196. package/dist/prompts/library.d.ts.map +1 -0
  197. package/dist/prompts/library.js +65 -0
  198. package/dist/prompts/library.js.map +1 -0
  199. package/dist/prompts/templates.d.ts +44 -0
  200. package/dist/prompts/templates.d.ts.map +1 -0
  201. package/dist/prompts/templates.js +97 -0
  202. package/dist/prompts/templates.js.map +1 -0
  203. package/dist/queue/jobPersistence.d.ts +46 -0
  204. package/dist/queue/jobPersistence.d.ts.map +1 -0
  205. package/dist/queue/jobPersistence.js +158 -0
  206. package/dist/queue/jobPersistence.js.map +1 -0
  207. package/dist/queue/jobQueue.d.ts +116 -0
  208. package/dist/queue/jobQueue.d.ts.map +1 -0
  209. package/dist/queue/jobQueue.js +275 -0
  210. package/dist/queue/jobQueue.js.map +1 -0
  211. package/dist/queue/validationJob.d.ts +69 -0
  212. package/dist/queue/validationJob.d.ts.map +1 -0
  213. package/dist/queue/validationJob.js +435 -0
  214. package/dist/queue/validationJob.js.map +1 -0
  215. package/dist/resources/index.d.ts +15 -0
  216. package/dist/resources/index.d.ts.map +1 -0
  217. package/dist/resources/index.js +328 -0
  218. package/dist/resources/index.js.map +1 -0
  219. package/dist/resources/validationReportStore.d.ts +170 -0
  220. package/dist/resources/validationReportStore.d.ts.map +1 -0
  221. package/dist/resources/validationReportStore.js +515 -0
  222. package/dist/resources/validationReportStore.js.map +1 -0
  223. package/dist/server.d.ts +12 -0
  224. package/dist/server.d.ts.map +1 -0
  225. package/dist/server.js +102 -0
  226. package/dist/server.js.map +1 -0
  227. package/dist/tools/asyncValidation.d.ts +19 -0
  228. package/dist/tools/asyncValidation.d.ts.map +1 -0
  229. package/dist/tools/asyncValidation.js +346 -0
  230. package/dist/tools/asyncValidation.js.map +1 -0
  231. package/dist/tools/buildContext.d.ts +17 -0
  232. package/dist/tools/buildContext.d.ts.map +1 -0
  233. package/dist/tools/buildContext.js +188 -0
  234. package/dist/tools/buildContext.js.map +1 -0
  235. package/dist/tools/getDependencyGraph.d.ts +16 -0
  236. package/dist/tools/getDependencyGraph.d.ts.map +1 -0
  237. package/dist/tools/getDependencyGraph.js +436 -0
  238. package/dist/tools/getDependencyGraph.js.map +1 -0
  239. package/dist/tools/incrementalValidation.d.ts +71 -0
  240. package/dist/tools/incrementalValidation.d.ts.map +1 -0
  241. package/dist/tools/incrementalValidation.js +203 -0
  242. package/dist/tools/incrementalValidation.js.map +1 -0
  243. package/dist/tools/index.d.ts +24 -0
  244. package/dist/tools/index.d.ts.map +1 -0
  245. package/dist/tools/index.js +106 -0
  246. package/dist/tools/index.js.map +1 -0
  247. package/dist/tools/validateCode.d.ts +17 -0
  248. package/dist/tools/validateCode.d.ts.map +1 -0
  249. package/dist/tools/validateCode.js +368 -0
  250. package/dist/tools/validateCode.js.map +1 -0
  251. package/dist/tools/validateCodeLite.d.ts +2 -0
  252. package/dist/tools/validateCodeLite.d.ts.map +1 -0
  253. package/dist/tools/validateCodeLite.js +2 -0
  254. package/dist/tools/validateCodeLite.js.map +1 -0
  255. package/dist/tools/validation/builtins.d.ts +92 -0
  256. package/dist/tools/validation/builtins.d.ts.map +1 -0
  257. package/dist/tools/validation/builtins.js +2184 -0
  258. package/dist/tools/validation/builtins.js.map +1 -0
  259. package/dist/tools/validation/contextualNaming.d.ts +99 -0
  260. package/dist/tools/validation/contextualNaming.d.ts.map +1 -0
  261. package/dist/tools/validation/contextualNaming.js +959 -0
  262. package/dist/tools/validation/contextualNaming.js.map +1 -0
  263. package/dist/tools/validation/deadCode.d.ts +115 -0
  264. package/dist/tools/validation/deadCode.d.ts.map +1 -0
  265. package/dist/tools/validation/deadCode.js +861 -0
  266. package/dist/tools/validation/deadCode.js.map +1 -0
  267. package/dist/tools/validation/extractors/index.d.ts +131 -0
  268. package/dist/tools/validation/extractors/index.d.ts.map +1 -0
  269. package/dist/tools/validation/extractors/index.js +233 -0
  270. package/dist/tools/validation/extractors/index.js.map +1 -0
  271. package/dist/tools/validation/extractors/javascript.d.ts +73 -0
  272. package/dist/tools/validation/extractors/javascript.d.ts.map +1 -0
  273. package/dist/tools/validation/extractors/javascript.js +1841 -0
  274. package/dist/tools/validation/extractors/javascript.js.map +1 -0
  275. package/dist/tools/validation/extractors/python.d.ts +93 -0
  276. package/dist/tools/validation/extractors/python.d.ts.map +1 -0
  277. package/dist/tools/validation/extractors/python.js +799 -0
  278. package/dist/tools/validation/extractors/python.js.map +1 -0
  279. package/dist/tools/validation/manifest.d.ts +45 -0
  280. package/dist/tools/validation/manifest.d.ts.map +1 -0
  281. package/dist/tools/validation/manifest.js +719 -0
  282. package/dist/tools/validation/manifest.js.map +1 -0
  283. package/dist/tools/validation/parser.d.ts +58 -0
  284. package/dist/tools/validation/parser.d.ts.map +1 -0
  285. package/dist/tools/validation/parser.js +232 -0
  286. package/dist/tools/validation/parser.js.map +1 -0
  287. package/dist/tools/validation/registry.d.ts +15 -0
  288. package/dist/tools/validation/registry.d.ts.map +1 -0
  289. package/dist/tools/validation/registry.js +169 -0
  290. package/dist/tools/validation/registry.js.map +1 -0
  291. package/dist/tools/validation/scoring.d.ts +54 -0
  292. package/dist/tools/validation/scoring.d.ts.map +1 -0
  293. package/dist/tools/validation/scoring.js +242 -0
  294. package/dist/tools/validation/scoring.js.map +1 -0
  295. package/dist/tools/validation/types.d.ts +120 -0
  296. package/dist/tools/validation/types.d.ts.map +1 -0
  297. package/dist/tools/validation/types.js +11 -0
  298. package/dist/tools/validation/types.js.map +1 -0
  299. package/dist/tools/validation/unusedLocals.d.ts +36 -0
  300. package/dist/tools/validation/unusedLocals.d.ts.map +1 -0
  301. package/dist/tools/validation/unusedLocals.js +333 -0
  302. package/dist/tools/validation/unusedLocals.js.map +1 -0
  303. package/dist/tools/validation/validation.d.ts +98 -0
  304. package/dist/tools/validation/validation.d.ts.map +1 -0
  305. package/dist/tools/validation/validation.js +1837 -0
  306. package/dist/tools/validation/validation.js.map +1 -0
  307. package/dist/types/codeGraph.d.ts +163 -0
  308. package/dist/types/codeGraph.d.ts.map +1 -0
  309. package/dist/types/codeGraph.js +9 -0
  310. package/dist/types/codeGraph.js.map +1 -0
  311. package/dist/types/symbolGraph.d.ts +68 -0
  312. package/dist/types/symbolGraph.d.ts.map +1 -0
  313. package/dist/types/symbolGraph.js +10 -0
  314. package/dist/types/symbolGraph.js.map +1 -0
  315. package/dist/types/tools.d.ts +43 -0
  316. package/dist/types/tools.d.ts.map +1 -0
  317. package/dist/types/tools.js +7 -0
  318. package/dist/types/tools.js.map +1 -0
  319. package/dist/utils/fileFilter.d.ts +37 -0
  320. package/dist/utils/fileFilter.d.ts.map +1 -0
  321. package/dist/utils/fileFilter.js +91 -0
  322. package/dist/utils/fileFilter.js.map +1 -0
  323. package/dist/utils/gitUtils.d.ts +28 -0
  324. package/dist/utils/gitUtils.d.ts.map +1 -0
  325. package/dist/utils/gitUtils.js +81 -0
  326. package/dist/utils/gitUtils.js.map +1 -0
  327. package/dist/utils/logger.d.ts +15 -0
  328. package/dist/utils/logger.d.ts.map +1 -0
  329. package/dist/utils/logger.js +38 -0
  330. package/dist/utils/logger.js.map +1 -0
  331. package/dist/utils/serialization.d.ts +25 -0
  332. package/dist/utils/serialization.d.ts.map +1 -0
  333. package/dist/utils/serialization.js +53 -0
  334. package/dist/utils/serialization.js.map +1 -0
  335. package/package.json +90 -0
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Context Lineage - Git History-Based Context
3
+ *
4
+ * Inspired by Augment Code's context lineage feature.
5
+ * Uses git history to understand code evolution and prioritize
6
+ * symbols from recently modified files.
7
+ *
8
+ * @format
9
+ */
10
+ export interface FileHistory {
11
+ filePath: string;
12
+ lastModified: Date;
13
+ commitCount: number;
14
+ recentCommits: string[];
15
+ authors: Set<string>;
16
+ changeFrequency: number;
17
+ }
18
+ export interface LineageContext {
19
+ recentlyModifiedFiles: string[];
20
+ hotspotFiles: string[];
21
+ relatedFiles: Map<string, string[]>;
22
+ fileHistories: Map<string, FileHistory>;
23
+ }
24
+ declare class ContextLineageClass {
25
+ private git;
26
+ private projectPath;
27
+ private cache;
28
+ private pendingFetch;
29
+ private readonly CACHE_TTL_MS;
30
+ /**
31
+ * Initialize git for a project
32
+ */
33
+ initialize(projectPath: string): Promise<void>;
34
+ /**
35
+ * Get lineage context for a project
36
+ */
37
+ getLineageContext(projectPath: string, options?: {
38
+ commitDepth?: number;
39
+ minChangeFrequency?: number;
40
+ }): Promise<LineageContext | null>;
41
+ private fetchLineageContext;
42
+ /**
43
+ * Get relevance score for a file based on git history
44
+ */
45
+ getFileLineageScore(filePath: string, context: LineageContext | null): number;
46
+ /**
47
+ * Get symbols from files related to a given file
48
+ */
49
+ getRelatedFileSymbols(filePath: string, context: LineageContext | null): string[];
50
+ /**
51
+ * Clear all caches
52
+ */
53
+ clear(): void;
54
+ /**
55
+ * Fetch file lists for all commits ONCE. Reused by buildFileHistories,
56
+ * getRecentlyModifiedFiles, and findRelatedFiles to avoid spawning
57
+ * redundant git subprocesses (was ~110 subprocesses, now ~50).
58
+ */
59
+ private fetchCommitFiles;
60
+ /**
61
+ * Build file histories from pre-fetched commit data (no git subprocesses)
62
+ */
63
+ private buildFileHistoriesFromCache;
64
+ /**
65
+ * Get files modified in recent commits from pre-fetched data (no git subprocesses)
66
+ */
67
+ private getRecentlyModifiedFilesFromCache;
68
+ /**
69
+ * Identify hotspot files (frequently changed)
70
+ */
71
+ private identifyHotspots;
72
+ /**
73
+ * Find files that are often changed together from pre-fetched data (no git subprocesses)
74
+ */
75
+ private findRelatedFilesFromCache;
76
+ }
77
+ export declare const contextLineage: ContextLineageClass;
78
+ export {};
79
+ //# sourceMappingURL=contextLineage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextLineage.d.ts","sourceRoot":"","sources":["../../src/context/contextLineage.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,IAAI,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACpC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACzC;AAED,cAAM,mBAAmB;IACvB,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,YAAY,CAA0D;IAC9E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;IAE/C;;OAEG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpD;;OAEG;IACG,iBAAiB,CACrB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;KACxB,GACL,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;YAuBnB,mBAAmB;IA+DjC;;OAEG;IACH,mBAAmB,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,GAAG,IAAI,GAC7B,MAAM;IA0BT;;OAEG;IACH,qBAAqB,CACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,GAAG,IAAI,GAC7B,MAAM,EAAE;IAOX;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;YACW,gBAAgB;IA0B9B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAiDnC;;OAEG;IACH,OAAO,CAAC,iCAAiC;IAkBzC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,yBAAyB;CAwClC;AAGD,eAAO,MAAM,cAAc,qBAA4B,CAAC"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Context Lineage - Git History-Based Context
3
+ *
4
+ * Inspired by Augment Code's context lineage feature.
5
+ * Uses git history to understand code evolution and prioritize
6
+ * symbols from recently modified files.
7
+ *
8
+ * @format
9
+ */
10
+ import { simpleGit } from "simple-git";
11
+ import { logger } from "../utils/logger.js";
12
+ class ContextLineageClass {
13
+ git = null;
14
+ projectPath = "";
15
+ cache = new Map();
16
+ pendingFetch = new Map();
17
+ CACHE_TTL_MS = 10 * 60 * 1000; // 10 minutes
18
+ /**
19
+ * Initialize git for a project
20
+ */
21
+ async initialize(projectPath) {
22
+ this.projectPath = projectPath;
23
+ this.git = simpleGit(projectPath);
24
+ }
25
+ /**
26
+ * Get lineage context for a project
27
+ */
28
+ async getLineageContext(projectPath, options = {}) {
29
+ const { commitDepth = 50, minChangeFrequency = 0.1 } = options;
30
+ // Check cache
31
+ const cacheKey = `${projectPath}:${commitDepth}`;
32
+ const cached = this.cache.get(cacheKey);
33
+ if (cached) {
34
+ return cached;
35
+ }
36
+ // Lock: if another call is already fetching this, wait for it instead
37
+ // of spawning another ~50+ git subprocesses in parallel
38
+ const pending = this.pendingFetch.get(cacheKey);
39
+ if (pending) {
40
+ return pending;
41
+ }
42
+ const fetchPromise = this.fetchLineageContext(projectPath, cacheKey, commitDepth, minChangeFrequency);
43
+ this.pendingFetch.set(cacheKey, fetchPromise);
44
+ fetchPromise.finally(() => this.pendingFetch.delete(cacheKey));
45
+ return fetchPromise;
46
+ }
47
+ async fetchLineageContext(projectPath, cacheKey, commitDepth, minChangeFrequency) {
48
+ try {
49
+ if (!this.git || this.projectPath !== projectPath) {
50
+ await this.initialize(projectPath);
51
+ }
52
+ if (!this.git) {
53
+ return null;
54
+ }
55
+ // Check if we're in a git repo
56
+ const isRepo = await this.git.checkIsRepo();
57
+ if (!isRepo) {
58
+ logger.debug("Not a git repository, skipping lineage context");
59
+ return null;
60
+ }
61
+ // Get recent commits
62
+ const log = await this.git.log({ maxCount: commitDepth });
63
+ // Fetch commit file lists ONCE and reuse across all analyses.
64
+ // Previously buildFileHistories, getRecentlyModifiedFiles, and findRelatedFiles
65
+ // each called `git show` per commit independently — tripling subprocess count.
66
+ const commitFilesMap = await this.fetchCommitFiles(log);
67
+ // Build file histories (reuses pre-fetched data)
68
+ const fileHistories = this.buildFileHistoriesFromCache(log, commitFilesMap);
69
+ // Identify recently modified files (reuses pre-fetched data)
70
+ const recentlyModifiedFiles = this.getRecentlyModifiedFilesFromCache(log, commitFilesMap, 10);
71
+ // Identify hotspot files (high change frequency)
72
+ const hotspotFiles = this.identifyHotspots(fileHistories, minChangeFrequency);
73
+ // Find files often changed together (reuses pre-fetched data)
74
+ const relatedFiles = this.findRelatedFilesFromCache(log, commitFilesMap);
75
+ const context = {
76
+ recentlyModifiedFiles,
77
+ hotspotFiles,
78
+ relatedFiles,
79
+ fileHistories,
80
+ };
81
+ // Cache the result
82
+ this.cache.set(cacheKey, context);
83
+ setTimeout(() => this.cache.delete(cacheKey), this.CACHE_TTL_MS);
84
+ return context;
85
+ }
86
+ catch (error) {
87
+ logger.debug("Failed to get lineage context:", error);
88
+ return null;
89
+ }
90
+ }
91
+ /**
92
+ * Get relevance score for a file based on git history
93
+ */
94
+ getFileLineageScore(filePath, context) {
95
+ if (!context)
96
+ return 0;
97
+ let score = 0;
98
+ // Recently modified files get high score
99
+ const recentIndex = context.recentlyModifiedFiles.indexOf(filePath);
100
+ if (recentIndex !== -1) {
101
+ score += 0.8 - recentIndex * 0.05; // Decay with position
102
+ }
103
+ // Hotspot files (frequently changed) get medium score
104
+ if (context.hotspotFiles.includes(filePath)) {
105
+ score += 0.4;
106
+ }
107
+ // Files with high commit count get small boost
108
+ const history = context.fileHistories.get(filePath);
109
+ if (history) {
110
+ const commitBoost = Math.min(0.2, history.commitCount / 100);
111
+ score += commitBoost;
112
+ }
113
+ return Math.min(1.0, score);
114
+ }
115
+ /**
116
+ * Get symbols from files related to a given file
117
+ */
118
+ getRelatedFileSymbols(filePath, context) {
119
+ if (!context)
120
+ return [];
121
+ const related = context.relatedFiles.get(filePath) || [];
122
+ return related;
123
+ }
124
+ /**
125
+ * Clear all caches
126
+ */
127
+ clear() {
128
+ this.cache.clear();
129
+ }
130
+ /**
131
+ * Fetch file lists for all commits ONCE. Reused by buildFileHistories,
132
+ * getRecentlyModifiedFiles, and findRelatedFiles to avoid spawning
133
+ * redundant git subprocesses (was ~110 subprocesses, now ~50).
134
+ */
135
+ async fetchCommitFiles(log) {
136
+ const commitFilesMap = new Map();
137
+ if (!this.git)
138
+ return commitFilesMap;
139
+ for (const commit of log.all) {
140
+ try {
141
+ const diff = await this.git.show([
142
+ "--name-only",
143
+ "--format=",
144
+ commit.hash,
145
+ ]);
146
+ const files = diff
147
+ .split("\n")
148
+ .filter((f) => f.trim() && !f.startsWith("diff"));
149
+ commitFilesMap.set(commit.hash, files);
150
+ }
151
+ catch (error) {
152
+ commitFilesMap.set(commit.hash, []);
153
+ }
154
+ }
155
+ return commitFilesMap;
156
+ }
157
+ /**
158
+ * Build file histories from pre-fetched commit data (no git subprocesses)
159
+ */
160
+ buildFileHistoriesFromCache(log, commitFilesMap) {
161
+ const histories = new Map();
162
+ for (const commit of log.all) {
163
+ const files = commitFilesMap.get(commit.hash) || [];
164
+ for (const file of files) {
165
+ if (!histories.has(file)) {
166
+ histories.set(file, {
167
+ filePath: file,
168
+ lastModified: new Date(commit.date),
169
+ commitCount: 0,
170
+ recentCommits: [],
171
+ authors: new Set(),
172
+ changeFrequency: 0,
173
+ });
174
+ }
175
+ const history = histories.get(file);
176
+ history.commitCount++;
177
+ if (history.recentCommits.length < 5) {
178
+ history.recentCommits.push(commit.hash);
179
+ }
180
+ history.authors.add(commit.author_name);
181
+ // Update last modified if this commit is more recent
182
+ const commitDate = new Date(commit.date);
183
+ if (commitDate > history.lastModified) {
184
+ history.lastModified = commitDate;
185
+ }
186
+ }
187
+ }
188
+ // Calculate change frequency (commits per day)
189
+ const now = Date.now();
190
+ for (const history of histories.values()) {
191
+ const daysSinceLastModified = (now - history.lastModified.getTime()) / (1000 * 60 * 60 * 24);
192
+ if (daysSinceLastModified > 0) {
193
+ history.changeFrequency = history.commitCount / daysSinceLastModified;
194
+ }
195
+ }
196
+ return histories;
197
+ }
198
+ /**
199
+ * Get files modified in recent commits from pre-fetched data (no git subprocesses)
200
+ */
201
+ getRecentlyModifiedFilesFromCache(log, commitFilesMap, commitCount) {
202
+ const files = new Set();
203
+ const recentCommits = log.all.slice(0, commitCount);
204
+ for (const commit of recentCommits) {
205
+ const commitFiles = commitFilesMap.get(commit.hash) || [];
206
+ for (const file of commitFiles) {
207
+ files.add(file);
208
+ }
209
+ }
210
+ return Array.from(files);
211
+ }
212
+ /**
213
+ * Identify hotspot files (frequently changed)
214
+ */
215
+ identifyHotspots(histories, minFrequency) {
216
+ return Array.from(histories.entries())
217
+ .filter(([_, history]) => history.changeFrequency >= minFrequency)
218
+ .sort((a, b) => b[1].changeFrequency - a[1].changeFrequency)
219
+ .map(([file, _]) => file)
220
+ .slice(0, 20); // Top 20 hotspots
221
+ }
222
+ /**
223
+ * Find files that are often changed together from pre-fetched data (no git subprocesses)
224
+ */
225
+ findRelatedFilesFromCache(log, commitFilesMap) {
226
+ const relatedFiles = new Map();
227
+ const coChangeMatrix = new Map();
228
+ // Build co-change matrix from pre-fetched data
229
+ for (const commit of log.all) {
230
+ const files = commitFilesMap.get(commit.hash) || [];
231
+ // Record co-changes
232
+ for (const file1 of files) {
233
+ if (!coChangeMatrix.has(file1)) {
234
+ coChangeMatrix.set(file1, new Map());
235
+ }
236
+ for (const file2 of files) {
237
+ if (file1 !== file2) {
238
+ const matrix = coChangeMatrix.get(file1);
239
+ matrix.set(file2, (matrix.get(file2) || 0) + 1);
240
+ }
241
+ }
242
+ }
243
+ }
244
+ // Extract top related files for each file
245
+ for (const [file, coChanges] of coChangeMatrix.entries()) {
246
+ const related = Array.from(coChanges.entries())
247
+ .sort((a, b) => b[1] - a[1])
248
+ .slice(0, 5) // Top 5 related files
249
+ .map(([f, _]) => f);
250
+ if (related.length > 0) {
251
+ relatedFiles.set(file, related);
252
+ }
253
+ }
254
+ return relatedFiles;
255
+ }
256
+ }
257
+ // Singleton instance
258
+ export const contextLineage = new ContextLineageClass();
259
+ //# sourceMappingURL=contextLineage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextLineage.js","sourceRoot":"","sources":["../../src/context/contextLineage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Context Orchestrator
3
+ *
4
+ * Coordinates all context features to work together seamlessly.
5
+ * Inspired by Augment Code's invisible, harmonious integration.
6
+ *
7
+ * @format
8
+ */
9
+ import { type ProjectContext } from "./projectContext.js";
10
+ import { type LineageContext } from "./contextLineage.js";
11
+ import { type ApiContractIssue } from "../api-contract/validators/index.js";
12
+ export interface OrchestrationContext {
13
+ projectContext: ProjectContext;
14
+ lineageContext: LineageContext | null;
15
+ relevantSymbols: string[];
16
+ useIncremental: boolean;
17
+ contextQuality: "excellent" | "good" | "fair" | "poor";
18
+ recommendations: string[];
19
+ apiContractIssues?: ApiContractIssue[];
20
+ apiContractSummary?: {
21
+ totalIssues: number;
22
+ critical: number;
23
+ high: number;
24
+ matchedEndpoints: number;
25
+ matchedTypes: number;
26
+ };
27
+ }
28
+ /**
29
+ * Orchestrate all context features to work together
30
+ */
31
+ export declare function orchestrateContext(options: {
32
+ projectPath: string;
33
+ language: string;
34
+ newCode?: string;
35
+ imports?: string[];
36
+ useSmartContext?: boolean;
37
+ includeLineage?: boolean;
38
+ forceRebuild?: boolean;
39
+ includeTests?: boolean;
40
+ maxFiles?: number;
41
+ sessionId?: string;
42
+ currentFile?: string;
43
+ recentlyEditedFiles?: string[];
44
+ }): Promise<OrchestrationContext>;
45
+ /**
46
+ * Record validation event for future context
47
+ */
48
+ export declare function recordValidationEvent(options: {
49
+ filePath?: string;
50
+ symbols: string[];
51
+ language: string;
52
+ }): void;
53
+ /**
54
+ * Get context quality explanation
55
+ */
56
+ export declare function explainContextQuality(quality: "excellent" | "good" | "fair" | "poor"): string;
57
+ //# sourceMappingURL=contextOrchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextOrchestrator.d.ts","sourceRoot":"","sources":["../../src/context/contextOrchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAqB,KAAK,cAAc,EAA2B,MAAM,qBAAqB,CAAC;AAEtG,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1E,OAAO,EAAmC,KAAK,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE7G,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACvD,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,kBAAkB,CAAC,EAAE;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAiKhC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,CAWP;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAC9C,MAAM,CAWR"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Context Orchestrator
3
+ *
4
+ * Coordinates all context features to work together seamlessly.
5
+ * Inspired by Augment Code's invisible, harmonious integration.
6
+ *
7
+ * @format
8
+ */
9
+ import { getProjectContext } from "./projectContext.js";
10
+ import { intentTracker } from "./intentTracker.js";
11
+ import { contextLineage } from "./contextLineage.js";
12
+ import { getRelevantSymbolsForValidation } from "../analyzers/relevanceScorer.js";
13
+ import { logger } from "../utils/logger.js";
14
+ import { validateApiContractsFromContext } from "../api-contract/validators/index.js";
15
+ /**
16
+ * Orchestrate all context features to work together
17
+ */
18
+ export async function orchestrateContext(options) {
19
+ const orchestrationStart = Date.now();
20
+ const { projectPath, language, newCode, imports = [], useSmartContext = true, includeLineage = false, forceRebuild = false, includeTests = true, maxFiles, sessionId, currentFile, recentlyEditedFiles = [], } = options;
21
+ const recommendations = [];
22
+ let contextQuality = "good";
23
+ // 1. Get project context (with branch-aware caching)
24
+ const contextStart = Date.now();
25
+ const projectContext = await getProjectContext(projectPath, {
26
+ language, // Use the requested language without overriding
27
+ forceRebuild,
28
+ includeTests,
29
+ ...(typeof maxFiles === "number" ? { maxFiles } : {}),
30
+ });
31
+ logger.debug(`Project context loaded in ${Date.now() - contextStart}ms`);
32
+ // 2. Get developer intent
33
+ const intent = intentTracker.getCurrentIntent();
34
+ if (intent.recentFiles.length > 0) {
35
+ logger.debug(`Developer intent: ${intent.recentFiles.length} recent files, focus: ${intent.focusArea || "none"}`);
36
+ }
37
+ // 3. Determine if we should use smart context (cheap checks only)
38
+ const shouldUseSmartContext = useSmartContext &&
39
+ projectContext.symbolGraph &&
40
+ projectContext.symbolIndex.size > 100 &&
41
+ (imports.length > 0 || intent.recentSymbols.size > 0);
42
+ // 4. Get git lineage context
43
+ let lineageContext = null;
44
+ // - for validate_code: only when smart context is enabled (performance)
45
+ // - for build_context: always when includeLineage is explicitly requested
46
+ if (includeLineage || shouldUseSmartContext) {
47
+ try {
48
+ lineageContext = await contextLineage.getLineageContext(projectPath, {
49
+ commitDepth: 20,
50
+ });
51
+ if (lineageContext) {
52
+ logger.debug(`Git lineage: ${lineageContext.recentlyModifiedFiles.length} recent files, ${lineageContext.hotspotFiles.length} hotspots`);
53
+ }
54
+ }
55
+ catch {
56
+ logger.debug("Git lineage not available");
57
+ }
58
+ }
59
+ // 5. Get relevant symbols using all available context
60
+ let relevantSymbols = [];
61
+ if (shouldUseSmartContext) {
62
+ relevantSymbols = getRelevantSymbolsForValidation(projectContext, {
63
+ importedSymbols: imports,
64
+ currentFile,
65
+ recentFiles: [...new Set([...intent.recentFiles, ...recentlyEditedFiles])],
66
+ lineageContext,
67
+ }, 0.3, // Min relevance score
68
+ 200);
69
+ const reductionPercent = Math.round((1 - relevantSymbols.length / projectContext.symbolIndex.size) * 100);
70
+ logger.debug(`Smart context: ${relevantSymbols.length}/${projectContext.symbolIndex.size} symbols (${reductionPercent}% reduction)`);
71
+ if (reductionPercent > 70) {
72
+ contextQuality = "excellent";
73
+ }
74
+ else if (reductionPercent > 50) {
75
+ contextQuality = "good";
76
+ }
77
+ else {
78
+ contextQuality = "fair";
79
+ }
80
+ }
81
+ else {
82
+ contextQuality = "fair";
83
+ if (projectContext.symbolIndex.size > 100) {
84
+ recommendations.push(useSmartContext
85
+ ? "Consider providing imports or using sessionId for better context"
86
+ : "Smart context disabled; running full-context validation");
87
+ }
88
+ }
89
+ // 6. Determine if incremental validation is beneficial
90
+ const useIncremental = Boolean(sessionId && newCode && newCode.split("\n").length > 10);
91
+ // 7. Quality assessment
92
+ if (!projectContext.symbolGraph) {
93
+ contextQuality = "poor";
94
+ recommendations.push("Symbol graph not available - rebuild context");
95
+ }
96
+ if (intent.recentFiles.length === 0 && !lineageContext) {
97
+ recommendations.push("No session context - provide sessionId for better results");
98
+ }
99
+ // 8. API Contract validation (if context has API Contract info)
100
+ let apiContractIssues;
101
+ let apiContractSummary;
102
+ if (projectContext.apiContract) {
103
+ const validationResult = validateApiContractsFromContext(projectContext);
104
+ apiContractIssues = validationResult.issues;
105
+ apiContractSummary = {
106
+ totalIssues: validationResult.summary.totalIssues,
107
+ critical: validationResult.summary.critical,
108
+ high: validationResult.summary.high,
109
+ matchedEndpoints: validationResult.summary.matchedEndpoints,
110
+ matchedTypes: validationResult.summary.matchedTypes,
111
+ };
112
+ if (validationResult.summary.critical > 0) {
113
+ recommendations.push(`${validationResult.summary.critical} critical API contract issues detected - review recommended`);
114
+ }
115
+ }
116
+ const totalTime = Date.now() - orchestrationStart;
117
+ logger.info(`Context orchestration completed in ${totalTime}ms (quality: ${contextQuality})`);
118
+ // Performance warning
119
+ if (totalTime > 5000) {
120
+ logger.warn(`Slow orchestration detected (${totalTime}ms) - consider limiting project scope`);
121
+ }
122
+ return {
123
+ projectContext,
124
+ lineageContext,
125
+ relevantSymbols,
126
+ useIncremental,
127
+ contextQuality,
128
+ recommendations,
129
+ apiContractIssues,
130
+ apiContractSummary,
131
+ };
132
+ }
133
+ /**
134
+ * Record validation event for future context
135
+ */
136
+ export function recordValidationEvent(options) {
137
+ const { filePath, symbols, language } = options;
138
+ if (filePath) {
139
+ intentTracker.recordEdit({
140
+ filePath,
141
+ timestamp: Date.now(),
142
+ symbols,
143
+ language,
144
+ });
145
+ }
146
+ }
147
+ /**
148
+ * Get context quality explanation
149
+ */
150
+ export function explainContextQuality(quality) {
151
+ switch (quality) {
152
+ case "excellent":
153
+ return "All context features active: smart filtering (>70% reduction), git history, and session tracking";
154
+ case "good":
155
+ return "Most context features active: smart filtering (>50% reduction) with some history";
156
+ case "fair":
157
+ return "Basic context available: limited filtering or missing session data";
158
+ case "poor":
159
+ return "Minimal context: missing symbol graph or project data";
160
+ }
161
+ }
162
+ //# sourceMappingURL=contextOrchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextOrchestrator.js","sourceRoot":"","sources":["../../src/context/contextOrchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Intent Tracker - Understands Developer Intent from Edit History
3
+ *
4
+ * Inspired by Augment Code's intent-based context system.
5
+ * Tracks recent file edits to understand what the developer is working on
6
+ * and prioritizes related symbols in validation.
7
+ *
8
+ * @format
9
+ */
10
+ export interface EditEvent {
11
+ filePath: string;
12
+ timestamp: number;
13
+ symbols: string[];
14
+ language: string;
15
+ }
16
+ export interface DeveloperIntent {
17
+ recentFiles: string[];
18
+ recentSymbols: Set<string>;
19
+ focusArea: string | null;
20
+ language: string | null;
21
+ }
22
+ declare class IntentTrackerClass {
23
+ private editHistory;
24
+ private readonly MAX_HISTORY;
25
+ private readonly INTENT_WINDOW_MS;
26
+ /**
27
+ * Record a file edit event
28
+ */
29
+ recordEdit(event: EditEvent): void;
30
+ /**
31
+ * Get current developer intent based on recent edits
32
+ */
33
+ getCurrentIntent(): DeveloperIntent;
34
+ /**
35
+ * Check if a file is in the current focus area
36
+ */
37
+ isInFocusArea(filePath: string): boolean;
38
+ /**
39
+ * Check if a symbol is recently used
40
+ */
41
+ isRecentlyUsed(symbol: string): boolean;
42
+ /**
43
+ * Get relevance score for a file based on intent
44
+ */
45
+ getFileRelevance(filePath: string): number;
46
+ /**
47
+ * Get relevance score for a symbol based on intent
48
+ */
49
+ getSymbolRelevance(symbol: string): number;
50
+ /**
51
+ * Clear all edit history
52
+ */
53
+ clear(): void;
54
+ /**
55
+ * Get recent edits within the intent window
56
+ */
57
+ private getRecentEdits;
58
+ /**
59
+ * Remove events older than the intent window
60
+ */
61
+ private cleanupOldEvents;
62
+ /**
63
+ * Determine the focus area from recent files
64
+ */
65
+ private determineFocusArea;
66
+ /**
67
+ * Determine primary language from recent edits
68
+ */
69
+ private determinePrimaryLanguage;
70
+ }
71
+ export declare const intentTracker: IntentTrackerClass;
72
+ export {};
73
+ //# sourceMappingURL=intentTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intentTracker.d.ts","sourceRoot":"","sources":["../../src/context/intentTracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,cAAM,kBAAkB;IACtB,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAM;IAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiB;IAElD;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAYlC;;OAEG;IACH,gBAAgB,IAAI,eAAe;IA6BnC;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAOxC;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAKvC;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAmB1C;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAU1C;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAsBjC;AAGD,eAAO,MAAM,aAAa,oBAA2B,CAAC"}