smart-commit-copilot-cli 0.1.5 → 0.1.7

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 (168) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +55 -7
  3. package/docs/configuration.md +55 -2
  4. package/docs/contracts.md +15 -2
  5. package/docs/getting-started.md +18 -4
  6. package/docs/publish.md +1 -1
  7. package/docs/releases/0.1.6-draft.md +72 -0
  8. package/docs/releases/0.1.7-draft.md +55 -0
  9. package/docs/roadmap.md +1 -1
  10. package/docs/verification.md +15 -0
  11. package/examples/config/smart-commit.json +10 -1
  12. package/out/cliApp.js +11 -1
  13. package/out/cliApp.js.map +1 -1
  14. package/out/commands/bridge.js +160 -17
  15. package/out/commands/bridge.js.map +1 -1
  16. package/out/commitMessage/index.js +30 -9
  17. package/out/commitMessage/index.js.map +1 -1
  18. package/out/commitMessage/prompt.js +60 -10
  19. package/out/commitMessage/prompt.js.map +1 -1
  20. package/out/commitMessage/protocol.js +283 -22
  21. package/out/commitMessage/protocol.js.map +1 -1
  22. package/out/config/cliArgs.js +33 -0
  23. package/out/config/cliArgs.js.map +1 -1
  24. package/out/config/constants.js +9 -0
  25. package/out/config/constants.js.map +1 -1
  26. package/out/config/env.js +30 -0
  27. package/out/config/env.js.map +1 -1
  28. package/out/config/file.js +36 -0
  29. package/out/config/file.js.map +1 -1
  30. package/out/config/legacySmartCommit.js +41 -1
  31. package/out/config/legacySmartCommit.js.map +1 -1
  32. package/out/config/merge.js +4 -0
  33. package/out/config/merge.js.map +1 -1
  34. package/out/config/schema.js +35 -1
  35. package/out/config/schema.js.map +1 -1
  36. package/out/contracts.js +44 -9
  37. package/out/contracts.js.map +1 -1
  38. package/out/llm/responseCorrection.js +32 -0
  39. package/out/llm/responseCorrection.js.map +1 -0
  40. package/out/passHistory/index.js +51 -22
  41. package/out/passHistory/index.js.map +1 -1
  42. package/out/passHistory/store.js +29 -1
  43. package/out/passHistory/store.js.map +1 -1
  44. package/out/passHistory/types.js +23 -1
  45. package/out/passHistory/types.js.map +1 -1
  46. package/out/promptContext.js +19 -3
  47. package/out/promptContext.js.map +1 -1
  48. package/out/pullRequestSummary/index.js +53 -0
  49. package/out/pullRequestSummary/index.js.map +1 -0
  50. package/out/pullRequestSummary/mockProvider.js +24 -0
  51. package/out/pullRequestSummary/mockProvider.js.map +1 -0
  52. package/out/pullRequestSummary/openaiProvider.js +19 -0
  53. package/out/pullRequestSummary/openaiProvider.js.map +1 -0
  54. package/out/pullRequestSummary/prompt.js +122 -0
  55. package/out/pullRequestSummary/prompt.js.map +1 -0
  56. package/out/pullRequestSummary/provider.js +3 -0
  57. package/out/pullRequestSummary/provider.js.map +1 -0
  58. package/out/pullRequestSummary/render.js +74 -0
  59. package/out/pullRequestSummary/render.js.map +1 -0
  60. package/out/renderOutput.js +8 -1
  61. package/out/renderOutput.js.map +1 -1
  62. package/out/reporting/prompt.js +13 -1
  63. package/out/reporting/prompt.js.map +1 -1
  64. package/out/reporting/timeWindow.js +7 -0
  65. package/out/reporting/timeWindow.js.map +1 -1
  66. package/out/reporting/types.js +1 -0
  67. package/out/reporting/types.js.map +1 -1
  68. package/out/review/diffClassifier.js +535 -0
  69. package/out/review/diffClassifier.js.map +1 -0
  70. package/out/review/index.js +27 -11
  71. package/out/review/index.js.map +1 -1
  72. package/out/review/mockProvider.js +157 -8
  73. package/out/review/mockProvider.js.map +1 -1
  74. package/out/review/openaiProvider.js +10 -4
  75. package/out/review/openaiProvider.js.map +1 -1
  76. package/out/review/parser.js +13 -0
  77. package/out/review/parser.js.map +1 -1
  78. package/out/review/prompt.js +76 -4
  79. package/out/review/prompt.js.map +1 -1
  80. package/out/skills/types.js +3 -0
  81. package/out/skills/types.js.map +1 -0
  82. package/package.json +2 -1
  83. package/src/code-review-skills/c-code-review/SKILL.md +165 -0
  84. package/src/code-review-skills/c-code-review/references/build-and-tooling.md +16 -0
  85. package/src/code-review-skills/c-code-review/references/concurrency-and-signals.md +16 -0
  86. package/src/code-review-skills/c-code-review/references/error-handling-and-cleanup.md +16 -0
  87. package/src/code-review-skills/c-code-review/references/macros-headers-and-build-boundaries.md +16 -0
  88. package/src/code-review-skills/c-code-review/references/performance-and-data-movement.md +16 -0
  89. package/src/code-review-skills/c-code-review/references/pointers-memory-and-resource-lifecycle.md +18 -0
  90. package/src/code-review-skills/c-code-review/references/scoring-guide.md +40 -0
  91. package/src/code-review-skills/c-code-review/references/undefined-behavior-and-safety.md +17 -0
  92. package/src/code-review-skills/code-review/SKILL.md +150 -0
  93. package/src/code-review-skills/code-review/references/code-quality-checklist.md +53 -0
  94. package/src/code-review-skills/code-review/references/removal-plan.md +45 -0
  95. package/src/code-review-skills/code-review/references/scoring-guide.md +38 -0
  96. package/src/code-review-skills/code-review/references/security-checklist.md +53 -0
  97. package/src/code-review-skills/code-review/references/solid-checklist.md +55 -0
  98. package/src/code-review-skills/cpp-code-review/SKILL.md +165 -0
  99. package/src/code-review-skills/cpp-code-review/references/build-and-tooling.md +12 -0
  100. package/src/code-review-skills/cpp-code-review/references/concurrency-and-atomics.md +14 -0
  101. package/src/code-review-skills/cpp-code-review/references/exceptions-and-error-model.md +16 -0
  102. package/src/code-review-skills/cpp-code-review/references/memory-raii-and-lifetimes.md +19 -0
  103. package/src/code-review-skills/cpp-code-review/references/performance-and-hot-paths.md +16 -0
  104. package/src/code-review-skills/cpp-code-review/references/scoring-guide.md +41 -0
  105. package/src/code-review-skills/cpp-code-review/references/templates-api-and-abi.md +13 -0
  106. package/src/code-review-skills/cpp-code-review/references/undefined-behavior-and-safety.md +18 -0
  107. package/src/code-review-skills/csharp-code-review/SKILL.md +159 -0
  108. package/src/code-review-skills/csharp-code-review/references/async-and-cancellation.md +16 -0
  109. package/src/code-review-skills/csharp-code-review/references/concurrency.md +15 -0
  110. package/src/code-review-skills/csharp-code-review/references/exceptions-and-api-contracts.md +16 -0
  111. package/src/code-review-skills/csharp-code-review/references/memory-resources-and-interop.md +16 -0
  112. package/src/code-review-skills/csharp-code-review/references/nullable-types-and-patterns.md +15 -0
  113. package/src/code-review-skills/csharp-code-review/references/scoring-guide.md +41 -0
  114. package/src/code-review-skills/csharp-code-review/references/web-data-and-security.md +15 -0
  115. package/src/code-review-skills/frontend-code-review/SKILL.md +143 -0
  116. package/src/code-review-skills/frontend-code-review/references/accessibility-and-semantic-ux.md +33 -0
  117. package/src/code-review-skills/frontend-code-review/references/interaction-and-state-lifecycle.md +39 -0
  118. package/src/code-review-skills/frontend-code-review/references/rendering-performance-and-resource-loading.md +34 -0
  119. package/src/code-review-skills/frontend-code-review/references/scoring-guide.md +38 -0
  120. package/src/code-review-skills/frontend-code-review/references/security-and-data-boundary.md +34 -0
  121. package/src/code-review-skills/golang-code-review/SKILL.md +153 -0
  122. package/src/code-review-skills/golang-code-review/references/api-contract-and-maintainability.md +25 -0
  123. package/src/code-review-skills/golang-code-review/references/concurrency-and-lifecycle.md +25 -0
  124. package/src/code-review-skills/golang-code-review/references/error-handling-and-reliability.md +24 -0
  125. package/src/code-review-skills/golang-code-review/references/performance-and-allocation.md +25 -0
  126. package/src/code-review-skills/golang-code-review/references/scoring-guide.md +40 -0
  127. package/src/code-review-skills/golang-code-review/references/security-and-trust-boundary.md +20 -0
  128. package/src/code-review-skills/java-code-review/SKILL.md +153 -0
  129. package/src/code-review-skills/java-code-review/references/api-contract-and-maintainability.md +22 -0
  130. package/src/code-review-skills/java-code-review/references/concurrency-and-lifecycle.md +27 -0
  131. package/src/code-review-skills/java-code-review/references/error-handling-and-reliability.md +25 -0
  132. package/src/code-review-skills/java-code-review/references/performance-and-resource-usage.md +23 -0
  133. package/src/code-review-skills/java-code-review/references/scoring-guide.md +40 -0
  134. package/src/code-review-skills/java-code-review/references/security-and-trust-boundary.md +20 -0
  135. package/src/code-review-skills/mobile-code-review/SKILL.md +171 -0
  136. package/src/code-review-skills/mobile-code-review/references/async-state-and-side-effects.md +19 -0
  137. package/src/code-review-skills/mobile-code-review/references/lifecycle-and-navigation.md +19 -0
  138. package/src/code-review-skills/mobile-code-review/references/performance-and-resource-management.md +19 -0
  139. package/src/code-review-skills/mobile-code-review/references/resilience-and-device-conditions.md +19 -0
  140. package/src/code-review-skills/mobile-code-review/references/scoring-guide.md +38 -0
  141. package/src/code-review-skills/mobile-code-review/references/storage-permissions-and-security.md +19 -0
  142. package/src/code-review-skills/mobile-code-review/references/testing-and-regression-coverage.md +21 -0
  143. package/src/code-review-skills/php-code-review/SKILL.md +159 -0
  144. package/src/code-review-skills/php-code-review/references/inclusion-superglobals-and-scope.md +21 -0
  145. package/src/code-review-skills/php-code-review/references/language-types-and-autoload.md +19 -0
  146. package/src/code-review-skills/php-code-review/references/oop-magic-and-errors.md +17 -0
  147. package/src/code-review-skills/php-code-review/references/performance-data-access-and-testing.md +16 -0
  148. package/src/code-review-skills/php-code-review/references/request-lifecycle-and-runtime.md +15 -0
  149. package/src/code-review-skills/php-code-review/references/scoring-guide.md +39 -0
  150. package/src/code-review-skills/php-code-review/references/security-and-io-boundary.md +24 -0
  151. package/src/code-review-skills/python-code-review/SKILL.md +147 -0
  152. package/src/code-review-skills/python-code-review/references/exception-and-lifecycle.md +15 -0
  153. package/src/code-review-skills/python-code-review/references/input-and-data-security.md +20 -0
  154. package/src/code-review-skills/python-code-review/references/maintainability-and-testing.md +21 -0
  155. package/src/code-review-skills/python-code-review/references/performance-and-resource-usage.md +21 -0
  156. package/src/code-review-skills/python-code-review/references/scoring-guide.md +38 -0
  157. package/src/code-review-skills/rust-code-review/SKILL.md +165 -0
  158. package/src/code-review-skills/rust-code-review/references/api-traits-and-evolution.md +16 -0
  159. package/src/code-review-skills/rust-code-review/references/cargo-features-and-test-coverage.md +16 -0
  160. package/src/code-review-skills/rust-code-review/references/concurrency-async-and-sync.md +17 -0
  161. package/src/code-review-skills/rust-code-review/references/error-handling-and-reliability.md +17 -0
  162. package/src/code-review-skills/rust-code-review/references/macros-ffi-and-embedded.md +19 -0
  163. package/src/code-review-skills/rust-code-review/references/ownership-borrowing-and-unsafe.md +20 -0
  164. package/src/code-review-skills/rust-code-review/references/performance-and-allocations.md +18 -0
  165. package/src/code-review-skills/rust-code-review/references/scoring-guide.md +41 -0
  166. package/src/git-commit-message-skills/conventional/SKILL.md +3 -3
  167. package/src/git-commit-message-skills/gitmoji/SKILL.md +3 -3
  168. package/src/git-commit-message-skills/semantic/SKILL.md +3 -3
