@mycodemap/mycodemap 0.4.2 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/CHANGELOG.md +105 -3
  2. package/README.md +192 -53
  3. package/dist/ai/claude.d.ts +38 -0
  4. package/dist/ai/claude.d.ts.map +1 -0
  5. package/dist/ai/claude.js +169 -0
  6. package/dist/ai/claude.js.map +1 -0
  7. package/dist/ai/codex.d.ts +38 -0
  8. package/dist/ai/codex.d.ts.map +1 -0
  9. package/dist/ai/codex.js +169 -0
  10. package/dist/ai/codex.js.map +1 -0
  11. package/dist/ai/factory.d.ts +48 -0
  12. package/dist/ai/factory.d.ts.map +1 -0
  13. package/dist/ai/factory.js +95 -0
  14. package/dist/ai/factory.js.map +1 -0
  15. package/dist/ai/index.d.ts +12 -0
  16. package/dist/ai/index.d.ts.map +1 -0
  17. package/dist/ai/index.js +29 -0
  18. package/dist/ai/index.js.map +1 -0
  19. package/dist/ai/provider.d.ts +70 -0
  20. package/dist/ai/provider.d.ts.map +1 -0
  21. package/dist/ai/provider.js +31 -0
  22. package/dist/ai/provider.js.map +1 -0
  23. package/dist/ai/subagent-caller.d.ts +90 -0
  24. package/dist/ai/subagent-caller.d.ts.map +1 -0
  25. package/dist/ai/subagent-caller.js +280 -0
  26. package/dist/ai/subagent-caller.js.map +1 -0
  27. package/dist/ai/types.d.ts +70 -0
  28. package/dist/ai/types.d.ts.map +1 -0
  29. package/dist/ai/types.js +5 -0
  30. package/dist/ai/types.js.map +1 -0
  31. package/dist/cli/commands/analyze.d.ts +18 -0
  32. package/dist/cli/commands/analyze.d.ts.map +1 -1
  33. package/dist/cli/commands/analyze.js +239 -6
  34. package/dist/cli/commands/analyze.js.map +1 -1
  35. package/dist/cli/commands/check.d.ts +22 -0
  36. package/dist/cli/commands/check.d.ts.map +1 -0
  37. package/dist/cli/commands/check.js +168 -0
  38. package/dist/cli/commands/check.js.map +1 -0
  39. package/dist/cli/commands/ci.d.ts +25 -0
  40. package/dist/cli/commands/ci.d.ts.map +1 -1
  41. package/dist/cli/commands/ci.js +139 -36
  42. package/dist/cli/commands/ci.js.map +1 -1
  43. package/dist/cli/commands/complexity.d.ts.map +1 -1
  44. package/dist/cli/commands/complexity.js +6 -0
  45. package/dist/cli/commands/complexity.js.map +1 -1
  46. package/dist/cli/commands/design.d.ts +52 -0
  47. package/dist/cli/commands/design.d.ts.map +1 -0
  48. package/dist/cli/commands/design.js +274 -0
  49. package/dist/cli/commands/design.js.map +1 -0
  50. package/dist/cli/commands/generate.d.ts +1 -0
  51. package/dist/cli/commands/generate.d.ts.map +1 -1
  52. package/dist/cli/commands/generate.js +121 -8
  53. package/dist/cli/commands/generate.js.map +1 -1
  54. package/dist/cli/commands/history.d.ts +26 -0
  55. package/dist/cli/commands/history.d.ts.map +1 -0
  56. package/dist/cli/commands/history.js +92 -0
  57. package/dist/cli/commands/history.js.map +1 -0
  58. package/dist/cli/commands/mcp.d.ts +13 -0
  59. package/dist/cli/commands/mcp.d.ts.map +1 -0
  60. package/dist/cli/commands/mcp.js +108 -0
  61. package/dist/cli/commands/mcp.js.map +1 -0
  62. package/dist/cli/commands/server.d.ts +9 -0
  63. package/dist/cli/commands/server.d.ts.map +1 -0
  64. package/dist/cli/commands/server.js +65 -0
  65. package/dist/cli/commands/server.js.map +1 -0
  66. package/dist/cli/commands/ship/pipeline.d.ts.map +1 -1
  67. package/dist/cli/commands/ship/pipeline.js +8 -1
  68. package/dist/cli/commands/ship/pipeline.js.map +1 -1
  69. package/dist/cli/commands/ship/publisher.d.ts +9 -1
  70. package/dist/cli/commands/ship/publisher.d.ts.map +1 -1
  71. package/dist/cli/commands/ship/publisher.js +149 -6
  72. package/dist/cli/commands/ship/publisher.js.map +1 -1
  73. package/dist/cli/commands/workflow.d.ts.map +1 -1
  74. package/dist/cli/commands/workflow.js +22 -2
  75. package/dist/cli/commands/workflow.js.map +1 -1
  76. package/dist/cli/config-loader.d.ts.map +1 -1
  77. package/dist/cli/config-loader.js +3 -2
  78. package/dist/cli/config-loader.js.map +1 -1
  79. package/dist/cli/contract-checker.d.ts +33 -0
  80. package/dist/cli/contract-checker.d.ts.map +1 -0
  81. package/dist/cli/contract-checker.js +719 -0
  82. package/dist/cli/contract-checker.js.map +1 -0
  83. package/dist/cli/contract-diff-scope.d.ts +14 -0
  84. package/dist/cli/contract-diff-scope.d.ts.map +1 -0
  85. package/dist/cli/contract-diff-scope.js +127 -0
  86. package/dist/cli/contract-diff-scope.js.map +1 -0
  87. package/dist/cli/contract-gate-thresholds.d.ts +14 -0
  88. package/dist/cli/contract-gate-thresholds.d.ts.map +1 -0
  89. package/dist/cli/contract-gate-thresholds.js +19 -0
  90. package/dist/cli/contract-gate-thresholds.js.map +1 -0
  91. package/dist/cli/design-contract-loader.d.ts +15 -0
  92. package/dist/cli/design-contract-loader.d.ts.map +1 -0
  93. package/dist/cli/design-contract-loader.js +527 -0
  94. package/dist/cli/design-contract-loader.js.map +1 -0
  95. package/dist/cli/design-contract-schema.d.ts +11 -0
  96. package/dist/cli/design-contract-schema.d.ts.map +1 -0
  97. package/dist/cli/design-contract-schema.js +75 -0
  98. package/dist/cli/design-contract-schema.js.map +1 -0
  99. package/dist/cli/design-handoff-builder.d.ts +15 -0
  100. package/dist/cli/design-handoff-builder.d.ts.map +1 -0
  101. package/dist/cli/design-handoff-builder.js +345 -0
  102. package/dist/cli/design-handoff-builder.js.map +1 -0
  103. package/dist/cli/design-scope-resolver.d.ts +8 -0
  104. package/dist/cli/design-scope-resolver.d.ts.map +1 -0
  105. package/dist/cli/design-scope-resolver.js +760 -0
  106. package/dist/cli/design-scope-resolver.js.map +1 -0
  107. package/dist/cli/design-verification-builder.d.ts +8 -0
  108. package/dist/cli/design-verification-builder.d.ts.map +1 -0
  109. package/dist/cli/design-verification-builder.js +369 -0
  110. package/dist/cli/design-verification-builder.js.map +1 -0
  111. package/dist/cli/index.js +20 -6
  112. package/dist/cli/index.js.map +1 -1
  113. package/dist/cli/paths.d.ts.map +1 -1
  114. package/dist/cli/paths.js +30 -7
  115. package/dist/cli/paths.js.map +1 -1
  116. package/dist/cli-new/commands/server.d.ts +13 -0
  117. package/dist/cli-new/commands/server.d.ts.map +1 -0
  118. package/dist/cli-new/commands/server.js +90 -0
  119. package/dist/cli-new/commands/server.js.map +1 -0
  120. package/dist/core/analyzer.d.ts.map +1 -1
  121. package/dist/core/analyzer.js +16 -0
  122. package/dist/core/analyzer.js.map +1 -1
  123. package/dist/domain/entities/CodeGraph.d.ts +5 -1
  124. package/dist/domain/entities/CodeGraph.d.ts.map +1 -1
  125. package/dist/domain/entities/CodeGraph.js +29 -12
  126. package/dist/domain/entities/CodeGraph.js.map +1 -1
  127. package/dist/domain/entities/Dependency.d.ts +8 -1
  128. package/dist/domain/entities/Dependency.d.ts.map +1 -1
  129. package/dist/domain/entities/Dependency.js +19 -4
  130. package/dist/domain/entities/Dependency.js.map +1 -1
  131. package/dist/domain/entities/Symbol.d.ts +2 -1
  132. package/dist/domain/entities/Symbol.d.ts.map +1 -1
  133. package/dist/domain/entities/Symbol.js +6 -3
  134. package/dist/domain/entities/Symbol.js.map +1 -1
  135. package/dist/generator/ai-overview.d.ts +51 -0
  136. package/dist/generator/ai-overview.d.ts.map +1 -0
  137. package/dist/generator/ai-overview.js +160 -0
  138. package/dist/generator/ai-overview.js.map +1 -0
  139. package/dist/infrastructure/storage/StorageFactory.d.ts +13 -5
  140. package/dist/infrastructure/storage/StorageFactory.d.ts.map +1 -1
  141. package/dist/infrastructure/storage/StorageFactory.js +62 -16
  142. package/dist/infrastructure/storage/StorageFactory.js.map +1 -1
  143. package/dist/infrastructure/storage/adapters/FileSystemStorage.d.ts +3 -1
  144. package/dist/infrastructure/storage/adapters/FileSystemStorage.d.ts.map +1 -1
  145. package/dist/infrastructure/storage/adapters/FileSystemStorage.js +10 -2
  146. package/dist/infrastructure/storage/adapters/FileSystemStorage.js.map +1 -1
  147. package/dist/infrastructure/storage/adapters/KuzuDBStorage.d.ts +3 -1
  148. package/dist/infrastructure/storage/adapters/KuzuDBStorage.d.ts.map +1 -1
  149. package/dist/infrastructure/storage/adapters/KuzuDBStorage.js +9 -1
  150. package/dist/infrastructure/storage/adapters/KuzuDBStorage.js.map +1 -1
  151. package/dist/infrastructure/storage/adapters/MemoryStorage.d.ts +3 -1
  152. package/dist/infrastructure/storage/adapters/MemoryStorage.d.ts.map +1 -1
  153. package/dist/infrastructure/storage/adapters/MemoryStorage.js +9 -1
  154. package/dist/infrastructure/storage/adapters/MemoryStorage.js.map +1 -1
  155. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts +41 -0
  156. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts.map +1 -0
  157. package/dist/infrastructure/storage/adapters/Neo4jStorage.js +162 -0
  158. package/dist/infrastructure/storage/adapters/Neo4jStorage.js.map +1 -0
  159. package/dist/infrastructure/storage/adapters/SQLiteStorage.d.ts +53 -0
  160. package/dist/infrastructure/storage/adapters/SQLiteStorage.d.ts.map +1 -0
  161. package/dist/infrastructure/storage/adapters/SQLiteStorage.js +879 -0
  162. package/dist/infrastructure/storage/adapters/SQLiteStorage.js.map +1 -0
  163. package/dist/infrastructure/storage/graph-helpers.d.ts +3 -1
  164. package/dist/infrastructure/storage/graph-helpers.d.ts.map +1 -1
  165. package/dist/infrastructure/storage/graph-helpers.js +90 -0
  166. package/dist/infrastructure/storage/graph-helpers.js.map +1 -1
  167. package/dist/infrastructure/storage/index.d.ts +1 -1
  168. package/dist/infrastructure/storage/index.d.ts.map +1 -1
  169. package/dist/infrastructure/storage/interfaces/StorageBase.d.ts +3 -1
  170. package/dist/infrastructure/storage/interfaces/StorageBase.d.ts.map +1 -1
  171. package/dist/infrastructure/storage/interfaces/StorageBase.js.map +1 -1
  172. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.d.ts +27 -0
  173. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.d.ts.map +1 -0
  174. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.js +246 -0
  175. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.js.map +1 -0
  176. package/dist/infrastructure/storage/sqlite/perf-thresholds.d.ts +25 -0
  177. package/dist/infrastructure/storage/sqlite/perf-thresholds.d.ts.map +1 -0
  178. package/dist/infrastructure/storage/sqlite/perf-thresholds.js +25 -0
  179. package/dist/infrastructure/storage/sqlite/perf-thresholds.js.map +1 -0
  180. package/dist/infrastructure/storage/sqlite/schema.d.ts +4 -0
  181. package/dist/infrastructure/storage/sqlite/schema.d.ts.map +1 -0
  182. package/dist/infrastructure/storage/sqlite/schema.js +111 -0
  183. package/dist/infrastructure/storage/sqlite/schema.js.map +1 -0
  184. package/dist/interface/types/design-check.d.ts +73 -0
  185. package/dist/interface/types/design-check.d.ts.map +1 -0
  186. package/dist/interface/types/design-check.js +4 -0
  187. package/dist/interface/types/design-check.js.map +1 -0
  188. package/dist/interface/types/design-contract.d.ts +123 -0
  189. package/dist/interface/types/design-contract.d.ts.map +1 -0
  190. package/dist/interface/types/design-contract.js +7 -0
  191. package/dist/interface/types/design-contract.js.map +1 -0
  192. package/dist/interface/types/design-handoff.d.ts +68 -0
  193. package/dist/interface/types/design-handoff.d.ts.map +1 -0
  194. package/dist/interface/types/design-handoff.js +4 -0
  195. package/dist/interface/types/design-handoff.js.map +1 -0
  196. package/dist/interface/types/design-mapping.d.ts +51 -0
  197. package/dist/interface/types/design-mapping.d.ts.map +1 -0
  198. package/dist/interface/types/design-mapping.js +4 -0
  199. package/dist/interface/types/design-mapping.js.map +1 -0
  200. package/dist/interface/types/design-verification.d.ts +49 -0
  201. package/dist/interface/types/design-verification.d.ts.map +1 -0
  202. package/dist/interface/types/design-verification.js +4 -0
  203. package/dist/interface/types/design-verification.js.map +1 -0
  204. package/dist/interface/types/history-risk.d.ts +90 -0
  205. package/dist/interface/types/history-risk.d.ts.map +1 -0
  206. package/dist/interface/types/history-risk.js +4 -0
  207. package/dist/interface/types/history-risk.js.map +1 -0
  208. package/dist/interface/types/index.d.ts +20 -1
  209. package/dist/interface/types/index.d.ts.map +1 -1
  210. package/dist/interface/types/storage.d.ts +28 -1
  211. package/dist/interface/types/storage.d.ts.map +1 -1
  212. package/dist/orchestrator/adapters/ast-grep-adapter.d.ts +10 -0
  213. package/dist/orchestrator/adapters/ast-grep-adapter.d.ts.map +1 -1
  214. package/dist/orchestrator/adapters/ast-grep-adapter.js +46 -17
  215. package/dist/orchestrator/adapters/ast-grep-adapter.js.map +1 -1
  216. package/dist/orchestrator/adapters/codemap-adapter.d.ts.map +1 -1
  217. package/dist/orchestrator/adapters/codemap-adapter.js +2 -22
  218. package/dist/orchestrator/adapters/codemap-adapter.js.map +1 -1
  219. package/dist/orchestrator/ai-feed-generator.d.ts +210 -0
  220. package/dist/orchestrator/ai-feed-generator.d.ts.map +1 -0
  221. package/dist/orchestrator/ai-feed-generator.js +377 -0
  222. package/dist/orchestrator/ai-feed-generator.js.map +1 -0
  223. package/dist/orchestrator/history-risk-service.d.ts +55 -0
  224. package/dist/orchestrator/history-risk-service.d.ts.map +1 -0
  225. package/dist/orchestrator/history-risk-service.js +680 -0
  226. package/dist/orchestrator/history-risk-service.js.map +1 -0
  227. package/dist/orchestrator/types.d.ts +19 -1
  228. package/dist/orchestrator/types.d.ts.map +1 -1
  229. package/dist/orchestrator/types.js +19 -0
  230. package/dist/orchestrator/types.js.map +1 -1
  231. package/dist/server/mcp/index.d.ts +4 -0
  232. package/dist/server/mcp/index.d.ts.map +1 -0
  233. package/dist/server/mcp/index.js +5 -0
  234. package/dist/server/mcp/index.js.map +1 -0
  235. package/dist/server/mcp/server.d.ts +17 -0
  236. package/dist/server/mcp/server.d.ts.map +1 -0
  237. package/dist/server/mcp/server.js +84 -0
  238. package/dist/server/mcp/server.js.map +1 -0
  239. package/dist/server/mcp/service.d.ts +22 -0
  240. package/dist/server/mcp/service.d.ts.map +1 -0
  241. package/dist/server/mcp/service.js +177 -0
  242. package/dist/server/mcp/service.js.map +1 -0
  243. package/dist/server/mcp/types.d.ts +56 -0
  244. package/dist/server/mcp/types.d.ts.map +1 -0
  245. package/dist/server/mcp/types.js +4 -0
  246. package/dist/server/mcp/types.js.map +1 -0
  247. package/docs/AI_ASSISTANT_SETUP.md +1 -1
  248. package/docs/SETUP_GUIDE.md +6 -6
  249. package/docs/ai-guide/COMMANDS.md +171 -4
  250. package/docs/ai-guide/INTEGRATION.md +137 -433
  251. package/docs/ai-guide/OUTPUT.md +890 -5
  252. package/docs/ai-guide/PATTERNS.md +54 -14
  253. package/docs/ai-guide/PROMPTS.md +17 -6
  254. package/docs/archive/test-report-symbol-search.md +384 -0
  255. package/docs/archive/test-scenario-4-complexity-analysis.md +460 -0
  256. package/docs/archive/test_report_scenario5.md +615 -0
  257. package/docs/archive/test_scenario_3_impact_analysis_report.md +520 -0
  258. package/docs/backlog.md +177 -0
  259. package/docs/eatdogfood-reports/2026-04-17-eatdogfood-agent-experience.md +231 -0
  260. package/docs/exec-plans/completed/2026-04-17-eatdogfood-codemap-cli.md +103 -0
  261. package/docs/ideation/2026-04-15-executable-architecture-constitution-ideation.md +102 -0
  262. package/docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md +126 -0
  263. package/docs/product-specs/MVP3-ARCHITECTURE-COMPARISON.md +11 -10
  264. package/docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-PRD.md +10 -10
  265. package/docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-TECH-PRD.md +17 -12
  266. package/docs/product-specs/README.md +2 -1
  267. package/docs/rules/README.md +16 -11
  268. package/docs/rules/architecture-guardrails.md +24 -336
  269. package/docs/rules/code-quality-redlines.md +25 -311
  270. package/docs/rules/engineering-with-codex-openai.md +20 -3
  271. package/docs/rules/validation.md +90 -37
  272. package/mycodemap.config.schema.json +3 -3
  273. package/package.json +7 -2
  274. package/scripts/benchmark-governance-graph.mjs +132 -0
  275. package/scripts/calibrate-contract-gate.mjs +221 -0
  276. package/scripts/capability-report.py +255 -0
  277. package/scripts/experiments/arcadedb-http-smoke.mjs +90 -0
  278. package/scripts/qa-rule-control.sh +254 -0
  279. package/scripts/report-high-risk-files.mjs +395 -0
  280. package/scripts/rule-context.mjs +155 -0
  281. package/scripts/smoke-sqlite-impact.mjs +85 -0
  282. package/scripts/sync-analyze-docs.js +1 -0
  283. package/scripts/tests/test_capability_report.py +89 -0
  284. package/scripts/tests/test_rule_control_workflow.py +51 -0
  285. package/scripts/tests/test_validate_rules.py +81 -0
  286. package/scripts/validate-ai-docs.js +283 -1
  287. package/scripts/validate-docs.js +479 -25
  288. package/scripts/validate-rules.py +254 -0
