codereview-aia 0.1.2 → 0.1.4

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 (200) hide show
  1. package/dist/analysis/static/wpPhpcsRunner.d.ts +11 -0
  2. package/dist/analysis/static/wpPhpcsRunner.js +219 -0
  3. package/dist/analysis/static/wpPhpcsRunner.js.map +1 -0
  4. package/dist/clients/implementations/openRouterClient.js +2 -2
  5. package/dist/clients/implementations/openRouterClient.js.map +1 -1
  6. package/dist/clients/openRouterClient.js +2 -2
  7. package/dist/clients/openRouterClient.js.map +1 -1
  8. package/dist/clients/utils/promptFormatter.d.ts +3 -2
  9. package/dist/clients/utils/promptFormatter.js +82 -24
  10. package/dist/clients/utils/promptFormatter.js.map +1 -1
  11. package/dist/core/ConfigurationService.d.ts +21 -0
  12. package/dist/core/ConfigurationService.js +39 -0
  13. package/dist/core/ConfigurationService.js.map +1 -1
  14. package/dist/core/handlers/FileProcessingHandler.js +5 -0
  15. package/dist/core/handlers/FileProcessingHandler.js.map +1 -1
  16. package/dist/core/reviewOrchestrator.js +61 -1
  17. package/dist/core/reviewOrchestrator.js.map +1 -1
  18. package/dist/index.d.ts +0 -1
  19. package/dist/index.js +0 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/runtime/cliEntry.js +57 -4
  22. package/dist/runtime/cliEntry.js.map +1 -1
  23. package/dist/runtime/fileCollector.d.ts +10 -1
  24. package/dist/runtime/fileCollector.js +217 -2
  25. package/dist/runtime/fileCollector.js.map +1 -1
  26. package/dist/runtime/reporting/markdownReportBuilder.d.ts +2 -0
  27. package/dist/runtime/reporting/markdownReportBuilder.js +57 -0
  28. package/dist/runtime/reporting/markdownReportBuilder.js.map +1 -1
  29. package/dist/runtime/reviewPipeline.d.ts +22 -3
  30. package/dist/runtime/reviewPipeline.js +46 -7
  31. package/dist/runtime/reviewPipeline.js.map +1 -1
  32. package/dist/runtime/runAiCodeReview.d.ts +19 -1
  33. package/dist/runtime/runAiCodeReview.js +243 -8
  34. package/dist/runtime/runAiCodeReview.js.map +1 -1
  35. package/dist/runtime/ui/RuntimeApp.js +15 -4
  36. package/dist/runtime/ui/RuntimeApp.js.map +1 -1
  37. package/dist/runtime/ui/screens/ProgressScreen.d.ts +6 -1
  38. package/dist/runtime/ui/screens/ProgressScreen.js +28 -2
  39. package/dist/runtime/ui/screens/ProgressScreen.js.map +1 -1
  40. package/dist/runtime/ui/screens/ResultsScreen.js +8 -1
  41. package/dist/runtime/ui/screens/ResultsScreen.js.map +1 -1
  42. package/dist/types/review.d.ts +60 -0
  43. package/dist/utils/detection/frameworkDetector.js +55 -0
  44. package/dist/utils/detection/frameworkDetector.js.map +1 -1
  45. package/dist/utils/promptTemplateManager.js +1 -0
  46. package/dist/utils/promptTemplateManager.js.map +1 -1
  47. package/package.json +13 -10
  48. package/.cr-aia.yml +0 -23
  49. package/.crignore +0 -0
  50. package/src/analysis/FindingsExtractor.ts +0 -431
  51. package/src/analysis/ai-detection/analyzers/BaseAnalyzer.ts +0 -267
  52. package/src/analysis/ai-detection/analyzers/DocumentationAnalyzer.ts +0 -622
  53. package/src/analysis/ai-detection/analyzers/GitHistoryAnalyzer.ts +0 -430
  54. package/src/analysis/ai-detection/core/AIDetectionEngine.ts +0 -467
  55. package/src/analysis/ai-detection/types/DetectionTypes.ts +0 -406
  56. package/src/analysis/ai-detection/utils/SubmissionConverter.ts +0 -390
  57. package/src/analysis/context/ReviewContext.ts +0 -378
  58. package/src/analysis/context/index.ts +0 -7
  59. package/src/analysis/index.ts +0 -8
  60. package/src/analysis/tokens/TokenAnalysisFormatter.ts +0 -154
  61. package/src/analysis/tokens/TokenAnalyzer.ts +0 -747
  62. package/src/analysis/tokens/index.ts +0 -8
  63. package/src/clients/base/abstractClient.ts +0 -190
  64. package/src/clients/base/httpClient.ts +0 -160
  65. package/src/clients/base/index.ts +0 -12
  66. package/src/clients/base/modelDetection.ts +0 -107
  67. package/src/clients/base/responseProcessor.ts +0 -586
  68. package/src/clients/factory/clientFactory.ts +0 -55
  69. package/src/clients/factory/index.ts +0 -8
  70. package/src/clients/implementations/index.ts +0 -8
  71. package/src/clients/implementations/openRouterClient.ts +0 -411
  72. package/src/clients/openRouterClient.ts +0 -863
  73. package/src/clients/openRouterClientWrapper.ts +0 -44
  74. package/src/clients/utils/directoryStructure.ts +0 -52
  75. package/src/clients/utils/index.ts +0 -11
  76. package/src/clients/utils/languageDetection.ts +0 -44
  77. package/src/clients/utils/promptFormatter.ts +0 -105
  78. package/src/clients/utils/promptLoader.ts +0 -53
  79. package/src/clients/utils/tokenCounter.ts +0 -297
  80. package/src/core/ApiClientSelector.ts +0 -37
  81. package/src/core/ConfigurationService.ts +0 -591
  82. package/src/core/ConsolidationService.ts +0 -423
  83. package/src/core/InteractiveDisplayManager.ts +0 -81
  84. package/src/core/OutputManager.ts +0 -275
  85. package/src/core/ReviewGenerator.ts +0 -140
  86. package/src/core/fileDiscovery.ts +0 -237
  87. package/src/core/handlers/EstimationHandler.ts +0 -104
  88. package/src/core/handlers/FileProcessingHandler.ts +0 -204
  89. package/src/core/handlers/OutputHandler.ts +0 -125
  90. package/src/core/handlers/ReviewExecutor.ts +0 -104
  91. package/src/core/reviewOrchestrator.ts +0 -333
  92. package/src/core/utils/ModelInfoUtils.ts +0 -56
  93. package/src/formatters/outputFormatter.ts +0 -62
  94. package/src/formatters/utils/IssueFormatters.ts +0 -83
  95. package/src/formatters/utils/JsonFormatter.ts +0 -77
  96. package/src/formatters/utils/MarkdownFormatters.ts +0 -609
  97. package/src/formatters/utils/MetadataFormatter.ts +0 -269
  98. package/src/formatters/utils/ModelInfoExtractor.ts +0 -115
  99. package/src/index.ts +0 -28
  100. package/src/plugins/PluginInterface.ts +0 -50
  101. package/src/plugins/PluginManager.ts +0 -126
  102. package/src/prompts/PromptManager.ts +0 -69
  103. package/src/prompts/cache/PromptCache.ts +0 -50
  104. package/src/prompts/promptText/common/variables/css-frameworks.json +0 -33
  105. package/src/prompts/promptText/common/variables/framework-versions.json +0 -45
  106. package/src/prompts/promptText/frameworks/react/comprehensive.hbs +0 -19
  107. package/src/prompts/promptText/languages/css/comprehensive.hbs +0 -18
  108. package/src/prompts/promptText/languages/generic/comprehensive.hbs +0 -20
  109. package/src/prompts/promptText/languages/html/comprehensive.hbs +0 -18
  110. package/src/prompts/promptText/languages/javascript/comprehensive.hbs +0 -18
  111. package/src/prompts/promptText/languages/python/comprehensive.hbs +0 -18
  112. package/src/prompts/promptText/languages/typescript/comprehensive.hbs +0 -18
  113. package/src/runtime/auth/service.ts +0 -58
  114. package/src/runtime/auth/session.ts +0 -103
  115. package/src/runtime/auth/types.ts +0 -11
  116. package/src/runtime/cliEntry.ts +0 -196
  117. package/src/runtime/debug/logManager.ts +0 -37
  118. package/src/runtime/errors.ts +0 -13
  119. package/src/runtime/fileCollector.ts +0 -222
  120. package/src/runtime/manifest.ts +0 -64
  121. package/src/runtime/openrouterProxy.ts +0 -45
  122. package/src/runtime/preprod/webCheck.ts +0 -104
  123. package/src/runtime/proxyConfig.ts +0 -94
  124. package/src/runtime/proxyEnvironment.ts +0 -71
  125. package/src/runtime/reportMerge.ts +0 -102
  126. package/src/runtime/reporting/markdownReportBuilder.ts +0 -138
  127. package/src/runtime/reporting/reportDataCollector.ts +0 -234
  128. package/src/runtime/reporting/summaryGenerator.ts +0 -86
  129. package/src/runtime/reviewPipeline.ts +0 -161
  130. package/src/runtime/runAiCodeReview.ts +0 -153
  131. package/src/runtime/runtimeConfig.ts +0 -5
  132. package/src/runtime/ui/Layout.tsx +0 -57
  133. package/src/runtime/ui/RuntimeApp.tsx +0 -233
  134. package/src/runtime/ui/inkModules.ts +0 -73
  135. package/src/runtime/ui/screens/AuthScreen.tsx +0 -128
  136. package/src/runtime/ui/screens/ModeSelection.tsx +0 -185
  137. package/src/runtime/ui/screens/ProgressScreen.tsx +0 -62
  138. package/src/runtime/ui/screens/ResultsScreen.tsx +0 -83
  139. package/src/strategies/ArchitecturalReviewStrategy.ts +0 -54
  140. package/src/strategies/CodingTestReviewStrategy.ts +0 -920
  141. package/src/strategies/ConsolidatedReviewStrategy.ts +0 -59
  142. package/src/strategies/ExtractPatternsReviewStrategy.ts +0 -64
  143. package/src/strategies/MultiPassReviewStrategy.ts +0 -785
  144. package/src/strategies/ReviewStrategy.ts +0 -64
  145. package/src/strategies/StrategyFactory.ts +0 -79
  146. package/src/strategies/index.ts +0 -14
  147. package/src/tokenizers/baseTokenizer.ts +0 -61
  148. package/src/tokenizers/gptTokenizer.ts +0 -27
  149. package/src/tokenizers/index.ts +0 -8
  150. package/src/types/apiResponses.ts +0 -40
  151. package/src/types/cli.ts +0 -24
  152. package/src/types/common.ts +0 -39
  153. package/src/types/configuration.ts +0 -201
  154. package/src/types/handlebars.d.ts +0 -5
  155. package/src/types/patch.d.ts +0 -25
  156. package/src/types/review.ts +0 -294
  157. package/src/types/reviewContext.d.ts +0 -65
  158. package/src/types/reviewSchema.ts +0 -181
  159. package/src/types/structuredReview.ts +0 -167
  160. package/src/types/tokenAnalysis.ts +0 -56
  161. package/src/utils/FileReader.ts +0 -93
  162. package/src/utils/FileWriter.ts +0 -76
  163. package/src/utils/PathGenerator.ts +0 -97
  164. package/src/utils/api/apiUtils.ts +0 -14
  165. package/src/utils/api/index.ts +0 -1
  166. package/src/utils/apiErrorHandler.ts +0 -287
  167. package/src/utils/ciDataCollector.ts +0 -252
  168. package/src/utils/codingTestConfigLoader.ts +0 -466
  169. package/src/utils/dependencies/aiDependencyAnalyzer.ts +0 -454
  170. package/src/utils/detection/frameworkDetector.ts +0 -879
  171. package/src/utils/detection/index.ts +0 -10
  172. package/src/utils/detection/projectTypeDetector.ts +0 -518
  173. package/src/utils/diagramGenerator.ts +0 -206
  174. package/src/utils/errorLogger.ts +0 -60
  175. package/src/utils/estimationUtils.ts +0 -407
  176. package/src/utils/fileFilters.ts +0 -373
  177. package/src/utils/fileSystem.ts +0 -57
  178. package/src/utils/index.ts +0 -36
  179. package/src/utils/logger.ts +0 -290
  180. package/src/utils/pathValidator.ts +0 -98
  181. package/src/utils/priorityFilter.ts +0 -59
  182. package/src/utils/projectDocs.ts +0 -189
  183. package/src/utils/promptPaths.ts +0 -29
  184. package/src/utils/promptTemplateManager.ts +0 -157
  185. package/src/utils/review/consolidateReview.ts +0 -553
  186. package/src/utils/review/fixDisplay.ts +0 -100
  187. package/src/utils/review/fixImplementation.ts +0 -61
  188. package/src/utils/review/index.ts +0 -36
  189. package/src/utils/review/interactiveProcessing.ts +0 -294
  190. package/src/utils/review/progressTracker.ts +0 -296
  191. package/src/utils/review/reviewExtraction.ts +0 -382
  192. package/src/utils/review/types.ts +0 -46
  193. package/src/utils/reviewActionHandler.ts +0 -18
  194. package/src/utils/reviewParser.ts +0 -253
  195. package/src/utils/sanitizer.ts +0 -238
  196. package/src/utils/smartFileSelector.ts +0 -255
  197. package/src/utils/templateLoader.ts +0 -514
  198. package/src/utils/treeGenerator.ts +0 -153
  199. package/tsconfig.build.json +0 -14
  200. package/tsconfig.json +0 -59