@@ -0,0 +1,535 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectDiffDomain = detectDiffDomain;
4
+ exports.analyzeReviewSkillDomain = analyzeReviewSkillDomain;
5
+ const frontendFileExtensions = new Set([
6
+ ".js",
7
+ ".jsx",
8
+ ".ts",
9
+ ".tsx",
10
+ ".vue",
11
+ ".svelte",
12
+ ".css",
13
+ ".scss",
14
+ ".sass",
15
+ ".less",
16
+ ".html",
17
+ ".htm"
18
+ ]);
19
+ const frontendFileNames = [
20
+ "package.json",
21
+ "package-lock.json",
22
+ "pnpm-lock.yaml",
23
+ "yarn.lock",
24
+ "vite.config.ts",
25
+ "vite.config.js",
26
+ "webpack.config.js",
27
+ "webpack.config.ts",
28
+ "postcss.config.js",
29
+ "postcss.config.cjs",
30
+ "tailwind.config.js",
31
+ "tailwind.config.cjs",
32
+ "tailwind.config.ts"
33
+ ];
34
+ const frontendPathHints = [
35
+ "/src/components/",
36
+ "/src/pages/",
37
+ "/src/views/",
38
+ "/src/hooks/",
39
+ "/src/composables/",
40
+ "/src/store/",
41
+ "/src/router/",
42
+ "/src/styles/",
43
+ "/app/",
44
+ "/web/",
45
+ "/client/",
46
+ "/public/"
47
+ ];
48
+ const mobileFileExtensions = new Set([".swift", ".dart", ".m", ".plist"]);
49
+ const mobileFileNames = [
50
+ "androidmanifest.xml",
51
+ "build.gradle",
52
+ "build.gradle.kts",
53
+ "settings.gradle",
54
+ "settings.gradle.kts",
55
+ "gradle.properties",
56
+ "proguard-rules.pro",
57
+ "info.plist",
58
+ "podfile",
59
+ "podfile.lock",
60
+ "package.swift",
61
+ "pubspec.yaml",
62
+ "pubspec.lock",
63
+ "pages.json"
64
+ ];
65
+ const mobilePathHints = [
66
+ "/android/",
67
+ "/ios/",
68
+ "/app/src/main/",
69
+ "/app/src/test/",
70
+ "/app/src/androidtest/",
71
+ "/src/main/res/",
72
+ "/res/layout/",
73
+ "/res/navigation/",
74
+ "/res/xml/",
75
+ ".xcodeproj/",
76
+ ".xcworkspace/"
77
+ ];
78
+ const androidAppPathHints = ["/app/src/main/", "/app/src/test/", "/app/src/androidtest/", "/src/main/res/", "/res/layout/"];
79
+ const cSourceExtensions = new Set([".c"]);
80
+ const cHeaderExtensions = new Set([".h"]);
81
+ const cFileNames = ["makefile", "gnumakefile", "meson.build", "meson_options.txt", "configure.ac", "configure.in"];
82
+ const cPathHints = ["/include/", "/src/", "/lib/"];
83
+ const javaPathHints = ["/src/main/java/", "/src/test/java/", "/src/main/kotlin/", "/src/test/kotlin/"];
84
+ const golangPathHints = ["/cmd/", "/internal/", "/pkg/"];
85
+ const pythonPathHints = ["/src/", "/tests/", "/test/", "/scripts/", "/python/", "/app/"];
86
+ const pythonFileNames = ["requirements.txt", "pyproject.toml", "poetry.lock", "pdm.lock", "Pipfile", "Pipfile.lock"];
87
+ const phpFileNames = ["composer.json", "composer.lock", "phpunit.xml", "phpunit.xml.dist"];
88
+ const phpPathHints = ["/database/migrations/", "/app/http/", "/routes/", "/bootstrap/"];
89
+ const rustFileNames = [
90
+ "Cargo.toml",
91
+ "Cargo.lock",
92
+ "rust-toolchain.toml",
93
+ "rust-toolchain",
94
+ "clippy.toml"
95
+ ];
96
+ const rustPathHints = ["/crates/", "/benches/", "/examples/"];
97
+ const cppSourceExtensions = new Set([
98
+ ".cpp",
99
+ ".cc",
100
+ ".cxx",
101
+ ".c++",
102
+ ".hpp",
103
+ ".hh",
104
+ ".hxx",
105
+ ".h++",
106
+ ".ipp",
107
+ ".tcc",
108
+ ".inl",
109
+ ".mm"
110
+ ]);
111
+ const cppFileNames = [
112
+ "CMakeLists.txt",
113
+ "CMakePresets.json",
114
+ "conanfile.txt",
115
+ "conanfile.py",
116
+ "vcpkg.json",
117
+ "compile_commands.json",
118
+ ".clang-tidy"
119
+ ];
120
+ const cppPathHints = ["/include/"];
121
+ const csharpSourceExtensions = new Set([".cs", ".cshtml", ".razor", ".csproj", ".csx"]);
122
+ const csharpPathHints = ["/Controllers/", "/Pages/", "/Views/", "/Services/", "/Models/"];
123
+ const frontendContentPatterns = [
124
+ /\buseState\b/,
125
+ /\buseEffect\b/,
126
+ /\buseMemo\b/,
127
+ /\buseCallback\b/,
128
+ /\bdocument\./,
129
+ /\bwindow\./,
130
+ /\bclassName\s*=/,
131
+ /\baria-[a-z-]+\b/,
132
+ /<template>/,
133
+ /<script\s+setup/,
134
+ /export\s+default\s+defineComponent/,
135
+ /from\s+["']react["']/,
136
+ /from\s+["']vue["']/,
137
+ /dangerouslySetInnerHTML/,
138
+ /innerHTML/,
139
+ /hydrateRoot/,
140
+ /createRoot/
141
+ ];
142
+ const mobileContentPatterns = [
143
+ /from\s+["']react-native["']/,
144
+ /\bStyleSheet\.create\b/,
145
+ /\bNativeModules\b/,
146
+ /\buseWindowDimensions\b/,
147
+ /\bStatelessWidget\b/,
148
+ /\bStatefulWidget\b/,
149
+ /\bWidget\s+build\s*\(/,
150
+ /\bMaterialApp\b/,
151
+ /\bCupertinoApp\b/,
152
+ /\buni\./,
153
+ /\bonLoad\s*\(/,
154
+ /\bonShow\s*\(/,
155
+ /\bAppDelegate\b/,
156
+ /\bSceneDelegate\b/,
157
+ /\bUIViewController\b/,
158
+ /\bSwiftUI\b/,
159
+ /\bsetContentView\s*\(/,
160
+ /\b(AppCompatActivity|FragmentActivity|Fragment)\b/,
161
+ /@Composable\b/
162
+ ];
163
+ const reactNativePatterns = [
164
+ /from\s+["']react-native["']/,
165
+ /\bStyleSheet\.create\b/,
166
+ /\bNativeModules\b/,
167
+ /\buseWindowDimensions\b/,
168
+ /\bSafeAreaView\b/,
169
+ /\bFlatList\b/
170
+ ];
171
+ const flutterPatterns = [
172
+ /import\s+["']package:flutter\//,
173
+ /\bStatelessWidget\b/,
174
+ /\bStatefulWidget\b/,
175
+ /\bWidget\s+build\s*\(/,
176
+ /\bMaterialApp\b/,
177
+ /\bCupertinoApp\b/
178
+ ];
179
+ const uniAppPatterns = [/\buni\./, /\bonLoad\s*\(/, /\bonShow\s*\(/, /\buni\.(navigateTo|request|setStorageSync)\b/];
180
+ const androidPatterns = [/\bAndroidManifest\b/, /\bAppCompatActivity\b/, /\bsetContentView\s*\(/, /@Composable\b/];
181
+ const iosPatterns = [/\bUIApplicationDelegate\b/, /\bUIViewController\b/, /\bSwiftUI\b/, /\bSceneDelegate\b/];
182
+ const cContentPatterns = [
183
+ /^\+?\s*#\s*include\s*<(assert|ctype|errno|pthread|setjmp|signal|stdbool|stddef|stdint|stdio|stdlib|string|strings|time|unistd)\.h>/m,
184
+ /^\+?\s*typedef\s+(struct|enum|union)\b/m,
185
+ /^\+?\s*(struct|enum|union)\s+\w+/m,
186
+ /\b(malloc|calloc|realloc|free)\s*\(/,
187
+ /\b(memcpy|memmove|memset|memcmp|strncpy|snprintf)\s*\(/,
188
+ /\bNULL\b/,
189
+ /\berrno\b/,
190
+ /\bsizeof\s*\(/,
191
+ /\bgoto\s+\w+\s*;/,
192
+ /\b(C_STANDARD|CMAKE_C_STANDARD)\b/,
193
+ /-std=c(89|90|99|11|17|23)\b/,
194
+ /^\+?\s*static\s+inline\s+\w[\w\s\*]*\(/m
195
+ ];
196
+ const javaContentPatterns = [
197
+ /^\+?\s*package\s+[\w.]+;/m,
198
+ /^\+?\s*import\s+java[\w.*; ]*;/m,
199
+ /^\+?\s*public\s+(class|interface|enum|record)\s+\w+/m,
200
+ /@RestController/,
201
+ /@Service/,
202
+ /@Repository/,
203
+ /\bResponseEntity\b/,
204
+ /\bSpringApplication\b/
205
+ ];
206
+ const golangContentPatterns = [
207
+ /^\+?\s*package\s+\w+/m,
208
+ /^\+?\s*import\s+\(/m,
209
+ /^\+?\s*func\s+\w+/m,
210
+ /\berr\s*!=\s*nil\b/,
211
+ /\bcontext\.Context\b/,
212
+ /\bhttp\.HandlerFunc\b/,
213
+ /\bdefer\b/
214
+ ];
215
+ const pythonContentPatterns = [
216
+ /^\+?\s*def\s+\w+\s*\(/m,
217
+ /^\+?\s*class\s+\w+\s*(\(|:)/m,
218
+ /^\+?\s*from\s+[\w.]+\s+import\s+/m,
219
+ /^\+?\s*import\s+[\w.]+/m,
220
+ /^\+?\s*@\w+/m,
221
+ /\bif\s+__name__\s*==\s*["']__main__["']\s*:/,
222
+ /\bpytest\b/,
223
+ /\basync\s+def\b/
224
+ ];
225
+ const phpContentPatterns = [
226
+ /^\+?\s*<\?php/m,
227
+ /^\+?\s*namespace\s+[\w\\]+;/m,
228
+ /^\+?\s*use\s+[\w\\]+;/m,
229
+ /declare\s*\(\s*strict_types\s*=\s*1\s*\)/,
230
+ /Illuminate\\/,
231
+ /Symfony\\Component\\/,
232
+ /extends\s+TestCase\b/,
233
+ /PHPUnit\\Framework/,
234
+ /\bPest\\/,
235
+ /\bPDO\b/,
236
+ /\bmysqli_/,
237
+ /\$_(GET|POST|REQUEST|SERVER|FILES|COOKIE|SESSION)\b/
238
+ ];
239
+ const rustContentPatterns = [
240
+ /^\+?\s*(pub\s+)?fn\s+\w+/m,
241
+ /^\+?\s*(pub\s+)?(struct|enum|trait|impl|mod)\s+/m,
242
+ /^\+?\s*use\s+([\w:]+|crate::)/m,
243
+ /#\[derive\s*\(/,
244
+ /\bunsafe\s*\{/,
245
+ /->\s*Result\s*</,
246
+ /\.unwrap\s*\(\s*\)/,
247
+ /\basync\s+fn\b/,
248
+ /\btokio::/,
249
+ /\bcrate::/,
250
+ /^\+?\s*extern\s+["']/m
251
+ ];
252
+ const cppContentPatterns = [
253
+ /^\+?\s*template\s*</m,
254
+ /\btypename\b/,
255
+ /^\+?\s*namespace\b/m,
256
+ /\bstd::/,
257
+ /\bconstexpr\b/,
258
+ /\bnoexcept\b/,
259
+ /\boverride\b/,
260
+ /\bfinal\b/,
261
+ /\bstd::(unique_ptr|shared_ptr|mutex|atomic)\s*</,
262
+ /^\+?\s*#\s*include\s*</m,
263
+ /:\s*(public|protected|private)\s+/,
264
+ /:\s*virtual\s+/
265
+ ];
266
+ const csharpContentPatterns = [
267
+ /^\+?\s*using\s+[\w.]+\s*;/m,
268
+ /^\+?\s*namespace\s+[\w.]+\s*{/m,
269
+ /^\+?\s*namespace\s+[\w.]+\s*;/m,
270
+ /^\+?\s*public\s+(class|interface|record|struct|enum)\s+\w+/m,
271
+ /\basync\s+Task\b/,
272
+ /\bawait\s+/,
273
+ /\[Http(Get|Post|Put|Delete|Patch)/,
274
+ /#nullable\s+(enable|disable)/,
275
+ /\.(Select|Where|OrderBy|GroupBy)\s*\(/,
276
+ /\bIActionResult\b/,
277
+ /\bControllerBase\b/,
278
+ /\bCancellationToken\b/,
279
+ /\bIDisposable\b/,
280
+ /\bSpan<|ReadOnlySpan</,
281
+ /=>\s*{/
282
+ ];
283
+ function detectDiffDomain(input) {
284
+ const domainScores = {
285
+ generic: 0,
286
+ frontend: 0,
287
+ mobile: 0,
288
+ c: 0,
289
+ java: 0,
290
+ golang: 0,
291
+ python: 0,
292
+ php: 0,
293
+ rust: 0,
294
+ cpp: 0,
295
+ csharp: 0
296
+ };
297
+ const reasons = new Set();
298
+ for (const filePath of input.changedFiles) {
299
+ const normalizedPath = normalizePath(filePath);
300
+ const normalizedLowerPath = normalizedPath.toLowerCase();
301
+ const fileName = normalizedPath.split("/").pop() ?? normalizedPath;
302
+ const fileNameLower = fileName.toLowerCase();
303
+ const extension = getFileExtension(fileName);
304
+ if (frontendFileExtensions.has(extension) || frontendFileNames.includes(fileName)) {
305
+ domainScores.frontend += 3;
306
+ reasons.add(`front-end file extension or config detected: ${filePath}`);
307
+ }
308
+ if (mobileFileExtensions.has(extension) || mobileFileNames.includes(fileNameLower)) {
309
+ domainScores.mobile += 3;
310
+ reasons.add(`mobile platform file or extension detected: ${filePath}`);
311
+ }
312
+ const isCSourceExtension = cSourceExtensions.has(extension);
313
+ const isCHeaderExtension = cHeaderExtensions.has(extension);
314
+ if (isCSourceExtension) {
315
+ domainScores.c += 3;
316
+ reasons.add(`C source detected: ${filePath}`);
317
+ }
318
+ else if (isCHeaderExtension) {
319
+ domainScores.c += 1;
320
+ reasons.add(`C header candidate detected: ${filePath}`);
321
+ }
322
+ if (cFileNames.includes(fileNameLower)) {
323
+ domainScores.c += 2;
324
+ reasons.add(`C build or tooling file detected: ${filePath}`);
325
+ }
326
+ if (extension === ".java" || extension === ".kt") {
327
+ domainScores.java += 3;
328
+ reasons.add(`Java/Kotlin source detected: ${filePath}`);
329
+ }
330
+ if (extension === ".go") {
331
+ domainScores.golang += 3;
332
+ reasons.add(`Go source detected: ${filePath}`);
333
+ }
334
+ if (extension === ".py" || extension === ".pyi" || extension === ".ipynb" || pythonFileNames.includes(fileName)) {
335
+ domainScores.python += 3;
336
+ reasons.add(`Python source or tooling file detected: ${filePath}`);
337
+ }
338
+ if (extension === ".php" || extension === ".phtml" || extension === ".phps" || phpFileNames.includes(fileName)) {
339
+ domainScores.php += 3;
340
+ reasons.add(`PHP source or Composer/PHPUnit file detected: ${filePath}`);
341
+ }
342
+ if (extension === ".rs") {
343
+ domainScores.rust += 3;
344
+ reasons.add(`Rust source detected: ${filePath}`);
345
+ }
346
+ if (rustFileNames.includes(fileName)) {
347
+ domainScores.rust += 3;
348
+ reasons.add(`Rust project or toolchain file detected: ${filePath}`);
349
+ }
350
+ const isCppExtension = cppSourceExtensions.has(extension);
351
+ const isCppHeaderInInclude = extension === ".h" && normalizedPath.includes("/include/");
352
+ if (isCppExtension || isCppHeaderInInclude) {
353
+ domainScores.cpp += 3;
354
+ reasons.add(`C++ source or header detected: ${filePath}`);
355
+ }
356
+ if (cppFileNames.includes(fileName)) {
357
+ domainScores.cpp += 3;
358
+ reasons.add(`C++ build or tooling file detected: ${filePath}`);
359
+ }
360
+ const isCsharpExtension = csharpSourceExtensions.has(extension);
361
+ if (isCsharpExtension) {
362
+ domainScores.csharp += 3;
363
+ reasons.add(`C# source or project file detected: ${filePath}`);
364
+ }
365
+ if (frontendPathHints.some((hint) => normalizedPath.includes(hint))) {
366
+ domainScores.frontend += 2;
367
+ reasons.add(`front-end path hint detected: ${filePath}`);
368
+ }
369
+ if (mobilePathHints.some((hint) => normalizedLowerPath.includes(hint))) {
370
+ domainScores.mobile += 4;
371
+ reasons.add(`mobile app path hint detected: ${filePath}`);
372
+ }
373
+ const cPathSignal = isCSourceExtension || isCHeaderExtension || cFileNames.includes(fileNameLower);
374
+ if (cPathSignal && cPathHints.some((hint) => normalizedPath.includes(hint))) {
375
+ domainScores.c += 2;
376
+ reasons.add(`C path hint detected: ${filePath}`);
377
+ }
378
+ if ((extension === ".java" || extension === ".kt") && androidAppPathHints.some((hint) => normalizedLowerPath.includes(hint))) {
379
+ domainScores.mobile += 4;
380
+ reasons.add(`Android app source path detected: ${filePath}`);
381
+ }
382
+ if (javaPathHints.some((hint) => normalizedPath.includes(hint))) {
383
+ domainScores.java += 2;
384
+ reasons.add(`Java path hint detected: ${filePath}`);
385
+ }
386
+ if (golangPathHints.some((hint) => normalizedPath.includes(hint))) {
387
+ domainScores.golang += 2;
388
+ reasons.add(`Go path hint detected: ${filePath}`);
389
+ }
390
+ if ((extension === ".py" || extension === ".pyi" || pythonFileNames.includes(fileName)) &&
391
+ pythonPathHints.some((hint) => normalizedPath.includes(hint))) {
392
+ domainScores.python += 2;
393
+ reasons.add(`Python path hint detected: ${filePath}`);
394
+ }
395
+ const phpPathSignal = extension === ".php" || extension === ".phtml" || extension === ".phps" || phpFileNames.includes(fileName);
396
+ if (phpPathSignal && phpPathHints.some((hint) => normalizedPath.toLowerCase().includes(hint))) {
397
+ domainScores.php += 2;
398
+ reasons.add(`PHP path hint detected: ${filePath}`);
399
+ }
400
+ const rustPathSignal = extension === ".rs" || rustFileNames.includes(fileName);
401
+ if (rustPathSignal && rustPathHints.some((hint) => normalizedPath.includes(hint))) {
402
+ domainScores.rust += 2;
403
+ reasons.add(`Rust path hint detected: ${filePath}`);
404
+ }
405
+ if (extension === ".rs" && normalizedPath.includes("/src/")) {
406
+ domainScores.rust += 2;
407
+ reasons.add(`Rust source under src/ detected: ${filePath}`);
408
+ }
409
+ const cppPathSignal = isCppExtension || isCppHeaderInInclude || cppFileNames.includes(fileName);
410
+ if (cppPathSignal && cppPathHints.some((hint) => normalizedPath.includes(hint))) {
411
+ domainScores.cpp += 2;
412
+ reasons.add(`C++ path hint detected: ${filePath}`);
413
+ }
414
+ if (isCppExtension && normalizedPath.includes("/src/")) {
415
+ domainScores.cpp += 2;
416
+ reasons.add(`C++ source under src/ detected: ${filePath}`);
417
+ }
418
+ const csharpPathSignal = isCsharpExtension;
419
+ if (csharpPathSignal && csharpPathHints.some((hint) => normalizedPath.includes(hint))) {
420
+ domainScores.csharp += 2;
421
+ reasons.add(`C# path hint detected: ${filePath}`);
422
+ }
423
+ if (extension === ".cs" && normalizedPath.includes("/src/")) {
424
+ domainScores.csharp += 2;
425
+ reasons.add(`C# source under src/ detected: ${filePath}`);
426
+ }
427
+ }
428
+ applyContentSignals(input.diff, "frontend", frontendContentPatterns, domainScores, reasons, "front-end");
429
+ applyContentSignals(input.diff, "mobile", mobileContentPatterns, domainScores, reasons, "mobile");
430
+ applyMobileFrameworkBoosts(input.diff, domainScores, reasons);
431
+ applyContentSignals(input.diff, "c", cContentPatterns, domainScores, reasons, "C");
432
+ applyContentSignals(input.diff, "java", javaContentPatterns, domainScores, reasons, "Java");
433
+ applyContentSignals(input.diff, "golang", golangContentPatterns, domainScores, reasons, "Go");
434
+ applyContentSignals(input.diff, "python", pythonContentPatterns, domainScores, reasons, "Python");
435
+ applyContentSignals(input.diff, "php", phpContentPatterns, domainScores, reasons, "PHP");
436
+ applyContentSignals(input.diff, "rust", rustContentPatterns, domainScores, reasons, "Rust");
437
+ applyContentSignals(input.diff, "cpp", cppContentPatterns, domainScores, reasons, "C++");
438
+ applyContentSignals(input.diff, "csharp", csharpContentPatterns, domainScores, reasons, "C#");
439
+ const detectedDomain = resolveDetectedDomain(domainScores);
440
+ const confidence = resolveConfidence(domainScores, detectedDomain, input.changedFiles.length);
441
+ if (reasons.size === 0) {
442
+ reasons.add("no strong language-specific signal detected; treat as generic review");
443
+ }
444
+ return {
445
+ selectedSkillDomain: "generic",
446
+ detectedDomain,
447
+ confidence,
448
+ matchesSelectedSkill: true,
449
+ shouldFallbackToGeneric: false,
450
+ reasons: Array.from(reasons).slice(0, 6)
451
+ };
452
+ }
453
+ function analyzeReviewSkillDomain(input) {
454
+ const baseDetection = detectDiffDomain({
455
+ changedFiles: input.changedFiles,
456
+ diff: input.diff
457
+ });
458
+ const selectedSkillDomain = input.skill.reviewDomain ?? "generic";
459
+ const matchesSelectedSkill = selectedSkillDomain === "generic" ||
460
+ (baseDetection.detectedDomain !== "mixed" &&
461
+ baseDetection.detectedDomain !== "unknown" &&
462
+ baseDetection.detectedDomain === selectedSkillDomain);
463
+ return {
464
+ ...baseDetection,
465
+ selectedSkillDomain,
466
+ matchesSelectedSkill,
467
+ shouldFallbackToGeneric: selectedSkillDomain !== "generic" && !matchesSelectedSkill
468
+ };
469
+ }
470
+ function applyContentSignals(diff, domain, patterns, domainScores, reasons, label) {
471
+ const hits = patterns.reduce((count, pattern) => count + (pattern.test(diff) ? 1 : 0), 0);
472
+ if (hits <= 0) {
473
+ return;
474
+ }
475
+ domainScores[domain] += Math.min(hits, 4);
476
+ reasons.add(`${label} code patterns detected in diff`);
477
+ }
478
+ function applyMobileFrameworkBoosts(diff, domainScores, reasons) {
479
+ const platformSignals = [
480
+ { label: "React Native", patterns: reactNativePatterns },
481
+ { label: "Flutter", patterns: flutterPatterns },
482
+ { label: "UniApp", patterns: uniAppPatterns },
483
+ { label: "Android", patterns: androidPatterns },
484
+ { label: "iOS", patterns: iosPatterns }
485
+ ];
486
+ for (const platform of platformSignals) {
487
+ const matched = platform.patterns.some((pattern) => pattern.test(diff));
488
+ if (!matched) {
489
+ continue;
490
+ }
491
+ domainScores.mobile += 4;
492
+ reasons.add(`${platform.label} runtime or framework patterns detected in diff`);
493
+ }
494
+ }
495
+ function resolveDetectedDomain(scores) {
496
+ const ranked = Object.entries(scores)
497
+ .filter(([domain]) => domain !== "generic")
498
+ .sort((left, right) => right[1] - left[1]);
499
+ const [topDomain, topScore] = ranked[0] ?? ["frontend", 0];
500
+ const secondScore = ranked[1]?.[1] ?? 0;
501
+ if (topScore <= 0) {
502
+ return "generic";
503
+ }
504
+ if (secondScore > 0 && Math.abs(topScore - secondScore) <= 2) {
505
+ return "mixed";
506
+ }
507
+ return topDomain;
508
+ }
509
+ function resolveConfidence(scores, detectedDomain, changedFileCount) {
510
+ if (detectedDomain === "unknown" || detectedDomain === "generic") {
511
+ return changedFileCount > 0 ? "low" : "medium";
512
+ }
513
+ if (detectedDomain === "mixed") {
514
+ return "low";
515
+ }
516
+ const values = Object.entries(scores)
517
+ .filter(([domain]) => domain !== "generic")
518
+ .map(([, score]) => score)
519
+ .sort((left, right) => right - left);
520
+ const topScore = values[0] ?? 0;
521
+ const secondScore = values[1] ?? 0;
522
+ if (topScore >= 6 && topScore - secondScore >= 3) {
523
+ return "high";
524
+ }
525
+ return topScore >= 3 ? "medium" : "low";
526
+ }
527
+ function normalizePath(filePath) {
528
+ const normalized = filePath.replace(/\\/g, "/");
529
+ return normalized.startsWith("/") ? normalized : `/${normalized}`;
530
+ }
531
+ function getFileExtension(fileName) {
532
+ const dotIndex = fileName.lastIndexOf(".");
533
+ return dotIndex >= 0 ? fileName.slice(dotIndex).toLowerCase() : "";
534
+ }
535
+ //# sourceMappingURL=diffClassifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diffClassifier.js","sourceRoot":"","sources":["../../src/review/diffClassifier.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.runReviewExecution = runReviewExecution;
18
+ const responseCorrection_1 = require("../llm/responseCorrection");
18
19
  const openaiProvider_1 = require("./openaiProvider");
19
20
  const parser_1 = require("./parser");
20
21
  const mockProvider_1 = require("./mockProvider");
@@ -23,15 +24,19 @@ __exportStar(require("./provider"), exports);
23
24
  async function runReviewExecution(input, options) {
24
25
  const provider = options.provider ?? createProvider(options.config, options.providerMode ?? resolveProviderMode(), options.mockMode);
25
26
  const rawReview = await provider.generateReview(input);
26
- let parsed = tryParseAndValidate(rawReview, provider.name, input.threshold);
27
- if (!parsed.ok) {
28
- const repairedRaw = await provider.repairReview(input, rawReview, parsed.issues);
29
- parsed = tryParseAndValidate(repairedRaw, provider.name, input.threshold);
30
- if (!parsed.ok) {
31
- throw new Error(`Review response violated protocol after repair: ${parsed.issues.join("; ")}`);
32
- }
33
- }
34
- const result = parsed.result;
27
+ const result = await (0, responseCorrection_1.runWithResponseCorrectionRetries)({
28
+ initialResponse: rawReview,
29
+ maxCorrectionRetries: options.config.connection.llmResponseCorrectionRetryCount,
30
+ validateResponse: async (response) => {
31
+ const parsed = tryParseAndValidate(response, provider.name, input.reviewLanguage, input.threshold);
32
+ if (!parsed.ok) {
33
+ throw new ReviewResponseValidationError(parsed.issues);
34
+ }
35
+ return parsed.result;
36
+ },
37
+ isRetryableError: (error) => error instanceof ReviewResponseValidationError,
38
+ requestCorrection: ({ error, invalidResponse }) => provider.repairReview(input, invalidResponse, error.issues)
39
+ });
35
40
  return {
36
41
  ...result,
37
42
  decision: (0, parser_1.shouldBlockReviewResult)(result, input.threshold) ? "block" : "pass"
@@ -45,10 +50,13 @@ function resolveProviderMode() {
45
50
  function createProvider(config, mode, mockMode) {
46
51
  return mode === "mock" ? (0, mockProvider_1.createMockReviewProvider)({ mode: mockMode }) : (0, openaiProvider_1.createOpenAICompatibleReviewProvider)(config);
47
52
  }
48
- function tryParseAndValidate(raw, providerName, threshold) {
53
+ function tryParseAndValidate(raw, providerName, reviewLanguage, threshold) {
49
54
  try {
50
55
  const result = (0, parser_1.parseReviewResponse)(raw, providerName);
51
- const issues = (0, parser_1.validateReviewResult)(result, threshold);
56
+ const issues = [
57
+ ...(0, parser_1.validateReviewResult)(result, threshold),
58
+ ...(0, parser_1.validateReviewContentLanguage)(result, reviewLanguage)
59
+ ];
52
60
  if (issues.length > 0) {
53
61
  return { ok: false, issues };
54
62
  }
@@ -61,4 +69,12 @@ function tryParseAndValidate(raw, providerName, threshold) {
61
69
  };
62
70
  }
63
71
  }
72
+ class ReviewResponseValidationError extends Error {
73
+ issues;
74
+ constructor(issues) {
75
+ super(issues.join("; "));
76
+ this.issues = issues;
77
+ this.name = "ReviewResponseValidationError";
78
+ }
79
+ }
64
80
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/review/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAUA,gDA0BC;AAnCD,qDAAwE;AACxE,qCAA8F;AAC9F,iDAA0D;AAI1D,0CAAwB;AACxB,6CAA2B;AAEpB,KAAK,UAAU,kBAAkB,CACtC,KAA2B,EAC3B,OAKC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,IAAI,mBAAmB,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrI,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,MAAM,GAAG,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAE5E,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACjF,MAAM,GAAG,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,mDAAmD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,OAAO;QACL,GAAG,MAAM;QACT,QAAQ,EAAE,IAAA,gCAAuB,EAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;KAC9E,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM;QAC9E,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,mBAAmB,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CACrB,MAAiB,EACjB,IAAkC,EAClC,QAAiB;IAEjB,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAA,uCAAwB,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,IAAA,qDAAoC,EAAC,MAAM,CAAC,CAAC;AACvH,CAAC;AAED,SAAS,mBAAmB,CAC1B,GAAW,EACX,YAAoB,EACpB,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,4BAAmB,EAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAA,6BAAoB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC/B,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACjE,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/review/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAWA,gDA8BC;AAxCD,kEAA6E;AAC7E,qDAAwE;AACxE,qCAA6H;AAC7H,iDAA0D;AAI1D,0CAAwB;AACxB,6CAA2B;AAEpB,KAAK,UAAU,kBAAkB,CACtC,KAA2B,EAC3B,OAKC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,IAAI,mBAAmB,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrI,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,IAAA,qDAAgC,EAAuD;QAC1G,eAAe,EAAE,SAAS;QAC1B,oBAAoB,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,+BAA+B;QAC/E,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;YACnC,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YACnG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,6BAA6B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzD,CAAC;YAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QACD,gBAAgB,EAAE,CAAC,KAAK,EAA0C,EAAE,CAAC,KAAK,YAAY,6BAA6B;QACnH,iBAAiB,EAAE,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC;KAC/G,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,MAAM;QACT,QAAQ,EAAE,IAAA,gCAAuB,EAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;KAC9E,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM;QAC9E,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,mBAAmB,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CACrB,MAAiB,EACjB,IAAkC,EAClC,QAAiB;IAEjB,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAA,uCAAwB,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,IAAA,qDAAoC,EAAC,MAAM,CAAC,CAAC;AACvH,CAAC;AAED,SAAS,mBAAmB,CAC1B,GAAW,EACX,YAAoB,EACpB,cAA+C,EAC/C,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,4BAAmB,EAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG;YACb,GAAG,IAAA,6BAAoB,EAAC,MAAM,EAAE,SAAS,CAAC;YAC1C,GAAG,IAAA,sCAA6B,EAAC,MAAM,EAAE,cAAc,CAAC;SACzD,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC/B,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACjE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,6BAA8B,SAAQ,KAAK;IACnB;IAA5B,YAA4B,MAAgB;QAC1C,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QADC,WAAM,GAAN,MAAM,CAAU;QAE1C,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAC9C,CAAC;CACF"}