@codraoss/schema 0.9.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.
package/dist/index.js ADDED
@@ -0,0 +1,548 @@
1
+ import {
2
+ REVIEW_CONCURRENCY_LIMITS,
3
+ reviewConcurrencyLevels,
4
+ reviewMaxCommentsOptions,
5
+ reviewMaxFilesRange,
6
+ reviewSeverities
7
+ } from "./chunk-WTXH6CHA.js";
8
+
9
+ // src/schema.ts
10
+ import { z as z2 } from "zod";
11
+
12
+ // src/schema-enums.ts
13
+ var reviewTriggers = ["auto", "mention", "retry"];
14
+ var jobStatuses = ["queued", "running", "done", "failed", "superseded", "cancelled", "stopped"];
15
+ var fileStatuses = ["pending", "done", "skipped", "failed"];
16
+ var reviewVerdicts = ["approve", "comment"];
17
+ var reviewCategories = ["security", "bugs", "performance", "correctness", "quality"];
18
+ var llmApiFormats = ["openai", "anthropic", "gemini", "cloudflare-workers-ai", "vertex"];
19
+
20
+ // src/schema-claims.ts
21
+ var claimTypes = [
22
+ "react_hook_missing_deps",
23
+ "react_missing_cleanup",
24
+ "missing_await",
25
+ "unhandled_promise_rejection",
26
+ "resource_leak",
27
+ "null_or_undefined_deref",
28
+ "sql_injection",
29
+ "unsafe_dom_sink",
30
+ "unsafe_dynamic_code",
31
+ "insecure_randomness",
32
+ "hardcoded_secret",
33
+ "redos_regex",
34
+ "swallowed_error",
35
+ "mutable_default_arg",
36
+ "destructive_migration",
37
+ "external_version_claim",
38
+ "other"
39
+ ];
40
+ var CLAIM_TYPE_CATEGORY = {
41
+ sql_injection: "security",
42
+ unsafe_dom_sink: "security",
43
+ unsafe_dynamic_code: "security",
44
+ insecure_randomness: "security",
45
+ hardcoded_secret: "security",
46
+ missing_await: "bugs",
47
+ unhandled_promise_rejection: "bugs",
48
+ null_or_undefined_deref: "bugs",
49
+ react_hook_missing_deps: "bugs",
50
+ swallowed_error: "bugs",
51
+ mutable_default_arg: "bugs",
52
+ resource_leak: "performance",
53
+ redos_regex: "performance",
54
+ destructive_migration: "correctness",
55
+ react_missing_cleanup: "correctness",
56
+ external_version_claim: "correctness",
57
+ other: "quality"
58
+ };
59
+ function toClaimType(value) {
60
+ return claimTypes.includes(value) ? value : "other";
61
+ }
62
+ var CLAIM_TYPE_DECIDABILITY = {
63
+ sql_injection: "diff_local",
64
+ unsafe_dom_sink: "diff_local",
65
+ unsafe_dynamic_code: "diff_local",
66
+ insecure_randomness: "diff_local",
67
+ hardcoded_secret: "diff_local",
68
+ mutable_default_arg: "diff_local",
69
+ destructive_migration: "diff_local",
70
+ swallowed_error: "diff_local",
71
+ unhandled_promise_rejection: "diff_local",
72
+ missing_await: "diff_local",
73
+ other: "diff_local",
74
+ react_hook_missing_deps: "needs_whole_file",
75
+ react_missing_cleanup: "needs_whole_file",
76
+ resource_leak: "needs_whole_file",
77
+ redos_regex: "needs_whole_file",
78
+ null_or_undefined_deref: "needs_whole_file",
79
+ external_version_claim: "needs_external_facts"
80
+ };
81
+ var DEFAULT_DENIED_CLAIM_TYPES = claimTypes.filter(
82
+ (type) => CLAIM_TYPE_DECIDABILITY[type] !== "diff_local"
83
+ );
84
+ var DEFAULT_SHADOW_RULE_IDS = [
85
+ "empty-catch",
86
+ "debugger-statement",
87
+ "focused-test",
88
+ "dynamic-code-exec",
89
+ "dynamic-html-sink",
90
+ "mutable-default-arg",
91
+ "destructive-migration",
92
+ "hardcoded-secret",
93
+ "insecure-random"
94
+ ];
95
+ var findingDispositions = [
96
+ "posted",
97
+ "severity",
98
+ "confidence",
99
+ "suppression",
100
+ "dedupe",
101
+ "verify",
102
+ "verify_unanswered",
103
+ "rule_unverified",
104
+ "cap",
105
+ "unverifiable_passthrough"
106
+ ];
107
+
108
+ // src/schema-repo-config.ts
109
+ import { z } from "zod";
110
+
111
+ // src/constants.ts
112
+ var DEFAULT_REVIEW_EVENTS = ["opened", "synchronize", "ready_for_review", "reopened"];
113
+ var DEFAULT_SKIP_FILES = ["**/*.lock", "dist/**", "build/**", ".next/**", "*.generated.*", "coverage/**"];
114
+ var DEFAULT_EXEC_FILE_TYPES = [".ts", ".tsx", ".js"];
115
+ var DEFAULT_EXEC_COMMAND = "npm run lint && npm run typecheck";
116
+ var DEFAULT_MENTION_TRIGGER = "@codra-app";
117
+ var DEFAULT_LABELS = {
118
+ p1: "review: needs-attention",
119
+ p2: "review: approved",
120
+ p3: "review: approved"
121
+ };
122
+ var KIMI_K2_5_MODEL = "@cf/moonshotai/kimi-k2.5";
123
+ var KIMI_K2_6_MODEL = "@cf/moonshotai/kimi-k2.6";
124
+ var DEPRECATED_MODEL_ALIASES = {
125
+ [KIMI_K2_5_MODEL]: KIMI_K2_6_MODEL
126
+ };
127
+ var REPO_CONFIG_CACHE_VERSION = "v7";
128
+ var DEFAULT_OVERALL_CORRECTNESS = "patch is correct";
129
+ var DEFAULT_OVERALL_EXPLANATION = "Review completed (partial output).";
130
+
131
+ // src/schema-repo-config.ts
132
+ var labelsSchema = z.union([
133
+ z.literal(false),
134
+ z.object({
135
+ p1: z.string().min(1),
136
+ p2: z.string().min(1),
137
+ p3: z.string().min(1)
138
+ })
139
+ ]);
140
+ var reviewConfigSchema = z.object({
141
+ on: z.array(z.enum(["opened", "synchronize", "ready_for_review", "reopened", "closed"])).default([...DEFAULT_REVIEW_EVENTS]),
142
+ ignore_drafts: z.boolean().default(true),
143
+ mention_trigger: z.union([z.literal(false), z.string().min(1)]).default(DEFAULT_MENTION_TRIGGER),
144
+ skip_files: z.array(z.string().min(1)).default([...DEFAULT_SKIP_FILES]),
145
+ large_file_threshold_lines: z.number().int().min(1).max(5e3).default(200),
146
+ max_diff_lines_per_file: z.number().int().min(1).max(5e3).default(800),
147
+ batch_small_files: z.boolean().default(true),
148
+ max_total_diff_chars: z.number().int().min(1).max(5e5).default(15e4),
149
+ max_comments: z.number().int().min(1).max(150).default(10),
150
+ min_severity: z.enum(reviewSeverities).default("P3"),
151
+ min_confidence: z.number().min(0).max(1).default(0),
152
+ focus: z.array(z.enum(reviewCategories)).default([...reviewCategories]),
153
+ deny_claim_types: z.array(z.enum(claimTypes)).default([...DEFAULT_DENIED_CLAIM_TYPES]),
154
+ rules: z.object({
155
+ enabled: z.boolean().default(true),
156
+ disabled_rule_ids: z.array(z.string().min(1)).default([]),
157
+ shadow_rule_ids: z.array(z.string().min(1)).default([...DEFAULT_SHADOW_RULE_IDS])
158
+ }).default({
159
+ enabled: true,
160
+ disabled_rule_ids: [],
161
+ shadow_rule_ids: [...DEFAULT_SHADOW_RULE_IDS]
162
+ }),
163
+ custom_rules: z.array(z.string().min(1)).default([]),
164
+ labels: labelsSchema.default({ ...DEFAULT_LABELS }),
165
+ exec: z.object({
166
+ enabled: z.boolean().default(false),
167
+ on_file_types: z.array(z.string().min(1)).default([...DEFAULT_EXEC_FILE_TYPES]),
168
+ command: z.string().min(1).default(DEFAULT_EXEC_COMMAND)
169
+ }).default({
170
+ enabled: false,
171
+ on_file_types: [...DEFAULT_EXEC_FILE_TYPES],
172
+ command: DEFAULT_EXEC_COMMAND
173
+ })
174
+ });
175
+ var DEFAULT_REVIEW_CONFIG = reviewConfigSchema.parse({});
176
+ var DEFAULT_MODEL_CONFIG = { main: null, fallbacks: [], size_overrides: [] };
177
+ var repoConfigSchema = z.object({
178
+ review: reviewConfigSchema.default(DEFAULT_REVIEW_CONFIG),
179
+ model: z.object({
180
+ main: z.string().nullable().default(null),
181
+ fallbacks: z.array(z.string()).nullable().default([]),
182
+ size_overrides: z.array(
183
+ z.object({
184
+ max_lines: z.number().int().positive(),
185
+ model: z.string(),
186
+ fallbacks: z.array(z.string()).optional()
187
+ })
188
+ ).nullable().optional()
189
+ }).default(DEFAULT_MODEL_CONFIG)
190
+ });
191
+ function normalizeModelId(model) {
192
+ return DEPRECATED_MODEL_ALIASES[model] ?? model;
193
+ }
194
+ function normalizeRepoModelConfig(model) {
195
+ return {
196
+ ...model,
197
+ main: model.main ? normalizeModelId(model.main) : null,
198
+ fallbacks: model.fallbacks === null ? null : Array.isArray(model.fallbacks) ? model.fallbacks.map(normalizeModelId) : [],
199
+ size_overrides: model.size_overrides === null || model.size_overrides === void 0 ? model.size_overrides : model.size_overrides.map((tier) => ({
200
+ ...tier,
201
+ model: normalizeModelId(tier.model),
202
+ fallbacks: tier.fallbacks?.map(normalizeModelId)
203
+ }))
204
+ };
205
+ }
206
+ function normalizeRepoConfig(config) {
207
+ return {
208
+ ...config,
209
+ model: normalizeRepoModelConfig(config.model)
210
+ };
211
+ }
212
+ var defaultRepoConfig = repoConfigSchema.parse({});
213
+
214
+ // src/schema.ts
215
+ var dateStringSchema = z2.union([z2.string(), z2.date()]).transform((d) => d instanceof Date ? d.toISOString() : d);
216
+ var coerceNumberSchema = z2.coerce.number();
217
+ var jobStepSchema = z2.object({
218
+ name: z2.string(),
219
+ status: z2.enum(["pending", "running", "done", "failed"]),
220
+ startedAt: dateStringSchema.nullable(),
221
+ finishedAt: dateStringSchema.nullable(),
222
+ error: z2.string().nullable().optional()
223
+ });
224
+ var parsedReviewCommentSchema = z2.object({
225
+ path: z2.string().min(1),
226
+ line: z2.number().int().positive().nullable().optional(),
227
+ position: z2.number().int().positive().nullable().optional(),
228
+ severity: z2.enum(reviewSeverities),
229
+ category: z2.enum(reviewCategories).default("quality"),
230
+ title: z2.string().min(1),
231
+ body: z2.string().min(1),
232
+ codeSuggestion: z2.string().min(1).nullable().optional(),
233
+ confidenceScore: z2.number().min(0).max(1).nullable().optional(),
234
+ // Verbatim line the finding is about, proving the claim is grounded in the diff.
235
+ evidence: z2.string().min(1).nullable().optional(),
236
+ fingerprint: z2.string().min(1).nullable().optional(),
237
+ // Hash of anchored line content; a change means the finding is raised again.
238
+ anchorHash: z2.string().min(1).nullable().optional(),
239
+ posted: z2.boolean().nullable().optional(),
240
+ // Never fold into title; format changes reset suppression and unmatch dismissals.
241
+ claimType: z2.enum(claimTypes).nullable().optional(),
242
+ contextSnippet: z2.string().nullable().optional(),
243
+ disposition: z2.enum(findingDispositions).nullable().optional(),
244
+ verifyReason: z2.string().nullable().optional(),
245
+ humanLabel: z2.enum(["marked_right", "marked_wrong"]).nullable().optional(),
246
+ // Title-independent identity for suppression.
247
+ fingerprintV2: z2.string().min(1).nullable().optional(),
248
+ // Absent means 'llm'. Always test `=== 'rule'` positively.
249
+ source: z2.enum(["llm", "rule"]).nullable().optional(),
250
+ // Retirement signal when source is 'rule'.
251
+ ruleId: z2.string().min(1).nullable().optional()
252
+ });
253
+ var findingLabelSchema = z2.object({ label: z2.enum(["right", "wrong"]) });
254
+ var reviewFindingSchema = z2.object({
255
+ title: z2.string().max(100),
256
+ body: z2.string().min(1),
257
+ confidence_score: z2.number().min(0).max(1).optional(),
258
+ priority: z2.number().int().min(0).max(4).optional(),
259
+ evidence: z2.string().optional(),
260
+ // `unknown`, not `string` to prevent file discard; toClaimType coerces.
261
+ claim_type: z2.unknown().optional(),
262
+ code_location: z2.object({
263
+ absolute_file_path: z2.string(),
264
+ line_range: z2.object({
265
+ start: z2.number().int().positive(),
266
+ end: z2.number().int().positive()
267
+ }).optional(),
268
+ line: z2.number().int().positive().optional()
269
+ }),
270
+ code_suggestion: z2.string().optional()
271
+ });
272
+ var fileReviewModelOutputSchema = z2.object({
273
+ findings: z2.array(reviewFindingSchema),
274
+ overall_correctness: z2.string().optional().default(DEFAULT_OVERALL_CORRECTNESS),
275
+ overall_explanation: z2.string().optional().default(DEFAULT_OVERALL_EXPLANATION),
276
+ overall_confidence_score: z2.number().min(0).max(1).optional()
277
+ });
278
+ var batchReviewModelOutputSchema = z2.object({
279
+ files: z2.array(
280
+ z2.object({
281
+ absolute_file_path: z2.string(),
282
+ findings: z2.array(reviewFindingSchema),
283
+ overall_correctness: z2.string().optional().default(DEFAULT_OVERALL_CORRECTNESS),
284
+ overall_explanation: z2.string().optional().default(DEFAULT_OVERALL_EXPLANATION),
285
+ overall_confidence_score: z2.number().min(0).max(1).optional()
286
+ })
287
+ ).min(1),
288
+ overall_confidence_score: z2.number().min(0).max(1).optional()
289
+ });
290
+ var reviewJobMessageSchema = z2.object({
291
+ jobId: z2.uuid().optional(),
292
+ deliveryId: z2.string().min(1),
293
+ phase: z2.enum(["prepare", "review", "finalize"]).optional(),
294
+ eventName: z2.string().min(1).optional(),
295
+ payload: z2.unknown().optional(),
296
+ installationId: z2.string().min(1).optional(),
297
+ owner: z2.string().min(1).optional(),
298
+ repo: z2.string().min(1).optional(),
299
+ prNumber: z2.number().int().positive().optional(),
300
+ commitSha: z2.string().min(1).optional(),
301
+ trigger: z2.enum(reviewTriggers).optional(),
302
+ requestId: z2.string().optional(),
303
+ // Injected by workflow to bind to job row.
304
+ workflowInstanceId: z2.string().optional(),
305
+ // Forces a fresh instance keyed on deliveryId.
306
+ forceFreshInstance: z2.boolean().optional()
307
+ }).superRefine((message, ctx) => {
308
+ if (message.jobId || message.eventName) {
309
+ return;
310
+ }
311
+ ctx.addIssue({
312
+ code: "custom",
313
+ message: "Queue message must include either jobId or eventName.",
314
+ path: ["jobId"]
315
+ });
316
+ });
317
+ var jobSummarySchema = z2.object({
318
+ id: z2.uuid(),
319
+ workflowInstanceId: z2.string().nullable().optional(),
320
+ owner: z2.string(),
321
+ repo: z2.string(),
322
+ installationId: z2.string(),
323
+ prNumber: z2.number().int(),
324
+ prTitle: z2.string().nullable(),
325
+ prAuthor: z2.string().nullable(),
326
+ commitSha: z2.string(),
327
+ trigger: z2.enum(reviewTriggers),
328
+ status: z2.enum(jobStatuses),
329
+ verdict: z2.enum(reviewVerdicts).nullable(),
330
+ fileCount: z2.number().int(),
331
+ commentCount: z2.number().int(),
332
+ totalInputTokens: z2.number().int(),
333
+ totalOutputTokens: z2.number().int(),
334
+ createdAt: dateStringSchema,
335
+ updatedAt: dateStringSchema,
336
+ nextRetryAt: dateStringSchema.nullable().optional(),
337
+ startedAt: dateStringSchema.nullable(),
338
+ finishedAt: dateStringSchema.nullable(),
339
+ errorMessage: z2.string().nullable(),
340
+ overallConfidenceScore: z2.number().nullable().optional(),
341
+ overallCorrectness: z2.string().nullable().optional(),
342
+ steps: z2.array(jobStepSchema).default([]),
343
+ checkRunId: coerceNumberSchema.nullable().optional(),
344
+ configSnapshot: repoConfigSchema.nullable().optional(),
345
+ retryOfJobId: z2.uuid().nullable().optional()
346
+ });
347
+ var jobsQuerySchema = z2.object({
348
+ owner: z2.string().optional(),
349
+ repo: z2.string().optional(),
350
+ prNumber: z2.preprocess(
351
+ (v) => v === void 0 || v === "" ? void 0 : Number(v),
352
+ z2.number().int().positive().optional()
353
+ ),
354
+ status: z2.enum(jobStatuses).optional(),
355
+ verdict: z2.enum(reviewVerdicts).optional(),
356
+ search: z2.string().optional(),
357
+ limit: z2.preprocess((v) => Number(v), z2.number().int().min(1).max(100)).default(20),
358
+ offset: z2.preprocess((v) => Number(v), z2.number().int().min(0)).default(0)
359
+ });
360
+ var fileReviewRecordSchema = z2.object({
361
+ id: z2.uuid(),
362
+ jobId: z2.uuid(),
363
+ filePath: z2.string(),
364
+ fileStatus: z2.enum(fileStatuses),
365
+ modelUsed: z2.string(),
366
+ // Nullable, not just optional to prevent getJobDetail from throwing.
367
+ modelProvider: z2.string().nullable().optional(),
368
+ diffLineCount: z2.number().int().nullable(),
369
+ diffInput: z2.string().nullable(),
370
+ rawAiOutput: z2.string().nullable(),
371
+ parsedComments: z2.array(parsedReviewCommentSchema),
372
+ inputTokens: z2.number().int().nullable(),
373
+ outputTokens: z2.number().int().nullable(),
374
+ durationMs: z2.number().int().nullable(),
375
+ verdict: z2.enum(reviewVerdicts).nullable(),
376
+ fileSummary: z2.string().nullable(),
377
+ overallCorrectness: z2.string().nullable().optional(),
378
+ confidenceScore: z2.number().nullable().optional(),
379
+ batchSize: z2.number().int().nullable().optional(),
380
+ withheldCounts: z2.object({ evidence: z2.number().int(), claimDenied: z2.number().int() }).partial().nullable().optional(),
381
+ errorMessage: z2.string().nullable(),
382
+ createdAt: dateStringSchema
383
+ });
384
+ var jobDetailSchema = jobSummarySchema.extend({
385
+ baseSha: z2.string(),
386
+ headRef: z2.string().nullable(),
387
+ baseRef: z2.string().nullable(),
388
+ summaryMarkdown: z2.string().nullable(),
389
+ configSnapshot: repoConfigSchema.nullable(),
390
+ reviewId: coerceNumberSchema.nullable(),
391
+ retryOfJobId: z2.uuid().nullable(),
392
+ summaryModel: z2.string().nullable(),
393
+ files: z2.array(fileReviewRecordSchema)
394
+ });
395
+ var repoConfigRecordSchema = z2.object({
396
+ installationId: z2.string(),
397
+ owner: z2.string(),
398
+ repo: z2.string(),
399
+ parsedJson: repoConfigSchema,
400
+ updatedAt: dateStringSchema,
401
+ lastJobCreatedAt: dateStringSchema.nullable(),
402
+ lastJobVerdict: z2.enum(reviewVerdicts).nullable(),
403
+ mainModel: z2.string().nullable(),
404
+ fallbackModels: z2.array(z2.string()).nullable(),
405
+ sizeOverrides: z2.any().nullable(),
406
+ enabled: z2.boolean()
407
+ });
408
+ var statsSchema = z2.object({
409
+ totals: z2.object({
410
+ jobs: z2.number().int(),
411
+ inputTokens: z2.number().int(),
412
+ outputTokens: z2.number().int(),
413
+ comments: z2.number().int()
414
+ }),
415
+ trend: z2.array(
416
+ z2.object({
417
+ day: z2.string(),
418
+ /** Last day covered by the bucket (equal to `day` when bucketing is daily). */
419
+ endDay: z2.string(),
420
+ jobs: z2.number().int(),
421
+ inputTokens: z2.number().int(),
422
+ outputTokens: z2.number().int(),
423
+ comments: z2.number().int()
424
+ })
425
+ ),
426
+ /** Days per trend point. */
427
+ trendBucketDays: z2.number().int().positive(),
428
+ verdicts: z2.array(
429
+ z2.object({
430
+ verdict: z2.enum(reviewVerdicts).nullable(),
431
+ count: z2.number().int()
432
+ })
433
+ ),
434
+ models: z2.array(
435
+ z2.object({
436
+ modelUsed: z2.string(),
437
+ provider: z2.string().optional(),
438
+ calls: z2.number().int(),
439
+ inputTokens: z2.number().int(),
440
+ outputTokens: z2.number().int()
441
+ })
442
+ ),
443
+ topRepos: z2.array(
444
+ z2.object({
445
+ owner: z2.string(),
446
+ repo: z2.string(),
447
+ jobs: z2.number().int()
448
+ })
449
+ ),
450
+ statuses: z2.array(
451
+ z2.object({
452
+ status: z2.enum(jobStatuses),
453
+ count: z2.number().int()
454
+ })
455
+ ),
456
+ triggers: z2.array(
457
+ z2.object({
458
+ trigger: z2.enum(reviewTriggers),
459
+ count: z2.number().int()
460
+ })
461
+ ),
462
+ severities: z2.array(
463
+ z2.object({
464
+ severity: z2.enum(reviewSeverities),
465
+ count: z2.number().int()
466
+ })
467
+ ),
468
+ categories: z2.array(
469
+ z2.object({
470
+ category: z2.enum(reviewCategories),
471
+ count: z2.number().int()
472
+ })
473
+ ),
474
+ performance: z2.object({
475
+ avgDurationMs: z2.number().nullable(),
476
+ p95DurationMs: z2.number().nullable(),
477
+ avgConfidence: z2.number().nullable()
478
+ })
479
+ });
480
+ var llmProviderSchema = z2.object({
481
+ id: z2.uuid(),
482
+ name: z2.string(),
483
+ apiFormat: z2.enum(llmApiFormats),
484
+ baseUrl: z2.url().nullable(),
485
+ enabled: z2.boolean(),
486
+ hasApiKey: z2.boolean(),
487
+ createdAt: dateStringSchema,
488
+ updatedAt: dateStringSchema
489
+ });
490
+ var modelConfigSchema = z2.object({
491
+ modelId: z2.string(),
492
+ providerId: z2.uuid(),
493
+ providerName: z2.string(),
494
+ apiFormat: z2.enum(llmApiFormats),
495
+ modelName: z2.string(),
496
+ updatedAt: dateStringSchema
497
+ });
498
+ var reviewSettingsSchema = z2.object({
499
+ concurrencyLevel: z2.enum(reviewConcurrencyLevels).default("medium"),
500
+ maxComments: z2.union([z2.literal(5), z2.literal(10), z2.literal(15), z2.literal(20)]).default(10),
501
+ // Instance-wide, shared budget and limit.
502
+ maxFiles: z2.number().int().min(reviewMaxFilesRange.min).max(reviewMaxFilesRange.max).default(reviewMaxFilesRange.default)
503
+ });
504
+ export {
505
+ CLAIM_TYPE_CATEGORY,
506
+ CLAIM_TYPE_DECIDABILITY,
507
+ DEFAULT_DENIED_CLAIM_TYPES,
508
+ DEFAULT_SHADOW_RULE_IDS,
509
+ DEPRECATED_MODEL_ALIASES,
510
+ KIMI_K2_5_MODEL,
511
+ KIMI_K2_6_MODEL,
512
+ REPO_CONFIG_CACHE_VERSION,
513
+ REVIEW_CONCURRENCY_LIMITS,
514
+ batchReviewModelOutputSchema,
515
+ claimTypes,
516
+ defaultRepoConfig,
517
+ fileReviewModelOutputSchema,
518
+ fileStatuses,
519
+ findingDispositions,
520
+ findingLabelSchema,
521
+ jobDetailSchema,
522
+ jobStatuses,
523
+ jobStepSchema,
524
+ jobSummarySchema,
525
+ jobsQuerySchema,
526
+ llmApiFormats,
527
+ llmProviderSchema,
528
+ modelConfigSchema,
529
+ normalizeModelId,
530
+ normalizeRepoConfig,
531
+ normalizeRepoModelConfig,
532
+ parsedReviewCommentSchema,
533
+ repoConfigRecordSchema,
534
+ repoConfigSchema,
535
+ reviewCategories,
536
+ reviewConcurrencyLevels,
537
+ reviewConfigSchema,
538
+ reviewJobMessageSchema,
539
+ reviewMaxCommentsOptions,
540
+ reviewMaxFilesRange,
541
+ reviewSettingsSchema,
542
+ reviewSeverities,
543
+ reviewTriggers,
544
+ reviewVerdicts,
545
+ statsSchema,
546
+ toClaimType
547
+ };
548
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schema.ts","../src/schema-enums.ts","../src/schema-claims.ts","../src/schema-repo-config.ts","../src/constants.ts"],"sourcesContent":["import { z } from 'zod';\nimport {\n reviewSeverities,\n reviewConcurrencyLevels,\n type ReviewConcurrencyLevel,\n REVIEW_CONCURRENCY_LIMITS,\n reviewMaxCommentsOptions,\n reviewMaxFilesRange,\n} from './review-limits';\nimport {\n reviewTriggers,\n jobStatuses,\n fileStatuses,\n reviewVerdicts,\n reviewCategories,\n llmApiFormats,\n} from './schema-enums';\nimport {\n claimTypes,\n type ClaimType,\n CLAIM_TYPE_CATEGORY,\n toClaimType,\n CLAIM_TYPE_DECIDABILITY,\n DEFAULT_DENIED_CLAIM_TYPES,\n DEFAULT_SHADOW_RULE_IDS,\n findingDispositions,\n type FindingDisposition,\n} from './schema-claims';\nimport {\n reviewConfigSchema,\n repoConfigSchema,\n type RepoConfig,\n normalizeModelId,\n normalizeRepoModelConfig,\n normalizeRepoConfig,\n defaultRepoConfig,\n} from './schema-repo-config';\nimport {\n KIMI_K2_5_MODEL,\n KIMI_K2_6_MODEL,\n DEPRECATED_MODEL_ALIASES,\n DEFAULT_OVERALL_CORRECTNESS,\n DEFAULT_OVERALL_EXPLANATION,\n REPO_CONFIG_CACHE_VERSION,\n} from './constants';\n\n// Re-exported for server use; client imports directly to keep zod out of browser bundle.\nexport {\n reviewSeverities,\n reviewConcurrencyLevels,\n type ReviewConcurrencyLevel,\n REVIEW_CONCURRENCY_LIMITS,\n reviewMaxCommentsOptions,\n reviewMaxFilesRange,\n};\nexport {\n reviewTriggers,\n jobStatuses,\n fileStatuses,\n reviewVerdicts,\n reviewCategories,\n llmApiFormats,\n};\nexport {\n claimTypes,\n type ClaimType,\n CLAIM_TYPE_CATEGORY,\n toClaimType,\n CLAIM_TYPE_DECIDABILITY,\n DEFAULT_DENIED_CLAIM_TYPES,\n DEFAULT_SHADOW_RULE_IDS,\n findingDispositions,\n type FindingDisposition,\n};\nexport {\n reviewConfigSchema,\n repoConfigSchema,\n type RepoConfig,\n normalizeModelId,\n normalizeRepoModelConfig,\n normalizeRepoConfig,\n defaultRepoConfig,\n};\nexport {\n KIMI_K2_5_MODEL,\n KIMI_K2_6_MODEL,\n DEPRECATED_MODEL_ALIASES,\n REPO_CONFIG_CACHE_VERSION,\n};\n\nconst dateStringSchema = z.union([z.string(), z.date()]).transform((d) => (d instanceof Date ? d.toISOString() : d));\nconst coerceNumberSchema = z.coerce.number();\n\nexport const jobStepSchema = z.object({\n name: z.string(),\n status: z.enum(['pending', 'running', 'done', 'failed']),\n startedAt: dateStringSchema.nullable(),\n finishedAt: dateStringSchema.nullable(),\n error: z.string().nullable().optional(),\n});\n\nexport const parsedReviewCommentSchema = z.object({\n path: z.string().min(1),\n line: z.number().int().positive().nullable().optional(),\n position: z.number().int().positive().nullable().optional(),\n severity: z.enum(reviewSeverities),\n category: z.enum(reviewCategories).default('quality'),\n title: z.string().min(1),\n body: z.string().min(1),\n codeSuggestion: z.string().min(1).nullable().optional(),\n confidenceScore: z.number().min(0).max(1).nullable().optional(),\n // Verbatim line the finding is about, proving the claim is grounded in the diff.\n evidence: z.string().min(1).nullable().optional(),\n fingerprint: z.string().min(1).nullable().optional(),\n // Hash of anchored line content; a change means the finding is raised again.\n anchorHash: z.string().min(1).nullable().optional(),\n posted: z.boolean().nullable().optional(),\n // Never fold into title; format changes reset suppression and unmatch dismissals.\n claimType: z.enum(claimTypes).nullable().optional(),\n contextSnippet: z.string().nullable().optional(),\n disposition: z.enum(findingDispositions).nullable().optional(),\n verifyReason: z.string().nullable().optional(),\n humanLabel: z.enum(['marked_right', 'marked_wrong']).nullable().optional(),\n // Title-independent identity for suppression.\n fingerprintV2: z.string().min(1).nullable().optional(),\n // Absent means 'llm'. Always test `=== 'rule'` positively.\n source: z.enum(['llm', 'rule']).nullable().optional(),\n // Retirement signal when source is 'rule'.\n ruleId: z.string().min(1).nullable().optional(),\n});\n\nexport const findingLabelSchema = z.object({ label: z.enum(['right', 'wrong']) });\n\nconst reviewFindingSchema = z.object({\n title: z.string().max(100),\n body: z.string().min(1),\n confidence_score: z.number().min(0).max(1).optional(),\n priority: z.number().int().min(0).max(4).optional(),\n evidence: z.string().optional(),\n // `unknown`, not `string` to prevent file discard; toClaimType coerces.\n claim_type: z.unknown().optional(),\n code_location: z.object({\n absolute_file_path: z.string(),\n line_range: z.object({\n start: z.number().int().positive(),\n end: z.number().int().positive(),\n }).optional(),\n line: z.number().int().positive().optional(),\n }),\n code_suggestion: z.string().optional(),\n});\n\nexport const fileReviewModelOutputSchema = z.object({\n findings: z.array(reviewFindingSchema),\n overall_correctness: z.string().optional().default(DEFAULT_OVERALL_CORRECTNESS),\n overall_explanation: z.string().optional().default(DEFAULT_OVERALL_EXPLANATION),\n overall_confidence_score: z.number().min(0).max(1).optional(),\n});\n\n// One entry per packed file. `.min(1)` throws on empty response.\nexport const batchReviewModelOutputSchema = z.object({\n files: z.array(\n z.object({\n absolute_file_path: z.string(),\n findings: z.array(reviewFindingSchema),\n overall_correctness: z.string().optional().default(DEFAULT_OVERALL_CORRECTNESS),\n overall_explanation: z.string().optional().default(DEFAULT_OVERALL_EXPLANATION),\n overall_confidence_score: z.number().min(0).max(1).optional(),\n }),\n ).min(1),\n overall_confidence_score: z.number().min(0).max(1).optional(),\n});\n\nexport const reviewJobMessageSchema = z.object({\n jobId: z.uuid().optional(),\n deliveryId: z.string().min(1),\n phase: z.enum(['prepare', 'review', 'finalize']).optional(),\n eventName: z.string().min(1).optional(),\n payload: z.unknown().optional(),\n installationId: z.string().min(1).optional(),\n owner: z.string().min(1).optional(),\n repo: z.string().min(1).optional(),\n prNumber: z.number().int().positive().optional(),\n commitSha: z.string().min(1).optional(),\n trigger: z.enum(reviewTriggers).optional(),\n requestId: z.string().optional(),\n // Injected by workflow to bind to job row.\n workflowInstanceId: z.string().optional(),\n // Forces a fresh instance keyed on deliveryId.\n forceFreshInstance: z.boolean().optional(),\n}).superRefine((message, ctx) => {\n if (message.jobId || message.eventName) {\n return;\n }\n\n ctx.addIssue({\n code: 'custom',\n message: 'Queue message must include either jobId or eventName.',\n path: ['jobId'],\n });\n});\n\nexport const jobSummarySchema = z.object({\n id: z.uuid(),\n workflowInstanceId: z.string().nullable().optional(),\n owner: z.string(),\n repo: z.string(),\n installationId: z.string(),\n prNumber: z.number().int(),\n prTitle: z.string().nullable(),\n prAuthor: z.string().nullable(),\n commitSha: z.string(),\n trigger: z.enum(reviewTriggers),\n status: z.enum(jobStatuses),\n verdict: z.enum(reviewVerdicts).nullable(),\n fileCount: z.number().int(),\n commentCount: z.number().int(),\n totalInputTokens: z.number().int(),\n totalOutputTokens: z.number().int(),\n createdAt: dateStringSchema,\n updatedAt: dateStringSchema,\n nextRetryAt: dateStringSchema.nullable().optional(),\n startedAt: dateStringSchema.nullable(),\n finishedAt: dateStringSchema.nullable(),\n errorMessage: z.string().nullable(),\n overallConfidenceScore: z.number().nullable().optional(),\n overallCorrectness: z.string().nullable().optional(),\n steps: z.array(jobStepSchema).default([]),\n checkRunId: coerceNumberSchema.nullable().optional(),\n configSnapshot: repoConfigSchema.nullable().optional(),\n retryOfJobId: z.uuid().nullable().optional(),\n});\n\nexport const jobsQuerySchema = z.object({\n owner: z.string().optional(),\n repo: z.string().optional(),\n prNumber: z.preprocess(\n (v) => (v === undefined || v === '' ? undefined : Number(v)),\n z.number().int().positive().optional(),\n ),\n status: z.enum(jobStatuses).optional(),\n verdict: z.enum(reviewVerdicts).optional(),\n search: z.string().optional(),\n limit: z.preprocess((v) => Number(v), z.number().int().min(1).max(100)).default(20),\n offset: z.preprocess((v) => Number(v), z.number().int().min(0)).default(0),\n});\n\nexport type JobStep = z.infer<typeof jobStepSchema>;\n\nconst fileReviewRecordSchema = z.object({\n id: z.uuid(),\n jobId: z.uuid(),\n filePath: z.string(),\n fileStatus: z.enum(fileStatuses),\n modelUsed: z.string(),\n // Nullable, not just optional to prevent getJobDetail from throwing.\n modelProvider: z.string().nullable().optional(),\n diffLineCount: z.number().int().nullable(),\n diffInput: z.string().nullable(),\n rawAiOutput: z.string().nullable(),\n parsedComments: z.array(parsedReviewCommentSchema),\n inputTokens: z.number().int().nullable(),\n outputTokens: z.number().int().nullable(),\n durationMs: z.number().int().nullable(),\n verdict: z.enum(reviewVerdicts).nullable(),\n fileSummary: z.string().nullable(),\n overallCorrectness: z.string().nullable().optional(),\n confidenceScore: z.number().nullable().optional(),\n batchSize: z.number().int().nullable().optional(),\n withheldCounts: z\n .object({ evidence: z.number().int(), claimDenied: z.number().int() })\n .partial()\n .nullable()\n .optional(),\n errorMessage: z.string().nullable(),\n createdAt: dateStringSchema,\n});\n\nexport const jobDetailSchema = jobSummarySchema.extend({\n baseSha: z.string(),\n headRef: z.string().nullable(),\n baseRef: z.string().nullable(),\n summaryMarkdown: z.string().nullable(),\n configSnapshot: repoConfigSchema.nullable(),\n reviewId: coerceNumberSchema.nullable(),\n retryOfJobId: z.uuid().nullable(),\n summaryModel: z.string().nullable(),\n files: z.array(fileReviewRecordSchema),\n});\n\nexport const repoConfigRecordSchema = z.object({\n installationId: z.string(),\n owner: z.string(),\n repo: z.string(),\n parsedJson: repoConfigSchema,\n updatedAt: dateStringSchema,\n lastJobCreatedAt: dateStringSchema.nullable(),\n lastJobVerdict: z.enum(reviewVerdicts).nullable(),\n mainModel: z.string().nullable(),\n fallbackModels: z.array(z.string()).nullable(),\n sizeOverrides: z.any().nullable(),\n enabled: z.boolean(),\n});\n\nexport const statsSchema = z.object({\n totals: z.object({\n jobs: z.number().int(),\n inputTokens: z.number().int(),\n outputTokens: z.number().int(),\n comments: z.number().int(),\n }),\n trend: z.array(\n z.object({\n day: z.string(),\n /** Last day covered by the bucket (equal to `day` when bucketing is daily). */\n endDay: z.string(),\n jobs: z.number().int(),\n inputTokens: z.number().int(),\n outputTokens: z.number().int(),\n comments: z.number().int(),\n }),\n ),\n /** Days per trend point. */\n trendBucketDays: z.number().int().positive(),\n verdicts: z.array(\n z.object({\n verdict: z.enum(reviewVerdicts).nullable(),\n count: z.number().int(),\n }),\n ),\n models: z.array(\n z.object({\n modelUsed: z.string(),\n provider: z.string().optional(),\n calls: z.number().int(),\n inputTokens: z.number().int(),\n outputTokens: z.number().int(),\n }),\n ),\n topRepos: z.array(\n z.object({\n owner: z.string(),\n repo: z.string(),\n jobs: z.number().int(),\n }),\n ),\n statuses: z.array(\n z.object({\n status: z.enum(jobStatuses),\n count: z.number().int(),\n }),\n ),\n triggers: z.array(\n z.object({\n trigger: z.enum(reviewTriggers),\n count: z.number().int(),\n }),\n ),\n severities: z.array(\n z.object({\n severity: z.enum(reviewSeverities),\n count: z.number().int(),\n }),\n ),\n categories: z.array(\n z.object({\n category: z.enum(reviewCategories),\n count: z.number().int(),\n }),\n ),\n performance: z.object({\n avgDurationMs: z.number().nullable(),\n p95DurationMs: z.number().nullable(),\n avgConfidence: z.number().nullable(),\n }),\n});\n\nexport type ParsedReviewComment = z.infer<typeof parsedReviewCommentSchema>;\nexport type ReviewJobMessage = z.infer<typeof reviewJobMessageSchema>;\nexport type JobSummary = z.infer<typeof jobSummarySchema>;\nexport type FileReviewRecord = z.infer<typeof fileReviewRecordSchema>;\nexport type JobDetail = z.infer<typeof jobDetailSchema>;\nexport type RepoConfigRecord = z.infer<typeof repoConfigRecordSchema>;\n\nexport const llmProviderSchema = z.object({\n id: z.uuid(),\n name: z.string(),\n apiFormat: z.enum(llmApiFormats),\n baseUrl: z.url().nullable(),\n enabled: z.boolean(),\n hasApiKey: z.boolean(),\n createdAt: dateStringSchema,\n updatedAt: dateStringSchema,\n});\n\nexport const modelConfigSchema = z.object({\n modelId: z.string(),\n providerId: z.uuid(),\n providerName: z.string(),\n apiFormat: z.enum(llmApiFormats),\n modelName: z.string(),\n updatedAt: dateStringSchema,\n});\n\nexport type LlmApiFormat = z.infer<typeof llmProviderSchema>['apiFormat'];\nexport type LlmProvider = z.infer<typeof llmProviderSchema>;\nexport type ModelConfig = z.infer<typeof modelConfigSchema>;\n\nexport type LlmProviderSecret = LlmProvider & {\n encryptedApiKey: string | null;\n};\n\nexport type ResolvedModelConfig = ModelConfig & {\n providerEnabled: boolean;\n baseUrl: string | null;\n encryptedApiKey: string | null;\n};\nexport type StatsPayload = z.infer<typeof statsSchema>;\n\nexport const reviewSettingsSchema = z.object({\n concurrencyLevel: z.enum(reviewConcurrencyLevels).default('medium'),\n maxComments: z.union([z.literal(5), z.literal(10), z.literal(15), z.literal(20)]).default(10),\n // Instance-wide, shared budget and limit.\n maxFiles: z\n .number()\n .int()\n .min(reviewMaxFilesRange.min)\n .max(reviewMaxFilesRange.max)\n .default(reviewMaxFilesRange.default),\n});\nexport type ReviewSettings = z.infer<typeof reviewSettingsSchema>;\n","// Leaf module: plain string-literal arrays shared by schema.ts, schema-claims.ts, and\n// schema-repo-config.ts. Kept dependency-free so none of those three risk an import cycle.\nexport const reviewTriggers = ['auto', 'mention', 'retry'] as const;\nexport const jobStatuses = ['queued', 'running', 'done', 'failed', 'superseded', 'cancelled', 'stopped'] as const;\nexport const fileStatuses = ['pending', 'done', 'skipped', 'failed'] as const;\nexport const reviewVerdicts = ['approve', 'comment'] as const;\nexport const reviewCategories = ['security', 'bugs', 'performance', 'correctness', 'quality'] as const;\nexport const llmApiFormats = ['openai', 'anthropic', 'gemini', 'cloudflare-workers-ai', 'vertex'] as const;\n","import { reviewCategories } from './schema-enums';\n\n// Enforced, not just labelled; drops whole types and filters candidates.\nexport const claimTypes = [\n 'react_hook_missing_deps',\n 'react_missing_cleanup',\n 'missing_await',\n 'unhandled_promise_rejection',\n 'resource_leak',\n 'null_or_undefined_deref',\n 'sql_injection',\n 'unsafe_dom_sink',\n 'unsafe_dynamic_code',\n 'insecure_randomness',\n 'hardcoded_secret',\n 'redos_regex',\n 'swallowed_error',\n 'mutable_default_arg',\n 'destructive_migration',\n 'external_version_claim',\n 'other',\n] as const;\n\nexport type ClaimType = typeof claimTypes[number];\n\nexport const CLAIM_TYPE_CATEGORY: Record<ClaimType, typeof reviewCategories[number]> = {\n sql_injection: 'security',\n unsafe_dom_sink: 'security',\n unsafe_dynamic_code: 'security',\n insecure_randomness: 'security',\n hardcoded_secret: 'security',\n missing_await: 'bugs',\n unhandled_promise_rejection: 'bugs',\n null_or_undefined_deref: 'bugs',\n react_hook_missing_deps: 'bugs',\n swallowed_error: 'bugs',\n mutable_default_arg: 'bugs',\n resource_leak: 'performance',\n redos_regex: 'performance',\n destructive_migration: 'correctness',\n react_missing_cleanup: 'correctness',\n external_version_claim: 'correctness',\n other: 'quality',\n};\n\nexport function toClaimType(value: unknown): ClaimType {\n return (claimTypes as readonly string[]).includes(value as string) ? (value as ClaimType) : 'other';\n}\n\n// Decidable from diff hunk alone? A Record, so new types are COMPILE ERRORS until classified.\nexport const CLAIM_TYPE_DECIDABILITY: Record<ClaimType, 'diff_local' | 'needs_whole_file' | 'needs_external_facts'> = {\n sql_injection: 'diff_local',\n unsafe_dom_sink: 'diff_local',\n unsafe_dynamic_code: 'diff_local',\n insecure_randomness: 'diff_local',\n hardcoded_secret: 'diff_local',\n mutable_default_arg: 'diff_local',\n destructive_migration: 'diff_local',\n swallowed_error: 'diff_local',\n unhandled_promise_rejection: 'diff_local',\n missing_await: 'diff_local',\n other: 'diff_local',\n\n react_hook_missing_deps: 'needs_whole_file',\n react_missing_cleanup: 'needs_whole_file',\n resource_leak: 'needs_whole_file',\n redos_regex: 'needs_whole_file',\n\n null_or_undefined_deref: 'needs_whole_file',\n\n external_version_claim: 'needs_external_facts',\n};\n\n// Derived from table: anything undecidable from the diff.\nexport const DEFAULT_DENIED_CLAIM_TYPES: ClaimType[] = claimTypes.filter(\n (type) => CLAIM_TYPE_DECIDABILITY[type] !== 'diff_local',\n);\n\n// Generate candidates, never post.\nexport const DEFAULT_SHADOW_RULE_IDS = [\n 'empty-catch',\n 'debugger-statement',\n 'focused-test',\n 'dynamic-code-exec',\n 'dynamic-html-sink',\n 'mutable-default-arg',\n 'destructive-migration',\n 'hardcoded-secret',\n 'insecure-random',\n] as const;\n\n// How finding ended its life; READ-VALIDATING. Retire by marking historical.\nexport const findingDispositions = [\n 'posted',\n 'severity',\n 'confidence',\n 'suppression',\n 'dedupe',\n 'verify',\n 'verify_unanswered',\n 'rule_unverified',\n 'cap',\n 'unverifiable_passthrough',\n] as const;\n\nexport type FindingDisposition = typeof findingDispositions[number];\n","import { z } from 'zod';\nimport { reviewSeverities } from './review-limits';\nimport { reviewCategories } from './schema-enums';\nimport { claimTypes, DEFAULT_DENIED_CLAIM_TYPES, DEFAULT_SHADOW_RULE_IDS } from './schema-claims';\nimport {\n DEFAULT_REVIEW_EVENTS,\n DEFAULT_MENTION_TRIGGER,\n DEFAULT_SKIP_FILES,\n DEFAULT_EXEC_FILE_TYPES,\n DEFAULT_EXEC_COMMAND,\n DEFAULT_LABELS,\n DEPRECATED_MODEL_ALIASES,\n} from './constants';\n\nconst labelsSchema = z.union([\n z.literal(false),\n z.object({\n p1: z.string().min(1),\n p2: z.string().min(1),\n p3: z.string().min(1),\n }),\n]);\n\nexport const reviewConfigSchema = z.object({\n on: z.array(z.enum(['opened', 'synchronize', 'ready_for_review', 'reopened', 'closed'])).default([...DEFAULT_REVIEW_EVENTS]),\n ignore_drafts: z.boolean().default(true),\n mention_trigger: z.union([z.literal(false), z.string().min(1)]).default(DEFAULT_MENTION_TRIGGER),\n skip_files: z\n .array(z.string().min(1))\n .default([...DEFAULT_SKIP_FILES]),\n large_file_threshold_lines: z.number().int().min(1).max(5_000).default(200),\n max_diff_lines_per_file: z.number().int().min(1).max(5_000).default(800),\n batch_small_files: z.boolean().default(true),\n max_total_diff_chars: z.number().int().min(1).max(500_000).default(150_000),\n max_comments: z.number().int().min(1).max(150).default(10),\n min_severity: z.enum(reviewSeverities).default('P3'),\n min_confidence: z.number().min(0).max(1).default(0),\n focus: z.array(z.enum(reviewCategories)).default([...reviewCategories]),\n deny_claim_types: z.array(z.enum(claimTypes)).default([...DEFAULT_DENIED_CLAIM_TYPES]),\n rules: z\n .object({\n enabled: z.boolean().default(true),\n disabled_rule_ids: z.array(z.string().min(1)).default([]),\n shadow_rule_ids: z.array(z.string().min(1)).default([...DEFAULT_SHADOW_RULE_IDS]),\n })\n .default({\n enabled: true,\n disabled_rule_ids: [],\n shadow_rule_ids: [...DEFAULT_SHADOW_RULE_IDS],\n }),\n custom_rules: z.array(z.string().min(1)).default([]),\n labels: labelsSchema.default({ ...DEFAULT_LABELS }),\n exec: z\n .object({\n enabled: z.boolean().default(false),\n on_file_types: z.array(z.string().min(1)).default([...DEFAULT_EXEC_FILE_TYPES]),\n command: z.string().min(1).default(DEFAULT_EXEC_COMMAND),\n })\n .default({\n enabled: false,\n on_file_types: [...DEFAULT_EXEC_FILE_TYPES],\n command: DEFAULT_EXEC_COMMAND,\n }),\n});\n\nexport const DEFAULT_REVIEW_CONFIG = reviewConfigSchema.parse({});\nexport const DEFAULT_MODEL_CONFIG = { main: null, fallbacks: [], size_overrides: [] };\n\nexport const repoConfigSchema = z.object({\n review: reviewConfigSchema.default(DEFAULT_REVIEW_CONFIG),\n model: z\n .object({\n main: z.string().nullable().default(null),\n fallbacks: z.array(z.string()).nullable().default([]),\n size_overrides: z\n .array(\n z.object({\n max_lines: z.number().int().positive(),\n model: z.string(),\n fallbacks: z.array(z.string()).optional(),\n }),\n )\n .nullable()\n .optional(),\n })\n .default(DEFAULT_MODEL_CONFIG),\n});\n\nexport type RepoConfig = z.infer<typeof repoConfigSchema>;\n\nexport function normalizeModelId(model: string) {\n return DEPRECATED_MODEL_ALIASES[model] ?? model;\n}\n\nexport function normalizeRepoModelConfig(model: RepoConfig['model']): RepoConfig['model'] {\n return {\n ...model,\n main: model.main ? normalizeModelId(model.main) : null,\n fallbacks: model.fallbacks === null\n ? null\n : Array.isArray(model.fallbacks)\n ? model.fallbacks.map(normalizeModelId)\n : [],\n size_overrides: model.size_overrides === null || model.size_overrides === undefined\n ? model.size_overrides\n : model.size_overrides.map((tier) => ({\n ...tier,\n model: normalizeModelId(tier.model),\n fallbacks: tier.fallbacks?.map(normalizeModelId),\n })),\n };\n}\n\nexport function normalizeRepoConfig(config: RepoConfig): RepoConfig {\n return {\n ...config,\n model: normalizeRepoModelConfig(config.model),\n };\n}\n\nexport const defaultRepoConfig = repoConfigSchema.parse({});\n","export const DEFAULT_REVIEW_EVENTS = ['opened', 'synchronize', 'ready_for_review', 'reopened'] as const;\nexport const DEFAULT_SKIP_FILES = ['**/*.lock', 'dist/**', 'build/**', '.next/**', '*.generated.*', 'coverage/**'];\nexport const DEFAULT_EXEC_FILE_TYPES = ['.ts', '.tsx', '.js'];\nexport const DEFAULT_EXEC_COMMAND = 'npm run lint && npm run typecheck';\nexport const DEFAULT_MENTION_TRIGGER = '@codra-app';\nexport const DEFAULT_LABELS = {\n p1: 'review: needs-attention',\n p2: 'review: approved',\n p3: 'review: approved',\n};\n\nexport const KIMI_K2_5_MODEL = '@cf/moonshotai/kimi-k2.5';\nexport const KIMI_K2_6_MODEL = '@cf/moonshotai/kimi-k2.6';\nexport const DEPRECATED_MODEL_ALIASES: Record<string, string> = {\n [KIMI_K2_5_MODEL]: KIMI_K2_6_MODEL,\n};\n\nexport const REPO_CONFIG_CACHE_VERSION = 'v7';\n\nexport const DEFAULT_OVERALL_CORRECTNESS = 'patch is correct';\nexport const DEFAULT_OVERALL_EXPLANATION = 'Review completed (partial output).';\n"],"mappings":"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","names":["z","z"]}
@@ -0,0 +1,12 @@
1
+ declare const reviewSeverities: readonly ["P0", "P1", "P2", "P3", "nit"];
2
+ declare const reviewConcurrencyLevels: readonly ["low", "medium", "high", "max"];
3
+ type ReviewConcurrencyLevel = typeof reviewConcurrencyLevels[number];
4
+ declare const REVIEW_CONCURRENCY_LIMITS: Record<ReviewConcurrencyLevel, number>;
5
+ declare const reviewMaxCommentsOptions: readonly [5, 10, 15, 20];
6
+ declare const reviewMaxFilesRange: {
7
+ readonly min: 1;
8
+ readonly max: 500;
9
+ readonly default: 200;
10
+ };
11
+
12
+ export { REVIEW_CONCURRENCY_LIMITS, type ReviewConcurrencyLevel, reviewConcurrencyLevels, reviewMaxCommentsOptions, reviewMaxFilesRange, reviewSeverities };
@@ -0,0 +1,15 @@
1
+ import {
2
+ REVIEW_CONCURRENCY_LIMITS,
3
+ reviewConcurrencyLevels,
4
+ reviewMaxCommentsOptions,
5
+ reviewMaxFilesRange,
6
+ reviewSeverities
7
+ } from "./chunk-WTXH6CHA.js";
8
+ export {
9
+ REVIEW_CONCURRENCY_LIMITS,
10
+ reviewConcurrencyLevels,
11
+ reviewMaxCommentsOptions,
12
+ reviewMaxFilesRange,
13
+ reviewSeverities
14
+ };
15
+ //# sourceMappingURL=review-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}