@@ -1,128 +0,0 @@
1
- import React, { useCallback, useEffect, useState } from 'react';
2
- import type { SessionUser } from '../../auth/types';
3
- import { authenticate } from '../../auth/service';
4
- import { saveSession } from '../../auth/session';
5
- import { useLayout } from '../Layout';
6
- import { getInk, getInkSpinner, getInkTextInput } from '../inkModules';
7
-
8
- interface AuthScreenProps {
9
- onAuth: (user: SessionUser) => void;
10
- }
11
-
12
- export function AuthScreen({ onAuth }: AuthScreenProps) {
13
- const { frameWidth } = useLayout();
14
- const { Box, Text, useInput } = getInk();
15
- const Spinner = getInkSpinner();
16
- const TextInput = getInkTextInput();
17
- const [username, setUsername] = useState('');
18
- const [password, setPassword] = useState('');
19
- const [error, setError] = useState<string | null>(null);
20
- const [submitting, setSubmitting] = useState(false);
21
- const [step, setStep] = useState<'username' | 'password'>('username');
22
-
23
- const handleSubmit = useCallback(async () => {
24
- if (submitting) return;
25
-
26
- if (!username.trim() || !password.trim()) {
27
- setError('Username and password are required');
28
- return;
29
- }
30
-
31
- try {
32
- setSubmitting(true);
33
- setError(null);
34
- const result = await authenticate(username.trim(), password.trim());
35
- saveSession(result.token);
36
- process.env.CR_AIA_PROXY_SESSION_TOKEN = result.token;
37
- onAuth(result.user);
38
- } catch (authError) {
39
- const message = authError instanceof Error ? authError.message : 'Authentication failed';
40
- setError(message);
41
- setSubmitting(false);
42
- }
43
- }, [username, password, submitting, onAuth]);
44
-
45
- const handleAdvance = useCallback(() => {
46
- if (step === 'password') {
47
- return;
48
- }
49
- if (!username.trim()) {
50
- setError('Username is required');
51
- return;
52
- }
53
- setError(null);
54
- setStep('password');
55
- }, [step, username]);
56
-
57
- useInput((input, key) => {
58
- if (key.return) {
59
- if (step === 'username') {
60
- handleAdvance();
61
- } else {
62
- handleSubmit();
63
- }
64
- }
65
- });
66
-
67
- useEffect(() => {
68
- setError(null);
69
- }, [username, password]);
70
-
71
- return (
72
- <Box
73
- width={frameWidth}
74
- flexDirection="column"
75
- borderStyle="round"
76
- borderColor="cyan"
77
- paddingX={2}
78
- paddingY={1}
79
- gap={1}
80
- >
81
- <Text color="cyan" bold>
82
- Sign in
83
- </Text>
84
- <Text dimColor>
85
- {step === 'username' ? 'Type your username, press Enter.' : 'Type your password, press Enter to submit.'}
86
- </Text>
87
-
88
- <Box flexDirection="column" gap={1}>
89
- <Box flexDirection="column">
90
- <Text dimColor>Username</Text>
91
- <TextInput
92
- value={username}
93
- onChange={setUsername}
94
- placeholder="username"
95
- focus={step === 'username' && !submitting}
96
- />
97
- </Box>
98
-
99
- <Box flexDirection="column">
100
- <Text dimColor>Password</Text>
101
- <TextInput
102
- value={password}
103
- onChange={setPassword}
104
- mask="*"
105
- placeholder={step === 'password' ? 'password' : 'Press Enter after username'}
106
- focus={step === 'password' && !submitting}
107
- showCursor={step === 'password'}
108
- />
109
- </Box>
110
- </Box>
111
-
112
- {submitting && (
113
- <Box>
114
- <Text>
115
- <Spinner type="dots" /> Authenticating…
116
- </Text>
117
- </Box>
118
- )}
119
-
120
- {error && (
121
- <Box>
122
- <Text color="red">{error}</Text>
123
- </Box>
124
- )}
125
- </Box>
126
- );
127
- }
128
-
@@ -1,185 +0,0 @@
1
- import React, { useCallback, useState } from 'react';
2
- import { getInk, getInkSelectInput, getInkTextInput } from '../inkModules';
3
- import { useLayout } from '../Layout';
4
- import type { ReviewMode } from '../../reviewPipeline';
5
-
6
- interface ModeSelectionProps {
7
- onSelect: (mode: ReviewMode, extras?: { targetUrl?: string }) => void;
8
- debugEnabled: boolean;
9
- onToggleDebug: () => void;
10
- }
11
-
12
- interface ModeOption {
13
- label: string;
14
- value: ReviewMode;
15
- description: string;
16
- requiresUrl?: boolean;
17
- }
18
-
19
- const OPTIONS: ModeOption[] = [
20
- {
21
- label: 'Review uncommitted changes',
22
- value: 'uncommitted',
23
- description: 'Scan staged and unstaged changes only',
24
- },
25
- {
26
- label: 'Pre-production review',
27
- value: 'preprod',
28
- description: 'Scan the entire workspace and trigger website checks',
29
- requiresUrl: true,
30
- },
31
- ];
32
-
33
- export function ModeSelection({ onSelect, debugEnabled, onToggleDebug }: ModeSelectionProps) {
34
- const { Box, Text, useInput } = getInk();
35
- const SelectInput = getInkSelectInput();
36
- const TextInput = getInkTextInput();
37
- const { frameWidth } = useLayout();
38
- const [phase, setPhase] = useState<'list' | 'preprodUrl'>('list');
39
- const [pendingMode, setPendingMode] = useState<ReviewMode>('preprod');
40
- const [highlighted, setHighlighted] = useState<ReviewMode>('uncommitted');
41
- const [urlValue, setUrlValue] = useState('');
42
- const [urlError, setUrlError] = useState<string | null>(null);
43
-
44
- const resetUrlState = useCallback(() => {
45
- setUrlValue('');
46
- setUrlError(null);
47
- }, []);
48
-
49
- const handleModeSelect = useCallback(
50
- (mode: ReviewMode) => {
51
- const option = OPTIONS.find((opt) => opt.value === mode);
52
- if (!option) {
53
- return;
54
- }
55
-
56
- if (option.requiresUrl) {
57
- setPendingMode(option.value);
58
- resetUrlState();
59
- setPhase('preprodUrl');
60
- return;
61
- }
62
-
63
- onSelect(option.value);
64
- },
65
- [onSelect, resetUrlState],
66
- );
67
-
68
- const submitUrl = useCallback(() => {
69
- if (phase !== 'preprodUrl') {
70
- return;
71
- }
72
-
73
- const trimmed = urlValue.trim();
74
- if (!trimmed) {
75
- setUrlError('URL is required');
76
- return;
77
- }
78
-
79
- try {
80
- const parsed = new URL(trimmed);
81
- if (!['http:', 'https:'].includes(parsed.protocol)) {
82
- throw new Error('invalid');
83
- }
84
- setUrlError(null);
85
- onSelect(pendingMode, { targetUrl: parsed.toString() });
86
- } catch {
87
- setUrlError('Enter a valid URL starting with http:// or https://');
88
- }
89
- }, [onSelect, pendingMode, phase, urlValue]);
90
-
91
- useInput((input, key) => {
92
- const normalizedInput = input.toLowerCase();
93
- if (normalizedInput === 'd' && !key.ctrl && !key.meta) {
94
- onToggleDebug();
95
- return;
96
- }
97
-
98
- if (phase !== 'preprodUrl') {
99
- return;
100
- }
101
-
102
- if (key.escape) {
103
- setPhase('list');
104
- resetUrlState();
105
- return;
106
- }
107
-
108
- if (key.return) {
109
- submitUrl();
110
- }
111
- });
112
-
113
- if (phase === 'preprodUrl') {
114
- return (
115
- <Box
116
- width={frameWidth}
117
- flexDirection="column"
118
- borderStyle="round"
119
- borderColor="cyan"
120
- paddingX={2}
121
- paddingY={1}
122
- gap={1}
123
- >
124
- <Text color="cyan" bold>
125
- Pre-production review
126
- </Text>
127
- <Text dimColor>Enter the full website URL. We will trigger ai.enki.si and scan every file here.</Text>
128
- <Box flexDirection="column">
129
- <Text dimColor>Target URL</Text>
130
- <TextInput
131
- value={urlValue}
132
- onChange={(value) => {
133
- setUrlValue(value);
134
- if (urlError) {
135
- setUrlError(null);
136
- }
137
- }}
138
- placeholder="https://example.com"
139
- focus
140
- />
141
- </Box>
142
- {urlError && (
143
- <Text color="red">{urlError}</Text>
144
- )}
145
- <Box justifyContent="space-between">
146
- <Text dimColor>Press Enter to start · Esc to go back</Text>
147
- <Text dimColor>Debug: {debugEnabled ? 'On' : 'Off'} (press D)</Text>
148
- </Box>
149
- </Box>
150
- );
151
- }
152
-
153
- return (
154
- <Box
155
- width={frameWidth}
156
- flexDirection="column"
157
- borderStyle="round"
158
- borderColor="green"
159
- paddingX={2}
160
- paddingY={1}
161
- gap={1}
162
- >
163
- <Box justifyContent="space-between" alignItems="center">
164
- <Text color="green" bold>
165
- Choose review mode
166
- </Text>
167
- <Text dimColor>Debug: {debugEnabled ? 'On' : 'Off'} (press D)</Text>
168
- </Box>
169
- <Text dimColor>Use arrow keys, press Enter to start.</Text>
170
- <SelectInput
171
- items={OPTIONS.map((option) => ({
172
- label: option.label,
173
- value: option.value,
174
- }))}
175
- onHighlight={(item) => setHighlighted(item.value as ReviewMode)}
176
- onSelect={(item) => handleModeSelect(item.value as ReviewMode)}
177
- />
178
- <Box flexDirection="column" marginTop={1}>
179
- <Text dimColor>
180
- · {OPTIONS.find((option) => option.value === highlighted)?.description}
181
- </Text>
182
- </Box>
183
- </Box>
184
- );
185
- }
@@ -1,62 +0,0 @@
1
- import React, { useMemo } from 'react';
2
- import { useLayout } from '../Layout';
3
- import type { ReviewStage } from '../../reviewPipeline';
4
- import { getInk, getInkSpinner } from '../inkModules';
5
-
6
- interface ProgressScreenProps {
7
- stage: ReviewStage;
8
- filesFound?: number;
9
- }
10
-
11
- const STAGE_TEXT: Record<ReviewStage, { title: string; detail: string }> = {
12
- preparing: {
13
- title: 'Preparing run',
14
- detail: 'Triggering website checks and configuring the reviewer',
15
- },
16
- collecting: {
17
- title: 'Collecting files',
18
- detail: 'Inspecting your working tree',
19
- },
20
- reviewing: {
21
- title: 'Running AI review',
22
- detail: 'Streaming code to the reviewer',
23
- },
24
- merging: {
25
- title: 'Merging reports',
26
- detail: 'Normalizing findings and cost data',
27
- },
28
- };
29
-
30
- export function ProgressScreen({ stage, filesFound }: ProgressScreenProps) {
31
- const { Box, Text } = getInk();
32
- const Spinner = getInkSpinner();
33
- const { frameWidth } = useLayout();
34
-
35
- const meta = useMemo(() => STAGE_TEXT[stage], [stage]);
36
- const fileStatus =
37
- stage === 'collecting' && typeof filesFound === 'number' && filesFound >= 0
38
- ? `${filesFound} files queued`
39
- : stage === 'collecting'
40
- ? 'Preparing file list…'
41
- : '';
42
-
43
- return (
44
- <Box
45
- width={frameWidth}
46
- flexDirection="column"
47
- borderStyle="round"
48
- borderColor="cyan"
49
- paddingX={2}
50
- paddingY={1}
51
- gap={1}
52
- >
53
- <Box gap={1}>
54
- <Text>
55
- <Spinner type="line" /> {meta.title}
56
- </Text>
57
- </Box>
58
- <Text dimColor>{meta.detail}</Text>
59
- {fileStatus && <Text dimColor>{fileStatus}</Text>}
60
- </Box>
61
- );
62
- }
@@ -1,83 +0,0 @@
1
- import React, { useMemo } from 'react';
2
- import type { ReviewResult } from '../../reviewPipeline';
3
- import { useLayout } from '../Layout';
4
- import { getInk } from '../inkModules';
5
-
6
- interface ResultsScreenProps {
7
- result: ReviewResult;
8
- debugLogPath?: string | null;
9
- }
10
-
11
- export function ResultsScreen({ result, debugLogPath }: ResultsScreenProps) {
12
- const { Box, Text } = getInk();
13
- const { frameWidth } = useLayout();
14
-
15
- const severityRows = useMemo(() => {
16
- const totals = result.totals || { critical: 0, high: 0, medium: 0, low: 0 };
17
- return [
18
- { label: 'Critical', value: totals.critical ?? 0 },
19
- { label: 'High', value: totals.high ?? 0 },
20
- { label: 'Medium', value: totals.medium ?? 0 },
21
- { label: 'Low', value: totals.low ?? 0 },
22
- ];
23
- }, [result.totals]);
24
-
25
- return (
26
- <Box
27
- width={frameWidth}
28
- flexDirection="column"
29
- borderStyle="round"
30
- borderColor="green"
31
- paddingX={2}
32
- paddingY={1}
33
- gap={1}
34
- >
35
- <Text color="green" bold>
36
- Review complete for {result.repo}
37
- </Text>
38
- <Text dimColor>Duration: {result.duration}s — Files reviewed: {result.filesReviewed}</Text>
39
-
40
- <Box flexDirection="column" marginTop={1}>
41
- {severityRows.map((row) => (
42
- <Box key={row.label}>
43
- <Text>
44
- {row.label}: {row.value}
45
- </Text>
46
- </Box>
47
- ))}
48
- </Box>
49
-
50
- {result.findings.length === 0 ? (
51
- <Text dimColor>No findings reported.</Text>
52
- ) : (
53
- <Box flexDirection="column" marginTop={1}>
54
- <Text bold>Sample findings</Text>
55
- {result.findings.slice(0, 5).map((finding, index) => (
56
- <Text key={`${finding.filePath}-${index}`} dimColor>
57
- · {finding.filePath ?? finding.file ?? 'unknown'} {finding.priority ? `(${finding.priority})` : ''}
58
- </Text>
59
- ))}
60
- {result.findings.length > 5 && (
61
- <Text dimColor>…and {result.findings.length - 5} more in the saved report.</Text>
62
- )}
63
- </Box>
64
- )}
65
-
66
- {result.reportPath && (
67
- <Box marginTop={1}>
68
- <Text dimColor>Report saved to: {result.reportPath}</Text>
69
- </Box>
70
- )}
71
-
72
- {debugLogPath && (
73
- <Box marginTop={1}>
74
- <Text dimColor>Debug logs saved to: {debugLogPath}</Text>
75
- </Box>
76
- )}
77
-
78
- <Box marginTop={1}>
79
- <Text dimColor>Press Enter to return to mode selection.</Text>
80
- </Box>
81
- </Box>
82
- );
83
- }
@@ -1,54 +0,0 @@
1
- /**
2
- * @fileoverview Architectural review strategy implementation.
3
- *
4
- * This module implements the architectural review strategy, which analyzes the entire
5
- * codebase structure and design patterns to provide high-level feedback.
6
- */
7
-
8
- import type { ApiClientConfig } from '../core/ApiClientSelector';
9
- import { generateReview } from '../core/ReviewGenerator';
10
- import type { FileInfo, ReviewOptions, ReviewResult /* , ReviewType */ } from '../types/review'; // ReviewType not used
11
- import logger from '../utils/logger';
12
- import type { ProjectDocs } from '../utils/projectDocs';
13
- import { BaseReviewStrategy } from './ReviewStrategy';
14
-
15
- /**
16
- * Strategy for architectural reviews
17
- */
18
- export class ArchitecturalReviewStrategy extends BaseReviewStrategy {
19
- /**
20
- * Create a new architectural review strategy
21
- */
22
- constructor() {
23
- super('architectural');
24
- }
25
-
26
- /**
27
- * Execute the architectural review strategy
28
- * @param files Files to review
29
- * @param projectName Project name
30
- * @param projectDocs Project documentation
31
- * @param options Review options
32
- * @param apiClientConfig API client configuration
33
- * @returns Promise resolving to the review result
34
- */
35
- async execute(
36
- files: FileInfo[],
37
- projectName: string,
38
- projectDocs: ProjectDocs | null,
39
- options: ReviewOptions,
40
- apiClientConfig: ApiClientConfig,
41
- ): Promise<ReviewResult> {
42
- logger.info('Executing architectural review strategy...');
43
-
44
- // Generate the review using the selected API client
45
- return generateReview(
46
- files,
47
- projectName,
48
- this.reviewType,
49
- projectDocs,
50
- options,
51
- apiClientConfig,
52
- );
53
- }
54
- }