@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 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-0fUkjd2C.js';
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 { AccountResponse, AccountSettings, AuthSessionResponse, AuthSessionUser, JobDetailResponse, JobDiffsResponse, JobsResponse, ModelConfigsResponse, RepoConfigResponse, RepoConfigsResponse, RetryJobResponse, StatsResponse, SyncReposResponse, UpdatesEmailResponse, UpdatesEmailStatus };
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-0fUkjd2C.js';
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
- max_total_diff_chars: z.number().int().min(1).max(5e5).default(15e4),
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({ evidence: z2.number().int(), claimDenied: z2.number().int() }).partial().nullable().optional(),
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":";;;;;;;;;AAAA,SAAS,KAAAA,UAAS;;;ACEX,IAAM,iBAAiB,CAAC,QAAQ,WAAW,OAAO;AAClD,IAAM,cAAc,CAAC,UAAU,WAAW,QAAQ,UAAU,cAAc,aAAa,SAAS;AAChG,IAAM,eAAe,CAAC,WAAW,QAAQ,WAAW,QAAQ;AAC5D,IAAM,iBAAiB,CAAC,WAAW,SAAS;AAC5C,IAAM,mBAAmB,CAAC,YAAY,QAAQ,eAAe,eAAe,SAAS;AACrF,IAAM,gBAAgB,CAAC,UAAU,aAAa,UAAU,yBAAyB,QAAQ;;;ACJzF,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;AACF;AAIO,IAAM,sBAA0E;AAAA,EACrF,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,6BAA6B;AAAA,EAC7B,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,eAAe;AAAA,EACf,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,OAAO;AACT;AAEO,SAAS,YAAY,OAA2B;AACrD,SAAQ,WAAiC,SAAS,KAAe,IAAK,QAAsB;AAC9F;AAGO,IAAM,0BAAyG;AAAA,EACpH,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,uBAAuB;AAAA,EACvB,iBAAiB;AAAA,EACjB,6BAA6B;AAAA,EAC7B,eAAe;AAAA,EACf,OAAO;AAAA,EAEP,yBAAyB;AAAA,EACzB,uBAAuB;AAAA,EACvB,eAAe;AAAA,EACf,aAAa;AAAA,EAEb,yBAAyB;AAAA,EAEzB,wBAAwB;AAC1B;AAGO,IAAM,6BAA0C,WAAW;AAAA,EAChE,CAAC,SAAS,wBAAwB,IAAI,MAAM;AAC9C;AAGO,IAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACvGA,SAAS,SAAS;;;ACAX,IAAM,wBAAwB,CAAC,UAAU,eAAe,oBAAoB,UAAU;AACtF,IAAM,qBAAqB,CAAC,aAAa,WAAW,YAAY,YAAY,iBAAiB,aAAa;AAC1G,IAAM,0BAA0B,CAAC,OAAO,QAAQ,KAAK;AACrD,IAAM,uBAAuB;AAC7B,IAAM,0BAA0B;AAChC,IAAM,iBAAiB;AAAA,EAC5B,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,2BAAmD;AAAA,EAC9D,CAAC,eAAe,GAAG;AACrB;AAEO,IAAM,4BAA4B;AAElC,IAAM,8BAA8B;AACpC,IAAM,8BAA8B;;;ADN3C,IAAM,eAAe,EAAE,MAAM;AAAA,EAC3B,EAAE,QAAQ,KAAK;AAAA,EACf,EAAE,OAAO;AAAA,IACP,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACpB,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACpB,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,CAAC;AACH,CAAC;AAEM,IAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,eAAe,oBAAoB,YAAY,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,qBAAqB,CAAC;AAAA,EAC3H,eAAe,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EACvC,iBAAiB,EAAE,MAAM,CAAC,EAAE,QAAQ,KAAK,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,uBAAuB;AAAA,EAC/F,YAAY,EACT,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EACvB,QAAQ,CAAC,GAAG,kBAAkB,CAAC;AAAA,EAClC,4BAA4B,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK,EAAE,QAAQ,GAAG;AAAA,EAC1E,yBAAyB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK,EAAE,QAAQ,GAAG;AAAA,EACvE,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EAC3C,sBAAsB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAO,EAAE,QAAQ,IAAO;AAAA,EAC1E,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE;AAAA,EACzD,cAAc,EAAE,KAAK,gBAAgB,EAAE,QAAQ,IAAI;AAAA,EACnD,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,EAClD,OAAO,EAAE,MAAM,EAAE,KAAK,gBAAgB,CAAC,EAAE,QAAQ,CAAC,GAAG,gBAAgB,CAAC;AAAA,EACtE,kBAAkB,EAAE,MAAM,EAAE,KAAK,UAAU,CAAC,EAAE,QAAQ,CAAC,GAAG,0BAA0B,CAAC;AAAA,EACrF,OAAO,EACJ,OAAO;AAAA,IACN,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,IACjC,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,IACxD,iBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,uBAAuB,CAAC;AAAA,EAClF,CAAC,EACA,QAAQ;AAAA,IACP,SAAS;AAAA,IACT,mBAAmB,CAAC;AAAA,IACpB,iBAAiB,CAAC,GAAG,uBAAuB;AAAA,EAC9C,CAAC;AAAA,EACH,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACnD,QAAQ,aAAa,QAAQ,EAAE,GAAG,eAAe,CAAC;AAAA,EAClD,MAAM,EACH,OAAO;AAAA,IACN,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IAClC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,uBAAuB,CAAC;AAAA,IAC9E,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,oBAAoB;AAAA,EACzD,CAAC,EACA,QAAQ;AAAA,IACP,SAAS;AAAA,IACT,eAAe,CAAC,GAAG,uBAAuB;AAAA,IAC1C,SAAS;AAAA,EACX,CAAC;AACL,CAAC;AAEM,IAAM,wBAAwB,mBAAmB,MAAM,CAAC,CAAC;AACzD,IAAM,uBAAuB,EAAE,MAAM,MAAM,WAAW,CAAC,GAAG,gBAAgB,CAAC,EAAE;AAE7E,IAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,QAAQ,mBAAmB,QAAQ,qBAAqB;AAAA,EACxD,OAAO,EACJ,OAAO;AAAA,IACN,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,IACxC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAAA,IACpD,gBAAgB,EACb;AAAA,MACC,EAAE,OAAO;AAAA,QACP,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,QACrC,OAAO,EAAE,OAAO;AAAA,QAChB,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,MAC1C,CAAC;AAAA,IACH,EACC,SAAS,EACT,SAAS;AAAA,EACd,CAAC,EACA,QAAQ,oBAAoB;AACjC,CAAC;AAIM,SAAS,iBAAiB,OAAe;AAC9C,SAAO,yBAAyB,KAAK,KAAK;AAC5C;AAEO,SAAS,yBAAyB,OAAiD;AACxF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,MAAM,MAAM,OAAO,iBAAiB,MAAM,IAAI,IAAI;AAAA,IAClD,WAAW,MAAM,cAAc,OAC3B,OACA,MAAM,QAAQ,MAAM,SAAS,IAC3B,MAAM,UAAU,IAAI,gBAAgB,IACpC,CAAC;AAAA,IACP,gBAAgB,MAAM,mBAAmB,QAAQ,MAAM,mBAAmB,SACtE,MAAM,iBACN,MAAM,eAAe,IAAI,CAAC,UAAU;AAAA,MAClC,GAAG;AAAA,MACH,OAAO,iBAAiB,KAAK,KAAK;AAAA,MAClC,WAAW,KAAK,WAAW,IAAI,gBAAgB;AAAA,IACjD,EAAE;AAAA,EACR;AACF;AAEO,SAAS,oBAAoB,QAAgC;AAClE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO,yBAAyB,OAAO,KAAK;AAAA,EAC9C;AACF;AAEO,IAAM,oBAAoB,iBAAiB,MAAM,CAAC,CAAC;;;AH9B1D,IAAM,mBAAmBC,GAAE,MAAM,CAACA,GAAE,OAAO,GAAGA,GAAE,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,MAAO,aAAa,OAAO,EAAE,YAAY,IAAI,CAAE;AACnH,IAAM,qBAAqBA,GAAE,OAAO,OAAO;AAEpC,IAAM,gBAAgBA,GAAE,OAAO;AAAA,EACpC,MAAMA,GAAE,OAAO;AAAA,EACf,QAAQA,GAAE,KAAK,CAAC,WAAW,WAAW,QAAQ,QAAQ,CAAC;AAAA,EACvD,WAAW,iBAAiB,SAAS;AAAA,EACrC,YAAY,iBAAiB,SAAS;AAAA,EACtC,OAAOA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AACxC,CAAC;AAEM,IAAM,4BAA4BA,GAAE,OAAO;AAAA,EAChD,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1D,UAAUA,GAAE,KAAK,gBAAgB;AAAA,EACjC,UAAUA,GAAE,KAAK,gBAAgB,EAAE,QAAQ,SAAS;AAAA,EACpD,OAAOA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,gBAAgBA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,iBAAiBA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA,EAE9D,UAAUA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,aAAaA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA,EAEnD,YAAYA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EAClD,QAAQA,GAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA,EAExC,WAAWA,GAAE,KAAK,UAAU,EAAE,SAAS,EAAE,SAAS;AAAA,EAClD,gBAAgBA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,aAAaA,GAAE,KAAK,mBAAmB,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7D,cAAcA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,YAAYA,GAAE,KAAK,CAAC,gBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA,EAEzE,eAAeA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA,EAErD,QAAQA,GAAE,KAAK,CAAC,OAAO,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA,EAEpD,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS;AAChD,CAAC;AAEM,IAAM,qBAAqBA,GAAE,OAAO,EAAE,OAAOA,GAAE,KAAK,CAAC,SAAS,OAAO,CAAC,EAAE,CAAC;AAEhF,IAAM,sBAAsBA,GAAE,OAAO;AAAA,EACnC,OAAOA,GAAE,OAAO,EAAE,IAAI,GAAG;AAAA,EACzB,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,kBAAkBA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACpD,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAClD,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAE9B,YAAYA,GAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,eAAeA,GAAE,OAAO;AAAA,IACtB,oBAAoBA,GAAE,OAAO;AAAA,IAC7B,YAAYA,GAAE,OAAO;AAAA,MACnB,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,MACjC,KAAKA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,IACjC,CAAC,EAAE,SAAS;AAAA,IACZ,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,CAAC;AAAA,EACD,iBAAiBA,GAAE,OAAO,EAAE,SAAS;AACvC,CAAC;AAEM,IAAM,8BAA8BA,GAAE,OAAO;AAAA,EAClD,UAAUA,GAAE,MAAM,mBAAmB;AAAA,EACrC,qBAAqBA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,2BAA2B;AAAA,EAC9E,qBAAqBA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,2BAA2B;AAAA,EAC9E,0BAA0BA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAC9D,CAAC;AAGM,IAAM,+BAA+BA,GAAE,OAAO;AAAA,EACnD,OAAOA,GAAE;AAAA,IACPA,GAAE,OAAO;AAAA,MACP,oBAAoBA,GAAE,OAAO;AAAA,MAC7B,UAAUA,GAAE,MAAM,mBAAmB;AAAA,MACrC,qBAAqBA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,2BAA2B;AAAA,MAC9E,qBAAqBA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,2BAA2B;AAAA,MAC9E,0BAA0BA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IAC9D,CAAC;AAAA,EACH,EAAE,IAAI,CAAC;AAAA,EACP,0BAA0BA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAC9D,CAAC;AAEM,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EAC7C,OAAOA,GAAE,KAAK,EAAE,SAAS;AAAA,EACzB,YAAYA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,OAAOA,GAAE,KAAK,CAAC,WAAW,UAAU,UAAU,CAAC,EAAE,SAAS;AAAA,EAC1D,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACtC,SAASA,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,gBAAgBA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC3C,OAAOA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAClC,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACjC,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACtC,SAASA,GAAE,KAAK,cAAc,EAAE,SAAS;AAAA,EACzC,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAE/B,oBAAoBA,GAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAExC,oBAAoBA,GAAE,QAAQ,EAAE,SAAS;AAC3C,CAAC,EAAE,YAAY,CAAC,SAAS,QAAQ;AAC/B,MAAI,QAAQ,SAAS,QAAQ,WAAW;AACtC;AAAA,EACF;AAEA,MAAI,SAAS;AAAA,IACX,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,CAAC,OAAO;AAAA,EAChB,CAAC;AACH,CAAC;AAEM,IAAM,mBAAmBA,GAAE,OAAO;AAAA,EACvC,IAAIA,GAAE,KAAK;AAAA,EACX,oBAAoBA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACnD,OAAOA,GAAE,OAAO;AAAA,EAChB,MAAMA,GAAE,OAAO;AAAA,EACf,gBAAgBA,GAAE,OAAO;AAAA,EACzB,UAAUA,GAAE,OAAO,EAAE,IAAI;AAAA,EACzB,SAASA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,WAAWA,GAAE,OAAO;AAAA,EACpB,SAASA,GAAE,KAAK,cAAc;AAAA,EAC9B,QAAQA,GAAE,KAAK,WAAW;AAAA,EAC1B,SAASA,GAAE,KAAK,cAAc,EAAE,SAAS;AAAA,EACzC,WAAWA,GAAE,OAAO,EAAE,IAAI;AAAA,EAC1B,cAAcA,GAAE,OAAO,EAAE,IAAI;AAAA,EAC7B,kBAAkBA,GAAE,OAAO,EAAE,IAAI;AAAA,EACjC,mBAAmBA,GAAE,OAAO,EAAE,IAAI;AAAA,EAClC,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa,iBAAiB,SAAS,EAAE,SAAS;AAAA,EAClD,WAAW,iBAAiB,SAAS;AAAA,EACrC,YAAY,iBAAiB,SAAS;AAAA,EACtC,cAAcA,GAAE,OAAO,EAAE,SAAS;AAAA,EAClC,wBAAwBA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACvD,oBAAoBA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACnD,OAAOA,GAAE,MAAM,aAAa,EAAE,QAAQ,CAAC,CAAC;AAAA,EACxC,YAAY,mBAAmB,SAAS,EAAE,SAAS;AAAA,EACnD,gBAAgB,iBAAiB,SAAS,EAAE,SAAS;AAAA,EACrD,cAAcA,GAAE,KAAK,EAAE,SAAS,EAAE,SAAS;AAC7C,CAAC;AAEM,IAAM,kBAAkBA,GAAE,OAAO;AAAA,EACtC,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAUA,GAAE;AAAA,IACV,CAAC,MAAO,MAAM,UAAa,MAAM,KAAK,SAAY,OAAO,CAAC;AAAA,IAC1DA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACvC;AAAA,EACA,QAAQA,GAAE,KAAK,WAAW,EAAE,SAAS;AAAA,EACrC,SAASA,GAAE,KAAK,cAAc,EAAE,SAAS;AAAA,EACzC,QAAQA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,OAAOA,GAAE,WAAW,CAAC,MAAM,OAAO,CAAC,GAAGA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,QAAQ,EAAE;AAAA,EAClF,QAAQA,GAAE,WAAW,CAAC,MAAM,OAAO,CAAC,GAAGA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC;AAC3E,CAAC;AAID,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EACtC,IAAIA,GAAE,KAAK;AAAA,EACX,OAAOA,GAAE,KAAK;AAAA,EACd,UAAUA,GAAE,OAAO;AAAA,EACnB,YAAYA,GAAE,KAAK,YAAY;AAAA,EAC/B,WAAWA,GAAE,OAAO;AAAA;AAAA,EAEpB,eAAeA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,eAAeA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACzC,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,gBAAgBA,GAAE,MAAM,yBAAyB;AAAA,EACjD,aAAaA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACvC,cAAcA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACxC,YAAYA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACtC,SAASA,GAAE,KAAK,cAAc,EAAE,SAAS;AAAA,EACzC,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,oBAAoBA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACnD,iBAAiBA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,WAAWA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,gBAAgBA,GACb,OAAO,EAAE,UAAUA,GAAE,OAAO,EAAE,IAAI,GAAG,aAAaA,GAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EACpE,QAAQ,EACR,SAAS,EACT,SAAS;AAAA,EACZ,cAAcA,GAAE,OAAO,EAAE,SAAS;AAAA,EAClC,WAAW;AACb,CAAC;AAEM,IAAM,kBAAkB,iBAAiB,OAAO;AAAA,EACrD,SAASA,GAAE,OAAO;AAAA,EAClB,SAASA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,SAASA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,iBAAiBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACrC,gBAAgB,iBAAiB,SAAS;AAAA,EAC1C,UAAU,mBAAmB,SAAS;AAAA,EACtC,cAAcA,GAAE,KAAK,EAAE,SAAS;AAAA,EAChC,cAAcA,GAAE,OAAO,EAAE,SAAS;AAAA,EAClC,OAAOA,GAAE,MAAM,sBAAsB;AACvC,CAAC;AAEM,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EAC7C,gBAAgBA,GAAE,OAAO;AAAA,EACzB,OAAOA,GAAE,OAAO;AAAA,EAChB,MAAMA,GAAE,OAAO;AAAA,EACf,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,kBAAkB,iBAAiB,SAAS;AAAA,EAC5C,gBAAgBA,GAAE,KAAK,cAAc,EAAE,SAAS;AAAA,EAChD,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,gBAAgBA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC7C,eAAeA,GAAE,IAAI,EAAE,SAAS;AAAA,EAChC,SAASA,GAAE,QAAQ;AACrB,CAAC;AAEM,IAAM,cAAcA,GAAE,OAAO;AAAA,EAClC,QAAQA,GAAE,OAAO;AAAA,IACf,MAAMA,GAAE,OAAO,EAAE,IAAI;AAAA,IACrB,aAAaA,GAAE,OAAO,EAAE,IAAI;AAAA,IAC5B,cAAcA,GAAE,OAAO,EAAE,IAAI;AAAA,IAC7B,UAAUA,GAAE,OAAO,EAAE,IAAI;AAAA,EAC3B,CAAC;AAAA,EACD,OAAOA,GAAE;AAAA,IACPA,GAAE,OAAO;AAAA,MACP,KAAKA,GAAE,OAAO;AAAA;AAAA,MAEd,QAAQA,GAAE,OAAO;AAAA,MACjB,MAAMA,GAAE,OAAO,EAAE,IAAI;AAAA,MACrB,aAAaA,GAAE,OAAO,EAAE,IAAI;AAAA,MAC5B,cAAcA,GAAE,OAAO,EAAE,IAAI;AAAA,MAC7B,UAAUA,GAAE,OAAO,EAAE,IAAI;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA;AAAA,EAEA,iBAAiBA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAC3C,UAAUA,GAAE;AAAA,IACVA,GAAE,OAAO;AAAA,MACP,SAASA,GAAE,KAAK,cAAc,EAAE,SAAS;AAAA,MACzC,OAAOA,GAAE,OAAO,EAAE,IAAI;AAAA,IACxB,CAAC;AAAA,EACH;AAAA,EACA,QAAQA,GAAE;AAAA,IACRA,GAAE,OAAO;AAAA,MACP,WAAWA,GAAE,OAAO;AAAA,MACpB,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA,MAC9B,OAAOA,GAAE,OAAO,EAAE,IAAI;AAAA,MACtB,aAAaA,GAAE,OAAO,EAAE,IAAI;AAAA,MAC5B,cAAcA,GAAE,OAAO,EAAE,IAAI;AAAA,IAC/B,CAAC;AAAA,EACH;AAAA,EACA,UAAUA,GAAE;AAAA,IACVA,GAAE,OAAO;AAAA,MACP,OAAOA,GAAE,OAAO;AAAA,MAChB,MAAMA,GAAE,OAAO;AAAA,MACf,MAAMA,GAAE,OAAO,EAAE,IAAI;AAAA,IACvB,CAAC;AAAA,EACH;AAAA,EACA,UAAUA,GAAE;AAAA,IACVA,GAAE,OAAO;AAAA,MACP,QAAQA,GAAE,KAAK,WAAW;AAAA,MAC1B,OAAOA,GAAE,OAAO,EAAE,IAAI;AAAA,IACxB,CAAC;AAAA,EACH;AAAA,EACA,UAAUA,GAAE;AAAA,IACVA,GAAE,OAAO;AAAA,MACP,SAASA,GAAE,KAAK,cAAc;AAAA,MAC9B,OAAOA,GAAE,OAAO,EAAE,IAAI;AAAA,IACxB,CAAC;AAAA,EACH;AAAA,EACA,YAAYA,GAAE;AAAA,IACZA,GAAE,OAAO;AAAA,MACP,UAAUA,GAAE,KAAK,gBAAgB;AAAA,MACjC,OAAOA,GAAE,OAAO,EAAE,IAAI;AAAA,IACxB,CAAC;AAAA,EACH;AAAA,EACA,YAAYA,GAAE;AAAA,IACZA,GAAE,OAAO;AAAA,MACP,UAAUA,GAAE,KAAK,gBAAgB;AAAA,MACjC,OAAOA,GAAE,OAAO,EAAE,IAAI;AAAA,IACxB,CAAC;AAAA,EACH;AAAA,EACA,aAAaA,GAAE,OAAO;AAAA,IACpB,eAAeA,GAAE,OAAO,EAAE,SAAS;AAAA,IACnC,eAAeA,GAAE,OAAO,EAAE,SAAS;AAAA,IACnC,eAAeA,GAAE,OAAO,EAAE,SAAS;AAAA,EACrC,CAAC;AACH,CAAC;AASM,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EACxC,IAAIA,GAAE,KAAK;AAAA,EACX,MAAMA,GAAE,OAAO;AAAA,EACf,WAAWA,GAAE,KAAK,aAAa;AAAA,EAC/B,SAASA,GAAE,IAAI,EAAE,SAAS;AAAA,EAC1B,SAASA,GAAE,QAAQ;AAAA,EACnB,WAAWA,GAAE,QAAQ;AAAA,EACrB,WAAW;AAAA,EACX,WAAW;AACb,CAAC;AAEM,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EACxC,SAASA,GAAE,OAAO;AAAA,EAClB,YAAYA,GAAE,KAAK;AAAA,EACnB,cAAcA,GAAE,OAAO;AAAA,EACvB,WAAWA,GAAE,KAAK,aAAa;AAAA,EAC/B,WAAWA,GAAE,OAAO;AAAA,EACpB,WAAW;AACb,CAAC;AAiBM,IAAM,uBAAuBA,GAAE,OAAO;AAAA,EAC3C,kBAAkBA,GAAE,KAAK,uBAAuB,EAAE,QAAQ,QAAQ;AAAA,EAClE,aAAaA,GAAE,MAAM,CAACA,GAAE,QAAQ,CAAC,GAAGA,GAAE,QAAQ,EAAE,GAAGA,GAAE,QAAQ,EAAE,GAAGA,GAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE;AAAA;AAAA,EAE5F,UAAUA,GACP,OAAO,EACP,IAAI,EACJ,IAAI,oBAAoB,GAAG,EAC3B,IAAI,oBAAoB,GAAG,EAC3B,QAAQ,oBAAoB,OAAO;AACxC,CAAC;","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>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codraoss/schema",
3
- "version": "0.9.4",
3
+ "version": "0.9.5",
4
4
  "description": "Shared types and Zod contracts for Codra, the open-source code review engine.",
5
5
  "author": "Devarshi Shimpi",
6
6
  "license": "AGPL-3.0-only",