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
@@ -1,203 +0,0 @@
1
- /**
2
- * Folder Mapper for Multi-Team Sync
3
- *
4
- * Maps sync profiles (ADO teams, Jira projects/components) to SpecWeave folder structure
5
- */
6
- import { slugify } from '../../utils/string-utils.js';
7
- /**
8
- * Get specs folders for a sync profile
9
- *
10
- * Returns array of folders for multi-team profiles:
11
- * - ADO with teams: Multiple folders (one per team)
12
- * - Jira project-per-team: Multiple folders (one per project)
13
- * - Jira shared-project-with-components: Multiple folders (one per component)
14
- * - GitHub: Single folder (repo name)
15
- *
16
- * @param profile - Sync profile
17
- * @returns Array of folder paths relative to project root
18
- */
19
- export function getSpecsFoldersForProfile(profile) {
20
- const folders = [];
21
- if (profile.provider === 'ado') {
22
- const config = profile.config;
23
- // v0.13.0+ architecture
24
- if (config.projects && config.projects.length > 0) {
25
- // Multiple projects → multiple folders
26
- for (const project of config.projects) {
27
- const folderName = slugify(project);
28
- folders.push(`.specweave/docs/internal/specs/${folderName}`);
29
- }
30
- }
31
- else if (config.areaPaths && config.areaPaths.length > 0) {
32
- // Single project + area paths → multiple folders
33
- for (const areaPath of config.areaPaths) {
34
- const folderName = slugify(areaPath);
35
- folders.push(`.specweave/docs/internal/specs/${folderName}`);
36
- }
37
- }
38
- else {
39
- // Single project → default folder
40
- const folderName = slugify(config.project || 'default');
41
- folders.push(`.specweave/docs/internal/specs/${folderName}`);
42
- }
43
- }
44
- else if (profile.provider === 'jira') {
45
- const config = profile.config;
46
- // v0.13.0+ architecture
47
- if (config.projects && config.projects.length > 0) {
48
- // Multiple projects → multiple folders
49
- for (const projectKey of config.projects) {
50
- const folderName = slugify(projectKey);
51
- folders.push(`.specweave/docs/internal/specs/${folderName}`);
52
- }
53
- }
54
- else {
55
- // Single project → single folder
56
- const folderName = slugify(config.projectKey || 'default');
57
- folders.push(`.specweave/docs/internal/specs/${folderName}`);
58
- }
59
- }
60
- else if (profile.provider === 'github') {
61
- const config = profile.config;
62
- // v0.13.0+ architecture
63
- if (config.repos && config.repos.length > 0) {
64
- // Multiple repos → multiple folders
65
- for (const repo of config.repos) {
66
- const folderName = slugify(repo);
67
- folders.push(`.specweave/docs/internal/specs/${folderName}`);
68
- }
69
- }
70
- else {
71
- // Single repo → single folder
72
- const folderName = slugify(config.repo || 'default');
73
- folders.push(`.specweave/docs/internal/specs/${folderName}`);
74
- }
75
- }
76
- return folders;
77
- }
78
- /**
79
- * Get Area Path for ADO team
80
- *
81
- * ADO Area Path format: "Project\\Team Name"
82
- * Special case: If team name matches project name, use just project name
83
- *
84
- * Examples:
85
- * - getAreaPathForTeam("League Scheduler", "League Scheduler Team") → "League Scheduler"
86
- * - getAreaPathForTeam("League Scheduler", "Platform Engineering Team") → "League Scheduler\\Platform Engineering Team"
87
- *
88
- * @param project - ADO project name
89
- * @param team - Team name
90
- * @returns Area Path string
91
- */
92
- export function getAreaPathForTeam(project, team) {
93
- // Special case: If team name contains project name, use just project name
94
- // "League Scheduler Team" in "League Scheduler" project → "League Scheduler"
95
- const teamLower = team.toLowerCase();
96
- const projectLower = project.toLowerCase();
97
- if (teamLower.includes(projectLower) && teamLower.replace(/\s+team\s*$/i, '') === projectLower) {
98
- return project;
99
- }
100
- // Default: "Project\\Team Name"
101
- return `${project}\\${team}`;
102
- }
103
- /**
104
- * Generate Area Paths map for ADO profile
105
- *
106
- * Creates mapping from team folder names to ADO Area Paths
107
- *
108
- * Example:
109
- * Input: project="League Scheduler", teams=["Platform Engineering Team", "QA Team"]
110
- * Output: {
111
- * "platform-engineering-team": "League Scheduler\\Platform Engineering Team",
112
- * "qa-team": "League Scheduler\\QA Team"
113
- * }
114
- *
115
- * @param project - ADO project name
116
- * @param teams - Array of team names
117
- * @returns Map of folder names to Area Paths
118
- */
119
- export function generateAreaPaths(project, teams) {
120
- const areaPaths = {};
121
- for (const team of teams) {
122
- const folderName = slugify(team);
123
- areaPaths[folderName] = getAreaPathForTeam(project, team);
124
- }
125
- return areaPaths;
126
- }
127
- /**
128
- * Get team folder name from Area Path
129
- *
130
- * Reverse mapping: "League Scheduler\\Platform Engineering Team" → "platform-engineering-team"
131
- *
132
- * @param areaPath - ADO Area Path
133
- * @returns Folder name (kebab-case)
134
- */
135
- export function getFolderNameFromAreaPath(areaPath) {
136
- // Extract team name from "Project\\Team Name"
137
- const parts = areaPath.split('\\');
138
- const teamName = parts.length > 1 ? parts[parts.length - 1] : parts[0];
139
- return slugify(teamName);
140
- }
141
- /**
142
- * Get team/project identifier from folder name
143
- *
144
- * Maps folder name back to original team/project name
145
- *
146
- * @param profile - Sync profile
147
- * @param folderName - Folder name (kebab-case)
148
- * @returns Original team/project name, or null if not found
149
- */
150
- export function getTeamFromFolder(profile, folderName) {
151
- if (profile.provider === 'ado') {
152
- const config = profile.config;
153
- // v0.13.0+: Check projects[]
154
- const projects = config.projects || [];
155
- for (const project of projects) {
156
- if (slugify(project) === folderName) {
157
- return project;
158
- }
159
- }
160
- // v0.13.0+: Check areaPaths[]
161
- const areaPaths = config.areaPaths || [];
162
- for (const areaPath of areaPaths) {
163
- if (slugify(areaPath) === folderName) {
164
- return areaPath;
165
- }
166
- }
167
- }
168
- else if (profile.provider === 'jira') {
169
- const config = profile.config;
170
- // v0.13.0+: Check projects[]
171
- const projects = config.projects || [];
172
- for (const projectKey of projects) {
173
- if (slugify(projectKey) === folderName) {
174
- return projectKey;
175
- }
176
- }
177
- // Fallback to projectKey
178
- if (config.projectKey && slugify(config.projectKey) === folderName) {
179
- return config.projectKey;
180
- }
181
- }
182
- else if (profile.provider === 'github') {
183
- const config = profile.config;
184
- // v0.13.0+: Check repos[]
185
- const repos = config.repos || [];
186
- for (const repo of repos) {
187
- if (slugify(repo) === folderName) {
188
- return repo;
189
- }
190
- }
191
- // Fallback to single repo
192
- if (config.repo && slugify(config.repo) === folderName) {
193
- return config.repo;
194
- }
195
- }
196
- return null;
197
- }
198
- // NOTE: The following was removed in v0.13.0+ migration:
199
- // - config.teams (ADO): Use projects[] or areaPaths[] instead
200
- // - config.strategy (Jira): Removed, use intelligent mapping
201
- // - config.components (Jira): Use projects[] instead
202
- // Please update any code that still references these fields.
203
- //# sourceMappingURL=folder-mapper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"folder-mapper.js","sourceRoot":"","sources":["../../../../src/core/sync/folder-mapper.ts"],"names":[],"mappings":"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"}
@@ -1,66 +0,0 @@
1
- /**
2
- * Label Detector
3
- *
4
- * Detects increment type and applies appropriate labels for external tools.
5
- * Supports GitHub labels, Jira labels, and ADO tags.
6
- *
7
- * @author SpecWeave Team
8
- * @version 1.0.0
9
- */
10
- export type IncrementType = 'bug' | 'feature' | 'docs' | 'hotfix' | 'refactor' | 'chore' | 'experiment';
11
- export interface LabelConfig {
12
- bug: string;
13
- feature: string;
14
- docs: string;
15
- hotfix?: string;
16
- refactor?: string;
17
- chore?: string;
18
- experiment?: string;
19
- }
20
- export interface DetectionResult {
21
- type: IncrementType;
22
- confidence: number;
23
- labels: string[];
24
- detectionMethod: 'frontmatter' | 'title' | 'content' | 'filename';
25
- }
26
- export declare class LabelDetector {
27
- private labelConfig;
28
- constructor(labelConfig?: Partial<LabelConfig>, useUserFormat?: boolean);
29
- /**
30
- * Detect increment type from spec content
31
- */
32
- detectType(specContent: string, incrementId?: string): DetectionResult;
33
- /**
34
- * Detect from YAML frontmatter (type: bug, type: feature, etc.)
35
- */
36
- private detectFromFrontmatter;
37
- /**
38
- * Detect from title/heading (# Fix: Bug Title, # Feature: New Feature, etc.)
39
- */
40
- private detectFromTitle;
41
- /**
42
- * Detect from increment filename (0001-bugfix-auth, 0002-feature-dashboard, etc.)
43
- */
44
- private detectFromFilename;
45
- /**
46
- * Detect from content keywords
47
- */
48
- private detectFromContent;
49
- /**
50
- * Get labels for GitHub (standard format)
51
- */
52
- getGitHubLabels(type: IncrementType): string[];
53
- /**
54
- * Get labels for Jira (supports labels)
55
- */
56
- getJiraLabels(type: IncrementType): string[];
57
- /**
58
- * Get tags for Azure DevOps (supports tags)
59
- */
60
- getAdoTags(type: IncrementType): string[];
61
- /**
62
- * Get user-friendly labels (with brackets: [Bug], [Feature], etc.)
63
- */
64
- getUserLabels(type: IncrementType): string[];
65
- }
66
- //# sourceMappingURL=label-detector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"label-detector.d.ts","sourceRoot":"","sources":["../../../../src/core/sync/label-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,YAAY,CAAC;AAExG,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,EAAE,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;CACnE;AAmCD,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAc;gBAErB,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,aAAa,GAAE,OAAc;IAK7E;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,eAAe;IAyBtE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;OAEG;IACH,OAAO,CAAC,eAAe;IA8BvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6B1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0CzB;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE;IAc9C;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE;IAI5C;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE;IAIzC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE;CAG7C"}
@@ -1,224 +0,0 @@
1
- /**
2
- * Label Detector
3
- *
4
- * Detects increment type and applies appropriate labels for external tools.
5
- * Supports GitHub labels, Jira labels, and ADO tags.
6
- *
7
- * @author SpecWeave Team
8
- * @version 1.0.0
9
- */
10
- const DEFAULT_GITHUB_LABELS = {
11
- bug: 'bug',
12
- feature: 'enhancement',
13
- docs: 'documentation',
14
- hotfix: 'hotfix',
15
- refactor: 'refactor',
16
- chore: 'chore',
17
- experiment: 'experiment'
18
- };
19
- /**
20
- * User-friendly labels for display purposes ONLY.
21
- *
22
- * CRITICAL: These are NOT for use in GitHub issue titles!
23
- * GitHub issue titles MUST follow [FS-XXX][US-YYY] format.
24
- *
25
- * Use these labels:
26
- * - As GitHub issue labels (via addLabels)
27
- * - For display in CLI output
28
- * - For categorization in reports
29
- *
30
- * DO NOT use in issue titles - that causes format violations like issue #749.
31
- */
32
- const DEFAULT_USER_DISPLAY_LABELS = {
33
- bug: 'Bug',
34
- feature: 'Feature',
35
- docs: 'Docs',
36
- hotfix: 'Hotfix',
37
- refactor: 'Refactor',
38
- chore: 'Chore',
39
- experiment: 'Experiment'
40
- };
41
- export class LabelDetector {
42
- constructor(labelConfig, useUserFormat = true) {
43
- const defaults = useUserFormat ? DEFAULT_USER_DISPLAY_LABELS : DEFAULT_GITHUB_LABELS;
44
- this.labelConfig = { ...defaults, ...labelConfig };
45
- }
46
- /**
47
- * Detect increment type from spec content
48
- */
49
- detectType(specContent, incrementId) {
50
- // Try detection methods in order of confidence
51
- const methods = [
52
- () => this.detectFromFrontmatter(specContent),
53
- () => this.detectFromTitle(specContent),
54
- () => this.detectFromFilename(incrementId),
55
- () => this.detectFromContent(specContent)
56
- ];
57
- for (const method of methods) {
58
- const result = method();
59
- if (result && result.confidence >= 70) {
60
- return result;
61
- }
62
- }
63
- // Fallback: default to feature with low confidence
64
- return {
65
- type: 'feature',
66
- confidence: 30,
67
- labels: [this.labelConfig.feature],
68
- detectionMethod: 'content'
69
- };
70
- }
71
- /**
72
- * Detect from YAML frontmatter (type: bug, type: feature, etc.)
73
- */
74
- detectFromFrontmatter(content) {
75
- const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
76
- if (!frontmatterMatch)
77
- return null;
78
- const frontmatter = frontmatterMatch[1];
79
- // Look for "type: bug" or "type: feature"
80
- const typeMatch = frontmatter.match(/^type:\s*(.+)$/m);
81
- if (!typeMatch)
82
- return null;
83
- const type = typeMatch[1].trim().toLowerCase();
84
- const label = this.labelConfig[type];
85
- if (!label)
86
- return null;
87
- return {
88
- type,
89
- confidence: 100,
90
- labels: [label],
91
- detectionMethod: 'frontmatter'
92
- };
93
- }
94
- /**
95
- * Detect from title/heading (# Fix: Bug Title, # Feature: New Feature, etc.)
96
- */
97
- detectFromTitle(content) {
98
- const titleMatch = content.match(/^#\s+(?:Increment\s+\d+:\s+)?(.+)$/m);
99
- if (!titleMatch)
100
- return null;
101
- const title = titleMatch[1].toLowerCase();
102
- // Check for explicit markers
103
- const markers = {
104
- bug: ['fix:', 'bug:', 'bugfix:', 'hotfix:'],
105
- feature: ['feature:', 'feat:', 'add:', 'implement:'],
106
- docs: ['docs:', 'doc:', 'documentation:'],
107
- hotfix: ['hotfix:', 'emergency:', 'critical:'],
108
- refactor: ['refactor:', 'refactoring:', 'cleanup:'],
109
- chore: ['chore:', 'maintenance:']
110
- };
111
- for (const [type, patterns] of Object.entries(markers)) {
112
- if (patterns.some(p => title.startsWith(p))) {
113
- return {
114
- type: type,
115
- confidence: 90,
116
- labels: [this.labelConfig[type]],
117
- detectionMethod: 'title'
118
- };
119
- }
120
- }
121
- return null;
122
- }
123
- /**
124
- * Detect from increment filename (0001-bugfix-auth, 0002-feature-dashboard, etc.)
125
- */
126
- detectFromFilename(incrementId) {
127
- if (!incrementId)
128
- return null;
129
- const filename = incrementId.toLowerCase();
130
- const patterns = {
131
- bug: /\b(bug|bugfix|fix)\b/,
132
- feature: /\b(feature|feat)\b/,
133
- docs: /\b(docs?|documentation)\b/,
134
- hotfix: /\b(hotfix|emergency)\b/,
135
- refactor: /\b(refactor|cleanup)\b/,
136
- chore: /\b(chore|maintenance)\b/,
137
- experiment: /\b(experiment|poc|spike)\b/
138
- };
139
- for (const [type, pattern] of Object.entries(patterns)) {
140
- if (pattern.test(filename)) {
141
- return {
142
- type: type,
143
- confidence: 80,
144
- labels: [this.labelConfig[type]],
145
- detectionMethod: 'filename'
146
- };
147
- }
148
- }
149
- return null;
150
- }
151
- /**
152
- * Detect from content keywords
153
- */
154
- detectFromContent(content) {
155
- const lower = content.toLowerCase();
156
- // Bug indicators
157
- const bugKeywords = ['error', 'crash', 'issue', 'problem', 'broken', 'not working'];
158
- const bugCount = bugKeywords.filter(k => lower.includes(k)).length;
159
- // Feature indicators
160
- const featureKeywords = ['implement', 'add', 'create', 'new feature', 'enhancement'];
161
- const featureCount = featureKeywords.filter(k => lower.includes(k)).length;
162
- // Docs indicators
163
- const docsKeywords = ['documentation', 'readme', 'guide', 'tutorial', 'docs'];
164
- const docsCount = docsKeywords.filter(k => lower.includes(k)).length;
165
- // Determine type by keyword frequency
166
- const max = Math.max(bugCount, featureCount, docsCount);
167
- if (max === 0)
168
- return null;
169
- let type;
170
- let confidence;
171
- if (bugCount === max) {
172
- type = 'bug';
173
- confidence = Math.min(50 + bugCount * 10, 100);
174
- }
175
- else if (featureCount === max) {
176
- type = 'feature';
177
- confidence = Math.min(50 + featureCount * 10, 100);
178
- }
179
- else {
180
- type = 'docs';
181
- confidence = Math.min(50 + docsCount * 10, 100);
182
- }
183
- return {
184
- type,
185
- confidence,
186
- labels: [this.labelConfig[type]],
187
- detectionMethod: 'content'
188
- };
189
- }
190
- /**
191
- * Get labels for GitHub (standard format)
192
- */
193
- getGitHubLabels(type) {
194
- const githubLabels = {
195
- bug: 'bug',
196
- feature: 'enhancement',
197
- docs: 'documentation',
198
- hotfix: 'hotfix',
199
- refactor: 'refactor',
200
- chore: 'chore',
201
- experiment: 'experiment'
202
- };
203
- return [githubLabels[type]];
204
- }
205
- /**
206
- * Get labels for Jira (supports labels)
207
- */
208
- getJiraLabels(type) {
209
- return [type]; // Jira labels are just lowercase type names
210
- }
211
- /**
212
- * Get tags for Azure DevOps (supports tags)
213
- */
214
- getAdoTags(type) {
215
- return [type]; // ADO tags are also lowercase type names
216
- }
217
- /**
218
- * Get user-friendly labels (with brackets: [Bug], [Feature], etc.)
219
- */
220
- getUserLabels(type) {
221
- return [this.labelConfig[type]];
222
- }
223
- }
224
- //# sourceMappingURL=label-detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"label-detector.js","sourceRoot":"","sources":["../../../../src/core/sync/label-detector.ts"],"names":[],"mappings":"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"}
@@ -1,153 +0,0 @@
1
- /**
2
- * Performance Optimizer for Status Sync
3
- *
4
- * Implements caching, batching, and optimization strategies to ensure
5
- * status sync operations complete within performance targets:
6
- * - Status sync: <2 seconds
7
- * - Conflict detection: <1 second
8
- * - Bulk sync (10 items): <5 seconds
9
- *
10
- * @module performance-optimizer
11
- */
12
- /**
13
- * Performance metrics
14
- */
15
- export interface PerformanceMetrics {
16
- operationType: 'status-sync' | 'conflict-detection' | 'bulk-sync';
17
- duration: number;
18
- itemCount: number;
19
- cacheHits: number;
20
- cacheMisses: number;
21
- timestamp: string;
22
- }
23
- /**
24
- * Performance Optimizer
25
- *
26
- * Provides caching and optimization for status sync operations.
27
- */
28
- export declare class PerformanceOptimizer {
29
- private cache;
30
- private readonly DEFAULT_TTL_MS;
31
- private metrics;
32
- /**
33
- * Get cached value if available and not expired
34
- *
35
- * @param key - Cache key
36
- * @returns Cached value or null if not found/expired
37
- */
38
- get<T>(key: string): T | null;
39
- /**
40
- * Set cache value with TTL
41
- *
42
- * @param key - Cache key
43
- * @param value - Value to cache
44
- * @param ttlMs - Time to live in milliseconds (default: 5 minutes)
45
- */
46
- set<T>(key: string, value: T, ttlMs?: number): void;
47
- /**
48
- * Clear specific cache entry
49
- *
50
- * @param key - Cache key
51
- */
52
- clear(key: string): void;
53
- /**
54
- * Clear all cache entries
55
- */
56
- clearAll(): void;
57
- /**
58
- * Clear expired cache entries
59
- */
60
- clearExpired(): void;
61
- /**
62
- * Get cache statistics
63
- */
64
- getCacheStats(): {
65
- size: number;
66
- keys: string[];
67
- hitRate: number;
68
- };
69
- /**
70
- * Record performance metric
71
- *
72
- * @param metric - Performance metric
73
- */
74
- recordMetric(metric: PerformanceMetrics): void;
75
- /**
76
- * Get performance metrics
77
- *
78
- * @param operationType - Filter by operation type
79
- * @returns Performance metrics
80
- */
81
- getMetrics(operationType?: PerformanceMetrics['operationType']): PerformanceMetrics[];
82
- /**
83
- * Get average duration for operation type
84
- *
85
- * @param operationType - Operation type
86
- * @returns Average duration in milliseconds
87
- */
88
- getAverageDuration(operationType: PerformanceMetrics['operationType']): number;
89
- /**
90
- * Check if performance targets are met
91
- *
92
- * Performance targets:
93
- * - status-sync: <2000ms
94
- * - conflict-detection: <1000ms
95
- * - bulk-sync (10 items): <5000ms
96
- *
97
- * @returns Performance target status
98
- */
99
- checkPerformanceTargets(): {
100
- statusSync: {
101
- target: number;
102
- actual: number;
103
- met: boolean;
104
- };
105
- conflictDetection: {
106
- target: number;
107
- actual: number;
108
- met: boolean;
109
- };
110
- bulkSync: {
111
- target: number;
112
- actual: number;
113
- met: boolean;
114
- };
115
- };
116
- /**
117
- * Generate cache key for external status
118
- *
119
- * @param tool - External tool
120
- * @param identifier - Issue/item identifier
121
- * @returns Cache key
122
- */
123
- static generateStatusCacheKey(tool: string, identifier: string): string;
124
- /**
125
- * Generate cache key for workflow
126
- *
127
- * @param tool - External tool
128
- * @param project - Project identifier
129
- * @returns Cache key
130
- */
131
- static generateWorkflowCacheKey(tool: string, project: string): string;
132
- /**
133
- * Batch process with delay
134
- *
135
- * Processes items in batches with configurable delay between batches
136
- * to avoid rate limiting and improve throughput.
137
- *
138
- * @param items - Items to process
139
- * @param processor - Async function to process each item
140
- * @param batchSize - Batch size (default: 5)
141
- * @param delayMs - Delay between batches in milliseconds (default: 1000)
142
- * @returns Array of results
143
- */
144
- static batchProcess<T, R>(items: T[], processor: (item: T) => Promise<R>, batchSize?: number, delayMs?: number): Promise<R[]>;
145
- /**
146
- * Measure execution time of an async function
147
- *
148
- * @param operation - Async operation to measure
149
- * @returns Tuple of [result, duration in ms]
150
- */
151
- static measureTime<T>(operation: () => Promise<T>): Promise<[T, number]>;
152
- }
153
- //# sourceMappingURL=performance-optimizer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"performance-optimizer.d.ts","sourceRoot":"","sources":["../../../../src/core/sync/performance-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,aAAa,GAAG,oBAAoB,GAAG,WAAW,CAAC;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,OAAO,CAA4B;IAE3C;;;;;OAKG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAgB7B;;;;;;OAMG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAE,MAA4B,GAAG,IAAI;IAOxE;;;;OAIG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIxB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,YAAY,IAAI,IAAI;IASpB;;OAEG;IACH,aAAa,IAAI;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB;IAcD;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAS9C;;;;;OAKG;IACH,UAAU,CAAC,aAAa,CAAC,EAAE,kBAAkB,CAAC,eAAe,CAAC,GAAG,kBAAkB,EAAE;IAQrF;;;;;OAKG;IACH,kBAAkB,CAAC,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,GAAG,MAAM;IAW9E;;;;;;;;;OASG;IACH,uBAAuB,IAAI;QACzB,UAAU,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,OAAO,CAAA;SAAE,CAAC;QAC7D,iBAAiB,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,OAAO,CAAA;SAAE,CAAC;QACpE,QAAQ,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,OAAO,CAAA;SAAE,CAAC;KAC5D;IAwBD;;;;;;OAMG;IACH,MAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAIvE;;;;;;OAMG;IACH,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAItE;;;;;;;;;;;OAWG;WACU,YAAY,CAAC,CAAC,EAAE,CAAC,EAC5B,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAClC,SAAS,GAAE,MAAU,EACrB,OAAO,GAAE,MAAa,GACrB,OAAO,CAAC,CAAC,EAAE,CAAC;IAsBf;;;;;OAKG;WACU,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;CAO/E"}