specweave 0.28.68 → 0.29.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 (318) hide show
  1. package/CLAUDE.md +3 -2
  2. package/README.md +19 -2
  3. package/dist/src/cli/commands/discrepancies.d.ts +89 -0
  4. package/dist/src/cli/commands/discrepancies.d.ts.map +1 -0
  5. package/dist/src/cli/commands/discrepancies.js +385 -0
  6. package/dist/src/cli/commands/discrepancies.js.map +1 -0
  7. package/dist/src/cli/commands/notifications.d.ts +70 -0
  8. package/dist/src/cli/commands/notifications.d.ts.map +1 -0
  9. package/dist/src/cli/commands/notifications.js +236 -0
  10. package/dist/src/cli/commands/notifications.js.map +1 -0
  11. package/dist/src/cli/commands/sync-logs.d.ts +54 -0
  12. package/dist/src/cli/commands/sync-logs.d.ts.map +1 -0
  13. package/dist/src/cli/commands/sync-logs.js +240 -0
  14. package/dist/src/cli/commands/sync-logs.js.map +1 -0
  15. package/dist/src/cli/commands/sync-monitor.d.ts +42 -0
  16. package/dist/src/cli/commands/sync-monitor.d.ts.map +1 -0
  17. package/dist/src/cli/commands/sync-monitor.js +191 -0
  18. package/dist/src/cli/commands/sync-monitor.js.map +1 -0
  19. package/dist/src/cli/helpers/init/brownfield-analysis.d.ts +45 -0
  20. package/dist/src/cli/helpers/init/brownfield-analysis.d.ts.map +1 -0
  21. package/dist/src/cli/helpers/init/brownfield-analysis.js +431 -0
  22. package/dist/src/cli/helpers/init/brownfield-analysis.js.map +1 -0
  23. package/dist/src/cli/helpers/init/index.d.ts +1 -0
  24. package/dist/src/cli/helpers/init/index.d.ts.map +1 -1
  25. package/dist/src/cli/helpers/init/index.js +2 -0
  26. package/dist/src/cli/helpers/init/index.js.map +1 -1
  27. package/dist/src/cli/workers/brownfield-worker.d.ts +66 -0
  28. package/dist/src/cli/workers/brownfield-worker.d.ts.map +1 -0
  29. package/dist/src/cli/workers/brownfield-worker.js +417 -0
  30. package/dist/src/cli/workers/brownfield-worker.js.map +1 -0
  31. package/dist/src/core/background/brownfield-launcher.d.ts +86 -0
  32. package/dist/src/core/background/brownfield-launcher.d.ts.map +1 -0
  33. package/dist/src/core/background/brownfield-launcher.js +295 -0
  34. package/dist/src/core/background/brownfield-launcher.js.map +1 -0
  35. package/dist/src/core/background/index.d.ts +2 -0
  36. package/dist/src/core/background/index.d.ts.map +1 -1
  37. package/dist/src/core/background/index.js +2 -0
  38. package/dist/src/core/background/index.js.map +1 -1
  39. package/dist/src/core/background/types.d.ts +23 -2
  40. package/dist/src/core/background/types.d.ts.map +1 -1
  41. package/dist/src/core/config/index.d.ts +1 -0
  42. package/dist/src/core/config/index.d.ts.map +1 -1
  43. package/dist/src/core/config/index.js +1 -0
  44. package/dist/src/core/config/index.js.map +1 -1
  45. package/dist/src/core/config/types.d.ts +6 -0
  46. package/dist/src/core/config/types.d.ts.map +1 -1
  47. package/dist/src/core/config/types.js.map +1 -1
  48. package/dist/src/core/dashboard/dashboard-data.d.ts +156 -0
  49. package/dist/src/core/dashboard/dashboard-data.d.ts.map +1 -0
  50. package/dist/src/core/dashboard/dashboard-data.js +191 -0
  51. package/dist/src/core/dashboard/dashboard-data.js.map +1 -0
  52. package/dist/src/core/dashboard/index.d.ts +9 -0
  53. package/dist/src/core/dashboard/index.d.ts.map +1 -0
  54. package/dist/src/core/dashboard/index.js +9 -0
  55. package/dist/src/core/dashboard/index.js.map +1 -0
  56. package/dist/src/core/discrepancy/analyzers/api-route-analyzer.d.ts +77 -0
  57. package/dist/src/core/discrepancy/analyzers/api-route-analyzer.d.ts.map +1 -0
  58. package/dist/src/core/discrepancy/analyzers/api-route-analyzer.js +286 -0
  59. package/dist/src/core/discrepancy/analyzers/api-route-analyzer.js.map +1 -0
  60. package/dist/src/core/discrepancy/analyzers/index.d.ts +8 -0
  61. package/dist/src/core/discrepancy/analyzers/index.d.ts.map +1 -0
  62. package/dist/src/core/discrepancy/analyzers/index.js +8 -0
  63. package/dist/src/core/discrepancy/analyzers/index.js.map +1 -0
  64. package/dist/src/core/discrepancy/analyzers/typescript-analyzer.d.ts +96 -0
  65. package/dist/src/core/discrepancy/analyzers/typescript-analyzer.d.ts.map +1 -0
  66. package/dist/src/core/discrepancy/analyzers/typescript-analyzer.js +247 -0
  67. package/dist/src/core/discrepancy/analyzers/typescript-analyzer.js.map +1 -0
  68. package/dist/src/core/discrepancy/brownfield-manager.d.ts +88 -0
  69. package/dist/src/core/discrepancy/brownfield-manager.d.ts.map +1 -0
  70. package/dist/src/core/discrepancy/brownfield-manager.js +520 -0
  71. package/dist/src/core/discrepancy/brownfield-manager.js.map +1 -0
  72. package/dist/src/core/discrepancy/brownfield-types.d.ts +174 -0
  73. package/dist/src/core/discrepancy/brownfield-types.d.ts.map +1 -0
  74. package/dist/src/core/discrepancy/brownfield-types.js +11 -0
  75. package/dist/src/core/discrepancy/brownfield-types.js.map +1 -0
  76. package/dist/src/core/discrepancy/detector.d.ts +92 -0
  77. package/dist/src/core/discrepancy/detector.d.ts.map +1 -0
  78. package/dist/src/core/discrepancy/detector.js +346 -0
  79. package/dist/src/core/discrepancy/detector.js.map +1 -0
  80. package/dist/src/core/discrepancy/increment-generator.d.ts +51 -0
  81. package/dist/src/core/discrepancy/increment-generator.d.ts.map +1 -0
  82. package/dist/src/core/discrepancy/increment-generator.js +234 -0
  83. package/dist/src/core/discrepancy/increment-generator.js.map +1 -0
  84. package/dist/src/core/discrepancy/index.d.ts +18 -0
  85. package/dist/src/core/discrepancy/index.d.ts.map +1 -0
  86. package/dist/src/core/discrepancy/index.js +24 -0
  87. package/dist/src/core/discrepancy/index.js.map +1 -0
  88. package/dist/src/core/discrepancy/severity-classifier.d.ts +81 -0
  89. package/dist/src/core/discrepancy/severity-classifier.d.ts.map +1 -0
  90. package/dist/src/core/discrepancy/severity-classifier.js +289 -0
  91. package/dist/src/core/discrepancy/severity-classifier.js.map +1 -0
  92. package/dist/src/core/discrepancy/spec-parser.d.ts +74 -0
  93. package/dist/src/core/discrepancy/spec-parser.d.ts.map +1 -0
  94. package/dist/src/core/discrepancy/spec-parser.js +213 -0
  95. package/dist/src/core/discrepancy/spec-parser.js.map +1 -0
  96. package/dist/src/core/discrepancy/update-recommender.d.ts +77 -0
  97. package/dist/src/core/discrepancy/update-recommender.d.ts.map +1 -0
  98. package/dist/src/core/discrepancy/update-recommender.js +323 -0
  99. package/dist/src/core/discrepancy/update-recommender.js.map +1 -0
  100. package/dist/src/core/living-docs/living-docs-sync.d.ts +13 -16
  101. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  102. package/dist/src/core/living-docs/living-docs-sync.js +31 -112
  103. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  104. package/dist/src/core/logs/index.d.ts +10 -0
  105. package/dist/src/core/logs/index.d.ts.map +1 -0
  106. package/dist/src/core/logs/index.js +10 -0
  107. package/dist/src/core/logs/index.js.map +1 -0
  108. package/dist/src/core/logs/log-aggregator.d.ts +130 -0
  109. package/dist/src/core/logs/log-aggregator.d.ts.map +1 -0
  110. package/dist/src/core/logs/log-aggregator.js +206 -0
  111. package/dist/src/core/logs/log-aggregator.js.map +1 -0
  112. package/dist/src/core/logs/log-exporter.d.ts +81 -0
  113. package/dist/src/core/logs/log-exporter.d.ts.map +1 -0
  114. package/dist/src/core/logs/log-exporter.js +141 -0
  115. package/dist/src/core/logs/log-exporter.js.map +1 -0
  116. package/dist/src/core/notifications/command-integration.d.ts +82 -0
  117. package/dist/src/core/notifications/command-integration.d.ts.map +1 -0
  118. package/dist/src/core/notifications/command-integration.js +80 -0
  119. package/dist/src/core/notifications/command-integration.js.map +1 -0
  120. package/dist/src/core/notifications/index.d.ts +12 -0
  121. package/dist/src/core/notifications/index.d.ts.map +1 -0
  122. package/dist/src/core/notifications/index.js +12 -0
  123. package/dist/src/core/notifications/index.js.map +1 -0
  124. package/dist/src/core/notifications/notification-display.d.ts +70 -0
  125. package/dist/src/core/notifications/notification-display.d.ts.map +1 -0
  126. package/dist/src/core/notifications/notification-display.js +177 -0
  127. package/dist/src/core/notifications/notification-display.js.map +1 -0
  128. package/dist/src/core/notifications/notification-manager.d.ts +126 -0
  129. package/dist/src/core/notifications/notification-manager.d.ts.map +1 -0
  130. package/dist/src/core/notifications/notification-manager.js +287 -0
  131. package/dist/src/core/notifications/notification-manager.js.map +1 -0
  132. package/dist/src/core/notifications/notification-types.d.ts +159 -0
  133. package/dist/src/core/notifications/notification-types.d.ts.map +1 -0
  134. package/dist/src/core/notifications/notification-types.js +93 -0
  135. package/dist/src/core/notifications/notification-types.js.map +1 -0
  136. package/dist/src/core/scheduler/index.d.ts +11 -0
  137. package/dist/src/core/scheduler/index.d.ts.map +1 -0
  138. package/dist/src/core/scheduler/index.js +11 -0
  139. package/dist/src/core/scheduler/index.js.map +1 -0
  140. package/dist/src/core/scheduler/job-scheduler.d.ts +179 -0
  141. package/dist/src/core/scheduler/job-scheduler.d.ts.map +1 -0
  142. package/dist/src/core/scheduler/job-scheduler.js +282 -0
  143. package/dist/src/core/scheduler/job-scheduler.js.map +1 -0
  144. package/dist/src/core/scheduler/schedule-persistence.d.ts +83 -0
  145. package/dist/src/core/scheduler/schedule-persistence.d.ts.map +1 -0
  146. package/dist/src/core/scheduler/schedule-persistence.js +180 -0
  147. package/dist/src/core/scheduler/schedule-persistence.js.map +1 -0
  148. package/dist/src/core/scheduler/scheduled-job.d.ts +188 -0
  149. package/dist/src/core/scheduler/scheduled-job.d.ts.map +1 -0
  150. package/dist/src/core/scheduler/scheduled-job.js +182 -0
  151. package/dist/src/core/scheduler/scheduled-job.js.map +1 -0
  152. package/dist/src/core/sync/permission-enforcer.d.ts +206 -0
  153. package/dist/src/core/sync/permission-enforcer.d.ts.map +1 -0
  154. package/dist/src/core/sync/permission-enforcer.js +268 -0
  155. package/dist/src/core/sync/permission-enforcer.js.map +1 -0
  156. package/dist/src/core/sync/sync-audit-logger.d.ts +217 -0
  157. package/dist/src/core/sync/sync-audit-logger.d.ts.map +1 -0
  158. package/dist/src/core/sync/sync-audit-logger.js +327 -0
  159. package/dist/src/core/sync/sync-audit-logger.js.map +1 -0
  160. package/dist/src/core/sync/sync-interceptor.d.ts +190 -0
  161. package/dist/src/core/sync/sync-interceptor.d.ts.map +1 -0
  162. package/dist/src/core/sync/sync-interceptor.js +224 -0
  163. package/dist/src/core/sync/sync-interceptor.js.map +1 -0
  164. package/dist/src/core/types/increment-metadata.d.ts +5 -2
  165. package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
  166. package/dist/src/core/types/sync-config.d.ts +267 -0
  167. package/dist/src/core/types/sync-config.d.ts.map +1 -0
  168. package/dist/src/core/types/sync-config.js +304 -0
  169. package/dist/src/core/types/sync-config.js.map +1 -0
  170. package/dist/src/hooks/index.d.ts +11 -0
  171. package/dist/src/hooks/index.d.ts.map +1 -0
  172. package/dist/src/hooks/index.js +11 -0
  173. package/dist/src/hooks/index.js.map +1 -0
  174. package/dist/src/hooks/platform.d.ts +125 -0
  175. package/dist/src/hooks/platform.d.ts.map +1 -0
  176. package/dist/src/hooks/platform.js +325 -0
  177. package/dist/src/hooks/platform.js.map +1 -0
  178. package/dist/src/hooks/processor.d.ts +20 -0
  179. package/dist/src/hooks/processor.d.ts.map +1 -0
  180. package/dist/src/hooks/processor.js +317 -0
  181. package/dist/src/hooks/processor.js.map +1 -0
  182. package/dist/src/hooks/scheduler-startup.d.ts +19 -0
  183. package/dist/src/hooks/scheduler-startup.d.ts.map +1 -0
  184. package/dist/src/hooks/scheduler-startup.js +92 -0
  185. package/dist/src/hooks/scheduler-startup.js.map +1 -0
  186. package/dist/src/hooks/session-start.d.ts +16 -0
  187. package/dist/src/hooks/session-start.d.ts.map +1 -0
  188. package/dist/src/hooks/session-start.js +92 -0
  189. package/dist/src/hooks/session-start.js.map +1 -0
  190. package/dist/src/importers/duplicate-detector.d.ts +13 -2
  191. package/dist/src/importers/duplicate-detector.d.ts.map +1 -1
  192. package/dist/src/importers/duplicate-detector.js +21 -2
  193. package/dist/src/importers/duplicate-detector.js.map +1 -1
  194. package/dist/src/importers/item-converter.d.ts +41 -2
  195. package/dist/src/importers/item-converter.d.ts.map +1 -1
  196. package/dist/src/importers/item-converter.js +225 -38
  197. package/dist/src/importers/item-converter.js.map +1 -1
  198. package/dist/src/living-docs/fs-id-allocator.d.ts +7 -0
  199. package/dist/src/living-docs/fs-id-allocator.d.ts.map +1 -1
  200. package/dist/src/living-docs/fs-id-allocator.js +30 -4
  201. package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
  202. package/dist/src/sync/ado-sync-wrapper.d.ts +137 -0
  203. package/dist/src/sync/ado-sync-wrapper.d.ts.map +1 -0
  204. package/dist/src/sync/ado-sync-wrapper.js +148 -0
  205. package/dist/src/sync/ado-sync-wrapper.js.map +1 -0
  206. package/dist/src/sync/github-sync-wrapper.d.ts +195 -0
  207. package/dist/src/sync/github-sync-wrapper.d.ts.map +1 -0
  208. package/dist/src/sync/github-sync-wrapper.js +220 -0
  209. package/dist/src/sync/github-sync-wrapper.js.map +1 -0
  210. package/dist/src/sync/jira-sync-wrapper.d.ts +155 -0
  211. package/dist/src/sync/jira-sync-wrapper.d.ts.map +1 -0
  212. package/dist/src/sync/jira-sync-wrapper.js +175 -0
  213. package/dist/src/sync/jira-sync-wrapper.js.map +1 -0
  214. package/dist/src/utils/feature-id-derivation.d.ts +58 -0
  215. package/dist/src/utils/feature-id-derivation.d.ts.map +1 -0
  216. package/dist/src/utils/feature-id-derivation.js +77 -0
  217. package/dist/src/utils/feature-id-derivation.js.map +1 -0
  218. package/package.json +3 -1
  219. package/plugins/specweave/commands/specweave-discrepancies.md +141 -0
  220. package/plugins/specweave/commands/specweave-discrepancy-to-increment.md +160 -0
  221. package/plugins/specweave/commands/specweave-jobs.md +45 -2
  222. package/plugins/specweave/commands/specweave-notifications.md +92 -0
  223. package/plugins/specweave/commands/specweave-sync-logs.md +131 -0
  224. package/plugins/specweave/commands/specweave-sync-monitor.md +57 -0
  225. package/plugins/specweave/hooks/hooks.json +3 -3
  226. package/plugins/specweave/hooks/lib/scheduler-startup.sh +72 -0
  227. package/plugins/specweave/hooks/universal/dispatcher.mjs +246 -0
  228. package/plugins/specweave/hooks/universal/session-start.cmd +16 -0
  229. package/plugins/specweave/hooks/universal/session-start.ps1 +16 -0
  230. package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +14 -5
  231. package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +5 -2
  232. package/plugins/specweave/skills/discrepancy-viewer.md +154 -0
  233. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +46 -0
  234. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +69 -0
  235. package/dist/plugins/specweave-github/lib/enhanced-github-sync.d.ts +0 -26
  236. package/dist/plugins/specweave-github/lib/enhanced-github-sync.d.ts.map +0 -1
  237. package/dist/plugins/specweave-github/lib/enhanced-github-sync.js +0 -249
  238. package/dist/plugins/specweave-github/lib/enhanced-github-sync.js.map +0 -1
  239. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts +0 -28
  240. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts.map +0 -1
  241. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js +0 -156
  242. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js.map +0 -1
  243. package/dist/src/core/sync/bidirectional-engine.d.ts +0 -119
  244. package/dist/src/core/sync/bidirectional-engine.d.ts.map +0 -1
  245. package/dist/src/core/sync/bidirectional-engine.js +0 -359
  246. package/dist/src/core/sync/bidirectional-engine.js.map +0 -1
  247. package/dist/src/core/sync/conflict-resolver.d.ts +0 -66
  248. package/dist/src/core/sync/conflict-resolver.d.ts.map +0 -1
  249. package/dist/src/core/sync/conflict-resolver.js +0 -108
  250. package/dist/src/core/sync/conflict-resolver.js.map +0 -1
  251. package/dist/src/core/sync/enhanced-content-builder.d.ts +0 -55
  252. package/dist/src/core/sync/enhanced-content-builder.d.ts.map +0 -1
  253. package/dist/src/core/sync/enhanced-content-builder.js +0 -203
  254. package/dist/src/core/sync/enhanced-content-builder.js.map +0 -1
  255. package/dist/src/core/sync/folder-mapper.d.ts +0 -71
  256. package/dist/src/core/sync/folder-mapper.d.ts.map +0 -1
  257. package/dist/src/core/sync/folder-mapper.js +0 -203
  258. package/dist/src/core/sync/folder-mapper.js.map +0 -1
  259. package/dist/src/core/sync/label-detector.d.ts +0 -66
  260. package/dist/src/core/sync/label-detector.d.ts.map +0 -1
  261. package/dist/src/core/sync/label-detector.js +0 -224
  262. package/dist/src/core/sync/label-detector.js.map +0 -1
  263. package/dist/src/core/sync/performance-optimizer.d.ts +0 -153
  264. package/dist/src/core/sync/performance-optimizer.d.ts.map +0 -1
  265. package/dist/src/core/sync/performance-optimizer.js +0 -220
  266. package/dist/src/core/sync/performance-optimizer.js.map +0 -1
  267. package/dist/src/core/sync/profile-selector.d.ts +0 -52
  268. package/dist/src/core/sync/profile-selector.d.ts.map +0 -1
  269. package/dist/src/core/sync/profile-selector.js +0 -179
  270. package/dist/src/core/sync/profile-selector.js.map +0 -1
  271. package/dist/src/core/sync/profile-validator.d.ts +0 -52
  272. package/dist/src/core/sync/profile-validator.d.ts.map +0 -1
  273. package/dist/src/core/sync/profile-validator.js +0 -170
  274. package/dist/src/core/sync/profile-validator.js.map +0 -1
  275. package/dist/src/core/sync/rate-limiter.d.ts +0 -116
  276. package/dist/src/core/sync/rate-limiter.d.ts.map +0 -1
  277. package/dist/src/core/sync/rate-limiter.js +0 -308
  278. package/dist/src/core/sync/rate-limiter.js.map +0 -1
  279. package/dist/src/core/sync/retry-handler.d.ts +0 -98
  280. package/dist/src/core/sync/retry-handler.d.ts.map +0 -1
  281. package/dist/src/core/sync/retry-handler.js +0 -196
  282. package/dist/src/core/sync/retry-handler.js.map +0 -1
  283. package/dist/src/core/sync/retry-logic.d.ts +0 -64
  284. package/dist/src/core/sync/retry-logic.d.ts.map +0 -1
  285. package/dist/src/core/sync/retry-logic.js +0 -165
  286. package/dist/src/core/sync/retry-logic.js.map +0 -1
  287. package/dist/src/core/sync/status-cache.d.ts +0 -91
  288. package/dist/src/core/sync/status-cache.d.ts.map +0 -1
  289. package/dist/src/core/sync/status-cache.js +0 -140
  290. package/dist/src/core/sync/status-cache.js.map +0 -1
  291. package/dist/src/core/sync/status-mapper.d.ts +0 -69
  292. package/dist/src/core/sync/status-mapper.d.ts.map +0 -1
  293. package/dist/src/core/sync/status-mapper.js +0 -90
  294. package/dist/src/core/sync/status-mapper.js.map +0 -1
  295. package/dist/src/core/sync/status-sync-engine.d.ts +0 -162
  296. package/dist/src/core/sync/status-sync-engine.d.ts.map +0 -1
  297. package/dist/src/core/sync/status-sync-engine.js +0 -347
  298. package/dist/src/core/sync/status-sync-engine.js.map +0 -1
  299. package/dist/src/core/sync/sync-event-logger.d.ts +0 -113
  300. package/dist/src/core/sync/sync-event-logger.d.ts.map +0 -1
  301. package/dist/src/core/sync/sync-event-logger.js +0 -141
  302. package/dist/src/core/sync/sync-event-logger.js.map +0 -1
  303. package/dist/src/core/sync/time-range-selector.d.ts +0 -48
  304. package/dist/src/core/sync/time-range-selector.d.ts.map +0 -1
  305. package/dist/src/core/sync/time-range-selector.js +0 -224
  306. package/dist/src/core/sync/time-range-selector.js.map +0 -1
  307. package/dist/src/core/sync/types.d.ts +0 -52
  308. package/dist/src/core/sync/types.d.ts.map +0 -1
  309. package/dist/src/core/sync/types.js +0 -5
  310. package/dist/src/core/sync/types.js.map +0 -1
  311. package/dist/src/core/sync/workflow-detector.d.ts +0 -95
  312. package/dist/src/core/sync/workflow-detector.d.ts.map +0 -1
  313. package/dist/src/core/sync/workflow-detector.js +0 -175
  314. package/dist/src/core/sync/workflow-detector.js.map +0 -1
  315. package/plugins/specweave-github/lib/enhanced-github-sync.js +0 -220
  316. package/plugins/specweave-github/lib/enhanced-github-sync.ts +0 -322
  317. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +0 -134
  318. package/plugins/specweave-jira/lib/enhanced-jira-sync.ts +0 -196