@@ -0,0 +1,210 @@
1
+ import { GitAnalyzer, HeatScore } from './git-analyzer';
2
+ /**
3
+ * File metadata interface (flat structure for compatibility)
4
+ */
5
+ export interface FileMeta {
6
+ /** Creation date, format: 2024-01 */
7
+ since?: string;
8
+ /** Owner/team */
9
+ owner?: string;
10
+ /** Whether stable */
11
+ stable?: boolean;
12
+ /** Reason for existence */
13
+ why?: string;
14
+ /** Key dependencies */
15
+ deps?: string[];
16
+ }
17
+ /**
18
+ * File header metadata interface (nested structure)
19
+ * @deprecated Use FileMeta instead
20
+ */
21
+ export interface FileHeaderMeta {
22
+ /** Creation date, format: 2024-01 */
23
+ since?: string;
24
+ /** Owner/team */
25
+ owner?: string;
26
+ /** Whether stable */
27
+ stable?: boolean;
28
+ }
29
+ /**
30
+ * File header parsing result interface
31
+ */
32
+ export interface FileHeader {
33
+ /** META metadata */
34
+ meta?: FileHeaderMeta;
35
+ /** Reason for existence */
36
+ why?: string;
37
+ /** Key dependencies */
38
+ deps?: string[];
39
+ }
40
+ /**
41
+ * AI Feed entry interface
42
+ */
43
+ export interface AIFeed {
44
+ /** File path */
45
+ file: string;
46
+ /** Dependency complexity (out-degree + in-degree) */
47
+ gravity: number;
48
+ /** Heat score */
49
+ heat: HeatScore;
50
+ /** Metadata */
51
+ meta: FileHeaderMeta & {
52
+ why?: string;
53
+ };
54
+ /** Dependencies */
55
+ deps: string[];
56
+ /** Files that depend on this */
57
+ dependents: string[];
58
+ }
59
+ /**
60
+ * File header comment scanner
61
+ * Scans [META]/[WHY]/[DEPS] comments at the top of files
62
+ */
63
+ export declare class FileHeaderScanner {
64
+ /**
65
+ * Scan file header comments
66
+ * Only reads first 10 lines of the file
67
+ *
68
+ * @param filePath - Full file path
69
+ * @returns FileMeta parsing result
70
+ */
71
+ scan(filePath: string): FileMeta;
72
+ /**
73
+ * Parse file header content string (public for testing)
74
+ * Alias for parseHeaderContent for backward compatibility
75
+ *
76
+ * @param header - File header content (first 10 lines as string)
77
+ * @returns FileMeta parsing result with flat structure
78
+ */
79
+ parseHeader(header: string): FileMeta;
80
+ /**
81
+ * Parse file header content (public for testing)
82
+ * Returns nested structure for backward compatibility with tests
83
+ *
84
+ * @param header - File header content (first 10 lines)
85
+ * @returns FileHeader parsing result with nested meta
86
+ */
87
+ parseHeaderContent(header: string): FileHeader & FileMeta;
88
+ /**
89
+ * Validate file header completeness
90
+ * Used by CI gateway
91
+ *
92
+ * @param filePath - File path
93
+ * @returns Validation result
94
+ */
95
+ validate(filePath: string): {
96
+ valid: boolean;
97
+ missing: string[];
98
+ };
99
+ }
100
+ /**
101
+ * AI Feed Generator class
102
+ * Generates structured data for AI consumption
103
+ */
104
+ export declare class AIFeedGenerator {
105
+ private gitAnalyzer;
106
+ private headerScanner;
107
+ /**
108
+ * Constructor
109
+ *
110
+ * @param gitAnalyzer - GitAnalyzer instance
111
+ */
112
+ constructor(gitAnalyzer: GitAnalyzer);
113
+ /**
114
+ * Generate AI feed
115
+ * Integrated into codemap generate command
116
+ *
117
+ * @param projectRoot - Project root directory
118
+ * @param options - Generation options
119
+ * @param options.includeGitHistory - Whether to include Git history analysis (default: false)
120
+ * @returns AIFeed[] feed list (sorted by gravity descending)
121
+ */
122
+ generate(projectRoot: string, options?: {
123
+ includeGitHistory?: boolean;
124
+ }): Promise<AIFeed[]>;
125
+ /**
126
+ * Output AI feed file
127
+ *
128
+ * @param feed - AI feed list
129
+ * @param outputPath - Output file path
130
+ */
131
+ writeFeedFile(feed: AIFeed[], outputPath: string): void;
132
+ /**
133
+ * Scan Git history for heat score
134
+ *
135
+ * @param filePath - File path (relative to projectRoot)
136
+ * @param projectRoot - Project root directory
137
+ * @returns HeatScore heat score
138
+ */
139
+ private scanGitHistory;
140
+ /**
141
+ * Calculate dependencies
142
+ * Scan import statements, build dependency graph
143
+ *
144
+ * @param feed - AI feed list
145
+ * @param projectRoot - Project root directory
146
+ */
147
+ private calculateDependencies;
148
+ /**
149
+ * Resolve import path to path relative to project root
150
+ *
151
+ * @param currentFile - Current file path
152
+ * @param importPath - Import path from import statement
153
+ * @returns Resolved path, or null if cannot resolve
154
+ */
155
+ private resolveImportPath;
156
+ /**
157
+ * Scan file header (convenience method)
158
+ * Delegates to FileHeaderScanner
159
+ *
160
+ * @param filePath - File path
161
+ * @returns FileMeta file metadata
162
+ */
163
+ scanFileHeader(filePath: string): FileMeta;
164
+ /**
165
+ * Calculate scores for a single feed item
166
+ * Returns normalized scores
167
+ *
168
+ * @param feed - AI feed item
169
+ * @param maxGravity - Maximum gravity value for normalization
170
+ * @param maxImpact - Maximum impact value for normalization
171
+ * @returns Object with gravity, impact, heat scores
172
+ */
173
+ calculateScores(feed: AIFeed, maxGravity?: number, maxImpact?: number): {
174
+ gravity: number;
175
+ impact: number;
176
+ heat: number;
177
+ };
178
+ /**
179
+ * Calculate file risk level
180
+ * Based on REQUIREMENTS section 8.6 risk scoring formula
181
+ *
182
+ * @param feed - Single file AI feed
183
+ * @returns Risk level: 'high' | 'medium' | 'low'
184
+ */
185
+ calculateRisk(feed: AIFeed): 'high' | 'medium' | 'low';
186
+ /**
187
+ * Batch calculate risk levels
188
+ *
189
+ * @param feedList - AI feed list
190
+ * @returns Map<file path, risk level>
191
+ */
192
+ calculateRisks(feedList: AIFeed[]): Map<string, 'high' | 'medium' | 'low'>;
193
+ /**
194
+ * Get high risk file list
195
+ *
196
+ * @param feedList - AI feed list
197
+ * @returns High risk file list
198
+ */
199
+ getHighRiskFiles(feedList: AIFeed[]): AIFeed[];
200
+ /**
201
+ * Generate JSON format AI feed
202
+ * For programmatic processing
203
+ *
204
+ * @param feed - AI feed list
205
+ * @param outputPath - Output file path
206
+ */
207
+ writeFeedFileJson(feed: AIFeed[], outputPath: string): void;
208
+ }
209
+ export type { HeatScore };
210
+ //# sourceMappingURL=ai-feed-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-feed-generator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/ai-feed-generator.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2BAA2B;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,2BAA2B;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,eAAe;IACf,IAAI,EAAE,cAAc,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,mBAAmB;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,gCAAgC;IAChC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;OAMG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ;IAahC;;;;;;OAMG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;IAIrC;;;;;;OAMG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ;IAoCzD;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE;CAgBlE;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAoB;IAEzC;;;;OAIG;gBACS,WAAW,EAAE,WAAW;IAKpC;;;;;;;;OAQG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA+CjG;;;;;OAKG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IA4BvD;;;;;;OAMG;YACW,cAAc;IAI5B;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAuE7B;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAezB;;;;;;OAMG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ;IAI1C;;;;;;;;OAQG;IACH,eAAe,CACb,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,MAAW,EACvB,SAAS,GAAE,MAAW,GACrB;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAYpD;;;;;;OAMG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK;IAStD;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAU1E;;;;;OAKG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAI9C;;;;;;OAMG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;CAS5D;AAGD,YAAY,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,377 @@
1
+ // [META] since:2026-03-02 | owner:orchestrator-team | stable:true
2
+ // [WHY] AI feed generator with date format alignment for JSON serialization
3
+ /**
4
+ * AI Feed Generator
5
+ * Generates structured data for AI consumption (ai-feed.txt)
6
+ * Provides code metadata, dependency complexity, modification heat, etc.
7
+ */
8
+ import * as fs from 'fs';
9
+ import * as path from 'path';
10
+ import { globby } from 'globby';
11
+ /**
12
+ * File header comment scanner
13
+ * Scans [META]/[WHY]/[DEPS] comments at the top of files
14
+ */
15
+ export class FileHeaderScanner {
16
+ /**
17
+ * Scan file header comments
18
+ * Only reads first 10 lines of the file
19
+ *
20
+ * @param filePath - Full file path
21
+ * @returns FileMeta parsing result
22
+ */
23
+ scan(filePath) {
24
+ try {
25
+ const content = fs.readFileSync(filePath, 'utf-8');
26
+ const lines = content.split('\n').slice(0, 10);
27
+ const header = lines.join('\n');
28
+ return this.parseHeader(header);
29
+ }
30
+ catch {
31
+ // Return empty object on read failure
32
+ return {};
33
+ }
34
+ }
35
+ /**
36
+ * Parse file header content string (public for testing)
37
+ * Alias for parseHeaderContent for backward compatibility
38
+ *
39
+ * @param header - File header content (first 10 lines as string)
40
+ * @returns FileMeta parsing result with flat structure
41
+ */
42
+ parseHeader(header) {
43
+ return this.parseHeaderContent(header);
44
+ }
45
+ /**
46
+ * Parse file header content (public for testing)
47
+ * Returns nested structure for backward compatibility with tests
48
+ *
49
+ * @param header - File header content (first 10 lines)
50
+ * @returns FileHeader parsing result with nested meta
51
+ */
52
+ parseHeaderContent(header) {
53
+ const result = {};
54
+ // Parse [META]
55
+ const metaMatch = header.match(/\/\/\s*\[META\]\s*(.+)/);
56
+ if (metaMatch) {
57
+ const metaStr = metaMatch[1];
58
+ result.meta = {
59
+ since: metaStr.match(/since:(\S+)/)?.[1],
60
+ owner: metaStr.match(/owner:(\S+)/)?.[1],
61
+ stable: metaStr.includes('stable:true')
62
+ };
63
+ // Also set flat properties for compatibility
64
+ result.since = result.meta.since;
65
+ result.owner = result.meta.owner;
66
+ result.stable = result.meta.stable;
67
+ }
68
+ // Parse [WHY]
69
+ const whyMatch = header.match(/\/\/\s*\[WHY\]\s*(.+)/);
70
+ if (whyMatch) {
71
+ result.why = whyMatch[1].trim();
72
+ }
73
+ // Parse [DEPS]
74
+ const depsMatch = header.match(/\/\/\s*\[DEPS\]\s*(.+)/);
75
+ if (depsMatch) {
76
+ result.deps = depsMatch[1]
77
+ .split(',')
78
+ .map(d => d.trim())
79
+ .filter(d => d.length > 0);
80
+ }
81
+ return result;
82
+ }
83
+ /**
84
+ * Validate file header completeness
85
+ * Used by CI gateway
86
+ *
87
+ * @param filePath - File path
88
+ * @returns Validation result
89
+ */
90
+ validate(filePath) {
91
+ const meta = this.scan(filePath);
92
+ const missing = [];
93
+ if (!meta.since) {
94
+ missing.push('[META] since');
95
+ }
96
+ if (!meta.why) {
97
+ missing.push('[WHY]');
98
+ }
99
+ return {
100
+ valid: missing.length === 0,
101
+ missing
102
+ };
103
+ }
104
+ }
105
+ /**
106
+ * AI Feed Generator class
107
+ * Generates structured data for AI consumption
108
+ */
109
+ export class AIFeedGenerator {
110
+ gitAnalyzer;
111
+ headerScanner;
112
+ /**
113
+ * Constructor
114
+ *
115
+ * @param gitAnalyzer - GitAnalyzer instance
116
+ */
117
+ constructor(gitAnalyzer) {
118
+ this.gitAnalyzer = gitAnalyzer;
119
+ this.headerScanner = new FileHeaderScanner();
120
+ }
121
+ /**
122
+ * Generate AI feed
123
+ * Integrated into codemap generate command
124
+ *
125
+ * @param projectRoot - Project root directory
126
+ * @param options - Generation options
127
+ * @param options.includeGitHistory - Whether to include Git history analysis (default: false)
128
+ * @returns AIFeed[] feed list (sorted by gravity descending)
129
+ */
130
+ async generate(projectRoot, options) {
131
+ const includeGitHistory = options?.includeGitHistory ?? false;
132
+ // 1. Get all TypeScript files
133
+ const files = await globby(['src/**/*.ts'], {
134
+ cwd: projectRoot,
135
+ ignore: ['**/*.d.ts', '**/node_modules/**', '**/dist/**']
136
+ });
137
+ const feed = [];
138
+ // 2. First pass: collect basic info
139
+ for (const file of files) {
140
+ const fullPath = path.join(projectRoot, file);
141
+ // Skip non-existent files (globby may return deleted files)
142
+ if (!fs.existsSync(fullPath)) {
143
+ continue;
144
+ }
145
+ const header = this.headerScanner.scan(fullPath);
146
+ // Only scan Git history if explicitly enabled
147
+ const heat = includeGitHistory
148
+ ? await this.scanGitHistory(file, projectRoot)
149
+ : { freq30d: 0, lastType: 'unknown', lastDate: null, stability: true };
150
+ feed.push({
151
+ file,
152
+ gravity: 0, // Will be calculated in second pass
153
+ heat,
154
+ meta: {
155
+ since: header.since,
156
+ owner: header.owner,
157
+ stable: header.stable,
158
+ why: header.why
159
+ },
160
+ deps: header.deps ?? [],
161
+ dependents: []
162
+ });
163
+ }
164
+ // 3. Second pass: calculate dependencies
165
+ this.calculateDependencies(feed, projectRoot);
166
+ // 4. Sort by gravity descending
167
+ return feed.sort((a, b) => b.gravity - a.gravity);
168
+ }
169
+ /**
170
+ * Output AI feed file
171
+ *
172
+ * @param feed - AI feed list
173
+ * @param outputPath - Output file path
174
+ */
175
+ writeFeedFile(feed, outputPath) {
176
+ const lines = [
177
+ '# CODEMAP AI FEED',
178
+ `# Generated: ${new Date().toISOString()}`,
179
+ ''
180
+ ];
181
+ for (const f of feed) {
182
+ const lastDateStr = f.heat.lastDate ?? 'never';
183
+ lines.push(`FILE: ${f.file}`);
184
+ lines.push(`GRAVITY: ${f.gravity} | HEAT: ${f.heat.freq30d}/${f.heat.lastType}/${lastDateStr}`);
185
+ lines.push(`META: since=${f.meta.since ?? 'unknown'} stable=${f.meta.stable ?? 'unknown'} why=${f.meta.why ?? 'none'}`);
186
+ lines.push(`IMPACT: ${f.dependents.length} files depend on this`);
187
+ lines.push(`DEPS: ${f.deps.join(', ') || 'none'}`);
188
+ lines.push('---');
189
+ lines.push('');
190
+ }
191
+ // Ensure directory exists
192
+ const outputDir = path.dirname(outputPath);
193
+ if (!fs.existsSync(outputDir)) {
194
+ fs.mkdirSync(outputDir, { recursive: true });
195
+ }
196
+ fs.writeFileSync(outputPath, lines.join('\n'), 'utf-8');
197
+ }
198
+ /**
199
+ * Scan Git history for heat score
200
+ *
201
+ * @param filePath - File path (relative to projectRoot)
202
+ * @param projectRoot - Project root directory
203
+ * @returns HeatScore heat score
204
+ */
205
+ async scanGitHistory(filePath, projectRoot) {
206
+ return this.gitAnalyzer.analyzeFileHeat(filePath, projectRoot);
207
+ }
208
+ /**
209
+ * Calculate dependencies
210
+ * Scan import statements, build dependency graph
211
+ *
212
+ * @param feed - AI feed list
213
+ * @param projectRoot - Project root directory
214
+ */
215
+ calculateDependencies(feed, projectRoot) {
216
+ const fileMap = new Map();
217
+ // Build file map
218
+ for (const item of feed) {
219
+ fileMap.set(item.file, item);
220
+ }
221
+ // Scan import statements for each file
222
+ for (const item of feed) {
223
+ const fullPath = path.join(projectRoot, item.file);
224
+ try {
225
+ const content = fs.readFileSync(fullPath, 'utf-8');
226
+ // Scan import statements, match relative path imports
227
+ // Match: import ... from './path' or import ... from '../path'
228
+ const importMatches = [...content.matchAll(/from\s+['"](\.\.?\/[^'"]+)['"]/g)];
229
+ for (const match of importMatches) {
230
+ const importPath = match[1];
231
+ if (!importPath)
232
+ continue;
233
+ // Resolve import path to path relative to src
234
+ const resolvedPath = this.resolveImportPath(item.file, importPath);
235
+ if (resolvedPath) {
236
+ // Normalize path: convert .js to .ts, or add .ts if no extension
237
+ let normalizedPath;
238
+ if (resolvedPath.endsWith('.ts')) {
239
+ normalizedPath = resolvedPath;
240
+ }
241
+ else if (resolvedPath.endsWith('.js')) {
242
+ normalizedPath = resolvedPath.slice(0, -3) + '.ts';
243
+ }
244
+ else {
245
+ normalizedPath = resolvedPath + '.ts';
246
+ }
247
+ if (!item.deps.includes(normalizedPath)) {
248
+ item.deps.push(normalizedPath);
249
+ }
250
+ // Check if target file exists in feed and add to dependents
251
+ const possiblePaths = [
252
+ resolvedPath,
253
+ resolvedPath.endsWith('.js') ? resolvedPath.slice(0, -3) + '.ts' : resolvedPath + '.ts',
254
+ resolvedPath + '/index.ts'
255
+ ];
256
+ for (const possiblePath of possiblePaths) {
257
+ if (fileMap.has(possiblePath)) {
258
+ // Add to target file's dependents
259
+ const target = fileMap.get(possiblePath);
260
+ if (target && !target.dependents.includes(item.file)) {
261
+ target.dependents.push(item.file);
262
+ }
263
+ break;
264
+ }
265
+ }
266
+ }
267
+ }
268
+ }
269
+ catch {
270
+ // Skip on read failure
271
+ }
272
+ }
273
+ // Recalculate gravity (out-degree + in-degree)
274
+ for (const item of feed) {
275
+ item.gravity = item.deps.length + item.dependents.length;
276
+ }
277
+ }
278
+ /**
279
+ * Resolve import path to path relative to project root
280
+ *
281
+ * @param currentFile - Current file path
282
+ * @param importPath - Import path from import statement
283
+ * @returns Resolved path, or null if cannot resolve
284
+ */
285
+ resolveImportPath(currentFile, importPath) {
286
+ // Get current file's directory
287
+ const currentDir = path.dirname(currentFile);
288
+ // Resolve relative path
289
+ const resolved = path.normalize(path.join(currentDir, importPath));
290
+ // Ensure path is under src directory
291
+ if (!resolved.startsWith('src/')) {
292
+ return null;
293
+ }
294
+ return resolved;
295
+ }
296
+ /**
297
+ * Scan file header (convenience method)
298
+ * Delegates to FileHeaderScanner
299
+ *
300
+ * @param filePath - File path
301
+ * @returns FileMeta file metadata
302
+ */
303
+ scanFileHeader(filePath) {
304
+ return this.headerScanner.scan(filePath);
305
+ }
306
+ /**
307
+ * Calculate scores for a single feed item
308
+ * Returns normalized scores
309
+ *
310
+ * @param feed - AI feed item
311
+ * @param maxGravity - Maximum gravity value for normalization
312
+ * @param maxImpact - Maximum impact value for normalization
313
+ * @returns Object with gravity, impact, heat scores
314
+ */
315
+ calculateScores(feed, maxGravity = 20, maxImpact = 50) {
316
+ const gravity = feed.deps.length + feed.dependents.length;
317
+ const impact = feed.dependents.length;
318
+ const heat = feed.heat.freq30d;
319
+ return {
320
+ gravity: Math.min(gravity / (maxGravity || 1), 1),
321
+ impact: Math.min(impact / (maxImpact || 1), 1),
322
+ heat: Math.min(heat / 10, 1)
323
+ };
324
+ }
325
+ /**
326
+ * Calculate file risk level
327
+ * Based on REQUIREMENTS section 8.6 risk scoring formula
328
+ *
329
+ * @param feed - Single file AI feed
330
+ * @returns Risk level: 'high' | 'medium' | 'low'
331
+ */
332
+ calculateRisk(feed) {
333
+ const gravity = feed.gravity;
334
+ const heat = feed.heat;
335
+ const impact = feed.dependents.length;
336
+ const stable = feed.meta.stable ?? true;
337
+ return this.gitAnalyzer.calculateRiskLevel(gravity, heat, impact, stable);
338
+ }
339
+ /**
340
+ * Batch calculate risk levels
341
+ *
342
+ * @param feedList - AI feed list
343
+ * @returns Map<file path, risk level>
344
+ */
345
+ calculateRisks(feedList) {
346
+ const result = new Map();
347
+ for (const feed of feedList) {
348
+ result.set(feed.file, this.calculateRisk(feed));
349
+ }
350
+ return result;
351
+ }
352
+ /**
353
+ * Get high risk file list
354
+ *
355
+ * @param feedList - AI feed list
356
+ * @returns High risk file list
357
+ */
358
+ getHighRiskFiles(feedList) {
359
+ return feedList.filter(f => this.calculateRisk(f) === 'high');
360
+ }
361
+ /**
362
+ * Generate JSON format AI feed
363
+ * For programmatic processing
364
+ *
365
+ * @param feed - AI feed list
366
+ * @param outputPath - Output file path
367
+ */
368
+ writeFeedFileJson(feed, outputPath) {
369
+ // Ensure directory exists
370
+ const outputDir = path.dirname(outputPath);
371
+ if (!fs.existsSync(outputDir)) {
372
+ fs.mkdirSync(outputDir, { recursive: true });
373
+ }
374
+ fs.writeFileSync(outputPath, JSON.stringify(feed, null, 2), 'utf-8');
375
+ }
376
+ }
377
+ //# sourceMappingURL=ai-feed-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-feed-generator.js","sourceRoot":"","sources":["../../src/orchestrator/ai-feed-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { FileHistoryAnalysisResult, HistorySymbolCandidate, SymbolHistoryResult } from '../interface/types/history-risk.js';
2
+ import type { IStorage } from '../interface/types/storage.js';
3
+ import { GitAnalyzer } from './git-analyzer.js';
4
+ import { WorkflowGitAnalyzer } from './workflow/git-analyzer.js';
5
+ type HistoryGitAnalyzer = Pick<GitAnalyzer, 'isGitRepository' | 'findRelatedCommits' | 'calculateRiskScore'>;
6
+ type WorkflowHeatAnalyzer = Pick<WorkflowGitAnalyzer, 'analyzeForPhase'>;
7
+ export interface AnalyzeHistoryFilesOptions {
8
+ persist?: boolean;
9
+ maxCommits?: number;
10
+ maxFiles?: number;
11
+ }
12
+ export interface GitHistoryServiceOptions {
13
+ projectRoot: string;
14
+ storage: IStorage;
15
+ gitAnalyzer?: HistoryGitAnalyzer;
16
+ workflowGitAnalyzer?: WorkflowHeatAnalyzer;
17
+ now?: () => Date;
18
+ maxCommits?: number;
19
+ maxFilesPerRequest?: number;
20
+ precomputeThreshold?: number;
21
+ staleAfterHours?: number;
22
+ expiredAfterHours?: number;
23
+ impactDepth?: number;
24
+ }
25
+ export declare class GitHistoryService {
26
+ private readonly projectRoot;
27
+ private readonly storage;
28
+ private readonly gitAnalyzer;
29
+ private readonly workflowGitAnalyzer;
30
+ private readonly now;
31
+ private readonly maxCommits;
32
+ private readonly maxFilesPerRequest;
33
+ private readonly precomputeThreshold;
34
+ private readonly staleAfterHours;
35
+ private readonly expiredAfterHours;
36
+ private readonly impactDepth;
37
+ constructor(options: GitHistoryServiceOptions);
38
+ analyzeFiles(files: readonly string[], options?: AnalyzeHistoryFilesOptions): Promise<FileHistoryAnalysisResult>;
39
+ resolveSymbolCandidates(query: string): Promise<HistorySymbolCandidate[]>;
40
+ analyzeSymbol(query: string, options?: AnalyzeHistoryFilesOptions): Promise<SymbolHistoryResult>;
41
+ private loadFileAnalysisFromCache;
42
+ private calculateAggregatedLiveRisk;
43
+ private calculateRiskFromFeed;
44
+ private mapAnalyzerRisk;
45
+ private createFeed;
46
+ private buildHeatMap;
47
+ private selectFilesForAnalysis;
48
+ private resolveFileMetrics;
49
+ private resolveSymbolMetrics;
50
+ private calculateOverallConfidence;
51
+ private combinePersistedRisk;
52
+ private getHistoryRiskStorageAdapter;
53
+ }
54
+ export {};
55
+ //# sourceMappingURL=history-risk-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-risk-service.d.ts","sourceRoot":"","sources":["../../src/orchestrator/history-risk-service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,yBAAyB,EAUzB,sBAAsB,EAEtB,mBAAmB,EACpB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAe,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AASjE,KAAK,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE,iBAAiB,GAAG,oBAAoB,GAAG,oBAAoB,CAAC,CAAC;AAC7G,KAAK,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;AAkBzE,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,QAAQ,CAAC;IAClB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,mBAAmB,CAAC,EAAE,oBAAoB,CAAC;IAC3C,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAyRD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAuB;IAC3D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,OAAO,EAAE,wBAAwB;IAcvC,YAAY,CAChB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,yBAAyB,CAAC;IAuI/B,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAiBzE,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,mBAAmB,CAAC;YAgJjB,yBAAyB;IAsFvC,OAAO,CAAC,2BAA2B;IA0BnC,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,YAAY;YAQN,sBAAsB;YAgDtB,kBAAkB;YAgClB,oBAAoB;IAqBlC,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,oBAAoB;IAuB5B,OAAO,CAAC,4BAA4B;CAGrC"}