@codraoss/schema 0.9.5 → 0.9.13

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-ByVA-xcD.js';
1
+ import { J as JobDetail, a as JobSummary, L as LlmProvider, M as ModelConfig, R as RepoConfigRecord, S as StatsPayload } from './schema-CzfrGYnV.js';
2
2
  import 'zod';
3
3
 
4
4
  type AuthSessionUser = {
@@ -40,9 +40,6 @@ type UpdatesEmailResponse = {
40
40
  type JobDetailResponse = {
41
41
  job: JobDetail;
42
42
  };
43
- /** Per-file reconstructed diff/prompt text, fetched on demand (see GET /api/jobs/:id/diffs) --
44
- diff_input isn't persisted in Postgres, so this comes from KV or a fresh GitHub fetch. Files
45
- with no entry are unavailable (e.g. the underlying commits are gone). */
46
43
  type JobDiffsResponse = {
47
44
  diffs: Record<string, string>;
48
45
  };
package/dist/api.js.map CHANGED
@@ -1 +1 @@
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":[]}
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\nexport type ApiAction = KnownApiAction | (string & {});\n\nexport type AuthSessionResponse = {\n user: AuthSessionUser;\n permissions?: string[];\n};\n\nexport type AccountSettings = {\n id: string;\n githubUserId: number;\n githubUsername: string;\n accountName: string | null;\n accountEmail: string | null;\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\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/hex.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hex.ts"],"sourcesContent":["// Hex helpers, shared so the webhook verifier, the job store and the token minters agree.\n\n// Trims first: leading/trailing whitespace on a header-supplied value would shift every byte since length drives the slice offsets.\nexport function hexToBytes(hex: string) {\n const clean = hex.trim().toLowerCase();\n const bytes = new Uint8Array(clean.length / 2);\n\n for (let index = 0; index < clean.length; index += 2) {\n bytes[index / 2] = Number.parseInt(clean.slice(index, index + 2), 16);\n }\n\n return bytes;\n}\n\n// Cryptographically random hex, for OAuth state and session tokens.\nexport function randomHex(size = 32) {\n const bytes = crypto.getRandomValues(new Uint8Array(size));\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');\n}\n"],"mappings":";AAGO,SAAS,WAAW,KAAa;AACtC,QAAM,QAAQ,IAAI,KAAK,EAAE,YAAY;AACrC,QAAM,QAAQ,IAAI,WAAW,MAAM,SAAS,CAAC;AAE7C,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,UAAM,QAAQ,CAAC,IAAI,OAAO,SAAS,MAAM,MAAM,OAAO,QAAQ,CAAC,GAAG,EAAE;AAAA,EACtE;AAEA,SAAO;AACT;AAGO,SAAS,UAAU,OAAO,IAAI;AACnC,QAAM,QAAQ,OAAO,gBAAgB,IAAI,WAAW,IAAI,CAAC;AACzD,SAAO,MAAM,KAAK,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAChF;","names":[]}
1
+ {"version":3,"sources":["../src/hex.ts"],"sourcesContent":["export function hexToBytes(hex: string) {\n const clean = hex.trim().toLowerCase();\n const bytes = new Uint8Array(clean.length / 2);\n\n for (let index = 0; index < clean.length; index += 2) {\n bytes[index / 2] = Number.parseInt(clean.slice(index, index + 2), 16);\n }\n\n return bytes;\n}\n\nexport function randomHex(size = 32) {\n const bytes = crypto.getRandomValues(new Uint8Array(size));\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');\n}\n"],"mappings":";AAAO,SAAS,WAAW,KAAa;AACtC,QAAM,QAAQ,IAAI,KAAK,EAAE,YAAY;AACrC,QAAM,QAAQ,IAAI,WAAW,MAAM,SAAS,CAAC;AAE7C,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,UAAM,QAAQ,CAAC,IAAI,OAAO,SAAS,MAAM,MAAM,OAAO,QAAQ,CAAC,GAAG,EAAE;AAAA,EACtE;AAEA,SAAO;AACT;AAEO,SAAS,UAAU,OAAO,IAAI;AACnC,QAAM,QAAQ,OAAO,gBAAgB,IAAI,WAAW,IAAI,CAAC;AACzD,SAAO,MAAM,KAAK,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAChF;","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-ByVA-xcD.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-CzfrGYnV.js';
2
2
  export { REVIEW_CONCURRENCY_LIMITS, ReviewConcurrencyLevel, reviewConcurrencyLevels, reviewMaxCommentsOptions, reviewMaxFilesRange, reviewSeverities } from './review-limits.js';
3
3
  import { z } from 'zod';
4
4
 
package/dist/index.js CHANGED
@@ -145,14 +145,8 @@ 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
- // 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.
150
148
  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
149
  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
150
  full_file_context: z.boolean().default(false),
157
151
  min_severity: z.enum(reviewSeverities).default("P3"),
158
152
  language_gates: z.record(
@@ -200,7 +194,6 @@ var repoConfigSchema = z.object({
200
194
  fallbacks: z.array(z.string()).optional()
201
195
  })
202
196
  ).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
197
  secondary: z.object({
205
198
  model: z.string(),
206
199
  fallbacks: z.array(z.string()).default([])
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 // 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"]}
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\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","export 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\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\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\nexport const DEFAULT_DENIED_CLAIM_TYPES: ClaimType[] = claimTypes.filter(\n (type) => CLAIM_TYPE_DECIDABILITY[type] !== 'diff_local',\n);\n\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\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_comments: z.number().int().min(1).max(150).default(10),\n review_breadth: z.number().int().min(1).max(150).default(25),\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 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"]}
@@ -312,7 +312,7 @@ declare const jobSummarySchema: z.ZodObject<{
312
312
  declare const jobsQuerySchema: z.ZodObject<{
313
313
  owner: z.ZodOptional<z.ZodString>;
314
314
  repo: z.ZodOptional<z.ZodString>;
315
- prNumber: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>>;
315
+ prNumber: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>, unknown>;
316
316
  status: z.ZodOptional<z.ZodEnum<{
317
317
  queued: "queued";
318
318
  running: "running";
@@ -327,8 +327,8 @@ declare const jobsQuerySchema: z.ZodObject<{
327
327
  comment: "comment";
328
328
  }>>;
329
329
  search: z.ZodOptional<z.ZodString>;
330
- limit: z.ZodDefault<z.ZodPreprocess<z.ZodNumber>>;
331
- offset: z.ZodDefault<z.ZodPreprocess<z.ZodNumber>>;
330
+ limit: z.ZodDefault<z.ZodPreprocess<z.ZodNumber, unknown>>;
331
+ offset: z.ZodDefault<z.ZodPreprocess<z.ZodNumber, unknown>>;
332
332
  }, z.core.$strip>;
333
333
  type JobStep = z.infer<typeof jobStepSchema>;
334
334
  declare const fileReviewRecordSchema: z.ZodObject<{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codraoss/schema",
3
- "version": "0.9.5",
3
+ "version": "0.9.13",
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",
@@ -55,44 +55,7 @@
55
55
  "README.md"
56
56
  ],
57
57
  "publishConfig": {
58
- "access": "public",
59
- "main": "./dist/index.js",
60
- "module": "./dist/index.js",
61
- "types": "./dist/index.d.ts",
62
- "exports": {
63
- ".": {
64
- "types": "./dist/index.d.ts",
65
- "import": "./dist/index.js"
66
- },
67
- "./api": {
68
- "types": "./dist/api.d.ts",
69
- "import": "./dist/api.js"
70
- },
71
- "./github": {
72
- "types": "./dist/github.d.ts",
73
- "import": "./dist/github.js"
74
- },
75
- "./hex": {
76
- "types": "./dist/hex.d.ts",
77
- "import": "./dist/hex.js"
78
- },
79
- "./review-limits": {
80
- "types": "./dist/review-limits.d.ts",
81
- "import": "./dist/review-limits.js"
82
- },
83
- "./timezone": {
84
- "types": "./dist/timezone.d.ts",
85
- "import": "./dist/timezone.js"
86
- },
87
- "./transient-errors": {
88
- "types": "./dist/transient-errors.d.ts",
89
- "import": "./dist/transient-errors.js"
90
- },
91
- "./webhook": {
92
- "types": "./dist/webhook.d.ts",
93
- "import": "./dist/webhook.js"
94
- }
95
- }
58
+ "access": "public"
96
59
  },
97
60
  "scripts": {
98
61
  "build": "tsup",
@@ -104,7 +67,7 @@
104
67
  "zod": "^4.3.6"
105
68
  },
106
69
  "devDependencies": {
107
- "tsup": "^8.0.0"
70
+ "tsup": "^8.0.2"
108
71
  },
109
72
  "main": "./dist/index.js",
110
73
  "module": "./dist/index.js",