@codraoss/schema 0.9.4 → 0.9.5
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/api.d.ts +6 -2
- package/dist/api.js +30 -0
- package/dist/api.js.map +1 -1
- package/dist/index.d.ts +39 -4
- package/dist/index.js +42 -5
- package/dist/index.js.map +1 -1
- package/dist/{schema-0fUkjd2C.d.ts → schema-ByVA-xcD.d.ts} +57 -3
- package/package.json +1 -1
package/dist/api.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { J as JobDetail, a as JobSummary, L as LlmProvider, M as ModelConfig, R as RepoConfigRecord, S as StatsPayload } from './schema-
|
|
1
|
+
import { J as JobDetail, a as JobSummary, L as LlmProvider, M as ModelConfig, R as RepoConfigRecord, S as StatsPayload } from './schema-ByVA-xcD.js';
|
|
2
2
|
import 'zod';
|
|
3
3
|
|
|
4
4
|
type AuthSessionUser = {
|
|
@@ -13,8 +13,12 @@ type JobsResponse = {
|
|
|
13
13
|
jobs: JobSummary[];
|
|
14
14
|
total: number;
|
|
15
15
|
};
|
|
16
|
+
declare const apiActions: readonly ["jobs.read", "jobs.retry", "jobs.rerun", "jobs.stop", "jobs.delete", "jobs.label", "repos.read", "repos.install", "repos.sync", "repos.config.write", "models.read", "models.sync", "models.test", "models.provider.create", "models.provider.update", "models.provider.delete", "models.mapping.write", "models.global.write", "settings.read", "settings.write", "stats.read", "account.write", "account.updatesEmail.write", "reviews.enqueue"];
|
|
17
|
+
type KnownApiAction = (typeof apiActions)[number];
|
|
18
|
+
type ApiAction = KnownApiAction | (string & {});
|
|
16
19
|
type AuthSessionResponse = {
|
|
17
20
|
user: AuthSessionUser;
|
|
21
|
+
permissions?: string[];
|
|
18
22
|
};
|
|
19
23
|
type AccountSettings = {
|
|
20
24
|
id: string;
|
|
@@ -68,4 +72,4 @@ type ModelConfigsResponse = {
|
|
|
68
72
|
}>;
|
|
69
73
|
};
|
|
70
74
|
|
|
71
|
-
export type
|
|
75
|
+
export { type AccountResponse, type AccountSettings, type ApiAction, type AuthSessionResponse, type AuthSessionUser, type JobDetailResponse, type JobDiffsResponse, type JobsResponse, type KnownApiAction, type ModelConfigsResponse, type RepoConfigResponse, type RepoConfigsResponse, type RetryJobResponse, type StatsResponse, type SyncReposResponse, type UpdatesEmailResponse, type UpdatesEmailStatus, apiActions };
|
package/dist/api.js
CHANGED
|
@@ -1 +1,31 @@
|
|
|
1
|
+
// src/api.ts
|
|
2
|
+
var apiActions = [
|
|
3
|
+
"jobs.read",
|
|
4
|
+
"jobs.retry",
|
|
5
|
+
"jobs.rerun",
|
|
6
|
+
"jobs.stop",
|
|
7
|
+
"jobs.delete",
|
|
8
|
+
"jobs.label",
|
|
9
|
+
"repos.read",
|
|
10
|
+
"repos.install",
|
|
11
|
+
"repos.sync",
|
|
12
|
+
"repos.config.write",
|
|
13
|
+
"models.read",
|
|
14
|
+
"models.sync",
|
|
15
|
+
"models.test",
|
|
16
|
+
"models.provider.create",
|
|
17
|
+
"models.provider.update",
|
|
18
|
+
"models.provider.delete",
|
|
19
|
+
"models.mapping.write",
|
|
20
|
+
"models.global.write",
|
|
21
|
+
"settings.read",
|
|
22
|
+
"settings.write",
|
|
23
|
+
"stats.read",
|
|
24
|
+
"account.write",
|
|
25
|
+
"account.updatesEmail.write",
|
|
26
|
+
"reviews.enqueue"
|
|
27
|
+
];
|
|
28
|
+
export {
|
|
29
|
+
apiActions
|
|
30
|
+
};
|
|
1
31
|
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/api.ts"],"sourcesContent":["import type { JobDetail, JobSummary, RepoConfigRecord, StatsPayload } from './schema';\n\nexport type AuthSessionUser = {\n githubUserId: number;\n login: string;\n name: string | null;\n avatarUrl: string | null;\n email: string | null;\n signedInAt: string;\n};\n\nexport type JobsResponse = {\n jobs: JobSummary[];\n total: number;\n};\n\nexport const apiActions = [\n 'jobs.read',\n 'jobs.retry',\n 'jobs.rerun',\n 'jobs.stop',\n 'jobs.delete',\n 'jobs.label',\n 'repos.read',\n 'repos.install',\n 'repos.sync',\n 'repos.config.write',\n 'models.read',\n 'models.sync',\n 'models.test',\n 'models.provider.create',\n 'models.provider.update',\n 'models.provider.delete',\n 'models.mapping.write',\n 'models.global.write',\n 'settings.read',\n 'settings.write',\n 'stats.read',\n 'account.write',\n 'account.updatesEmail.write',\n 'reviews.enqueue',\n] as const;\n\nexport type KnownApiAction = (typeof apiActions)[number];\n\n// Open union: consumers can add their own action names while the known list keeps autocomplete.\nexport type ApiAction = KnownApiAction | (string & {});\n\nexport type AuthSessionResponse = {\n user: AuthSessionUser;\n // Omitted, or a '*' entry, means \"allow everything\".\n permissions?: string[];\n};\n\n// Durable account record persisted in Postgres (account_settings).\nexport type AccountSettings = {\n // Stable, unique account id (uuid) - distinct from the GitHub user id.\n id: string;\n githubUserId: number;\n githubUsername: string;\n accountName: string | null;\n accountEmail: string | null;\n // Presentation only (timestamps are always stored UTC); `null` means \"follow the viewer's browser timezone\".\n timezone: string | null;\n};\n\nexport type AccountResponse = {\n account: AccountSettings;\n};\n\nexport type UpdatesEmailStatus = 'pending' | 'subscribed';\n\nexport type UpdatesEmailResponse = {\n status: UpdatesEmailStatus;\n email: string | null;\n updatedAt: string | null;\n};\n\nexport type JobDetailResponse = {\n job: JobDetail;\n};\n\n/** Per-file reconstructed diff/prompt text, fetched on demand (see GET /api/jobs/:id/diffs) --\n diff_input isn't persisted in Postgres, so this comes from KV or a fresh GitHub fetch. Files\n with no entry are unavailable (e.g. the underlying commits are gone). */\nexport type JobDiffsResponse = {\n diffs: Record<string, string>;\n};\n\nexport type RetryJobResponse = {\n job: JobSummary;\n};\n\nexport type RepoConfigsResponse = {\n repos: RepoConfigRecord[];\n};\n\nexport type RepoConfigResponse = {\n repo: RepoConfigRecord;\n};\n\nexport type StatsResponse = {\n stats: StatsPayload;\n};\n\nexport type SyncReposResponse = {\n ok: boolean;\n synced: string[];\n};\n\n\nexport type ModelConfigsResponse = {\n providers: import('./schema').LlmProvider[];\n configs: import('./schema').ModelConfig[];\n syncErrors?: Array<{ providerId: string; providerName: string; error: string }>;\n};\n"],"mappings":";AAgBO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { F as FileReviewRecord, J as JobDetail, b as JobStep, a as JobSummary, c as LlmApiFormat, L as LlmProvider, d as LlmProviderSecret, M as ModelConfig, P as ParsedReviewComment, R as RepoConfigRecord, e as ResolvedModelConfig, f as ReviewJobMessage, g as ReviewSettings, S as StatsPayload, h as batchReviewModelOutputSchema, i as fileReviewModelOutputSchema, j as findingLabelSchema, k as jobDetailSchema, l as jobStepSchema, m as jobSummarySchema, n as jobsQuerySchema, o as llmProviderSchema, p as modelConfigSchema, q as parsedReviewCommentSchema, r as repoConfigRecordSchema, s as reviewJobMessageSchema, t as reviewSettingsSchema, u as statsSchema } from './schema-
|
|
1
|
+
export { F as FileReviewRecord, J as JobDetail, b as JobStep, a as JobSummary, c as LlmApiFormat, L as LlmProvider, d as LlmProviderSecret, M as ModelConfig, P as ParsedReviewComment, R as RepoConfigRecord, e as ResolvedModelConfig, f as ReviewJobMessage, g as ReviewSettings, S as StatsPayload, h as batchReviewModelOutputSchema, i as fileReviewModelOutputSchema, j as findingLabelSchema, k as jobDetailSchema, l as jobStepSchema, m as jobSummarySchema, n as jobsQuerySchema, o as llmProviderSchema, p as modelConfigSchema, q as parsedReviewCommentSchema, r as repoConfigRecordSchema, s as reviewJobMessageSchema, t as reviewSettingsSchema, u as statsSchema } from './schema-ByVA-xcD.js';
|
|
2
2
|
export { REVIEW_CONCURRENCY_LIMITS, ReviewConcurrencyLevel, reviewConcurrencyLevels, reviewMaxCommentsOptions, reviewMaxFilesRange, reviewSeverities } from './review-limits.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
|
|
@@ -33,8 +33,9 @@ declare const reviewConfigSchema: z.ZodObject<{
|
|
|
33
33
|
large_file_threshold_lines: z.ZodDefault<z.ZodNumber>;
|
|
34
34
|
max_diff_lines_per_file: z.ZodDefault<z.ZodNumber>;
|
|
35
35
|
batch_small_files: z.ZodDefault<z.ZodBoolean>;
|
|
36
|
-
max_total_diff_chars: z.ZodDefault<z.ZodNumber>;
|
|
37
36
|
max_comments: z.ZodDefault<z.ZodNumber>;
|
|
37
|
+
review_breadth: z.ZodDefault<z.ZodNumber>;
|
|
38
|
+
full_file_context: z.ZodDefault<z.ZodBoolean>;
|
|
38
39
|
min_severity: z.ZodDefault<z.ZodEnum<{
|
|
39
40
|
P0: "P0";
|
|
40
41
|
P1: "P1";
|
|
@@ -42,6 +43,16 @@ declare const reviewConfigSchema: z.ZodObject<{
|
|
|
42
43
|
P3: "P3";
|
|
43
44
|
nit: "nit";
|
|
44
45
|
}>>;
|
|
46
|
+
language_gates: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
47
|
+
min_severity: z.ZodOptional<z.ZodEnum<{
|
|
48
|
+
P0: "P0";
|
|
49
|
+
P1: "P1";
|
|
50
|
+
P2: "P2";
|
|
51
|
+
P3: "P3";
|
|
52
|
+
nit: "nit";
|
|
53
|
+
}>>;
|
|
54
|
+
min_confidence: z.ZodOptional<z.ZodNumber>;
|
|
55
|
+
}, z.core.$strip>>>;
|
|
45
56
|
min_confidence: z.ZodDefault<z.ZodNumber>;
|
|
46
57
|
focus: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
47
58
|
security: "security";
|
|
@@ -101,8 +112,9 @@ declare const repoConfigSchema: z.ZodObject<{
|
|
|
101
112
|
large_file_threshold_lines: z.ZodDefault<z.ZodNumber>;
|
|
102
113
|
max_diff_lines_per_file: z.ZodDefault<z.ZodNumber>;
|
|
103
114
|
batch_small_files: z.ZodDefault<z.ZodBoolean>;
|
|
104
|
-
max_total_diff_chars: z.ZodDefault<z.ZodNumber>;
|
|
105
115
|
max_comments: z.ZodDefault<z.ZodNumber>;
|
|
116
|
+
review_breadth: z.ZodDefault<z.ZodNumber>;
|
|
117
|
+
full_file_context: z.ZodDefault<z.ZodBoolean>;
|
|
106
118
|
min_severity: z.ZodDefault<z.ZodEnum<{
|
|
107
119
|
P0: "P0";
|
|
108
120
|
P1: "P1";
|
|
@@ -110,6 +122,16 @@ declare const repoConfigSchema: z.ZodObject<{
|
|
|
110
122
|
P3: "P3";
|
|
111
123
|
nit: "nit";
|
|
112
124
|
}>>;
|
|
125
|
+
language_gates: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
126
|
+
min_severity: z.ZodOptional<z.ZodEnum<{
|
|
127
|
+
P0: "P0";
|
|
128
|
+
P1: "P1";
|
|
129
|
+
P2: "P2";
|
|
130
|
+
P3: "P3";
|
|
131
|
+
nit: "nit";
|
|
132
|
+
}>>;
|
|
133
|
+
min_confidence: z.ZodOptional<z.ZodNumber>;
|
|
134
|
+
}, z.core.$strip>>>;
|
|
113
135
|
min_confidence: z.ZodDefault<z.ZodNumber>;
|
|
114
136
|
focus: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
115
137
|
security: "security";
|
|
@@ -162,6 +184,10 @@ declare const repoConfigSchema: z.ZodObject<{
|
|
|
162
184
|
model: z.ZodString;
|
|
163
185
|
fallbacks: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
164
186
|
}, z.core.$strip>>>>;
|
|
187
|
+
secondary: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
188
|
+
model: z.ZodString;
|
|
189
|
+
fallbacks: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
190
|
+
}, z.core.$strip>>>;
|
|
165
191
|
}, z.core.$strip>>;
|
|
166
192
|
}, z.core.$strip>;
|
|
167
193
|
type RepoConfig = z.infer<typeof repoConfigSchema>;
|
|
@@ -177,9 +203,14 @@ declare const defaultRepoConfig: {
|
|
|
177
203
|
large_file_threshold_lines: number;
|
|
178
204
|
max_diff_lines_per_file: number;
|
|
179
205
|
batch_small_files: boolean;
|
|
180
|
-
max_total_diff_chars: number;
|
|
181
206
|
max_comments: number;
|
|
207
|
+
review_breadth: number;
|
|
208
|
+
full_file_context: boolean;
|
|
182
209
|
min_severity: "P0" | "P1" | "P2" | "P3" | "nit";
|
|
210
|
+
language_gates: Record<string, {
|
|
211
|
+
min_severity?: "P0" | "P1" | "P2" | "P3" | "nit" | undefined;
|
|
212
|
+
min_confidence?: number | undefined;
|
|
213
|
+
}>;
|
|
183
214
|
min_confidence: number;
|
|
184
215
|
focus: ("security" | "bugs" | "performance" | "correctness" | "quality")[];
|
|
185
216
|
deny_claim_types: ("react_hook_missing_deps" | "react_missing_cleanup" | "missing_await" | "unhandled_promise_rejection" | "resource_leak" | "null_or_undefined_deref" | "sql_injection" | "unsafe_dom_sink" | "unsafe_dynamic_code" | "insecure_randomness" | "hardcoded_secret" | "redos_regex" | "swallowed_error" | "mutable_default_arg" | "destructive_migration" | "external_version_claim" | "other")[];
|
|
@@ -208,6 +239,10 @@ declare const defaultRepoConfig: {
|
|
|
208
239
|
model: string;
|
|
209
240
|
fallbacks?: string[] | undefined;
|
|
210
241
|
}[] | null | undefined;
|
|
242
|
+
secondary?: {
|
|
243
|
+
model: string;
|
|
244
|
+
fallbacks: string[];
|
|
245
|
+
} | null | undefined;
|
|
211
246
|
};
|
|
212
247
|
};
|
|
213
248
|
|
package/dist/index.js
CHANGED
|
@@ -145,9 +145,23 @@ var reviewConfigSchema = z.object({
|
|
|
145
145
|
large_file_threshold_lines: z.number().int().min(1).max(5e3).default(200),
|
|
146
146
|
max_diff_lines_per_file: z.number().int().min(1).max(5e3).default(800),
|
|
147
147
|
batch_small_files: z.boolean().default(true),
|
|
148
|
-
|
|
148
|
+
// Presentation cap: comments actually posted to the PR. Findings past this are still recorded
|
|
149
|
+
// (disposition 'cap') and shown on the dashboard; nothing upstream of posting should read it.
|
|
149
150
|
max_comments: z.number().int().min(1).max(150).default(10),
|
|
151
|
+
// How many findings the pipeline works with (generator, verifier, dashboard); independent of
|
|
152
|
+
// max_comments so tightening the posted cap no longer quietly shrinks the review itself.
|
|
153
|
+
review_breadth: z.number().int().min(1).max(150).default(25),
|
|
154
|
+
// Off by default: adds a large single file's post-change content as read-only context, costing
|
|
155
|
+
// one extra GitHub subrequest per qualifying file (see FILE_CONTEXT_CHAR_BUDGET).
|
|
156
|
+
full_file_context: z.boolean().default(false),
|
|
150
157
|
min_severity: z.enum(reviewSeverities).default("P3"),
|
|
158
|
+
language_gates: z.record(
|
|
159
|
+
z.string(),
|
|
160
|
+
z.object({
|
|
161
|
+
min_severity: z.enum(reviewSeverities).optional(),
|
|
162
|
+
min_confidence: z.number().min(0).max(1).optional()
|
|
163
|
+
})
|
|
164
|
+
).default({}),
|
|
151
165
|
min_confidence: z.number().min(0).max(1).default(0),
|
|
152
166
|
focus: z.array(z.enum(reviewCategories)).default([...reviewCategories]),
|
|
153
167
|
deny_claim_types: z.array(z.enum(claimTypes)).default([...DEFAULT_DENIED_CLAIM_TYPES]),
|
|
@@ -173,7 +187,7 @@ var reviewConfigSchema = z.object({
|
|
|
173
187
|
})
|
|
174
188
|
});
|
|
175
189
|
var DEFAULT_REVIEW_CONFIG = reviewConfigSchema.parse({});
|
|
176
|
-
var DEFAULT_MODEL_CONFIG = { main: null, fallbacks: [], size_overrides: [] };
|
|
190
|
+
var DEFAULT_MODEL_CONFIG = { main: null, fallbacks: [], size_overrides: [], secondary: null };
|
|
177
191
|
var repoConfigSchema = z.object({
|
|
178
192
|
review: reviewConfigSchema.default(DEFAULT_REVIEW_CONFIG),
|
|
179
193
|
model: z.object({
|
|
@@ -185,7 +199,12 @@ var repoConfigSchema = z.object({
|
|
|
185
199
|
model: z.string(),
|
|
186
200
|
fallbacks: z.array(z.string()).optional()
|
|
187
201
|
})
|
|
188
|
-
).nullable().optional()
|
|
202
|
+
).nullable().optional(),
|
|
203
|
+
// Findings are UNIONED with the primary's, never voted on (F1 0.200 vs 0.149 best-single; agreement is not evidence). Never pair across a capability gap: strong + much weaker measured BELOW strong alone.
|
|
204
|
+
secondary: z.object({
|
|
205
|
+
model: z.string(),
|
|
206
|
+
fallbacks: z.array(z.string()).default([])
|
|
207
|
+
}).nullable().optional()
|
|
189
208
|
}).default(DEFAULT_MODEL_CONFIG)
|
|
190
209
|
});
|
|
191
210
|
function normalizeModelId(model) {
|
|
@@ -200,7 +219,13 @@ function normalizeRepoModelConfig(model) {
|
|
|
200
219
|
...tier,
|
|
201
220
|
model: normalizeModelId(tier.model),
|
|
202
221
|
fallbacks: tier.fallbacks?.map(normalizeModelId)
|
|
203
|
-
}))
|
|
222
|
+
})),
|
|
223
|
+
...model.secondary ? {
|
|
224
|
+
secondary: {
|
|
225
|
+
model: normalizeModelId(model.secondary.model),
|
|
226
|
+
fallbacks: (model.secondary.fallbacks ?? []).map(normalizeModelId)
|
|
227
|
+
}
|
|
228
|
+
} : {}
|
|
204
229
|
};
|
|
205
230
|
}
|
|
206
231
|
function normalizeRepoConfig(config) {
|
|
@@ -247,6 +272,10 @@ var parsedReviewCommentSchema = z2.object({
|
|
|
247
272
|
fingerprintV2: z2.string().min(1).nullable().optional(),
|
|
248
273
|
// Absent means 'llm'. Always test `=== 'rule'` positively.
|
|
249
274
|
source: z2.enum(["llm", "rule"]).nullable().optional(),
|
|
275
|
+
// Which reviewer produced this, when a secondary reviewer is configured. Attribution for a human
|
|
276
|
+
// reading the dashboard -- never an input to any gate, and never a weight: agreement between models
|
|
277
|
+
// is anti-correlated with correctness in the measured corpus.
|
|
278
|
+
reviewerModel: z2.string().nullable().optional(),
|
|
250
279
|
// Retirement signal when source is 'rule'.
|
|
251
280
|
ruleId: z2.string().min(1).nullable().optional()
|
|
252
281
|
});
|
|
@@ -377,7 +406,15 @@ var fileReviewRecordSchema = z2.object({
|
|
|
377
406
|
overallCorrectness: z2.string().nullable().optional(),
|
|
378
407
|
confidenceScore: z2.number().nullable().optional(),
|
|
379
408
|
batchSize: z2.number().int().nullable().optional(),
|
|
380
|
-
withheldCounts: z2.object({
|
|
409
|
+
withheldCounts: z2.object({
|
|
410
|
+
evidence: z2.number().int(),
|
|
411
|
+
claimDenied: z2.number().int(),
|
|
412
|
+
contextOnly: z2.number().int(),
|
|
413
|
+
absenceRefuted: z2.number().int()
|
|
414
|
+
}).partial().nullable().optional(),
|
|
415
|
+
// The review answered, but not cleanly. Free-form rather than an enum so a database written by a
|
|
416
|
+
// newer worker never fails to parse in an older dashboard.
|
|
417
|
+
degraded: z2.string().nullable().optional(),
|
|
381
418
|
errorMessage: z2.string().nullable(),
|
|
382
419
|
createdAt: dateStringSchema
|
|
383
420
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +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"]}
|
|
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 // Which reviewer produced this, when a secondary reviewer is configured. Attribution for a human\n // reading the dashboard -- never an input to any gate, and never a weight: agreement between models\n // is anti-correlated with correctness in the measured corpus.\n reviewerModel: z.string().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({\n evidence: z.number().int(),\n claimDenied: z.number().int(),\n contextOnly: z.number().int(),\n absenceRefuted: z.number().int(),\n })\n .partial()\n .nullable()\n .optional(),\n // The review answered, but not cleanly. Free-form rather than an enum so a database written by a\n // newer worker never fails to parse in an older dashboard.\n degraded: z.string().nullable().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 // Presentation cap: comments actually posted to the PR. Findings past this are still recorded\n // (disposition 'cap') and shown on the dashboard; nothing upstream of posting should read it.\n max_comments: z.number().int().min(1).max(150).default(10),\n // How many findings the pipeline works with (generator, verifier, dashboard); independent of\n // max_comments so tightening the posted cap no longer quietly shrinks the review itself.\n review_breadth: z.number().int().min(1).max(150).default(25),\n // Off by default: adds a large single file's post-change content as read-only context, costing\n // one extra GitHub subrequest per qualifying file (see FILE_CONTEXT_CHAR_BUDGET).\n full_file_context: z.boolean().default(false),\n min_severity: z.enum(reviewSeverities).default('P3'),\n language_gates: z\n .record(\n z.string(),\n z.object({\n min_severity: z.enum(reviewSeverities).optional(),\n min_confidence: z.number().min(0).max(1).optional(),\n }),\n )\n .default({}),\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: [], secondary: null };\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 // Findings are UNIONED with the primary's, never voted on (F1 0.200 vs 0.149 best-single; agreement is not evidence). Never pair across a capability gap: strong + much weaker measured BELOW strong alone.\n secondary: z\n .object({\n model: z.string(),\n fallbacks: z.array(z.string()).default([]),\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 ...(model.secondary\n ? {\n secondary: {\n model: normalizeModelId(model.secondary.model),\n fallbacks: (model.secondary.fallbacks ?? []).map(normalizeModelId),\n },\n }\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"]}
|
|
@@ -80,6 +80,7 @@ declare const parsedReviewCommentSchema: z.ZodObject<{
|
|
|
80
80
|
llm: "llm";
|
|
81
81
|
rule: "rule";
|
|
82
82
|
}>>>;
|
|
83
|
+
reviewerModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
83
84
|
ruleId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
84
85
|
}, z.core.$strip>;
|
|
85
86
|
declare const findingLabelSchema: z.ZodObject<{
|
|
@@ -228,8 +229,9 @@ declare const jobSummarySchema: z.ZodObject<{
|
|
|
228
229
|
large_file_threshold_lines: z.ZodDefault<z.ZodNumber>;
|
|
229
230
|
max_diff_lines_per_file: z.ZodDefault<z.ZodNumber>;
|
|
230
231
|
batch_small_files: z.ZodDefault<z.ZodBoolean>;
|
|
231
|
-
max_total_diff_chars: z.ZodDefault<z.ZodNumber>;
|
|
232
232
|
max_comments: z.ZodDefault<z.ZodNumber>;
|
|
233
|
+
review_breadth: z.ZodDefault<z.ZodNumber>;
|
|
234
|
+
full_file_context: z.ZodDefault<z.ZodBoolean>;
|
|
233
235
|
min_severity: z.ZodDefault<z.ZodEnum<{
|
|
234
236
|
P0: "P0";
|
|
235
237
|
P1: "P1";
|
|
@@ -237,6 +239,16 @@ declare const jobSummarySchema: z.ZodObject<{
|
|
|
237
239
|
P3: "P3";
|
|
238
240
|
nit: "nit";
|
|
239
241
|
}>>;
|
|
242
|
+
language_gates: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
243
|
+
min_severity: z.ZodOptional<z.ZodEnum<{
|
|
244
|
+
P0: "P0";
|
|
245
|
+
P1: "P1";
|
|
246
|
+
P2: "P2";
|
|
247
|
+
P3: "P3";
|
|
248
|
+
nit: "nit";
|
|
249
|
+
}>>;
|
|
250
|
+
min_confidence: z.ZodOptional<z.ZodNumber>;
|
|
251
|
+
}, z.core.$strip>>>;
|
|
240
252
|
min_confidence: z.ZodDefault<z.ZodNumber>;
|
|
241
253
|
focus: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
242
254
|
security: "security";
|
|
@@ -289,6 +301,10 @@ declare const jobSummarySchema: z.ZodObject<{
|
|
|
289
301
|
model: z.ZodString;
|
|
290
302
|
fallbacks: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
291
303
|
}, z.core.$strip>>>>;
|
|
304
|
+
secondary: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
305
|
+
model: z.ZodString;
|
|
306
|
+
fallbacks: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
307
|
+
}, z.core.$strip>>>;
|
|
292
308
|
}, z.core.$strip>>;
|
|
293
309
|
}, z.core.$strip>>>;
|
|
294
310
|
retryOfJobId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
|
|
@@ -398,6 +414,7 @@ declare const fileReviewRecordSchema: z.ZodObject<{
|
|
|
398
414
|
llm: "llm";
|
|
399
415
|
rule: "rule";
|
|
400
416
|
}>>>;
|
|
417
|
+
reviewerModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
401
418
|
ruleId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
402
419
|
}, z.core.$strip>>;
|
|
403
420
|
inputTokens: z.ZodNullable<z.ZodNumber>;
|
|
@@ -414,7 +431,10 @@ declare const fileReviewRecordSchema: z.ZodObject<{
|
|
|
414
431
|
withheldCounts: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
415
432
|
evidence: z.ZodOptional<z.ZodNumber>;
|
|
416
433
|
claimDenied: z.ZodOptional<z.ZodNumber>;
|
|
434
|
+
contextOnly: z.ZodOptional<z.ZodNumber>;
|
|
435
|
+
absenceRefuted: z.ZodOptional<z.ZodNumber>;
|
|
417
436
|
}, z.core.$strip>>>;
|
|
437
|
+
degraded: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
418
438
|
errorMessage: z.ZodNullable<z.ZodString>;
|
|
419
439
|
createdAt: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodDate]>, z.ZodTransform<string, string | Date>>;
|
|
420
440
|
}, z.core.$strip>;
|
|
@@ -490,8 +510,9 @@ declare const jobDetailSchema: z.ZodObject<{
|
|
|
490
510
|
large_file_threshold_lines: z.ZodDefault<z.ZodNumber>;
|
|
491
511
|
max_diff_lines_per_file: z.ZodDefault<z.ZodNumber>;
|
|
492
512
|
batch_small_files: z.ZodDefault<z.ZodBoolean>;
|
|
493
|
-
max_total_diff_chars: z.ZodDefault<z.ZodNumber>;
|
|
494
513
|
max_comments: z.ZodDefault<z.ZodNumber>;
|
|
514
|
+
review_breadth: z.ZodDefault<z.ZodNumber>;
|
|
515
|
+
full_file_context: z.ZodDefault<z.ZodBoolean>;
|
|
495
516
|
min_severity: z.ZodDefault<z.ZodEnum<{
|
|
496
517
|
P0: "P0";
|
|
497
518
|
P1: "P1";
|
|
@@ -499,6 +520,16 @@ declare const jobDetailSchema: z.ZodObject<{
|
|
|
499
520
|
P3: "P3";
|
|
500
521
|
nit: "nit";
|
|
501
522
|
}>>;
|
|
523
|
+
language_gates: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
524
|
+
min_severity: z.ZodOptional<z.ZodEnum<{
|
|
525
|
+
P0: "P0";
|
|
526
|
+
P1: "P1";
|
|
527
|
+
P2: "P2";
|
|
528
|
+
P3: "P3";
|
|
529
|
+
nit: "nit";
|
|
530
|
+
}>>;
|
|
531
|
+
min_confidence: z.ZodOptional<z.ZodNumber>;
|
|
532
|
+
}, z.core.$strip>>>;
|
|
502
533
|
min_confidence: z.ZodDefault<z.ZodNumber>;
|
|
503
534
|
focus: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
504
535
|
security: "security";
|
|
@@ -551,6 +582,10 @@ declare const jobDetailSchema: z.ZodObject<{
|
|
|
551
582
|
model: z.ZodString;
|
|
552
583
|
fallbacks: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
553
584
|
}, z.core.$strip>>>>;
|
|
585
|
+
secondary: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
586
|
+
model: z.ZodString;
|
|
587
|
+
fallbacks: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
588
|
+
}, z.core.$strip>>>;
|
|
554
589
|
}, z.core.$strip>>;
|
|
555
590
|
}, z.core.$strip>>;
|
|
556
591
|
reviewId: z.ZodNullable<z.ZodCoercedNumber<unknown>>;
|
|
@@ -639,6 +674,7 @@ declare const jobDetailSchema: z.ZodObject<{
|
|
|
639
674
|
llm: "llm";
|
|
640
675
|
rule: "rule";
|
|
641
676
|
}>>>;
|
|
677
|
+
reviewerModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
642
678
|
ruleId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
643
679
|
}, z.core.$strip>>;
|
|
644
680
|
inputTokens: z.ZodNullable<z.ZodNumber>;
|
|
@@ -655,7 +691,10 @@ declare const jobDetailSchema: z.ZodObject<{
|
|
|
655
691
|
withheldCounts: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
656
692
|
evidence: z.ZodOptional<z.ZodNumber>;
|
|
657
693
|
claimDenied: z.ZodOptional<z.ZodNumber>;
|
|
694
|
+
contextOnly: z.ZodOptional<z.ZodNumber>;
|
|
695
|
+
absenceRefuted: z.ZodOptional<z.ZodNumber>;
|
|
658
696
|
}, z.core.$strip>>>;
|
|
697
|
+
degraded: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
659
698
|
errorMessage: z.ZodNullable<z.ZodString>;
|
|
660
699
|
createdAt: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodDate]>, z.ZodTransform<string, string | Date>>;
|
|
661
700
|
}, z.core.$strip>>;
|
|
@@ -679,8 +718,9 @@ declare const repoConfigRecordSchema: z.ZodObject<{
|
|
|
679
718
|
large_file_threshold_lines: z.ZodDefault<z.ZodNumber>;
|
|
680
719
|
max_diff_lines_per_file: z.ZodDefault<z.ZodNumber>;
|
|
681
720
|
batch_small_files: z.ZodDefault<z.ZodBoolean>;
|
|
682
|
-
max_total_diff_chars: z.ZodDefault<z.ZodNumber>;
|
|
683
721
|
max_comments: z.ZodDefault<z.ZodNumber>;
|
|
722
|
+
review_breadth: z.ZodDefault<z.ZodNumber>;
|
|
723
|
+
full_file_context: z.ZodDefault<z.ZodBoolean>;
|
|
684
724
|
min_severity: z.ZodDefault<z.ZodEnum<{
|
|
685
725
|
P0: "P0";
|
|
686
726
|
P1: "P1";
|
|
@@ -688,6 +728,16 @@ declare const repoConfigRecordSchema: z.ZodObject<{
|
|
|
688
728
|
P3: "P3";
|
|
689
729
|
nit: "nit";
|
|
690
730
|
}>>;
|
|
731
|
+
language_gates: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
732
|
+
min_severity: z.ZodOptional<z.ZodEnum<{
|
|
733
|
+
P0: "P0";
|
|
734
|
+
P1: "P1";
|
|
735
|
+
P2: "P2";
|
|
736
|
+
P3: "P3";
|
|
737
|
+
nit: "nit";
|
|
738
|
+
}>>;
|
|
739
|
+
min_confidence: z.ZodOptional<z.ZodNumber>;
|
|
740
|
+
}, z.core.$strip>>>;
|
|
691
741
|
min_confidence: z.ZodDefault<z.ZodNumber>;
|
|
692
742
|
focus: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
693
743
|
security: "security";
|
|
@@ -740,6 +790,10 @@ declare const repoConfigRecordSchema: z.ZodObject<{
|
|
|
740
790
|
model: z.ZodString;
|
|
741
791
|
fallbacks: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
742
792
|
}, z.core.$strip>>>>;
|
|
793
|
+
secondary: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
794
|
+
model: z.ZodString;
|
|
795
|
+
fallbacks: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
796
|
+
}, z.core.$strip>>>;
|
|
743
797
|
}, z.core.$strip>>;
|
|
744
798
|
}, z.core.$strip>;
|
|
745
799
|
updatedAt: z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodDate]>, z.ZodTransform<string, string | Date>>;
|