specweave 0.6.8 → 0.7.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 (255) hide show
  1. package/.claude-plugin/README.md +1 -1
  2. package/CLAUDE.md +903 -99
  3. package/README.md +143 -207
  4. package/bin/specweave.js +67 -0
  5. package/dist/cli/commands/abandon.d.ts +13 -0
  6. package/dist/cli/commands/abandon.d.ts.map +1 -0
  7. package/dist/cli/commands/abandon.js +15 -0
  8. package/dist/cli/commands/abandon.js.map +1 -0
  9. package/dist/cli/commands/init.d.ts.map +1 -1
  10. package/dist/cli/commands/init.js +94 -18
  11. package/dist/cli/commands/init.js.map +1 -1
  12. package/dist/cli/commands/pause.d.ts +13 -0
  13. package/dist/cli/commands/pause.d.ts.map +1 -0
  14. package/dist/cli/commands/pause.js +15 -0
  15. package/dist/cli/commands/pause.js.map +1 -0
  16. package/dist/cli/commands/qa.d.ts +54 -0
  17. package/dist/cli/commands/qa.d.ts.map +1 -0
  18. package/dist/cli/commands/qa.js +98 -0
  19. package/dist/cli/commands/qa.js.map +1 -0
  20. package/dist/cli/commands/resume.d.ts +12 -0
  21. package/dist/cli/commands/resume.d.ts.map +1 -0
  22. package/dist/cli/commands/resume.js +14 -0
  23. package/dist/cli/commands/resume.js.map +1 -0
  24. package/dist/cli/commands/status.d.ts +12 -0
  25. package/dist/cli/commands/status.d.ts.map +1 -0
  26. package/dist/cli/commands/status.js +23 -0
  27. package/dist/cli/commands/status.js.map +1 -0
  28. package/dist/cli/helpers/issue-tracker/ado.d.ts +57 -0
  29. package/dist/cli/helpers/issue-tracker/ado.d.ts.map +1 -0
  30. package/dist/cli/helpers/issue-tracker/ado.js +223 -0
  31. package/dist/cli/helpers/issue-tracker/ado.js.map +1 -0
  32. package/dist/cli/helpers/issue-tracker/github.d.ts +65 -0
  33. package/dist/cli/helpers/issue-tracker/github.d.ts.map +1 -0
  34. package/dist/cli/helpers/issue-tracker/github.js +284 -0
  35. package/dist/cli/helpers/issue-tracker/github.js.map +1 -0
  36. package/dist/cli/helpers/issue-tracker/index.d.ts +22 -0
  37. package/dist/cli/helpers/issue-tracker/index.d.ts.map +1 -0
  38. package/dist/cli/helpers/issue-tracker/index.js +270 -0
  39. package/dist/cli/helpers/issue-tracker/index.js.map +1 -0
  40. package/dist/cli/helpers/issue-tracker/jira.d.ts +61 -0
  41. package/dist/cli/helpers/issue-tracker/jira.d.ts.map +1 -0
  42. package/dist/cli/helpers/issue-tracker/jira.js +265 -0
  43. package/dist/cli/helpers/issue-tracker/jira.js.map +1 -0
  44. package/dist/cli/helpers/issue-tracker/types.d.ts +86 -0
  45. package/dist/cli/helpers/issue-tracker/types.d.ts.map +1 -0
  46. package/dist/cli/helpers/issue-tracker/types.js +16 -0
  47. package/dist/cli/helpers/issue-tracker/types.js.map +1 -0
  48. package/dist/cli/helpers/issue-tracker/utils.d.ts +103 -0
  49. package/dist/cli/helpers/issue-tracker/utils.d.ts.map +1 -0
  50. package/dist/cli/helpers/issue-tracker/utils.js +240 -0
  51. package/dist/cli/helpers/issue-tracker/utils.js.map +1 -0
  52. package/dist/core/increment/limits.d.ts +68 -0
  53. package/dist/core/increment/limits.d.ts.map +1 -0
  54. package/dist/core/increment/limits.js +224 -0
  55. package/dist/core/increment/limits.js.map +1 -0
  56. package/dist/core/increment/metadata-manager.d.ts +114 -0
  57. package/dist/core/increment/metadata-manager.d.ts.map +1 -0
  58. package/dist/core/increment/metadata-manager.js +320 -0
  59. package/dist/core/increment/metadata-manager.js.map +1 -0
  60. package/dist/core/increment/status-commands.d.ts +43 -0
  61. package/dist/core/increment/status-commands.d.ts.map +1 -0
  62. package/dist/core/increment/status-commands.js +277 -0
  63. package/dist/core/increment/status-commands.js.map +1 -0
  64. package/dist/core/plugin-detector.d.ts +1 -0
  65. package/dist/core/plugin-detector.d.ts.map +1 -1
  66. package/dist/core/plugin-detector.js +25 -0
  67. package/dist/core/plugin-detector.js.map +1 -1
  68. package/dist/core/qa/qa-runner.d.ts +16 -0
  69. package/dist/core/qa/qa-runner.d.ts.map +1 -0
  70. package/dist/core/qa/qa-runner.js +404 -0
  71. package/dist/core/qa/qa-runner.js.map +1 -0
  72. package/dist/core/qa/quality-gate-decider.d.ts +53 -0
  73. package/dist/core/qa/quality-gate-decider.d.ts.map +1 -0
  74. package/dist/core/qa/quality-gate-decider.js +268 -0
  75. package/dist/core/qa/quality-gate-decider.js.map +1 -0
  76. package/dist/core/qa/risk-calculator.d.ts +126 -0
  77. package/dist/core/qa/risk-calculator.d.ts.map +1 -0
  78. package/dist/core/qa/risk-calculator.js +247 -0
  79. package/dist/core/qa/risk-calculator.js.map +1 -0
  80. package/dist/core/qa/types.d.ts +315 -0
  81. package/dist/core/qa/types.d.ts.map +1 -0
  82. package/dist/core/qa/types.js +8 -0
  83. package/dist/core/qa/types.js.map +1 -0
  84. package/dist/core/types/config.d.ts +35 -0
  85. package/dist/core/types/config.d.ts.map +1 -1
  86. package/dist/core/types/config.js +16 -0
  87. package/dist/core/types/config.js.map +1 -1
  88. package/dist/core/types/increment-metadata.d.ts +120 -0
  89. package/dist/core/types/increment-metadata.d.ts.map +1 -0
  90. package/dist/core/types/increment-metadata.js +138 -0
  91. package/dist/core/types/increment-metadata.js.map +1 -0
  92. package/dist/hooks/lib/invoke-translator-skill.d.ts +60 -0
  93. package/dist/hooks/lib/invoke-translator-skill.d.ts.map +1 -0
  94. package/dist/hooks/lib/invoke-translator-skill.js +201 -0
  95. package/dist/hooks/lib/invoke-translator-skill.js.map +1 -0
  96. package/dist/hooks/lib/translate-file.d.ts +59 -0
  97. package/dist/hooks/lib/translate-file.d.ts.map +1 -0
  98. package/dist/hooks/lib/translate-file.js +350 -0
  99. package/dist/hooks/lib/translate-file.js.map +1 -0
  100. package/dist/locales/en/cli.json +3 -1
  101. package/dist/metrics/calculators/change-failure-rate.d.ts +22 -0
  102. package/dist/metrics/calculators/change-failure-rate.d.ts.map +1 -0
  103. package/dist/metrics/calculators/change-failure-rate.js +70 -0
  104. package/dist/metrics/calculators/change-failure-rate.js.map +1 -0
  105. package/dist/metrics/calculators/deployment-frequency.d.ts +20 -0
  106. package/dist/metrics/calculators/deployment-frequency.d.ts.map +1 -0
  107. package/dist/metrics/calculators/deployment-frequency.js +61 -0
  108. package/dist/metrics/calculators/deployment-frequency.js.map +1 -0
  109. package/dist/metrics/calculators/lead-time.d.ts +22 -0
  110. package/dist/metrics/calculators/lead-time.d.ts.map +1 -0
  111. package/dist/metrics/calculators/lead-time.js +82 -0
  112. package/dist/metrics/calculators/lead-time.js.map +1 -0
  113. package/dist/metrics/calculators/mttr.d.ts +21 -0
  114. package/dist/metrics/calculators/mttr.d.ts.map +1 -0
  115. package/dist/metrics/calculators/mttr.js +60 -0
  116. package/dist/metrics/calculators/mttr.js.map +1 -0
  117. package/dist/metrics/dora-calculator.d.ts +24 -0
  118. package/dist/metrics/dora-calculator.d.ts.map +1 -0
  119. package/dist/metrics/dora-calculator.js +104 -0
  120. package/dist/metrics/dora-calculator.js.map +1 -0
  121. package/dist/metrics/github-client.d.ts +51 -0
  122. package/dist/metrics/github-client.d.ts.map +1 -0
  123. package/dist/metrics/github-client.js +133 -0
  124. package/dist/metrics/github-client.js.map +1 -0
  125. package/dist/metrics/types.d.ts +112 -0
  126. package/dist/metrics/types.d.ts.map +1 -0
  127. package/dist/metrics/types.js +10 -0
  128. package/dist/metrics/types.js.map +1 -0
  129. package/dist/metrics/utils/percentile.d.ts +25 -0
  130. package/dist/metrics/utils/percentile.d.ts.map +1 -0
  131. package/dist/metrics/utils/percentile.js +46 -0
  132. package/dist/metrics/utils/percentile.js.map +1 -0
  133. package/dist/metrics/utils/tier-classifier.d.ts +61 -0
  134. package/dist/metrics/utils/tier-classifier.d.ts.map +1 -0
  135. package/dist/metrics/utils/tier-classifier.js +100 -0
  136. package/dist/metrics/utils/tier-classifier.js.map +1 -0
  137. package/dist/utils/auth-helpers.d.ts +58 -0
  138. package/dist/utils/auth-helpers.d.ts.map +1 -0
  139. package/dist/utils/auth-helpers.js +108 -0
  140. package/dist/utils/auth-helpers.js.map +1 -0
  141. package/dist/utils/env-file.d.ts +88 -0
  142. package/dist/utils/env-file.d.ts.map +1 -0
  143. package/dist/utils/env-file.js +180 -0
  144. package/dist/utils/env-file.js.map +1 -0
  145. package/dist/utils/plugin-detection.d.ts +50 -0
  146. package/dist/utils/plugin-detection.d.ts.map +1 -0
  147. package/dist/utils/plugin-detection.js +229 -0
  148. package/dist/utils/plugin-detection.js.map +1 -0
  149. package/dist/utils/secrets-loader.d.ts +88 -0
  150. package/dist/utils/secrets-loader.d.ts.map +1 -0
  151. package/dist/utils/secrets-loader.js +271 -0
  152. package/dist/utils/secrets-loader.js.map +1 -0
  153. package/dist/utils/translation.d.ts +187 -0
  154. package/dist/utils/translation.d.ts.map +1 -0
  155. package/dist/utils/translation.js +414 -0
  156. package/dist/utils/translation.js.map +1 -0
  157. package/package.json +28 -44
  158. package/plugins/specweave/.claude-plugin/plugin.json +3 -3
  159. package/plugins/specweave/agents/pm/AGENT.md +330 -54
  160. package/plugins/specweave/agents/test-aware-planner/AGENT.md +1035 -0
  161. package/plugins/specweave/agents/test-aware-planner/templates/README.md +118 -0
  162. package/plugins/specweave/agents/test-aware-planner/templates/task-non-testable.md.template +24 -0
  163. package/plugins/specweave/agents/test-aware-planner/templates/task-testable.md.template +53 -0
  164. package/plugins/specweave/agents/test-aware-planner/templates/tasks-frontmatter.md.template +11 -0
  165. package/plugins/specweave/commands/README.md +88 -163
  166. package/plugins/specweave/commands/specweave-abandon.md +314 -0
  167. package/plugins/specweave/commands/specweave-check-tests.md +546 -0
  168. package/plugins/specweave/commands/{do.md → specweave-do.md} +5 -7
  169. package/plugins/specweave/commands/{increment.md → specweave-increment.md} +231 -4
  170. package/plugins/specweave/commands/specweave-pause.md +189 -0
  171. package/plugins/specweave/commands/specweave-qa.md +245 -0
  172. package/plugins/specweave/commands/specweave-resume.md +216 -0
  173. package/plugins/specweave/commands/specweave-status.md +397 -0
  174. package/plugins/specweave/commands/specweave-sync-tasks.md +256 -0
  175. package/plugins/specweave/commands/{translate.md → specweave-translate.md} +3 -3
  176. package/plugins/specweave/commands/specweave-update-scope.md +351 -0
  177. package/plugins/specweave/commands/specweave.md +21 -21
  178. package/plugins/specweave/hooks/post-increment-planning.sh +335 -0
  179. package/plugins/specweave/hooks/post-task-completion.sh +141 -0
  180. package/plugins/specweave/skills/SKILLS-INDEX.md +1 -1
  181. package/plugins/specweave/skills/brownfield-analyzer/SKILL.md +9 -9
  182. package/plugins/specweave/skills/increment-planner/SKILL.md +400 -212
  183. package/plugins/specweave/skills/increment-quality-judge-v2/SKILL.md +499 -0
  184. package/plugins/specweave/skills/plugin-detector/SKILL.md +114 -1
  185. package/plugins/specweave/skills/project-kickstarter/SKILL.md +74 -1
  186. package/plugins/specweave/skills/{rfc-generator → spec-generator}/SKILL.md +22 -29
  187. package/plugins/specweave/skills/specweave-detector/SKILL.md +3 -3
  188. package/plugins/specweave/skills/specweave-framework/SKILL.md +2 -2
  189. package/plugins/specweave-ado/.claude-plugin/plugin.json +18 -4
  190. package/plugins/specweave-ado/agents/ado-manager/AGENT.md +426 -0
  191. package/plugins/specweave-ado/commands/close-workitem.md +52 -0
  192. package/plugins/specweave-ado/commands/create-workitem.md +53 -0
  193. package/plugins/specweave-ado/commands/status.md +53 -0
  194. package/plugins/specweave-ado/commands/sync.md +55 -0
  195. package/plugins/specweave-ado/lib/ado-client.ts +361 -0
  196. package/plugins/specweave-ado/reference/ado-specweave-mapping.md +552 -0
  197. package/plugins/specweave-ado/skills/ado-sync/SKILL.md +344 -193
  198. package/plugins/specweave-docs/skills/docusaurus/SKILL.md +73 -0
  199. package/plugins/specweave-github/agents/github-manager/AGENT.md +49 -0
  200. package/plugins/specweave-github/commands/{github-close-issue.md → close-issue.md} +1 -1
  201. package/plugins/specweave-github/commands/{github-create-issue.md → create-issue.md} +1 -1
  202. package/plugins/specweave-github/commands/{github-status.md → status.md} +1 -1
  203. package/plugins/specweave-github/commands/{github-sync-tasks.md → sync-tasks.md} +1 -1
  204. package/plugins/specweave-github/commands/{github-sync.md → sync.md} +1 -1
  205. package/plugins/specweave-github/reference/github-specweave-mapping.md +377 -0
  206. package/plugins/specweave-github/skills/github-sync/SKILL.md +11 -3
  207. package/plugins/specweave-infrastructure/commands/{specweave.monitor-setup.md → monitor-setup.md} +5 -0
  208. package/plugins/specweave-infrastructure/commands/{specweave.slo-implement.md → slo-implement.md} +5 -0
  209. package/plugins/specweave-jira/agents/jira-manager/AGENT.md +380 -0
  210. package/plugins/specweave-jira/commands/{specweave.sync-jira.md → sync.md} +1 -1
  211. package/plugins/specweave-jira/reference/jira-specweave-mapping.md +508 -0
  212. package/plugins/specweave-ml/commands/ml-deploy.md +1 -1
  213. package/plugins/specweave-ml/commands/ml-evaluate.md +1 -1
  214. package/plugins/specweave-ml/commands/ml-explain.md +1 -1
  215. package/plugins/specweave-ml/commands/{specweave.ml-pipeline.md → ml-pipeline.md} +5 -0
  216. package/src/templates/AGENTS.md.template +331 -31
  217. package/src/templates/CLAUDE.md.template +36 -21
  218. package/src/templates/COMPLETION-REPORT.template.md +128 -0
  219. package/src/templates/README.md.template +17 -16
  220. package/src/templates/docs/README.md +11 -9
  221. package/src/templates/docs/spec-template.md +229 -0
  222. package/plugins/specweave/commands/inc.md +0 -85
  223. package/plugins/specweave/commands/list-increments.md +0 -180
  224. package/src/adapters/README.md +0 -275
  225. package/src/adapters/adapter-base.ts +0 -182
  226. package/src/adapters/adapter-interface.ts +0 -166
  227. package/src/adapters/adapter-loader.ts +0 -256
  228. package/src/adapters/agents-md-generator.ts +0 -228
  229. package/src/adapters/claude/README.md +0 -233
  230. package/src/adapters/claude/adapter.ts +0 -468
  231. package/src/adapters/claude-md-generator.ts +0 -377
  232. package/src/adapters/codex/README.md +0 -105
  233. package/src/adapters/codex/adapter.ts +0 -333
  234. package/src/adapters/cursor/.cursor/context/docs-context.md +0 -62
  235. package/src/adapters/cursor/.cursor/context/increments-context.md +0 -71
  236. package/src/adapters/cursor/.cursor/context/strategy-context.md +0 -73
  237. package/src/adapters/cursor/.cursor/context/tests-context.md +0 -89
  238. package/src/adapters/cursor/README.md +0 -283
  239. package/src/adapters/cursor/adapter.ts +0 -451
  240. package/src/adapters/doc-generator.ts +0 -331
  241. package/src/adapters/gemini/README.md +0 -97
  242. package/src/adapters/gemini/adapter.ts +0 -298
  243. package/src/adapters/generic/README.md +0 -277
  244. package/src/adapters/generic/adapter.ts +0 -378
  245. package/src/adapters/registry.yaml +0 -187
  246. /package/plugins/specweave/commands/{costs.md → specweave-costs.md} +0 -0
  247. /package/plugins/specweave/commands/{done.md → specweave-done.md} +0 -0
  248. /package/plugins/specweave/commands/{next.md → specweave-next.md} +0 -0
  249. /package/plugins/specweave/commands/{progress.md → specweave-progress.md} +0 -0
  250. /package/plugins/specweave/commands/{sync-docs.md → specweave-sync-docs.md} +0 -0
  251. /package/plugins/specweave/commands/{tdd-cycle.md → specweave-tdd-cycle.md} +0 -0
  252. /package/plugins/specweave/commands/{tdd-green.md → specweave-tdd-green.md} +0 -0
  253. /package/plugins/specweave/commands/{tdd-red.md → specweave-tdd-red.md} +0 -0
  254. /package/plugins/specweave/commands/{tdd-refactor.md → specweave-tdd-refactor.md} +0 -0
  255. /package/plugins/specweave/commands/{validate.md → specweave-validate.md} +0 -0
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Percentile Calculator
3
+ *
4
+ * Calculates Pth percentile of a dataset using linear interpolation
5
+ * Used for P50 (median) and P90 calculations in DORA metrics
6
+ */
7
+ /**
8
+ * Calculate percentile value from array of numbers
9
+ *
10
+ * Uses linear interpolation method:
11
+ * 1. Sort values ascending
12
+ * 2. Calculate index: (P/100) * (n-1)
13
+ * 3. If index is integer, return value at that index
14
+ * 4. If index is fractional, interpolate between adjacent values
15
+ *
16
+ * @param values - Array of numeric values
17
+ * @param percentile - Percentile to calculate (0-100)
18
+ * @returns Percentile value
19
+ *
20
+ * @example
21
+ * calculatePercentile([1, 2, 3, 4, 5], 50) // Returns 3 (median)
22
+ * calculatePercentile([1, 2, 3, 4, 5], 90) // Returns 4.6 (P90)
23
+ */
24
+ export declare function calculatePercentile(values: number[], percentile: number): number;
25
+ //# sourceMappingURL=percentile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"percentile.d.ts","sourceRoot":"","sources":["../../../src/metrics/utils/percentile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CA0BhF"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Percentile Calculator
3
+ *
4
+ * Calculates Pth percentile of a dataset using linear interpolation
5
+ * Used for P50 (median) and P90 calculations in DORA metrics
6
+ */
7
+ /**
8
+ * Calculate percentile value from array of numbers
9
+ *
10
+ * Uses linear interpolation method:
11
+ * 1. Sort values ascending
12
+ * 2. Calculate index: (P/100) * (n-1)
13
+ * 3. If index is integer, return value at that index
14
+ * 4. If index is fractional, interpolate between adjacent values
15
+ *
16
+ * @param values - Array of numeric values
17
+ * @param percentile - Percentile to calculate (0-100)
18
+ * @returns Percentile value
19
+ *
20
+ * @example
21
+ * calculatePercentile([1, 2, 3, 4, 5], 50) // Returns 3 (median)
22
+ * calculatePercentile([1, 2, 3, 4, 5], 90) // Returns 4.6 (P90)
23
+ */
24
+ export function calculatePercentile(values, percentile) {
25
+ if (values.length === 0)
26
+ return 0;
27
+ if (percentile < 0 || percentile > 100) {
28
+ throw new Error('Percentile must be between 0 and 100');
29
+ }
30
+ // Sort values ascending
31
+ const sorted = [...values].sort((a, b) => a - b);
32
+ // Calculate index
33
+ const index = (percentile / 100) * (sorted.length - 1);
34
+ // If index is integer, return exact value
35
+ if (Number.isInteger(index)) {
36
+ return sorted[index];
37
+ }
38
+ // Otherwise, interpolate between adjacent values
39
+ const lowerIndex = Math.floor(index);
40
+ const upperIndex = Math.ceil(index);
41
+ const fraction = index - lowerIndex;
42
+ const lowerValue = sorted[lowerIndex];
43
+ const upperValue = sorted[upperIndex];
44
+ return lowerValue + (upperValue - lowerValue) * fraction;
45
+ }
46
+ //# sourceMappingURL=percentile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"percentile.js","sourceRoot":"","sources":["../../../src/metrics/utils/percentile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAgB,EAAE,UAAkB;IACtE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,wBAAwB;IACxB,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEjD,kBAAkB;IAClB,MAAM,KAAK,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEvD,0CAA0C;IAC1C,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,iDAAiD;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC;IAEpC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAEtC,OAAO,UAAU,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,QAAQ,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * DORA Tier Classifier
3
+ *
4
+ * Maps metric values to DORA performance tiers based on industry benchmarks
5
+ *
6
+ * @see https://dora.dev/ - DORA Research
7
+ */
8
+ import { DORAType } from '../types';
9
+ /**
10
+ * Classify Deployment Frequency
11
+ *
12
+ * Benchmarks (deploys per year):
13
+ * - Elite: >365 (on-demand, multiple per day)
14
+ * - High: 52-365 (weekly to daily)
15
+ * - Medium: 12-52 (monthly to weekly)
16
+ * - Low: <12 (less than monthly)
17
+ *
18
+ * @param deploysPerYear - Number of deployments per year
19
+ * @returns DORA tier
20
+ */
21
+ export declare function classifyDeploymentFrequency(deploysPerYear: number): DORAType;
22
+ /**
23
+ * Classify Lead Time for Changes
24
+ *
25
+ * Benchmarks (hours from commit to production):
26
+ * - Elite: <1 hour
27
+ * - High: 1 hour to 1 day (24 hours)
28
+ * - Medium: 1 day to 1 week (168 hours)
29
+ * - Low: 1 week to 1 month (720 hours)
30
+ *
31
+ * @param hours - Average lead time in hours
32
+ * @returns DORA tier
33
+ */
34
+ export declare function classifyLeadTime(hours: number): DORAType;
35
+ /**
36
+ * Classify Change Failure Rate
37
+ *
38
+ * Benchmarks (percentage of failed deployments):
39
+ * - Elite: <5%
40
+ * - High: 5-10%
41
+ * - Medium: 10-15%
42
+ * - Low: >15%
43
+ *
44
+ * @param percentage - Change failure rate (0-100)
45
+ * @returns DORA tier
46
+ */
47
+ export declare function classifyChangeFailureRate(percentage: number): DORAType;
48
+ /**
49
+ * Classify Mean Time to Recovery (MTTR)
50
+ *
51
+ * Benchmarks (minutes to recover from incident):
52
+ * - Elite: <60 minutes (1 hour)
53
+ * - High: 60 minutes to 1 day (1440 minutes)
54
+ * - Medium: 1 day to 1 week (10080 minutes)
55
+ * - Low: >1 week
56
+ *
57
+ * @param minutes - Average recovery time in minutes
58
+ * @returns DORA tier
59
+ */
60
+ export declare function classifyMTTR(minutes: number): DORAType;
61
+ //# sourceMappingURL=tier-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier-classifier.d.ts","sourceRoot":"","sources":["../../../src/metrics/utils/tier-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,QAAQ,CAM5E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAMxD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAMtE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAMtD"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * DORA Tier Classifier
3
+ *
4
+ * Maps metric values to DORA performance tiers based on industry benchmarks
5
+ *
6
+ * @see https://dora.dev/ - DORA Research
7
+ */
8
+ /**
9
+ * Classify Deployment Frequency
10
+ *
11
+ * Benchmarks (deploys per year):
12
+ * - Elite: >365 (on-demand, multiple per day)
13
+ * - High: 52-365 (weekly to daily)
14
+ * - Medium: 12-52 (monthly to weekly)
15
+ * - Low: <12 (less than monthly)
16
+ *
17
+ * @param deploysPerYear - Number of deployments per year
18
+ * @returns DORA tier
19
+ */
20
+ export function classifyDeploymentFrequency(deploysPerYear) {
21
+ if (deploysPerYear === 0)
22
+ return 'N/A';
23
+ if (deploysPerYear > 365)
24
+ return 'Elite';
25
+ if (deploysPerYear >= 52)
26
+ return 'High';
27
+ if (deploysPerYear >= 12)
28
+ return 'Medium';
29
+ return 'Low';
30
+ }
31
+ /**
32
+ * Classify Lead Time for Changes
33
+ *
34
+ * Benchmarks (hours from commit to production):
35
+ * - Elite: <1 hour
36
+ * - High: 1 hour to 1 day (24 hours)
37
+ * - Medium: 1 day to 1 week (168 hours)
38
+ * - Low: 1 week to 1 month (720 hours)
39
+ *
40
+ * @param hours - Average lead time in hours
41
+ * @returns DORA tier
42
+ */
43
+ export function classifyLeadTime(hours) {
44
+ if (hours === 0)
45
+ return 'N/A';
46
+ if (hours < 1)
47
+ return 'Elite';
48
+ if (hours < 24)
49
+ return 'High';
50
+ if (hours < 168)
51
+ return 'Medium'; // 7 days
52
+ return 'Low';
53
+ }
54
+ /**
55
+ * Classify Change Failure Rate
56
+ *
57
+ * Benchmarks (percentage of failed deployments):
58
+ * - Elite: <5%
59
+ * - High: 5-10%
60
+ * - Medium: 10-15%
61
+ * - Low: >15%
62
+ *
63
+ * @param percentage - Change failure rate (0-100)
64
+ * @returns DORA tier
65
+ */
66
+ export function classifyChangeFailureRate(percentage) {
67
+ if (percentage < 0)
68
+ return 'N/A'; // Invalid
69
+ if (percentage < 5)
70
+ return 'Elite';
71
+ if (percentage < 10)
72
+ return 'High';
73
+ if (percentage < 15)
74
+ return 'Medium';
75
+ return 'Low';
76
+ }
77
+ /**
78
+ * Classify Mean Time to Recovery (MTTR)
79
+ *
80
+ * Benchmarks (minutes to recover from incident):
81
+ * - Elite: <60 minutes (1 hour)
82
+ * - High: 60 minutes to 1 day (1440 minutes)
83
+ * - Medium: 1 day to 1 week (10080 minutes)
84
+ * - Low: >1 week
85
+ *
86
+ * @param minutes - Average recovery time in minutes
87
+ * @returns DORA tier
88
+ */
89
+ export function classifyMTTR(minutes) {
90
+ if (minutes === 0)
91
+ return 'N/A';
92
+ if (minutes < 60)
93
+ return 'Elite';
94
+ if (minutes < 1440)
95
+ return 'High'; // 24 hours
96
+ if (minutes < 10080)
97
+ return 'Medium'; // 7 days
98
+ return 'Low';
99
+ }
100
+ //# sourceMappingURL=tier-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier-classifier.js","sourceRoot":"","sources":["../../../src/metrics/utils/tier-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,2BAA2B,CAAC,cAAsB;IAChE,IAAI,cAAc,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,cAAc,GAAG,GAAG;QAAE,OAAO,OAAO,CAAC;IACzC,IAAI,cAAc,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,cAAc,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IAC1C,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9B,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,MAAM,CAAC;IAC9B,IAAI,KAAK,GAAG,GAAG;QAAE,OAAO,QAAQ,CAAC,CAAE,SAAS;IAC5C,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB,CAAC,UAAkB;IAC1D,IAAI,UAAU,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC,CAAE,UAAU;IAC7C,IAAI,UAAU,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACnC,IAAI,UAAU,GAAG,EAAE;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,UAAU,GAAG,EAAE;QAAE,OAAO,QAAQ,CAAC;IACrC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,OAAO,CAAC;IACjC,IAAI,OAAO,GAAG,IAAI;QAAE,OAAO,MAAM,CAAC,CAAE,WAAW;IAC/C,IAAI,OAAO,GAAG,KAAK;QAAE,OAAO,QAAQ,CAAC,CAAE,SAAS;IAChD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Authentication Helpers for Issue Tracker Integration
3
+ *
4
+ * Provides unified authentication detection for GitHub, Azure DevOps, and Jira
5
+ * Works in both CLI (init flow) and test environments
6
+ *
7
+ * @module utils/auth-helpers
8
+ */
9
+ export interface GitHubAuth {
10
+ token: string;
11
+ source: 'GITHUB_TOKEN' | 'GH_TOKEN' | 'gh-cli' | 'none';
12
+ }
13
+ export interface AzureDevOpsAuth {
14
+ pat: string;
15
+ org: string;
16
+ project: string;
17
+ }
18
+ export interface JiraAuth {
19
+ token: string;
20
+ email: string;
21
+ domain: string;
22
+ }
23
+ /**
24
+ * Get GitHub authentication token
25
+ * Priority: GITHUB_TOKEN (CI) > GH_TOKEN (custom) > gh CLI config (local)
26
+ */
27
+ export declare function getGitHubAuth(): GitHubAuth;
28
+ /**
29
+ * Get Azure DevOps authentication
30
+ * Requires: AZURE_DEVOPS_PAT, AZURE_DEVOPS_ORG, AZURE_DEVOPS_PROJECT
31
+ */
32
+ export declare function getAzureDevOpsAuth(): AzureDevOpsAuth | null;
33
+ /**
34
+ * Get Jira authentication
35
+ * Requires: JIRA_API_TOKEN, JIRA_EMAIL, JIRA_DOMAIN
36
+ */
37
+ export declare function getJiraAuth(): JiraAuth | null;
38
+ /**
39
+ * Check if integration tests should run
40
+ * Returns true if RUN_INTEGRATION_TESTS=true or if in CI environment
41
+ */
42
+ export declare function shouldRunIntegrationTests(): boolean;
43
+ /**
44
+ * Check if credentials are available for a service
45
+ */
46
+ export declare function hasGitHubCredentials(): boolean;
47
+ export declare function hasAzureDevOpsCredentials(): boolean;
48
+ export declare function hasJiraCredentials(): boolean;
49
+ /**
50
+ * Get credential status summary (for debugging)
51
+ */
52
+ export declare function getCredentialStatus(): {
53
+ github: string;
54
+ ado: boolean;
55
+ jira: boolean;
56
+ integrationTestsEnabled: boolean;
57
+ };
58
+ //# sourceMappingURL=auth-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/auth-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;CACzD;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,UAAU,CA0B1C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,GAAG,IAAI,CAU3D;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,QAAQ,GAAG,IAAI,CAU7C;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAYnD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAG9C;AAED,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,uBAAuB,EAAE,OAAO,CAAC;CAClC,CAQA"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Authentication Helpers for Issue Tracker Integration
3
+ *
4
+ * Provides unified authentication detection for GitHub, Azure DevOps, and Jira
5
+ * Works in both CLI (init flow) and test environments
6
+ *
7
+ * @module utils/auth-helpers
8
+ */
9
+ import * as fs from 'fs';
10
+ import * as path from 'path';
11
+ import * as os from 'os';
12
+ import * as yaml from 'js-yaml';
13
+ /**
14
+ * Get GitHub authentication token
15
+ * Priority: GITHUB_TOKEN (CI) > GH_TOKEN (custom) > gh CLI config (local)
16
+ */
17
+ export function getGitHubAuth() {
18
+ // 1. Check GITHUB_TOKEN (auto-provided in GitHub Actions)
19
+ if (process.env.GITHUB_TOKEN) {
20
+ return { token: process.env.GITHUB_TOKEN, source: 'GITHUB_TOKEN' };
21
+ }
22
+ // 2. Check GH_TOKEN (custom PAT from .env)
23
+ if (process.env.GH_TOKEN) {
24
+ return { token: process.env.GH_TOKEN, source: 'GH_TOKEN' };
25
+ }
26
+ // 3. Try to parse gh CLI config (~/.config/gh/hosts.yml)
27
+ try {
28
+ const ghConfigPath = path.join(os.homedir(), '.config', 'gh', 'hosts.yml');
29
+ if (fs.existsSync(ghConfigPath)) {
30
+ const config = yaml.load(fs.readFileSync(ghConfigPath, 'utf8'));
31
+ const token = config?.['github.com']?.oauth_token;
32
+ if (token) {
33
+ return { token, source: 'gh-cli' };
34
+ }
35
+ }
36
+ }
37
+ catch (error) {
38
+ // Silently fail - gh CLI config is optional
39
+ }
40
+ return { token: '', source: 'none' };
41
+ }
42
+ /**
43
+ * Get Azure DevOps authentication
44
+ * Requires: AZURE_DEVOPS_PAT, AZURE_DEVOPS_ORG, AZURE_DEVOPS_PROJECT
45
+ */
46
+ export function getAzureDevOpsAuth() {
47
+ const pat = process.env.AZURE_DEVOPS_PAT;
48
+ const org = process.env.AZURE_DEVOPS_ORG;
49
+ const project = process.env.AZURE_DEVOPS_PROJECT;
50
+ if (!pat || !org || !project) {
51
+ return null;
52
+ }
53
+ return { pat, org, project };
54
+ }
55
+ /**
56
+ * Get Jira authentication
57
+ * Requires: JIRA_API_TOKEN, JIRA_EMAIL, JIRA_DOMAIN
58
+ */
59
+ export function getJiraAuth() {
60
+ const token = process.env.JIRA_API_TOKEN;
61
+ const email = process.env.JIRA_EMAIL;
62
+ const domain = process.env.JIRA_DOMAIN;
63
+ if (!token || !email || !domain) {
64
+ return null;
65
+ }
66
+ return { token, email, domain };
67
+ }
68
+ /**
69
+ * Check if integration tests should run
70
+ * Returns true if RUN_INTEGRATION_TESTS=true or if in CI environment
71
+ */
72
+ export function shouldRunIntegrationTests() {
73
+ // Explicitly enabled
74
+ if (process.env.RUN_INTEGRATION_TESTS === 'true') {
75
+ return true;
76
+ }
77
+ // In CI environment (GitHub Actions)
78
+ if (process.env.CI === 'true') {
79
+ return true;
80
+ }
81
+ return false;
82
+ }
83
+ /**
84
+ * Check if credentials are available for a service
85
+ */
86
+ export function hasGitHubCredentials() {
87
+ const auth = getGitHubAuth();
88
+ return auth.source !== 'none';
89
+ }
90
+ export function hasAzureDevOpsCredentials() {
91
+ return getAzureDevOpsAuth() !== null;
92
+ }
93
+ export function hasJiraCredentials() {
94
+ return getJiraAuth() !== null;
95
+ }
96
+ /**
97
+ * Get credential status summary (for debugging)
98
+ */
99
+ export function getCredentialStatus() {
100
+ const github = getGitHubAuth();
101
+ return {
102
+ github: github.source,
103
+ ado: hasAzureDevOpsCredentials(),
104
+ jira: hasJiraCredentials(),
105
+ integrationTestsEnabled: shouldRunIntegrationTests()
106
+ };
107
+ }
108
+ //# sourceMappingURL=auth-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-helpers.js","sourceRoot":"","sources":["../../src/utils/auth-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Environment File Utilities
3
+ *
4
+ * Parse, update, and validate .env files
5
+ *
6
+ * @module utils/env-file
7
+ */
8
+ export interface EnvVariable {
9
+ key: string;
10
+ value: string;
11
+ }
12
+ /**
13
+ * Parse .env file content into key-value pairs
14
+ *
15
+ * @param content - Content of .env file
16
+ * @returns Record of key-value pairs
17
+ */
18
+ export declare function parseEnvFile(content: string): Record<string, string>;
19
+ /**
20
+ * Update or add environment variable in .env content
21
+ *
22
+ * @param envContent - Current .env file content
23
+ * @param key - Environment variable key
24
+ * @param value - Environment variable value
25
+ * @returns Updated .env content
26
+ */
27
+ export declare function updateEnvVar(envContent: string, key: string, value: string): string;
28
+ /**
29
+ * Update multiple environment variables
30
+ *
31
+ * @param envContent - Current .env file content
32
+ * @param vars - Array of environment variables to update
33
+ * @returns Updated .env content
34
+ */
35
+ export declare function updateEnvVars(envContent: string, vars: EnvVariable[]): string;
36
+ /**
37
+ * Read .env file from project directory
38
+ *
39
+ * @param projectPath - Path to project root
40
+ * @returns Content of .env file, or empty string if not found
41
+ */
42
+ export declare function readEnvFile(projectPath: string): string;
43
+ /**
44
+ * Write .env file to project directory
45
+ *
46
+ * @param projectPath - Path to project root
47
+ * @param content - Content to write
48
+ */
49
+ export declare function writeEnvFile(projectPath: string, content: string): void;
50
+ /**
51
+ * Create .env file from .env.example template
52
+ *
53
+ * @param projectPath - Path to project root
54
+ * @returns Content of .env file (from template or empty)
55
+ */
56
+ export declare function createEnvFromTemplate(projectPath: string): string;
57
+ /**
58
+ * Verify .env is in .gitignore
59
+ *
60
+ * @param projectPath - Path to project root
61
+ * @returns True if .env is gitignored, false otherwise
62
+ */
63
+ export declare function isEnvGitignored(projectPath: string): boolean;
64
+ /**
65
+ * Add .env to .gitignore if not already present
66
+ *
67
+ * @param projectPath - Path to project root
68
+ */
69
+ export declare function ensureEnvGitignored(projectPath: string): void;
70
+ /**
71
+ * Validate required environment variables are present
72
+ *
73
+ * @param envContent - Content of .env file
74
+ * @param requiredKeys - Array of required keys
75
+ * @returns Object with validation result and missing keys
76
+ */
77
+ export declare function validateEnvVars(envContent: string, requiredKeys: string[]): {
78
+ valid: boolean;
79
+ missing: string[];
80
+ };
81
+ /**
82
+ * Check if .env file exists in project
83
+ *
84
+ * @param projectPath - Path to project root
85
+ * @returns True if .env exists, false otherwise
86
+ */
87
+ export declare function envFileExists(projectPath: string): boolean;
88
+ //# sourceMappingURL=env-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-file.d.ts","sourceRoot":"","sources":["../../src/utils/env-file.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyBpE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAWnF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,WAAW,EAAE,GAClB,MAAM,CAQR;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAcvE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQjE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAS5D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAe7D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EAAE,GACrB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAcvC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAG1D"}