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.
- package/CHANGELOG.md +37 -0
- package/README.md +55 -7
- package/docs/configuration.md +55 -2
- package/docs/contracts.md +15 -2
- package/docs/getting-started.md +18 -4
- package/docs/publish.md +1 -1
- package/docs/releases/0.1.6-draft.md +72 -0
- package/docs/releases/0.1.7-draft.md +55 -0
- package/docs/roadmap.md +1 -1
- package/docs/verification.md +15 -0
- package/examples/config/smart-commit.json +10 -1
- package/out/cliApp.js +11 -1
- package/out/cliApp.js.map +1 -1
- package/out/commands/bridge.js +160 -17
- package/out/commands/bridge.js.map +1 -1
- package/out/commitMessage/index.js +30 -9
- package/out/commitMessage/index.js.map +1 -1
- package/out/commitMessage/prompt.js +60 -10
- package/out/commitMessage/prompt.js.map +1 -1
- package/out/commitMessage/protocol.js +283 -22
- package/out/commitMessage/protocol.js.map +1 -1
- package/out/config/cliArgs.js +33 -0
- package/out/config/cliArgs.js.map +1 -1
- package/out/config/constants.js +9 -0
- package/out/config/constants.js.map +1 -1
- package/out/config/env.js +30 -0
- package/out/config/env.js.map +1 -1
- package/out/config/file.js +36 -0
- package/out/config/file.js.map +1 -1
- package/out/config/legacySmartCommit.js +41 -1
- package/out/config/legacySmartCommit.js.map +1 -1
- package/out/config/merge.js +4 -0
- package/out/config/merge.js.map +1 -1
- package/out/config/schema.js +35 -1
- package/out/config/schema.js.map +1 -1
- package/out/contracts.js +44 -9
- package/out/contracts.js.map +1 -1
- package/out/llm/responseCorrection.js +32 -0
- package/out/llm/responseCorrection.js.map +1 -0
- package/out/passHistory/index.js +51 -22
- package/out/passHistory/index.js.map +1 -1
- package/out/passHistory/store.js +29 -1
- package/out/passHistory/store.js.map +1 -1
- package/out/passHistory/types.js +23 -1
- package/out/passHistory/types.js.map +1 -1
- package/out/promptContext.js +19 -3
- package/out/promptContext.js.map +1 -1
- package/out/pullRequestSummary/index.js +53 -0
- package/out/pullRequestSummary/index.js.map +1 -0
- package/out/pullRequestSummary/mockProvider.js +24 -0
- package/out/pullRequestSummary/mockProvider.js.map +1 -0
- package/out/pullRequestSummary/openaiProvider.js +19 -0
- package/out/pullRequestSummary/openaiProvider.js.map +1 -0
- package/out/pullRequestSummary/prompt.js +122 -0
- package/out/pullRequestSummary/prompt.js.map +1 -0
- package/out/pullRequestSummary/provider.js +3 -0
- package/out/pullRequestSummary/provider.js.map +1 -0
- package/out/pullRequestSummary/render.js +74 -0
- package/out/pullRequestSummary/render.js.map +1 -0
- package/out/renderOutput.js +8 -1
- package/out/renderOutput.js.map +1 -1
- package/out/reporting/prompt.js +13 -1
- package/out/reporting/prompt.js.map +1 -1
- package/out/reporting/timeWindow.js +7 -0
- package/out/reporting/timeWindow.js.map +1 -1
- package/out/reporting/types.js +1 -0
- package/out/reporting/types.js.map +1 -1
- package/out/review/diffClassifier.js +535 -0
- package/out/review/diffClassifier.js.map +1 -0
- package/out/review/index.js +27 -11
- package/out/review/index.js.map +1 -1
- package/out/review/mockProvider.js +157 -8
- package/out/review/mockProvider.js.map +1 -1
- package/out/review/openaiProvider.js +10 -4
- package/out/review/openaiProvider.js.map +1 -1
- package/out/review/parser.js +13 -0
- package/out/review/parser.js.map +1 -1
- package/out/review/prompt.js +76 -4
- package/out/review/prompt.js.map +1 -1
- package/out/skills/types.js +3 -0
- package/out/skills/types.js.map +1 -0
- package/package.json +2 -1
- package/src/code-review-skills/c-code-review/SKILL.md +165 -0
- package/src/code-review-skills/c-code-review/references/build-and-tooling.md +16 -0
- package/src/code-review-skills/c-code-review/references/concurrency-and-signals.md +16 -0
- package/src/code-review-skills/c-code-review/references/error-handling-and-cleanup.md +16 -0
- package/src/code-review-skills/c-code-review/references/macros-headers-and-build-boundaries.md +16 -0
- package/src/code-review-skills/c-code-review/references/performance-and-data-movement.md +16 -0
- package/src/code-review-skills/c-code-review/references/pointers-memory-and-resource-lifecycle.md +18 -0
- package/src/code-review-skills/c-code-review/references/scoring-guide.md +40 -0
- package/src/code-review-skills/c-code-review/references/undefined-behavior-and-safety.md +17 -0
- package/src/code-review-skills/code-review/SKILL.md +150 -0
- package/src/code-review-skills/code-review/references/code-quality-checklist.md +53 -0
- package/src/code-review-skills/code-review/references/removal-plan.md +45 -0
- package/src/code-review-skills/code-review/references/scoring-guide.md +38 -0
- package/src/code-review-skills/code-review/references/security-checklist.md +53 -0
- package/src/code-review-skills/code-review/references/solid-checklist.md +55 -0
- package/src/code-review-skills/cpp-code-review/SKILL.md +165 -0
- package/src/code-review-skills/cpp-code-review/references/build-and-tooling.md +12 -0
- package/src/code-review-skills/cpp-code-review/references/concurrency-and-atomics.md +14 -0
- package/src/code-review-skills/cpp-code-review/references/exceptions-and-error-model.md +16 -0
- package/src/code-review-skills/cpp-code-review/references/memory-raii-and-lifetimes.md +19 -0
- package/src/code-review-skills/cpp-code-review/references/performance-and-hot-paths.md +16 -0
- package/src/code-review-skills/cpp-code-review/references/scoring-guide.md +41 -0
- package/src/code-review-skills/cpp-code-review/references/templates-api-and-abi.md +13 -0
- package/src/code-review-skills/cpp-code-review/references/undefined-behavior-and-safety.md +18 -0
- package/src/code-review-skills/csharp-code-review/SKILL.md +159 -0
- package/src/code-review-skills/csharp-code-review/references/async-and-cancellation.md +16 -0
- package/src/code-review-skills/csharp-code-review/references/concurrency.md +15 -0
- package/src/code-review-skills/csharp-code-review/references/exceptions-and-api-contracts.md +16 -0
- package/src/code-review-skills/csharp-code-review/references/memory-resources-and-interop.md +16 -0
- package/src/code-review-skills/csharp-code-review/references/nullable-types-and-patterns.md +15 -0
- package/src/code-review-skills/csharp-code-review/references/scoring-guide.md +41 -0
- package/src/code-review-skills/csharp-code-review/references/web-data-and-security.md +15 -0
- package/src/code-review-skills/frontend-code-review/SKILL.md +143 -0
- package/src/code-review-skills/frontend-code-review/references/accessibility-and-semantic-ux.md +33 -0
- package/src/code-review-skills/frontend-code-review/references/interaction-and-state-lifecycle.md +39 -0
- package/src/code-review-skills/frontend-code-review/references/rendering-performance-and-resource-loading.md +34 -0
- package/src/code-review-skills/frontend-code-review/references/scoring-guide.md +38 -0
- package/src/code-review-skills/frontend-code-review/references/security-and-data-boundary.md +34 -0
- package/src/code-review-skills/golang-code-review/SKILL.md +153 -0
- package/src/code-review-skills/golang-code-review/references/api-contract-and-maintainability.md +25 -0
- package/src/code-review-skills/golang-code-review/references/concurrency-and-lifecycle.md +25 -0
- package/src/code-review-skills/golang-code-review/references/error-handling-and-reliability.md +24 -0
- package/src/code-review-skills/golang-code-review/references/performance-and-allocation.md +25 -0
- package/src/code-review-skills/golang-code-review/references/scoring-guide.md +40 -0
- package/src/code-review-skills/golang-code-review/references/security-and-trust-boundary.md +20 -0
- package/src/code-review-skills/java-code-review/SKILL.md +153 -0
- package/src/code-review-skills/java-code-review/references/api-contract-and-maintainability.md +22 -0
- package/src/code-review-skills/java-code-review/references/concurrency-and-lifecycle.md +27 -0
- package/src/code-review-skills/java-code-review/references/error-handling-and-reliability.md +25 -0
- package/src/code-review-skills/java-code-review/references/performance-and-resource-usage.md +23 -0
- package/src/code-review-skills/java-code-review/references/scoring-guide.md +40 -0
- package/src/code-review-skills/java-code-review/references/security-and-trust-boundary.md +20 -0
- package/src/code-review-skills/mobile-code-review/SKILL.md +171 -0
- package/src/code-review-skills/mobile-code-review/references/async-state-and-side-effects.md +19 -0
- package/src/code-review-skills/mobile-code-review/references/lifecycle-and-navigation.md +19 -0
- package/src/code-review-skills/mobile-code-review/references/performance-and-resource-management.md +19 -0
- package/src/code-review-skills/mobile-code-review/references/resilience-and-device-conditions.md +19 -0
- package/src/code-review-skills/mobile-code-review/references/scoring-guide.md +38 -0
- package/src/code-review-skills/mobile-code-review/references/storage-permissions-and-security.md +19 -0
- package/src/code-review-skills/mobile-code-review/references/testing-and-regression-coverage.md +21 -0
- package/src/code-review-skills/php-code-review/SKILL.md +159 -0
- package/src/code-review-skills/php-code-review/references/inclusion-superglobals-and-scope.md +21 -0
- package/src/code-review-skills/php-code-review/references/language-types-and-autoload.md +19 -0
- package/src/code-review-skills/php-code-review/references/oop-magic-and-errors.md +17 -0
- package/src/code-review-skills/php-code-review/references/performance-data-access-and-testing.md +16 -0
- package/src/code-review-skills/php-code-review/references/request-lifecycle-and-runtime.md +15 -0
- package/src/code-review-skills/php-code-review/references/scoring-guide.md +39 -0
- package/src/code-review-skills/php-code-review/references/security-and-io-boundary.md +24 -0
- package/src/code-review-skills/python-code-review/SKILL.md +147 -0
- package/src/code-review-skills/python-code-review/references/exception-and-lifecycle.md +15 -0
- package/src/code-review-skills/python-code-review/references/input-and-data-security.md +20 -0
- package/src/code-review-skills/python-code-review/references/maintainability-and-testing.md +21 -0
- package/src/code-review-skills/python-code-review/references/performance-and-resource-usage.md +21 -0
- package/src/code-review-skills/python-code-review/references/scoring-guide.md +38 -0
- package/src/code-review-skills/rust-code-review/SKILL.md +165 -0
- package/src/code-review-skills/rust-code-review/references/api-traits-and-evolution.md +16 -0
- package/src/code-review-skills/rust-code-review/references/cargo-features-and-test-coverage.md +16 -0
- package/src/code-review-skills/rust-code-review/references/concurrency-async-and-sync.md +17 -0
- package/src/code-review-skills/rust-code-review/references/error-handling-and-reliability.md +17 -0
- package/src/code-review-skills/rust-code-review/references/macros-ffi-and-embedded.md +19 -0
- package/src/code-review-skills/rust-code-review/references/ownership-borrowing-and-unsafe.md +20 -0
- package/src/code-review-skills/rust-code-review/references/performance-and-allocations.md +18 -0
- package/src/code-review-skills/rust-code-review/references/scoring-guide.md +41 -0
- package/src/git-commit-message-skills/conventional/SKILL.md +3 -3
- package/src/git-commit-message-skills/gitmoji/SKILL.md +3 -3
- 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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"}
|
package/out/review/index.js
CHANGED
|
@@ -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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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 =
|
|
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
|
package/out/review/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/review/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/review/index.ts"],"names":[],"mappings":"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"}
|