@@ -0,0 +1,96 @@
1
+ /**
2
+ * TypeScript Code Analyzer
3
+ *
4
+ * Extracts function signatures and type definitions from TypeScript files
5
+ * using the TypeScript Compiler API.
6
+ *
7
+ * @module core/discrepancy/analyzers/typescript-analyzer
8
+ */
9
+ import { Logger } from '../../../utils/logger.js';
10
+ /**
11
+ * Represents a function parameter with name and type.
12
+ */
13
+ export interface FunctionParam {
14
+ name: string;
15
+ type: string;
16
+ optional: boolean;
17
+ }
18
+ /**
19
+ * Represents a function signature extracted from code.
20
+ */
21
+ export interface FunctionSignature {
22
+ name: string;
23
+ filePath: string;
24
+ lineNumber: number;
25
+ params: FunctionParam[];
26
+ returnType: string;
27
+ exported: boolean;
28
+ async: boolean;
29
+ jsdoc?: string;
30
+ }
31
+ /**
32
+ * Represents a type definition (interface, type alias, or class).
33
+ */
34
+ export interface TypeDefinition {
35
+ name: string;
36
+ filePath: string;
37
+ lineNumber: number;
38
+ kind: 'interface' | 'type' | 'class';
39
+ exported: boolean;
40
+ properties?: {
41
+ name: string;
42
+ type: string;
43
+ optional: boolean;
44
+ }[];
45
+ }
46
+ /**
47
+ * Configuration for the TypeScript analyzer.
48
+ */
49
+ export interface TypeScriptAnalyzerConfig {
50
+ /** Glob patterns to include (default: ['**\/*.ts']) */
51
+ include?: string[];
52
+ /** Glob patterns to exclude (default: ['**\/*.test.ts', 'node_modules/**']) */
53
+ exclude?: string[];
54
+ /** Base directory for relative paths */
55
+ basePath?: string;
56
+ }
57
+ /**
58
+ * Result of TypeScript analysis.
59
+ */
60
+ export interface AnalysisResult {
61
+ functions: FunctionSignature[];
62
+ types: TypeDefinition[];
63
+ errors: string[];
64
+ }
65
+ /**
66
+ * Analyzes TypeScript files to extract function signatures and type definitions.
67
+ */
68
+ export declare class TypeScriptAnalyzer {
69
+ private readonly logger;
70
+ private readonly config;
71
+ constructor(options?: {
72
+ logger?: Logger;
73
+ config?: TypeScriptAnalyzerConfig;
74
+ });
75
+ /**
76
+ * Analyze a list of TypeScript files.
77
+ */
78
+ analyze(files: string[]): Promise<AnalysisResult>;
79
+ /**
80
+ * Analyze a single TypeScript file.
81
+ */
82
+ analyzeFile(filePath: string): Promise<AnalysisResult>;
83
+ private extractFunctionSignature;
84
+ private extractArrowFunctionSignature;
85
+ private extractMethodSignature;
86
+ private extractInterfaceDefinition;
87
+ private extractTypeAliasDefinition;
88
+ private extractClassDefinition;
89
+ private extractParameters;
90
+ private extractReturnType;
91
+ private extractInterfaceProperties;
92
+ private extractJSDoc;
93
+ private hasExportModifier;
94
+ private hasAsyncModifier;
95
+ }
96
+ //# sourceMappingURL=typescript-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-analyzer.d.ts","sourceRoot":"","sources":["../../../../../src/core/discrepancy/analyzers/typescript-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,MAAM,EAAiB,MAAM,0BAA0B,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAEhD,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,wBAAwB,CAAA;KAAO;IAShF;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAqBvD;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAmF5D,OAAO,CAAC,wBAAwB;IAuBhC,OAAO,CAAC,6BAA6B;IAoBrC,OAAO,CAAC,sBAAsB;IAyB9B,OAAO,CAAC,0BAA0B;IAiBlC,OAAO,CAAC,0BAA0B;IAgBlC,OAAO,CAAC,sBAAsB;IAkB9B,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,0BAA0B;IAoBlC,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,gBAAgB;CAIzB"}
@@ -0,0 +1,247 @@
1
+ /**
2
+ * TypeScript Code Analyzer
3
+ *
4
+ * Extracts function signatures and type definitions from TypeScript files
5
+ * using the TypeScript Compiler API.
6
+ *
7
+ * @module core/discrepancy/analyzers/typescript-analyzer
8
+ */
9
+ import * as ts from 'typescript';
10
+ import * as fs from 'fs';
11
+ import * as path from 'path';
12
+ import { consoleLogger } from '../../../utils/logger.js';
13
+ /**
14
+ * Analyzes TypeScript files to extract function signatures and type definitions.
15
+ */
16
+ export class TypeScriptAnalyzer {
17
+ constructor(options = {}) {
18
+ this.logger = options.logger ?? consoleLogger;
19
+ this.config = {
20
+ include: options.config?.include ?? ['**/*.ts'],
21
+ exclude: options.config?.exclude ?? ['**/*.test.ts', '**/*.spec.ts', 'node_modules/**', 'dist/**'],
22
+ basePath: options.config?.basePath ?? process.cwd(),
23
+ };
24
+ }
25
+ /**
26
+ * Analyze a list of TypeScript files.
27
+ */
28
+ async analyze(files) {
29
+ const functions = [];
30
+ const types = [];
31
+ const errors = [];
32
+ for (const filePath of files) {
33
+ try {
34
+ const result = await this.analyzeFile(filePath);
35
+ functions.push(...result.functions);
36
+ types.push(...result.types);
37
+ errors.push(...result.errors);
38
+ }
39
+ catch (error) {
40
+ const message = error instanceof Error ? error.message : String(error);
41
+ errors.push(`Failed to analyze ${filePath}: ${message}`);
42
+ this.logger.warn(`Failed to analyze ${filePath}: ${message}`);
43
+ }
44
+ }
45
+ return { functions, types, errors };
46
+ }
47
+ /**
48
+ * Analyze a single TypeScript file.
49
+ */
50
+ async analyzeFile(filePath) {
51
+ const functions = [];
52
+ const types = [];
53
+ const errors = [];
54
+ const absolutePath = path.isAbsolute(filePath)
55
+ ? filePath
56
+ : path.resolve(this.config.basePath, filePath);
57
+ if (!fs.existsSync(absolutePath)) {
58
+ errors.push(`File not found: ${absolutePath}`);
59
+ return { functions, types, errors };
60
+ }
61
+ const content = fs.readFileSync(absolutePath, 'utf-8');
62
+ const sourceFile = ts.createSourceFile(absolutePath, content, ts.ScriptTarget.Latest, true);
63
+ const visit = (node) => {
64
+ // Check for function declarations
65
+ if (ts.isFunctionDeclaration(node) && node.name) {
66
+ const sig = this.extractFunctionSignature(node, sourceFile, absolutePath);
67
+ if (sig)
68
+ functions.push(sig);
69
+ }
70
+ // Check for arrow functions assigned to const/let
71
+ if (ts.isVariableStatement(node)) {
72
+ const exported = this.hasExportModifier(node);
73
+ for (const decl of node.declarationList.declarations) {
74
+ if (ts.isIdentifier(decl.name) && decl.initializer) {
75
+ if (ts.isArrowFunction(decl.initializer) || ts.isFunctionExpression(decl.initializer)) {
76
+ const sig = this.extractArrowFunctionSignature(decl.name.text, decl.initializer, sourceFile, absolutePath, exported);
77
+ if (sig)
78
+ functions.push(sig);
79
+ }
80
+ }
81
+ }
82
+ }
83
+ // Check for method declarations in classes
84
+ if (ts.isMethodDeclaration(node) && node.name && ts.isIdentifier(node.name)) {
85
+ const parent = node.parent;
86
+ if (ts.isClassDeclaration(parent)) {
87
+ const sig = this.extractMethodSignature(node, sourceFile, absolutePath, parent);
88
+ if (sig)
89
+ functions.push(sig);
90
+ }
91
+ }
92
+ // Check for interface declarations
93
+ if (ts.isInterfaceDeclaration(node)) {
94
+ const typeDef = this.extractInterfaceDefinition(node, sourceFile, absolutePath);
95
+ if (typeDef)
96
+ types.push(typeDef);
97
+ }
98
+ // Check for type alias declarations
99
+ if (ts.isTypeAliasDeclaration(node)) {
100
+ const typeDef = this.extractTypeAliasDefinition(node, sourceFile, absolutePath);
101
+ if (typeDef)
102
+ types.push(typeDef);
103
+ }
104
+ // Check for class declarations
105
+ if (ts.isClassDeclaration(node) && node.name) {
106
+ const typeDef = this.extractClassDefinition(node, sourceFile, absolutePath);
107
+ if (typeDef)
108
+ types.push(typeDef);
109
+ }
110
+ ts.forEachChild(node, visit);
111
+ };
112
+ visit(sourceFile);
113
+ return { functions, types, errors };
114
+ }
115
+ extractFunctionSignature(node, sourceFile, filePath) {
116
+ if (!node.name)
117
+ return null;
118
+ const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
119
+ const exported = this.hasExportModifier(node);
120
+ const jsdoc = this.extractJSDoc(node, sourceFile);
121
+ return {
122
+ name: node.name.text,
123
+ filePath,
124
+ lineNumber: line + 1,
125
+ params: this.extractParameters(node.parameters, sourceFile),
126
+ returnType: this.extractReturnType(node, sourceFile),
127
+ exported,
128
+ async: this.hasAsyncModifier(node),
129
+ jsdoc,
130
+ };
131
+ }
132
+ extractArrowFunctionSignature(name, node, sourceFile, filePath, exported) {
133
+ const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
134
+ return {
135
+ name,
136
+ filePath,
137
+ lineNumber: line + 1,
138
+ params: this.extractParameters(node.parameters, sourceFile),
139
+ returnType: this.extractReturnType(node, sourceFile),
140
+ exported,
141
+ async: this.hasAsyncModifier(node),
142
+ };
143
+ }
144
+ extractMethodSignature(node, sourceFile, filePath, classNode) {
145
+ if (!node.name || !ts.isIdentifier(node.name))
146
+ return null;
147
+ const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
148
+ const className = classNode.name?.text ?? 'AnonymousClass';
149
+ const exported = this.hasExportModifier(classNode);
150
+ const jsdoc = this.extractJSDoc(node, sourceFile);
151
+ return {
152
+ name: `${className}.${node.name.text}`,
153
+ filePath,
154
+ lineNumber: line + 1,
155
+ params: this.extractParameters(node.parameters, sourceFile),
156
+ returnType: this.extractReturnType(node, sourceFile),
157
+ exported,
158
+ async: this.hasAsyncModifier(node),
159
+ jsdoc,
160
+ };
161
+ }
162
+ extractInterfaceDefinition(node, sourceFile, filePath) {
163
+ const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
164
+ return {
165
+ name: node.name.text,
166
+ filePath,
167
+ lineNumber: line + 1,
168
+ kind: 'interface',
169
+ exported: this.hasExportModifier(node),
170
+ properties: this.extractInterfaceProperties(node, sourceFile),
171
+ };
172
+ }
173
+ extractTypeAliasDefinition(node, sourceFile, filePath) {
174
+ const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
175
+ return {
176
+ name: node.name.text,
177
+ filePath,
178
+ lineNumber: line + 1,
179
+ kind: 'type',
180
+ exported: this.hasExportModifier(node),
181
+ };
182
+ }
183
+ extractClassDefinition(node, sourceFile, filePath) {
184
+ if (!node.name)
185
+ return null;
186
+ const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
187
+ return {
188
+ name: node.name.text,
189
+ filePath,
190
+ lineNumber: line + 1,
191
+ kind: 'class',
192
+ exported: this.hasExportModifier(node),
193
+ };
194
+ }
195
+ extractParameters(params, sourceFile) {
196
+ return params.map((param) => {
197
+ const name = ts.isIdentifier(param.name) ? param.name.text : param.name.getText(sourceFile);
198
+ const type = param.type ? param.type.getText(sourceFile) : 'unknown';
199
+ const optional = !!param.questionToken || !!param.initializer;
200
+ return { name, type, optional };
201
+ });
202
+ }
203
+ extractReturnType(node, sourceFile) {
204
+ if (node.type) {
205
+ return node.type.getText(sourceFile);
206
+ }
207
+ return 'unknown';
208
+ }
209
+ extractInterfaceProperties(node, sourceFile) {
210
+ const properties = [];
211
+ for (const member of node.members) {
212
+ if (ts.isPropertySignature(member) && member.name) {
213
+ const name = ts.isIdentifier(member.name)
214
+ ? member.name.text
215
+ : member.name.getText(sourceFile);
216
+ const type = member.type ? member.type.getText(sourceFile) : 'unknown';
217
+ const optional = !!member.questionToken;
218
+ properties.push({ name, type, optional });
219
+ }
220
+ }
221
+ return properties;
222
+ }
223
+ extractJSDoc(node, sourceFile) {
224
+ const jsdocNodes = ts.getJSDocCommentsAndTags(node);
225
+ if (jsdocNodes.length === 0)
226
+ return undefined;
227
+ const comments = [];
228
+ for (const jsdoc of jsdocNodes) {
229
+ if (ts.isJSDoc(jsdoc) && jsdoc.comment) {
230
+ const comment = typeof jsdoc.comment === 'string'
231
+ ? jsdoc.comment
232
+ : jsdoc.comment.map(c => c.getText(sourceFile)).join('');
233
+ comments.push(comment);
234
+ }
235
+ }
236
+ return comments.length > 0 ? comments.join('\n') : undefined;
237
+ }
238
+ hasExportModifier(node) {
239
+ const modifiers = ts.canHaveModifiers(node) ? ts.getModifiers(node) : undefined;
240
+ return modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword) ?? false;
241
+ }
242
+ hasAsyncModifier(node) {
243
+ const modifiers = ts.canHaveModifiers(node) ? ts.getModifiers(node) : undefined;
244
+ return modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) ?? false;
245
+ }
246
+ }
247
+ //# sourceMappingURL=typescript-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-analyzer.js","sourceRoot":"","sources":["../../../../../src/core/discrepancy/analyzers/typescript-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Brownfield Discrepancy Manager
3
+ *
4
+ * Manages persistent storage and lifecycle of brownfield discrepancies.
5
+ * Uses batched folder structure for scalability (supports 10,000+ discrepancies).
6
+ *
7
+ * @module core/discrepancy/brownfield-manager
8
+ */
9
+ import { Logger } from '../../utils/logger.js';
10
+ import { BrownfieldDiscrepancy, BrownfieldDiscrepancyCreate, BrownfieldDiscrepancyFilter, BrownfieldDiscrepancyResolution, BrownfieldDiscrepancyStats, BrownfieldDiscrepancyUpdate } from './brownfield-types.js';
11
+ /**
12
+ * Manages brownfield discrepancies with persistent storage.
13
+ */
14
+ export declare class BrownfieldDiscrepancyManager {
15
+ private readonly projectPath;
16
+ private readonly basePath;
17
+ private readonly logger;
18
+ private index;
19
+ constructor(projectPath: string, options?: {
20
+ logger?: Logger;
21
+ });
22
+ /**
23
+ * Initialize folder structure if needed.
24
+ */
25
+ ensureFolderStructure(): Promise<void>;
26
+ /**
27
+ * Create a new discrepancy with auto-generated ID.
28
+ */
29
+ createDiscrepancy(data: BrownfieldDiscrepancyCreate): Promise<BrownfieldDiscrepancy>;
30
+ /**
31
+ * Get a discrepancy by ID.
32
+ */
33
+ getDiscrepancy(id: string): Promise<BrownfieldDiscrepancy | null>;
34
+ /**
35
+ * Update a discrepancy.
36
+ */
37
+ updateDiscrepancy(id: string, updates: BrownfieldDiscrepancyUpdate): Promise<BrownfieldDiscrepancy | null>;
38
+ /**
39
+ * Delete a discrepancy.
40
+ */
41
+ deleteDiscrepancy(id: string): Promise<boolean>;
42
+ /**
43
+ * List discrepancies with optional filtering.
44
+ */
45
+ listDiscrepancies(filter?: BrownfieldDiscrepancyFilter): Promise<BrownfieldDiscrepancy[]>;
46
+ /**
47
+ * Get summary statistics.
48
+ */
49
+ getStats(): Promise<BrownfieldDiscrepancyStats>;
50
+ /**
51
+ * Link discrepancy to an increment.
52
+ * Returns true if successfully linked, false if discrepancy not found.
53
+ */
54
+ linkToIncrement(discrepancyId: string, incrementId: string): Promise<boolean>;
55
+ /**
56
+ * Resolve a discrepancy.
57
+ */
58
+ resolveDiscrepancy(id: string, resolution: BrownfieldDiscrepancyResolution): Promise<void>;
59
+ /**
60
+ * Ignore a discrepancy.
61
+ */
62
+ ignoreDiscrepancy(id: string, reason: string): Promise<void>;
63
+ /**
64
+ * Create multiple discrepancies in batch.
65
+ */
66
+ createBatch(discrepancies: BrownfieldDiscrepancyCreate[]): Promise<BrownfieldDiscrepancy[]>;
67
+ /**
68
+ * Archive resolved discrepancies to YYYY-MM folders.
69
+ */
70
+ archiveResolved(): Promise<number>;
71
+ /**
72
+ * Get the batch folder name for a numeric ID.
73
+ * Example: 1-100 → "0001-0100", 101-200 → "0101-0200"
74
+ */
75
+ getBatchFolder(numericId: number): string;
76
+ private getNextId;
77
+ private getStatusFolder;
78
+ private saveDiscrepancy;
79
+ private moveDiscrepancy;
80
+ private findDiscrepancyPath;
81
+ private readDiscrepancyFile;
82
+ private getAllJsonFiles;
83
+ private matchesFilter;
84
+ private loadIndex;
85
+ private saveIndex;
86
+ private updateIndex;
87
+ }
88
+ //# sourceMappingURL=brownfield-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brownfield-manager.d.ts","sourceRoot":"","sources":["../../../../src/core/discrepancy/brownfield-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,2BAA2B,EAE3B,+BAA+B,EAC/B,0BAA0B,EAG1B,2BAA2B,EAE5B,MAAM,uBAAuB,CAAC;AAgC/B;;GAEG;AACH,qBAAa,4BAA4B;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,KAAK,CAA2C;gBAGtD,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IAOnC;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB5C;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAgB1F;;OAEG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAevE;;OAEG;IACG,iBAAiB,CACrB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IA0BxC;;OAEG;IACG,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBrD;;OAEG;IACG,iBAAiB,CAAC,MAAM,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAoE/F;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,0BAA0B,CAAC;IAKrD;;;OAGG;IACG,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQnF;;OAEG;IACG,kBAAkB,CACtB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,+BAA+B,GAC1C,OAAO,CAAC,IAAI,CAAC;IAOhB;;OAEG;IACG,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlE;;OAEG;IACG,WAAW,CACf,aAAa,EAAE,2BAA2B,EAAE,GAC3C,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAWnC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IA4CxC;;;OAGG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;YAU3B,SAAS;IAMvB,OAAO,CAAC,eAAe;YAUT,eAAe;YAaf,eAAe;YAuCf,mBAAmB;IAkCjC,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,aAAa;YAiBP,SAAS;YAiBT,SAAS;YAWT,WAAW;CA4D1B"}