| import { z } from 'zod'; | ||
| export declare const NextActionSchema: z.ZodObject<{ | ||
| kind: z.ZodString; | ||
| message: z.ZodString; | ||
| }, z.core.$strip>; | ||
| export declare const TargetIdentitySchema: z.ZodObject<{ | ||
| input_repo: z.ZodString; | ||
| canonical_repo: z.ZodString; | ||
| issue_number: z.ZodNumber; | ||
| issue_state: z.ZodOptional<z.ZodString>; | ||
| issue_url: z.ZodOptional<z.ZodString>; | ||
| head_sha: z.ZodOptional<z.ZodString>; | ||
| }, z.core.$strip>; | ||
| /** Legacy evidence / signal fields retained through the pre-1.0 compatibility period. */ | ||
| export declare const LegacyCompatibilitySchema: z.ZodObject<{ | ||
| verdict_summary: z.ZodOptional<z.ZodOptional<z.ZodString>>; | ||
| evidence: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>>; | ||
| signals: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>; | ||
| reasons: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>; | ||
| sub_results: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodUnknown>>>; | ||
| timings_ms: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>>; | ||
| perf: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>; | ||
| fetched_at: z.ZodOptional<z.ZodOptional<z.ZodString>>; | ||
| }, z.core.$strip>; | ||
| export declare const CheckResultSchema: z.ZodObject<{ | ||
| schema_version: z.ZodLiteral<"1.0-draft.1">; | ||
| gitworthy_version: z.ZodString; | ||
| run_id: z.ZodString; | ||
| generated_at: z.ZodString; | ||
| cached: z.ZodBoolean; | ||
| summary: z.ZodString; | ||
| checked: z.ZodArray<z.ZodString>; | ||
| not_checked: z.ZodArray<z.ZodString>; | ||
| checks: z.ZodDefault<z.ZodArray<z.ZodObject<{ | ||
| id: z.ZodString; | ||
| status: z.ZodEnum<{ | ||
| complete: "complete"; | ||
| skipped: "skipped"; | ||
| failed: "failed"; | ||
| not_applicable: "not_applicable"; | ||
| }>; | ||
| duration_ms: z.ZodOptional<z.ZodNumber>; | ||
| cached: z.ZodOptional<z.ZodBoolean>; | ||
| }, z.core.$strip>>>; | ||
| metrics: z.ZodDefault<z.ZodObject<{ | ||
| duration_ms: z.ZodOptional<z.ZodNumber>; | ||
| github_requests: z.ZodOptional<z.ZodNumber>; | ||
| git_commands: z.ZodOptional<z.ZodNumber>; | ||
| bytes_read: z.ZodOptional<z.ZodNumber>; | ||
| cache_hits: z.ZodOptional<z.ZodNumber>; | ||
| }, z.core.$catchall<z.ZodUnknown>>>; | ||
| command: z.ZodLiteral<"check">; | ||
| decision_id: z.ZodString; | ||
| target: z.ZodObject<{ | ||
| input_repo: z.ZodString; | ||
| canonical_repo: z.ZodString; | ||
| issue_number: z.ZodNumber; | ||
| issue_state: z.ZodOptional<z.ZodString>; | ||
| issue_url: z.ZodOptional<z.ZodString>; | ||
| head_sha: z.ZodOptional<z.ZodString>; | ||
| }, z.core.$strip>; | ||
| verdict: z.ZodEnum<{ | ||
| ACT: "ACT"; | ||
| VERIFY: "VERIFY"; | ||
| SKIP: "SKIP"; | ||
| }>; | ||
| disposition: z.ZodEnum<{ | ||
| greenfield: "greenfield"; | ||
| land_only: "land_only"; | ||
| claim_first: "claim_first"; | ||
| blocked: "blocked"; | ||
| crowded: "crowded"; | ||
| review: "review"; | ||
| }>; | ||
| next_actions: z.ZodDefault<z.ZodArray<z.ZodObject<{ | ||
| kind: z.ZodString; | ||
| message: z.ZodString; | ||
| }, z.core.$strip>>>; | ||
| findings: z.ZodDefault<z.ZodArray<z.ZodObject<{ | ||
| id: z.ZodString; | ||
| type: z.ZodString; | ||
| strength: z.ZodEnum<{ | ||
| definitive: "definitive"; | ||
| corroborated: "corroborated"; | ||
| heuristic: "heuristic"; | ||
| }>; | ||
| effect: z.ZodEnum<{ | ||
| block: "block"; | ||
| verify: "verify"; | ||
| inform: "inform"; | ||
| }>; | ||
| source: z.ZodString; | ||
| message: z.ZodString; | ||
| url: z.ZodOptional<z.ZodString>; | ||
| data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>; | ||
| }, z.core.$strip>>>; | ||
| verdict_summary: z.ZodOptional<z.ZodOptional<z.ZodString>>; | ||
| evidence: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>>; | ||
| signals: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>; | ||
| reasons: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>; | ||
| sub_results: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodUnknown>>>; | ||
| timings_ms: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>>; | ||
| perf: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>; | ||
| fetched_at: z.ZodOptional<z.ZodOptional<z.ZodString>>; | ||
| }, z.core.$strip>; | ||
| export type CheckResult = z.infer<typeof CheckResultSchema>; |
| import { z } from 'zod'; | ||
| import { CommonResultCoreSchema, DispositionSchema, VerdictSchema } from './common.js'; | ||
| import { FindingSchema } from './findings.js'; | ||
| export const NextActionSchema = z.object({ | ||
| kind: z.string().min(1), | ||
| message: z.string().min(1) | ||
| }); | ||
| export const TargetIdentitySchema = z.object({ | ||
| input_repo: z.string().min(1), | ||
| canonical_repo: z.string().min(1), | ||
| issue_number: z.number().int().positive(), | ||
| issue_state: z.string().optional(), | ||
| issue_url: z.string().optional(), | ||
| head_sha: z.string().optional() | ||
| }); | ||
| /** Legacy evidence / signal fields retained through the pre-1.0 compatibility period. */ | ||
| export const LegacyCompatibilitySchema = z.object({ | ||
| verdict_summary: z.string().optional(), | ||
| evidence: z.array(z.record(z.string(), z.unknown())).optional(), | ||
| signals: z.array(z.string()).optional(), | ||
| reasons: z.array(z.string()).optional(), | ||
| sub_results: z.array(z.unknown()).optional(), | ||
| timings_ms: z.record(z.string(), z.number()).optional(), | ||
| perf: z.record(z.string(), z.unknown()).optional(), | ||
| fetched_at: z.string().datetime().optional() | ||
| }).partial(); | ||
| export const CheckResultSchema = CommonResultCoreSchema.extend({ | ||
| command: z.literal('check'), | ||
| decision_id: z.string().min(1), | ||
| target: TargetIdentitySchema, | ||
| verdict: VerdictSchema, | ||
| disposition: DispositionSchema, | ||
| next_actions: z.array(NextActionSchema).default([]), | ||
| findings: z.array(FindingSchema).default([]) | ||
| }).merge(LegacyCompatibilitySchema); | ||
| //# sourceMappingURL=check.js.map |
| {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/contracts/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACzC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAEH,yFAAyF;AACzF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC/D,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC5C,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvD,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IAClD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC,OAAO,EAAE,CAAC;AAEb,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,MAAM,CAAC;IAC7D,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,MAAM,EAAE,oBAAoB;IAC5B,OAAO,EAAE,aAAa;IACtB,WAAW,EAAE,iBAAiB;IAC9B,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACnD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7C,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC"} |
| import { z } from 'zod'; | ||
| /** Pre-1.0 draft contract id. Incompatible draft changes increment the suffix. */ | ||
| export declare const SCHEMA_VERSION: "1.0-draft.1"; | ||
| export declare const SchemaVersionSchema: z.ZodLiteral<"1.0-draft.1">; | ||
| export declare const VerdictSchema: z.ZodEnum<{ | ||
| ACT: "ACT"; | ||
| VERIFY: "VERIFY"; | ||
| SKIP: "SKIP"; | ||
| }>; | ||
| export declare const DispositionSchema: z.ZodEnum<{ | ||
| greenfield: "greenfield"; | ||
| land_only: "land_only"; | ||
| claim_first: "claim_first"; | ||
| blocked: "blocked"; | ||
| crowded: "crowded"; | ||
| review: "review"; | ||
| }>; | ||
| export declare const CheckStatusSchema: z.ZodEnum<{ | ||
| complete: "complete"; | ||
| skipped: "skipped"; | ||
| failed: "failed"; | ||
| not_applicable: "not_applicable"; | ||
| }>; | ||
| export declare const CheckCoverageSchema: z.ZodObject<{ | ||
| id: z.ZodString; | ||
| status: z.ZodEnum<{ | ||
| complete: "complete"; | ||
| skipped: "skipped"; | ||
| failed: "failed"; | ||
| not_applicable: "not_applicable"; | ||
| }>; | ||
| duration_ms: z.ZodOptional<z.ZodNumber>; | ||
| cached: z.ZodOptional<z.ZodBoolean>; | ||
| }, z.core.$strip>; | ||
| export declare const MetricsSchema: z.ZodObject<{ | ||
| duration_ms: z.ZodOptional<z.ZodNumber>; | ||
| github_requests: z.ZodOptional<z.ZodNumber>; | ||
| git_commands: z.ZodOptional<z.ZodNumber>; | ||
| bytes_read: z.ZodOptional<z.ZodNumber>; | ||
| cache_hits: z.ZodOptional<z.ZodNumber>; | ||
| }, z.core.$catchall<z.ZodUnknown>>; | ||
| export declare const CommonResultCoreSchema: z.ZodObject<{ | ||
| schema_version: z.ZodLiteral<"1.0-draft.1">; | ||
| gitworthy_version: z.ZodString; | ||
| command: z.ZodString; | ||
| run_id: z.ZodString; | ||
| generated_at: z.ZodString; | ||
| cached: z.ZodBoolean; | ||
| summary: z.ZodString; | ||
| checked: z.ZodArray<z.ZodString>; | ||
| not_checked: z.ZodArray<z.ZodString>; | ||
| checks: z.ZodDefault<z.ZodArray<z.ZodObject<{ | ||
| id: z.ZodString; | ||
| status: z.ZodEnum<{ | ||
| complete: "complete"; | ||
| skipped: "skipped"; | ||
| failed: "failed"; | ||
| not_applicable: "not_applicable"; | ||
| }>; | ||
| duration_ms: z.ZodOptional<z.ZodNumber>; | ||
| cached: z.ZodOptional<z.ZodBoolean>; | ||
| }, z.core.$strip>>>; | ||
| findings: z.ZodDefault<z.ZodArray<z.ZodUnknown>>; | ||
| metrics: z.ZodDefault<z.ZodObject<{ | ||
| duration_ms: z.ZodOptional<z.ZodNumber>; | ||
| github_requests: z.ZodOptional<z.ZodNumber>; | ||
| git_commands: z.ZodOptional<z.ZodNumber>; | ||
| bytes_read: z.ZodOptional<z.ZodNumber>; | ||
| cache_hits: z.ZodOptional<z.ZodNumber>; | ||
| }, z.core.$catchall<z.ZodUnknown>>>; | ||
| }, z.core.$strip>; | ||
| export type CommonResultCore = z.infer<typeof CommonResultCoreSchema>; | ||
| export declare function newRunId(): string; | ||
| export declare function newDecisionId(): string; | ||
| export declare function newFindingId(): string; |
| import { z } from 'zod'; | ||
| import { randomUUID } from 'node:crypto'; | ||
| /** Pre-1.0 draft contract id. Incompatible draft changes increment the suffix. */ | ||
| export const SCHEMA_VERSION = '1.0-draft.1'; | ||
| export const SchemaVersionSchema = z.literal(SCHEMA_VERSION); | ||
| export const VerdictSchema = z.enum(['ACT', 'VERIFY', 'SKIP']); | ||
| export const DispositionSchema = z.enum(['greenfield', 'land_only', 'claim_first', 'blocked', 'crowded', 'review']); | ||
| export const CheckStatusSchema = z.enum(['complete', 'skipped', 'failed', 'not_applicable']); | ||
| export const CheckCoverageSchema = z.object({ | ||
| id: z.string().min(1), | ||
| status: CheckStatusSchema, | ||
| duration_ms: z.number().nonnegative().optional(), | ||
| cached: z.boolean().optional() | ||
| }); | ||
| export const MetricsSchema = z.object({ | ||
| duration_ms: z.number().nonnegative().optional(), | ||
| github_requests: z.number().int().nonnegative().optional(), | ||
| git_commands: z.number().int().nonnegative().optional(), | ||
| bytes_read: z.number().int().nonnegative().optional(), | ||
| cache_hits: z.number().int().nonnegative().optional() | ||
| }).catchall(z.unknown()); | ||
| export const CommonResultCoreSchema = z.object({ | ||
| schema_version: SchemaVersionSchema, | ||
| gitworthy_version: z.string().min(1), | ||
| command: z.string().min(1), | ||
| run_id: z.string().min(1), | ||
| generated_at: z.string().datetime(), | ||
| cached: z.boolean(), | ||
| summary: z.string().min(1), | ||
| checked: z.array(z.string()).min(1), | ||
| not_checked: z.array(z.string()).min(1), | ||
| checks: z.array(CheckCoverageSchema).default([]), | ||
| findings: z.array(z.unknown()).default([]), | ||
| metrics: MetricsSchema.default({}) | ||
| }); | ||
| export function newRunId() { | ||
| return `run_${randomUUID().replace(/-/g, '')}`; | ||
| } | ||
| export function newDecisionId() { | ||
| return `decision_${randomUUID().replace(/-/g, '')}`; | ||
| } | ||
| export function newFindingId() { | ||
| return `finding_${randomUUID().replace(/-/g, '')}`; | ||
| } | ||
| //# sourceMappingURL=common.js.map |
| {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/contracts/common.ts"],"names":[],"mappings":"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"} |
| import { z } from 'zod'; | ||
| export declare const DoctorResultSchema: z.ZodObject<{ | ||
| schema_version: z.ZodLiteral<"1.0-draft.1">; | ||
| gitworthy_version: z.ZodString; | ||
| run_id: z.ZodString; | ||
| generated_at: z.ZodString; | ||
| cached: z.ZodBoolean; | ||
| summary: z.ZodString; | ||
| checked: z.ZodArray<z.ZodString>; | ||
| not_checked: z.ZodArray<z.ZodString>; | ||
| checks: z.ZodDefault<z.ZodArray<z.ZodObject<{ | ||
| id: z.ZodString; | ||
| status: z.ZodEnum<{ | ||
| complete: "complete"; | ||
| skipped: "skipped"; | ||
| failed: "failed"; | ||
| not_applicable: "not_applicable"; | ||
| }>; | ||
| duration_ms: z.ZodOptional<z.ZodNumber>; | ||
| cached: z.ZodOptional<z.ZodBoolean>; | ||
| }, z.core.$strip>>>; | ||
| findings: z.ZodDefault<z.ZodArray<z.ZodUnknown>>; | ||
| metrics: z.ZodDefault<z.ZodObject<{ | ||
| duration_ms: z.ZodOptional<z.ZodNumber>; | ||
| github_requests: z.ZodOptional<z.ZodNumber>; | ||
| git_commands: z.ZodOptional<z.ZodNumber>; | ||
| bytes_read: z.ZodOptional<z.ZodNumber>; | ||
| cache_hits: z.ZodOptional<z.ZodNumber>; | ||
| }, z.core.$catchall<z.ZodUnknown>>>; | ||
| command: z.ZodLiteral<"doctor">; | ||
| }, z.core.$loose>; | ||
| export type DoctorResult = z.infer<typeof DoctorResultSchema>; |
| import { z } from 'zod'; | ||
| import { CommonResultCoreSchema } from './common.js'; | ||
| export const DoctorResultSchema = CommonResultCoreSchema.extend({ | ||
| command: z.literal('doctor') | ||
| }).passthrough(); | ||
| //# sourceMappingURL=doctor.js.map |
| {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/contracts/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,MAAM,CAAC;IAC9D,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;CAC7B,CAAC,CAAC,WAAW,EAAE,CAAC"} |
| import { z } from 'zod'; | ||
| export declare const ErrorCategorySchema: z.ZodEnum<{ | ||
| input: "input"; | ||
| auth: "auth"; | ||
| network: "network"; | ||
| provider: "provider"; | ||
| budget: "budget"; | ||
| storage: "storage"; | ||
| internal: "internal"; | ||
| }>; | ||
| export declare const ErrorDetailSchema: z.ZodObject<{ | ||
| code: z.ZodString; | ||
| category: z.ZodEnum<{ | ||
| input: "input"; | ||
| auth: "auth"; | ||
| network: "network"; | ||
| provider: "provider"; | ||
| budget: "budget"; | ||
| storage: "storage"; | ||
| internal: "internal"; | ||
| }>; | ||
| message: z.ZodString; | ||
| retryable: z.ZodBoolean; | ||
| status: z.ZodOptional<z.ZodNullable<z.ZodNumber>>; | ||
| details: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>; | ||
| }, z.core.$strip>; | ||
| export declare const ErrorResultSchema: z.ZodObject<{ | ||
| schema_version: z.ZodLiteral<"1.0-draft.1">; | ||
| gitworthy_version: z.ZodString; | ||
| ok: z.ZodLiteral<false>; | ||
| command: z.ZodString; | ||
| run_id: z.ZodString; | ||
| error: z.ZodObject<{ | ||
| code: z.ZodString; | ||
| category: z.ZodEnum<{ | ||
| input: "input"; | ||
| auth: "auth"; | ||
| network: "network"; | ||
| provider: "provider"; | ||
| budget: "budget"; | ||
| storage: "storage"; | ||
| internal: "internal"; | ||
| }>; | ||
| message: z.ZodString; | ||
| retryable: z.ZodBoolean; | ||
| status: z.ZodOptional<z.ZodNullable<z.ZodNumber>>; | ||
| details: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>; | ||
| }, z.core.$strip>; | ||
| checked: z.ZodArray<z.ZodString>; | ||
| not_checked: z.ZodArray<z.ZodString>; | ||
| generated_at: z.ZodString; | ||
| }, z.core.$strip>; | ||
| export type ErrorResult = z.infer<typeof ErrorResultSchema>; | ||
| export type ErrorDetail = z.infer<typeof ErrorDetailSchema>; |
| import { z } from 'zod'; | ||
| import { SCHEMA_VERSION } from './common.js'; | ||
| export const ErrorCategorySchema = z.enum(['input', 'auth', 'network', 'provider', 'budget', 'storage', 'internal']); | ||
| export const ErrorDetailSchema = z.object({ | ||
| code: z.string().min(1), | ||
| category: ErrorCategorySchema, | ||
| message: z.string().min(1), | ||
| retryable: z.boolean(), | ||
| status: z.number().int().nullable().optional(), | ||
| details: z.record(z.string(), z.unknown()).default({}) | ||
| }); | ||
| export const ErrorResultSchema = z.object({ | ||
| schema_version: z.literal(SCHEMA_VERSION), | ||
| gitworthy_version: z.string().min(1), | ||
| ok: z.literal(false), | ||
| command: z.string().min(1), | ||
| run_id: z.string().min(1), | ||
| error: ErrorDetailSchema, | ||
| checked: z.array(z.string()).min(1), | ||
| not_checked: z.array(z.string()).min(1), | ||
| generated_at: z.string().datetime() | ||
| }); | ||
| //# sourceMappingURL=errors.js.map |
| {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/contracts/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;AAErH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,mBAAmB;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC9C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACvD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IACzC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,KAAK,EAAE,iBAAiB;IACxB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC"} |
| import { z } from 'zod'; | ||
| export declare const FindingStrengthSchema: z.ZodEnum<{ | ||
| definitive: "definitive"; | ||
| corroborated: "corroborated"; | ||
| heuristic: "heuristic"; | ||
| }>; | ||
| export declare const FindingEffectSchema: z.ZodEnum<{ | ||
| block: "block"; | ||
| verify: "verify"; | ||
| inform: "inform"; | ||
| }>; | ||
| export declare const FindingSchema: z.ZodObject<{ | ||
| id: z.ZodString; | ||
| type: z.ZodString; | ||
| strength: z.ZodEnum<{ | ||
| definitive: "definitive"; | ||
| corroborated: "corroborated"; | ||
| heuristic: "heuristic"; | ||
| }>; | ||
| effect: z.ZodEnum<{ | ||
| block: "block"; | ||
| verify: "verify"; | ||
| inform: "inform"; | ||
| }>; | ||
| source: z.ZodString; | ||
| message: z.ZodString; | ||
| url: z.ZodOptional<z.ZodString>; | ||
| data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>; | ||
| }, z.core.$strip>; | ||
| export type Finding = z.infer<typeof FindingSchema>; | ||
| export type FindingStrength = z.infer<typeof FindingStrengthSchema>; | ||
| export type FindingEffect = z.infer<typeof FindingEffectSchema>; |
| import { z } from 'zod'; | ||
| export const FindingStrengthSchema = z.enum(['definitive', 'corroborated', 'heuristic']); | ||
| export const FindingEffectSchema = z.enum(['block', 'verify', 'inform']); | ||
| export const FindingSchema = z.object({ | ||
| id: z.string().min(1), | ||
| type: z.string().min(1), | ||
| strength: FindingStrengthSchema, | ||
| effect: FindingEffectSchema, | ||
| source: z.string().min(1), | ||
| message: z.string().min(1), | ||
| url: z.string().optional(), | ||
| data: z.record(z.string(), z.unknown()).default({}) | ||
| }); | ||
| //# sourceMappingURL=findings.js.map |
| {"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/contracts/findings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEzE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,qBAAqB;IAC/B,MAAM,EAAE,mBAAmB;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACpD,CAAC,CAAC"} |
| import { z } from 'zod'; | ||
| export declare const HuntResultSchema: z.ZodObject<{ | ||
| schema_version: z.ZodLiteral<"1.0-draft.1">; | ||
| gitworthy_version: z.ZodString; | ||
| run_id: z.ZodString; | ||
| generated_at: z.ZodString; | ||
| cached: z.ZodBoolean; | ||
| summary: z.ZodString; | ||
| checked: z.ZodArray<z.ZodString>; | ||
| not_checked: z.ZodArray<z.ZodString>; | ||
| checks: z.ZodDefault<z.ZodArray<z.ZodObject<{ | ||
| id: z.ZodString; | ||
| status: z.ZodEnum<{ | ||
| complete: "complete"; | ||
| skipped: "skipped"; | ||
| failed: "failed"; | ||
| not_applicable: "not_applicable"; | ||
| }>; | ||
| duration_ms: z.ZodOptional<z.ZodNumber>; | ||
| cached: z.ZodOptional<z.ZodBoolean>; | ||
| }, z.core.$strip>>>; | ||
| findings: z.ZodDefault<z.ZodArray<z.ZodUnknown>>; | ||
| metrics: z.ZodDefault<z.ZodObject<{ | ||
| duration_ms: z.ZodOptional<z.ZodNumber>; | ||
| github_requests: z.ZodOptional<z.ZodNumber>; | ||
| git_commands: z.ZodOptional<z.ZodNumber>; | ||
| bytes_read: z.ZodOptional<z.ZodNumber>; | ||
| cache_hits: z.ZodOptional<z.ZodNumber>; | ||
| }, z.core.$catchall<z.ZodUnknown>>>; | ||
| command: z.ZodLiteral<"hunt">; | ||
| }, z.core.$loose>; | ||
| export type HuntResult = z.infer<typeof HuntResultSchema>; |
| import { z } from 'zod'; | ||
| import { CommonResultCoreSchema } from './common.js'; | ||
| export const HuntResultSchema = CommonResultCoreSchema.extend({ | ||
| command: z.literal('hunt') | ||
| }).passthrough(); | ||
| //# sourceMappingURL=hunt.js.map |
| {"version":3,"file":"hunt.js","sourceRoot":"","sources":["../../src/contracts/hunt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,MAAM,CAAC;IAC5D,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;CAC3B,CAAC,CAAC,WAAW,EAAE,CAAC"} |
| export { SCHEMA_VERSION, SchemaVersionSchema, VerdictSchema, DispositionSchema, CheckCoverageSchema, MetricsSchema, CommonResultCoreSchema, newRunId, newDecisionId, newFindingId } from './common.js'; | ||
| export type { CommonResultCore } from './common.js'; | ||
| export { ErrorCategorySchema, ErrorDetailSchema, ErrorResultSchema } from './errors.js'; | ||
| export type { ErrorDetail, ErrorResult } from './errors.js'; | ||
| export { FindingStrengthSchema, FindingEffectSchema, FindingSchema } from './findings.js'; | ||
| export type { Finding, FindingStrength, FindingEffect } from './findings.js'; | ||
| export { NextActionSchema, TargetIdentitySchema, CheckResultSchema, LegacyCompatibilitySchema } from './check.js'; | ||
| export type { CheckResult } from './check.js'; | ||
| export { ScanResultSchema } from './scan.js'; | ||
| export type { ScanResult } from './scan.js'; | ||
| export { HuntResultSchema } from './hunt.js'; | ||
| export type { HuntResult } from './hunt.js'; | ||
| export { DoctorResultSchema } from './doctor.js'; | ||
| export type { DoctorResult } from './doctor.js'; | ||
| export { LedgerResultSchema } from './ledger.js'; | ||
| export type { LedgerResult } from './ledger.js'; | ||
| export { OutcomeEventNameSchema, OutcomeEventSchema } from './outcomes.js'; | ||
| export type { OutcomeEvent } from './outcomes.js'; | ||
| export { toCheckResult, toStampedLegacyResult, toErrorResult } from './serialize.js'; | ||
| export { RepoRefSchema, OrgOrUserLoginSchema, IssueNumberSchema, IssueNumberStringSchema, IssueRefStringSchema, ProbeSchema, SkillProfileSchema, DoctorInputSchema, BranchScanInputSchema, IssueVsMainInputSchema, ReleaseGapInputSchema, DupeClusterInputSchema, RelatedClusterInputSchema, LinkedWorkInputSchema, ContribPolicyInputSchema, WorthCheckInputSchema, ScanInputSchema, OrgScanInputSchema, HuntInputSchema, HuntInputObjectSchema, LedgerLookupInputSchema, LedgerRecordInputSchema, LedgerListInputSchema, parseToolInput, parseArg, parseIssueRef } from './inputs.js'; | ||
| export type { IssueRef } from './inputs.js'; |
| export { SCHEMA_VERSION, SchemaVersionSchema, VerdictSchema, DispositionSchema, CheckCoverageSchema, MetricsSchema, CommonResultCoreSchema, newRunId, newDecisionId, newFindingId } from './common.js'; | ||
| export { ErrorCategorySchema, ErrorDetailSchema, ErrorResultSchema } from './errors.js'; | ||
| export { FindingStrengthSchema, FindingEffectSchema, FindingSchema } from './findings.js'; | ||
| export { NextActionSchema, TargetIdentitySchema, CheckResultSchema, LegacyCompatibilitySchema } from './check.js'; | ||
| export { ScanResultSchema } from './scan.js'; | ||
| export { HuntResultSchema } from './hunt.js'; | ||
| export { DoctorResultSchema } from './doctor.js'; | ||
| export { LedgerResultSchema } from './ledger.js'; | ||
| export { OutcomeEventNameSchema, OutcomeEventSchema } from './outcomes.js'; | ||
| export { toCheckResult, toStampedLegacyResult, toErrorResult } from './serialize.js'; | ||
| export { RepoRefSchema, OrgOrUserLoginSchema, IssueNumberSchema, IssueNumberStringSchema, IssueRefStringSchema, ProbeSchema, SkillProfileSchema, DoctorInputSchema, BranchScanInputSchema, IssueVsMainInputSchema, ReleaseGapInputSchema, DupeClusterInputSchema, RelatedClusterInputSchema, LinkedWorkInputSchema, ContribPolicyInputSchema, WorthCheckInputSchema, ScanInputSchema, OrgScanInputSchema, HuntInputSchema, HuntInputObjectSchema, LedgerLookupInputSchema, LedgerRecordInputSchema, LedgerListInputSchema, parseToolInput, parseArg, parseIssueRef } from './inputs.js'; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,QAAQ,EACR,aAAa,EACb,YAAY,EACb,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGxF,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG1F,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAGlH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAG7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAG7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAG3E,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAErF,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,cAAc,EACd,QAAQ,EACR,aAAa,EACd,MAAM,aAAa,CAAC"} |
| import { z } from 'zod'; | ||
| export declare const RepoRefSchema: z.ZodString; | ||
| export declare const OrgOrUserLoginSchema: z.ZodString; | ||
| export declare const IssueNumberSchema: z.ZodNumber; | ||
| /** Coerces a CLI positional string (e.g. "123") into a validated issue number. */ | ||
| export declare const IssueNumberStringSchema: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<number, string>>, z.ZodNumber>; | ||
| export declare const IssueRefStringSchema: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<{ | ||
| repo: string; | ||
| issue_number: number; | ||
| }, string>>, z.ZodObject<{ | ||
| repo: z.ZodString; | ||
| issue_number: z.ZodNumber; | ||
| }, z.core.$strip>>; | ||
| export type IssueRef = z.infer<typeof IssueRefStringSchema>; | ||
| export declare const ProbeSchema: z.ZodObject<{ | ||
| file_glob: z.ZodOptional<z.ZodString>; | ||
| contains: z.ZodOptional<z.ZodString>; | ||
| }, z.core.$strip>; | ||
| export declare const SkillProfileSchema: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{ | ||
| languages: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| topics: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| avoid: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| }, z.core.$strip>]>>; | ||
| export declare const DoctorInputSchema: z.ZodObject<{ | ||
| probe_repo: z.ZodOptional<z.ZodString>; | ||
| probe_issue_number: z.ZodOptional<z.ZodNumber>; | ||
| }, z.core.$strip>; | ||
| export declare const BranchScanInputSchema: z.ZodObject<{ | ||
| repo: z.ZodString; | ||
| keywords: z.ZodArray<z.ZodString>; | ||
| issue_number: z.ZodOptional<z.ZodNumber>; | ||
| max_age_days: z.ZodOptional<z.ZodNumber>; | ||
| force_refresh: z.ZodOptional<z.ZodBoolean>; | ||
| }, z.core.$strip>; | ||
| export declare const IssueVsMainInputSchema: z.ZodObject<{ | ||
| repo: z.ZodString; | ||
| issue_number: z.ZodNumber; | ||
| }, z.core.$strip>; | ||
| export declare const ReleaseGapInputSchema: z.ZodObject<{ | ||
| repo: z.ZodString; | ||
| npm_package: z.ZodString; | ||
| probe: z.ZodOptional<z.ZodObject<{ | ||
| file_glob: z.ZodOptional<z.ZodString>; | ||
| contains: z.ZodOptional<z.ZodString>; | ||
| }, z.core.$strip>>; | ||
| probe_template: z.ZodOptional<z.ZodString>; | ||
| force_refresh: z.ZodOptional<z.ZodBoolean>; | ||
| }, z.core.$strip>; | ||
| export declare const DupeClusterInputSchema: z.ZodObject<{ | ||
| repo: z.ZodString; | ||
| issue_number: z.ZodNumber; | ||
| max_candidates: z.ZodOptional<z.ZodNumber>; | ||
| }, z.core.$strip>; | ||
| export declare const RelatedClusterInputSchema: z.ZodObject<{ | ||
| repo: z.ZodString; | ||
| issue_number: z.ZodOptional<z.ZodNumber>; | ||
| label: z.ZodOptional<z.ZodString>; | ||
| keywords: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| limit: z.ZodOptional<z.ZodNumber>; | ||
| min_score: z.ZodOptional<z.ZodNumber>; | ||
| }, z.core.$strip>; | ||
| export declare const LinkedWorkInputSchema: z.ZodObject<{ | ||
| repo: z.ZodString; | ||
| issue_number: z.ZodNumber; | ||
| }, z.core.$strip>; | ||
| export declare const ContribPolicyInputSchema: z.ZodObject<{ | ||
| repo: z.ZodString; | ||
| force_refresh: z.ZodOptional<z.ZodBoolean>; | ||
| }, z.core.$strip>; | ||
| export declare const WorthCheckInputSchema: z.ZodObject<{ | ||
| repo: z.ZodString; | ||
| issue_number: z.ZodNumber; | ||
| npm_package: z.ZodOptional<z.ZodString>; | ||
| probe: z.ZodOptional<z.ZodObject<{ | ||
| file_glob: z.ZodOptional<z.ZodString>; | ||
| contains: z.ZodOptional<z.ZodString>; | ||
| }, z.core.$strip>>; | ||
| probe_template: z.ZodOptional<z.ZodString>; | ||
| }, z.core.$strip>; | ||
| export declare const ScanInputSchema: z.ZodObject<{ | ||
| repo: z.ZodString; | ||
| label: z.ZodOptional<z.ZodString>; | ||
| keywords: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| since: z.ZodOptional<z.ZodString>; | ||
| limit: z.ZodOptional<z.ZodNumber>; | ||
| land_hints: z.ZodOptional<z.ZodBoolean>; | ||
| skill_profile: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{ | ||
| languages: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| topics: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| avoid: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| }, z.core.$strip>]>>; | ||
| }, z.core.$strip>; | ||
| export declare const OrgScanInputSchema: z.ZodObject<{ | ||
| org: z.ZodString; | ||
| label: z.ZodOptional<z.ZodString>; | ||
| keywords: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| since: z.ZodOptional<z.ZodString>; | ||
| limit: z.ZodOptional<z.ZodNumber>; | ||
| max_repos: z.ZodOptional<z.ZodNumber>; | ||
| land_hints: z.ZodOptional<z.ZodBoolean>; | ||
| skill_profile: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{ | ||
| languages: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| topics: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| avoid: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| }, z.core.$strip>]>>; | ||
| }, z.core.$strip>; | ||
| export declare const HuntInputObjectSchema: z.ZodObject<{ | ||
| repo: z.ZodOptional<z.ZodString>; | ||
| org: z.ZodOptional<z.ZodString>; | ||
| label: z.ZodOptional<z.ZodString>; | ||
| keywords: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| since: z.ZodOptional<z.ZodString>; | ||
| scan_limit: z.ZodOptional<z.ZodNumber>; | ||
| max_repos: z.ZodOptional<z.ZodNumber>; | ||
| max_checks: z.ZodOptional<z.ZodNumber>; | ||
| land_hints: z.ZodOptional<z.ZodBoolean>; | ||
| skip_likely_land_only: z.ZodOptional<z.ZodBoolean>; | ||
| skip_soft_ask: z.ZodOptional<z.ZodBoolean>; | ||
| skip_assigned: z.ZodOptional<z.ZodBoolean>; | ||
| skip_ledger_skip: z.ZodOptional<z.ZodBoolean>; | ||
| skip_policy_gate: z.ZodOptional<z.ZodBoolean>; | ||
| skill_profile: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{ | ||
| languages: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| topics: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| avoid: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| }, z.core.$strip>]>>; | ||
| npm_package: z.ZodOptional<z.ZodString>; | ||
| }, z.core.$strip>; | ||
| /** hunt requires at least one of repo/org to be present; both may still be supplied (org wins). */ | ||
| export declare const HuntInputSchema: z.ZodObject<{ | ||
| repo: z.ZodOptional<z.ZodString>; | ||
| org: z.ZodOptional<z.ZodString>; | ||
| label: z.ZodOptional<z.ZodString>; | ||
| keywords: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| since: z.ZodOptional<z.ZodString>; | ||
| scan_limit: z.ZodOptional<z.ZodNumber>; | ||
| max_repos: z.ZodOptional<z.ZodNumber>; | ||
| max_checks: z.ZodOptional<z.ZodNumber>; | ||
| land_hints: z.ZodOptional<z.ZodBoolean>; | ||
| skip_likely_land_only: z.ZodOptional<z.ZodBoolean>; | ||
| skip_soft_ask: z.ZodOptional<z.ZodBoolean>; | ||
| skip_assigned: z.ZodOptional<z.ZodBoolean>; | ||
| skip_ledger_skip: z.ZodOptional<z.ZodBoolean>; | ||
| skip_policy_gate: z.ZodOptional<z.ZodBoolean>; | ||
| skill_profile: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{ | ||
| languages: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| topics: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| avoid: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| }, z.core.$strip>]>>; | ||
| npm_package: z.ZodOptional<z.ZodString>; | ||
| }, z.core.$strip>; | ||
| export declare const LedgerLookupInputSchema: z.ZodObject<{ | ||
| repo: z.ZodString; | ||
| issue_number: z.ZodNumber; | ||
| }, z.core.$strip>; | ||
| export declare const LedgerRecordInputSchema: z.ZodObject<{ | ||
| repo: z.ZodString; | ||
| issue_number: z.ZodNumber; | ||
| verdict: z.ZodOptional<z.ZodEnum<{ | ||
| ACT: "ACT"; | ||
| VERIFY: "VERIFY"; | ||
| SKIP: "SKIP"; | ||
| }>>; | ||
| disposition: z.ZodOptional<z.ZodEnum<{ | ||
| greenfield: "greenfield"; | ||
| land_only: "land_only"; | ||
| claim_first: "claim_first"; | ||
| blocked: "blocked"; | ||
| crowded: "crowded"; | ||
| review: "review"; | ||
| }>>; | ||
| quality_score: z.ZodOptional<z.ZodNumber>; | ||
| notes: z.ZodOptional<z.ZodString>; | ||
| source: z.ZodOptional<z.ZodString>; | ||
| }, z.core.$strip>; | ||
| export declare const LedgerListInputSchema: z.ZodObject<{ | ||
| repo: z.ZodOptional<z.ZodString>; | ||
| limit: z.ZodOptional<z.ZodNumber>; | ||
| }, z.core.$strip>; | ||
| /** Validates MCP/CLI object input against a shared schema, raising a stable-coded GitworthyError instead of a bare ZodError. */ | ||
| export declare function parseToolInput<T>(schema: z.ZodType<T>, value: unknown): T; | ||
| /** Validates a single CLI positional value against a schema, raising a stable-coded GitworthyError. */ | ||
| export declare function parseArg<T>(schema: z.ZodType<T>, value: unknown, code: string): T; | ||
| /** Parses a CLI/MCP issue ref like "owner/repo#123" into { repo, issue_number }. */ | ||
| export declare function parseIssueRef(value: string): IssueRef; |
| import { z } from 'zod'; | ||
| import { GitworthyError } from '../core/envelope.js'; | ||
| import { DispositionSchema, VerdictSchema } from './common.js'; | ||
| /** | ||
| * Shared input contracts for the CLI and MCP boundaries. Both surfaces must reject malformed | ||
| * input with the same stable error codes before any network or filesystem access happens. | ||
| */ | ||
| /** GitHub owner/login: starts/ends alphanumeric; hyphens allowed in the middle. */ | ||
| const OWNER_PATTERN = '[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?'; | ||
| /** | ||
| * GitHub repository name: may start with `.` (e.g. org `.github` community-health repos) | ||
| * or alphanumeric/`_`; may contain `.`/`_`/`-`; must not end with `.` or `-`. | ||
| */ | ||
| const REPO_NAME_PATTERN = '[A-Za-z0-9._](?:[A-Za-z0-9._-]*[A-Za-z0-9])?'; | ||
| const REPO_PATTERN = new RegExp(`^${OWNER_PATTERN}\\/${REPO_NAME_PATTERN}$`); | ||
| const LOGIN_PATTERN = new RegExp(`^${OWNER_PATTERN}$`); | ||
| const ISSUE_REF_PATTERN = /^([^\s#]+)#(\d+)$/; | ||
| // GitHub caps logins at 39 chars and repo names at 100 chars; capping the combined | ||
| // "owner/repo" string rejects a hostile/fuzzed unbounded-length value before it can | ||
| // ever be used to build a clone URL or API request path. | ||
| export const RepoRefSchema = z.string() | ||
| .trim() | ||
| .min(3, 'repo must not be empty.') | ||
| .max(140, 'repo must be 140 characters or fewer.') | ||
| .regex(REPO_PATTERN, 'Expected owner/repo (e.g. octocat/Hello-World).'); | ||
| export const OrgOrUserLoginSchema = z.string() | ||
| .trim() | ||
| .min(1, 'org must not be empty.') | ||
| .max(39, 'org/user login must be 39 characters or fewer.') | ||
| .regex(LOGIN_PATTERN, 'Expected an org or user login without a slash (e.g. octocat).'); | ||
| export const IssueNumberSchema = z.number() | ||
| .int('issue_number must be an integer.') | ||
| .positive('issue_number must be a positive integer.'); | ||
| /** Coerces a CLI positional string (e.g. "123") into a validated issue number. */ | ||
| export const IssueNumberStringSchema = z.string() | ||
| .trim() | ||
| .regex(/^\d+$/, 'issue_number must be a positive integer.') | ||
| .transform((value) => Number(value)) | ||
| .pipe(IssueNumberSchema); | ||
| export const IssueRefStringSchema = z.string() | ||
| .trim() | ||
| .regex(ISSUE_REF_PATTERN, 'Expected issue ref like owner/repo#123.') | ||
| .transform((value) => { | ||
| const match = value.match(ISSUE_REF_PATTERN); | ||
| return { repo: match?.[1] ?? '', issue_number: Number(match?.[2] ?? Number.NaN) }; | ||
| }) | ||
| .pipe(z.object({ repo: RepoRefSchema, issue_number: IssueNumberSchema })); | ||
| export const ProbeSchema = z.object({ | ||
| file_glob: z.string().optional(), | ||
| contains: z.string().optional() | ||
| }); | ||
| export const SkillProfileSchema = z.union([ | ||
| z.string(), | ||
| z.object({ | ||
| languages: z.array(z.string()).optional(), | ||
| topics: z.array(z.string()).optional(), | ||
| avoid: z.array(z.string()).optional() | ||
| }) | ||
| ]).optional(); | ||
| const KeywordsSchema = z.array(z.string()).optional(); | ||
| const LimitSchema = z.number().int().positive(); | ||
| export const DoctorInputSchema = z.object({ | ||
| probe_repo: RepoRefSchema.optional(), | ||
| probe_issue_number: IssueNumberSchema.optional() | ||
| }); | ||
| export const BranchScanInputSchema = z.object({ | ||
| repo: RepoRefSchema, | ||
| keywords: z.array(z.string()).min(1, 'keywords must include at least one entry.'), | ||
| issue_number: IssueNumberSchema.optional(), | ||
| max_age_days: LimitSchema.optional(), | ||
| force_refresh: z.boolean().optional() | ||
| }); | ||
| export const IssueVsMainInputSchema = z.object({ | ||
| repo: RepoRefSchema, | ||
| issue_number: IssueNumberSchema | ||
| }); | ||
| export const ReleaseGapInputSchema = z.object({ | ||
| repo: RepoRefSchema, | ||
| npm_package: z.string().min(1, 'npm_package must not be empty.'), | ||
| probe: ProbeSchema.optional(), | ||
| probe_template: z.string().optional(), | ||
| force_refresh: z.boolean().optional() | ||
| }); | ||
| export const DupeClusterInputSchema = z.object({ | ||
| repo: RepoRefSchema, | ||
| issue_number: IssueNumberSchema, | ||
| max_candidates: LimitSchema.optional() | ||
| }); | ||
| export const RelatedClusterInputSchema = z.object({ | ||
| repo: RepoRefSchema, | ||
| issue_number: IssueNumberSchema.optional(), | ||
| label: z.string().optional(), | ||
| keywords: KeywordsSchema, | ||
| limit: LimitSchema.optional(), | ||
| min_score: z.number().min(0).max(1).optional() | ||
| }); | ||
| export const LinkedWorkInputSchema = z.object({ | ||
| repo: RepoRefSchema, | ||
| issue_number: IssueNumberSchema | ||
| }); | ||
| export const ContribPolicyInputSchema = z.object({ | ||
| repo: RepoRefSchema, | ||
| force_refresh: z.boolean().optional() | ||
| }); | ||
| export const WorthCheckInputSchema = z.object({ | ||
| repo: RepoRefSchema, | ||
| issue_number: IssueNumberSchema, | ||
| npm_package: z.string().optional(), | ||
| probe: ProbeSchema.optional(), | ||
| probe_template: z.string().optional() | ||
| }); | ||
| export const ScanInputSchema = z.object({ | ||
| repo: RepoRefSchema, | ||
| label: z.string().optional(), | ||
| keywords: KeywordsSchema, | ||
| since: z.string().optional(), | ||
| limit: LimitSchema.optional(), | ||
| land_hints: z.boolean().optional(), | ||
| skill_profile: SkillProfileSchema | ||
| }); | ||
| export const OrgScanInputSchema = z.object({ | ||
| org: OrgOrUserLoginSchema, | ||
| label: z.string().optional(), | ||
| keywords: KeywordsSchema, | ||
| since: z.string().optional(), | ||
| limit: LimitSchema.optional(), | ||
| max_repos: LimitSchema.optional(), | ||
| land_hints: z.boolean().optional(), | ||
| skill_profile: SkillProfileSchema | ||
| }); | ||
| export const HuntInputObjectSchema = z.object({ | ||
| repo: RepoRefSchema.optional(), | ||
| org: OrgOrUserLoginSchema.optional(), | ||
| label: z.string().optional(), | ||
| keywords: KeywordsSchema, | ||
| since: z.string().optional(), | ||
| scan_limit: LimitSchema.optional(), | ||
| max_repos: LimitSchema.optional(), | ||
| max_checks: LimitSchema.optional(), | ||
| land_hints: z.boolean().optional(), | ||
| skip_likely_land_only: z.boolean().optional(), | ||
| skip_soft_ask: z.boolean().optional(), | ||
| skip_assigned: z.boolean().optional(), | ||
| skip_ledger_skip: z.boolean().optional(), | ||
| skip_policy_gate: z.boolean().optional(), | ||
| skill_profile: SkillProfileSchema, | ||
| npm_package: z.string().optional() | ||
| }); | ||
| /** hunt requires at least one of repo/org to be present; both may still be supplied (org wins). */ | ||
| export const HuntInputSchema = HuntInputObjectSchema.refine((value) => Boolean(value.repo) || Boolean(value.org), { | ||
| message: 'hunt requires either repo or org.' | ||
| }); | ||
| export const LedgerLookupInputSchema = z.object({ | ||
| repo: RepoRefSchema, | ||
| issue_number: IssueNumberSchema | ||
| }); | ||
| export const LedgerRecordInputSchema = z.object({ | ||
| repo: RepoRefSchema, | ||
| issue_number: IssueNumberSchema, | ||
| verdict: VerdictSchema.optional(), | ||
| disposition: DispositionSchema.optional(), | ||
| quality_score: z.number().min(0).max(1).optional(), | ||
| notes: z.string().optional(), | ||
| source: z.string().optional() | ||
| }); | ||
| export const LedgerListInputSchema = z.object({ | ||
| repo: RepoRefSchema.optional(), | ||
| limit: LimitSchema.optional() | ||
| }); | ||
| function codeForField(field) { | ||
| if (field === 'repo') | ||
| return 'invalid_repo_ref'; | ||
| if (field === 'org') | ||
| return 'invalid_org_ref'; | ||
| if (field === 'issue_number') | ||
| return 'invalid_issue_number'; | ||
| return 'invalid_usage'; | ||
| } | ||
| /** Validates MCP/CLI object input against a shared schema, raising a stable-coded GitworthyError instead of a bare ZodError. */ | ||
| export function parseToolInput(schema, value) { | ||
| const result = schema.safeParse(value); | ||
| if (result.success) | ||
| return result.data; | ||
| const issue = result.error.issues[0]; | ||
| const field = issue?.path?.[0]; | ||
| const label = issue && issue.path.length > 0 ? `${issue.path.join('.')}: ` : ''; | ||
| const message = `${label}${issue?.message ?? 'invalid input'}`; | ||
| throw new GitworthyError({ code: codeForField(field), message, not_checked: [message] }); | ||
| } | ||
| /** Validates a single CLI positional value against a schema, raising a stable-coded GitworthyError. */ | ||
| export function parseArg(schema, value, code) { | ||
| const result = schema.safeParse(value); | ||
| if (result.success) | ||
| return result.data; | ||
| const message = result.error.issues[0]?.message ?? 'invalid input'; | ||
| throw new GitworthyError({ code, message, not_checked: [message] }); | ||
| } | ||
| /** Parses a CLI/MCP issue ref like "owner/repo#123" into { repo, issue_number }. */ | ||
| export function parseIssueRef(value) { | ||
| return parseArg(IssueRefStringSchema, value, 'invalid_issue_ref'); | ||
| } | ||
| //# sourceMappingURL=inputs.js.map |
| {"version":3,"file":"inputs.js","sourceRoot":"","sources":["../../src/contracts/inputs.ts"],"names":[],"mappings":"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"} |
| import { z } from 'zod'; | ||
| export declare const LedgerResultSchema: z.ZodObject<{ | ||
| schema_version: z.ZodLiteral<"1.0-draft.1">; | ||
| gitworthy_version: z.ZodString; | ||
| run_id: z.ZodString; | ||
| generated_at: z.ZodString; | ||
| cached: z.ZodBoolean; | ||
| summary: z.ZodString; | ||
| checked: z.ZodArray<z.ZodString>; | ||
| not_checked: z.ZodArray<z.ZodString>; | ||
| checks: z.ZodDefault<z.ZodArray<z.ZodObject<{ | ||
| id: z.ZodString; | ||
| status: z.ZodEnum<{ | ||
| complete: "complete"; | ||
| skipped: "skipped"; | ||
| failed: "failed"; | ||
| not_applicable: "not_applicable"; | ||
| }>; | ||
| duration_ms: z.ZodOptional<z.ZodNumber>; | ||
| cached: z.ZodOptional<z.ZodBoolean>; | ||
| }, z.core.$strip>>>; | ||
| findings: z.ZodDefault<z.ZodArray<z.ZodUnknown>>; | ||
| metrics: z.ZodDefault<z.ZodObject<{ | ||
| duration_ms: z.ZodOptional<z.ZodNumber>; | ||
| github_requests: z.ZodOptional<z.ZodNumber>; | ||
| git_commands: z.ZodOptional<z.ZodNumber>; | ||
| bytes_read: z.ZodOptional<z.ZodNumber>; | ||
| cache_hits: z.ZodOptional<z.ZodNumber>; | ||
| }, z.core.$catchall<z.ZodUnknown>>>; | ||
| command: z.ZodEnum<{ | ||
| ledger_list: "ledger_list"; | ||
| ledger_show: "ledger_show"; | ||
| ledger_record: "ledger_record"; | ||
| ledger_lookup: "ledger_lookup"; | ||
| }>; | ||
| }, z.core.$loose>; | ||
| export type LedgerResult = z.infer<typeof LedgerResultSchema>; |
| import { z } from 'zod'; | ||
| import { CommonResultCoreSchema } from './common.js'; | ||
| export const LedgerResultSchema = CommonResultCoreSchema.extend({ | ||
| command: z.enum(['ledger_list', 'ledger_show', 'ledger_record', 'ledger_lookup']) | ||
| }).passthrough(); | ||
| //# sourceMappingURL=ledger.js.map |
| {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/contracts/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,MAAM,CAAC;IAC9D,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;CAClF,CAAC,CAAC,WAAW,EAAE,CAAC"} |
| import { z } from 'zod'; | ||
| /** Outcome event schema reserved for 0.5.0 storage; defined early for contract stability. */ | ||
| export declare const OutcomeEventNameSchema: z.ZodEnum<{ | ||
| merged: "merged"; | ||
| shortlisted: "shortlisted"; | ||
| selected: "selected"; | ||
| claim_requested: "claim_requested"; | ||
| claimed: "claimed"; | ||
| repro_confirmed: "repro_confirmed"; | ||
| repro_failed: "repro_failed"; | ||
| patch_started: "patch_started"; | ||
| comment_posted: "comment_posted"; | ||
| pr_opened: "pr_opened"; | ||
| closed_unmerged: "closed_unmerged"; | ||
| rejected: "rejected"; | ||
| abandoned: "abandoned"; | ||
| duplicate_confirmed: "duplicate_confirmed"; | ||
| already_fixed_confirmed: "already_fixed_confirmed"; | ||
| maintainer_redirected: "maintainer_redirected"; | ||
| }>; | ||
| export declare const OutcomeEventSchema: z.ZodObject<{ | ||
| event_version: z.ZodLiteral<1>; | ||
| event_id: z.ZodString; | ||
| decision_id: z.ZodString; | ||
| run_id: z.ZodString; | ||
| target: z.ZodObject<{ | ||
| repo: z.ZodString; | ||
| issue_number: z.ZodNumber; | ||
| }, z.core.$strip>; | ||
| event: z.ZodEnum<{ | ||
| merged: "merged"; | ||
| shortlisted: "shortlisted"; | ||
| selected: "selected"; | ||
| claim_requested: "claim_requested"; | ||
| claimed: "claimed"; | ||
| repro_confirmed: "repro_confirmed"; | ||
| repro_failed: "repro_failed"; | ||
| patch_started: "patch_started"; | ||
| comment_posted: "comment_posted"; | ||
| pr_opened: "pr_opened"; | ||
| closed_unmerged: "closed_unmerged"; | ||
| rejected: "rejected"; | ||
| abandoned: "abandoned"; | ||
| duplicate_confirmed: "duplicate_confirmed"; | ||
| already_fixed_confirmed: "already_fixed_confirmed"; | ||
| maintainer_redirected: "maintainer_redirected"; | ||
| }>; | ||
| occurred_at: z.ZodString; | ||
| source: z.ZodString; | ||
| data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>; | ||
| notes: z.ZodDefault<z.ZodString>; | ||
| }, z.core.$strip>; | ||
| export type OutcomeEvent = z.infer<typeof OutcomeEventSchema>; |
| import { z } from 'zod'; | ||
| /** Outcome event schema reserved for 0.5.0 storage; defined early for contract stability. */ | ||
| export const OutcomeEventNameSchema = z.enum([ | ||
| 'shortlisted', | ||
| 'selected', | ||
| 'claim_requested', | ||
| 'claimed', | ||
| 'repro_confirmed', | ||
| 'repro_failed', | ||
| 'patch_started', | ||
| 'comment_posted', | ||
| 'pr_opened', | ||
| 'merged', | ||
| 'closed_unmerged', | ||
| 'rejected', | ||
| 'abandoned', | ||
| 'duplicate_confirmed', | ||
| 'already_fixed_confirmed', | ||
| 'maintainer_redirected' | ||
| ]); | ||
| export const OutcomeEventSchema = z.object({ | ||
| event_version: z.literal(1), | ||
| event_id: z.string().min(1), | ||
| decision_id: z.string().min(1), | ||
| run_id: z.string().min(1), | ||
| target: z.object({ | ||
| repo: z.string().min(1), | ||
| issue_number: z.number().int().positive() | ||
| }), | ||
| event: OutcomeEventNameSchema, | ||
| occurred_at: z.string().datetime(), | ||
| source: z.string().min(1), | ||
| data: z.record(z.string(), z.unknown()).default({}), | ||
| notes: z.string().default('') | ||
| }); | ||
| //# sourceMappingURL=outcomes.js.map |
| {"version":3,"file":"outcomes.js","sourceRoot":"","sources":["../../src/contracts/outcomes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,6FAA6F;AAC7F,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC3C,aAAa;IACb,UAAU;IACV,iBAAiB;IACjB,SAAS;IACT,iBAAiB;IACjB,cAAc;IACd,eAAe;IACf,gBAAgB;IAChB,WAAW;IACX,QAAQ;IACR,iBAAiB;IACjB,UAAU;IACV,WAAW;IACX,qBAAqB;IACrB,yBAAyB;IACzB,uBAAuB;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KAC1C,CAAC;IACF,KAAK,EAAE,sBAAsB;IAC7B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACnD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CAC9B,CAAC,CAAC"} |
| import { z } from 'zod'; | ||
| export declare const ScanResultSchema: z.ZodObject<{ | ||
| schema_version: z.ZodLiteral<"1.0-draft.1">; | ||
| gitworthy_version: z.ZodString; | ||
| run_id: z.ZodString; | ||
| generated_at: z.ZodString; | ||
| cached: z.ZodBoolean; | ||
| summary: z.ZodString; | ||
| checked: z.ZodArray<z.ZodString>; | ||
| not_checked: z.ZodArray<z.ZodString>; | ||
| checks: z.ZodDefault<z.ZodArray<z.ZodObject<{ | ||
| id: z.ZodString; | ||
| status: z.ZodEnum<{ | ||
| complete: "complete"; | ||
| skipped: "skipped"; | ||
| failed: "failed"; | ||
| not_applicable: "not_applicable"; | ||
| }>; | ||
| duration_ms: z.ZodOptional<z.ZodNumber>; | ||
| cached: z.ZodOptional<z.ZodBoolean>; | ||
| }, z.core.$strip>>>; | ||
| findings: z.ZodDefault<z.ZodArray<z.ZodUnknown>>; | ||
| metrics: z.ZodDefault<z.ZodObject<{ | ||
| duration_ms: z.ZodOptional<z.ZodNumber>; | ||
| github_requests: z.ZodOptional<z.ZodNumber>; | ||
| git_commands: z.ZodOptional<z.ZodNumber>; | ||
| bytes_read: z.ZodOptional<z.ZodNumber>; | ||
| cache_hits: z.ZodOptional<z.ZodNumber>; | ||
| }, z.core.$catchall<z.ZodUnknown>>>; | ||
| command: z.ZodLiteral<"scan">; | ||
| }, z.core.$loose>; | ||
| export type ScanResult = z.infer<typeof ScanResultSchema>; |
| import { z } from 'zod'; | ||
| import { CommonResultCoreSchema } from './common.js'; | ||
| export const ScanResultSchema = CommonResultCoreSchema.extend({ | ||
| command: z.literal('scan') | ||
| }).passthrough(); | ||
| //# sourceMappingURL=scan.js.map |
| {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/contracts/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,MAAM,CAAC;IAC5D,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;CAC3B,CAAC,CAAC,WAAW,EAAE,CAAC"} |
| import { GitworthyError } from '../core/envelope.js'; | ||
| import { CheckResult } from './check.js'; | ||
| import { ErrorResult } from './errors.js'; | ||
| export type CommandName = 'check' | 'scan' | 'hunt' | 'doctor' | 'ledger_list' | 'ledger_show' | 'ledger_record' | 'ledger_lookup' | string; | ||
| type LegacyEnvelopeLike = { | ||
| verdict_summary?: string; | ||
| evidence?: Array<Record<string, unknown>>; | ||
| signals?: string[]; | ||
| checked?: string[]; | ||
| not_checked?: string[]; | ||
| cached?: boolean; | ||
| fetched_at?: string; | ||
| verdict?: 'ACT' | 'VERIFY' | 'SKIP'; | ||
| disposition?: CheckResult['disposition']; | ||
| reasons?: string[]; | ||
| sub_results?: unknown[]; | ||
| timings_ms?: Record<string, number>; | ||
| perf?: Record<string, unknown>; | ||
| }; | ||
| /** Lift a legacy worth_check envelope into the versioned check contract (compat fields preserved). */ | ||
| export declare function toCheckResult(legacy: LegacyEnvelopeLike & Record<string, unknown>, input: { | ||
| repo: string; | ||
| issue_number: number; | ||
| }): CheckResult; | ||
| export declare function toStampedLegacyResult(command: CommandName, legacy: Record<string, unknown>): { | ||
| schema_version: "1.0-draft.1"; | ||
| gitworthy_version: string; | ||
| command: string; | ||
| run_id: string; | ||
| generated_at: string; | ||
| cached: boolean; | ||
| summary: string; | ||
| checked: any[]; | ||
| not_checked: any[]; | ||
| checks: any[]; | ||
| findings: any[]; | ||
| metrics: object; | ||
| }; | ||
| export declare function toErrorResult(input: { | ||
| command: string; | ||
| error: GitworthyError | Error | unknown; | ||
| run_id?: string; | ||
| }): ErrorResult; | ||
| export {}; |
| import { ZodError } from 'zod'; | ||
| import { packageVersion } from '../lib/package-meta.js'; | ||
| import { GitworthyError } from '../core/envelope.js'; | ||
| import { CheckResultSchema } from './check.js'; | ||
| import { SCHEMA_VERSION, newDecisionId, newRunId } from './common.js'; | ||
| import { ErrorResultSchema } from './errors.js'; | ||
| import { DoctorResultSchema } from './doctor.js'; | ||
| import { HuntResultSchema } from './hunt.js'; | ||
| import { LedgerResultSchema } from './ledger.js'; | ||
| import { ScanResultSchema } from './scan.js'; | ||
| function asRecord(value) { | ||
| return value !== null && typeof value === 'object' && !Array.isArray(value) ? value : {}; | ||
| } | ||
| function mapSubResultsToChecks(subResults) { | ||
| if (!subResults) | ||
| return []; | ||
| return subResults.map((item) => { | ||
| const row = asRecord(item); | ||
| const name = typeof row.name === 'string' ? row.name : 'unknown'; | ||
| if (row.ok === true) { | ||
| const result = asRecord(row.result); | ||
| return { | ||
| id: name, | ||
| status: 'complete', | ||
| cached: typeof result.cached === 'boolean' ? result.cached : undefined | ||
| }; | ||
| } | ||
| return { id: name, status: 'failed' }; | ||
| }); | ||
| } | ||
| function nextActionsFor(legacy) { | ||
| if (legacy.verdict === 'SKIP' && legacy.disposition === 'land_only') { | ||
| return [{ kind: 'land', message: 'Review or help land the open linked PR. Do not open a parallel implementation.' }]; | ||
| } | ||
| if (legacy.verdict === 'VERIFY' && legacy.disposition === 'claim_first') { | ||
| return [{ kind: 'coordinate', message: 'Request assignment or follow the claim protocol before opening a pull request.' }]; | ||
| } | ||
| if (legacy.verdict === 'VERIFY') { | ||
| return [{ kind: 'verify', message: legacy.verdict_summary ?? 'Perform the named human verification steps before investing.' }]; | ||
| } | ||
| if (legacy.verdict === 'ACT') { | ||
| return [{ kind: 'proceed', message: 'Completed mandatory checks found no reason to stop; still re-check before a public action.' }]; | ||
| } | ||
| return []; | ||
| } | ||
| /** Lift a legacy worth_check envelope into the versioned check contract (compat fields preserved). */ | ||
| export function toCheckResult(legacy, input) { | ||
| const generatedAt = typeof legacy.fetched_at === 'string' ? legacy.fetched_at : new Date().toISOString(); | ||
| const summary = legacy.verdict_summary ?? legacy.verdict ?? 'check complete'; | ||
| const duration = legacy.timings_ms ? Object.values(legacy.timings_ms).reduce((sum, value) => sum + value, 0) : undefined; | ||
| const payload = { | ||
| schema_version: SCHEMA_VERSION, | ||
| gitworthy_version: packageVersion(), | ||
| command: 'check', | ||
| run_id: newRunId(), | ||
| decision_id: newDecisionId(), | ||
| generated_at: generatedAt, | ||
| cached: legacy.cached ?? false, | ||
| summary, | ||
| checked: legacy.checked ?? ['check'], | ||
| not_checked: legacy.not_checked ?? ['limitations not recorded'], | ||
| checks: mapSubResultsToChecks(legacy.sub_results), | ||
| findings: [], | ||
| metrics: { duration_ms: duration }, | ||
| target: { | ||
| input_repo: input.repo, | ||
| canonical_repo: input.repo, | ||
| issue_number: input.issue_number, | ||
| issue_url: `https://github.com/${input.repo}/issues/${input.issue_number}` | ||
| }, | ||
| verdict: legacy.verdict ?? 'VERIFY', | ||
| disposition: legacy.disposition ?? 'review', | ||
| next_actions: nextActionsFor(legacy), | ||
| verdict_summary: legacy.verdict_summary, | ||
| evidence: legacy.evidence, | ||
| signals: legacy.signals, | ||
| reasons: legacy.reasons, | ||
| sub_results: legacy.sub_results, | ||
| timings_ms: legacy.timings_ms, | ||
| perf: legacy.perf, | ||
| fetched_at: legacy.fetched_at | ||
| }; | ||
| return CheckResultSchema.parse(payload); | ||
| } | ||
| export function toStampedLegacyResult(command, legacy) { | ||
| const generatedAt = typeof legacy.fetched_at === 'string' ? legacy.fetched_at : new Date().toISOString(); | ||
| const summary = typeof legacy.verdict_summary === 'string' ? legacy.verdict_summary : `${command} complete`; | ||
| const stamped = { | ||
| ...legacy, | ||
| schema_version: SCHEMA_VERSION, | ||
| gitworthy_version: packageVersion(), | ||
| command, | ||
| run_id: newRunId(), | ||
| generated_at: generatedAt, | ||
| cached: typeof legacy.cached === 'boolean' ? legacy.cached : false, | ||
| summary, | ||
| checked: Array.isArray(legacy.checked) && legacy.checked.length > 0 ? legacy.checked : [`ran ${command}`], | ||
| not_checked: Array.isArray(legacy.not_checked) && legacy.not_checked.length > 0 ? legacy.not_checked : ['full 1.0 contract mapping not yet applied for this command'], | ||
| checks: Array.isArray(legacy.checks) ? legacy.checks : [], | ||
| findings: Array.isArray(legacy.findings) ? legacy.findings : [], | ||
| metrics: typeof legacy.metrics === 'object' && legacy.metrics !== null ? legacy.metrics : {} | ||
| }; | ||
| if (command === 'scan') | ||
| return ScanResultSchema.parse(stamped); | ||
| if (command === 'hunt') | ||
| return HuntResultSchema.parse(stamped); | ||
| if (command === 'doctor') | ||
| return DoctorResultSchema.parse(stamped); | ||
| if (command === 'ledger_list' || command === 'ledger_show' || command === 'ledger_record' || command === 'ledger_lookup') { | ||
| return LedgerResultSchema.parse({ ...stamped, command }); | ||
| } | ||
| return stamped; | ||
| } | ||
| function categorize(code, status) { | ||
| const normalized = code.toLowerCase(); | ||
| if (normalized.includes('rate') || status === 429) | ||
| return 'network'; | ||
| if (normalized.includes('auth') | ||
| || normalized.includes('token') | ||
| || normalized.includes('unauthorized') | ||
| || status === 401) { | ||
| return 'auth'; | ||
| } | ||
| // GitHub uses 403 for both auth failures and secondary/primary rate limits. | ||
| if (status === 403) { | ||
| return normalized.includes('rate') ? 'network' : 'auth'; | ||
| } | ||
| if (normalized.includes('invalid') | ||
| || normalized.includes('parse') | ||
| || normalized.includes('input') | ||
| || normalized.includes('requires') | ||
| || normalized.includes('unknown subcommand') | ||
| || normalized.includes('expected')) { | ||
| return 'input'; | ||
| } | ||
| if (normalized.includes('budget') || normalized.includes('timeout')) | ||
| return 'budget'; | ||
| if (normalized.includes('contract') || normalized.includes('schema')) | ||
| return 'internal'; | ||
| if (status && status >= 500) | ||
| return 'provider'; | ||
| if (status && status >= 400) | ||
| return 'provider'; | ||
| return 'internal'; | ||
| } | ||
| export function toErrorResult(input) { | ||
| const runId = input.run_id ?? newRunId(); | ||
| if (input.error instanceof GitworthyError) { | ||
| return ErrorResultSchema.parse({ | ||
| schema_version: SCHEMA_VERSION, | ||
| gitworthy_version: packageVersion(), | ||
| ok: false, | ||
| command: input.command, | ||
| run_id: runId, | ||
| error: { | ||
| code: input.error.code, | ||
| category: categorize(input.error.code, input.error.status), | ||
| message: input.error.message, | ||
| retryable: categorize(input.error.code, input.error.status) === 'network' | ||
| || input.error.status === 429 | ||
| || (input.error.status !== undefined && input.error.status >= 500), | ||
| status: input.error.status ?? null, | ||
| details: { | ||
| github_message: input.error.github_message, | ||
| documentation_url: input.error.documentation_url | ||
| } | ||
| }, | ||
| checked: input.error.checked.length > 0 ? input.error.checked : ['parsed command name'], | ||
| not_checked: input.error.not_checked.length > 0 ? input.error.not_checked : [input.error.message], | ||
| generated_at: new Date().toISOString() | ||
| }); | ||
| } | ||
| if (input.error instanceof ZodError) { | ||
| return ErrorResultSchema.parse({ | ||
| schema_version: SCHEMA_VERSION, | ||
| gitworthy_version: packageVersion(), | ||
| ok: false, | ||
| command: input.command, | ||
| run_id: runId, | ||
| error: { | ||
| code: 'contract_validation_failed', | ||
| category: 'internal', | ||
| message: 'Result failed contract validation.', | ||
| retryable: false, | ||
| status: null, | ||
| details: { issues: input.error.issues } | ||
| }, | ||
| checked: ['parsed command name'], | ||
| not_checked: ['Result could not be validated against the versioned contract.'], | ||
| generated_at: new Date().toISOString() | ||
| }); | ||
| } | ||
| const message = input.error instanceof Error ? input.error.message : String(input.error); | ||
| const lower = message.toLowerCase(); | ||
| const looksLikeIssueRef = lower.includes('expected issue ref') || lower.includes('owner/repo#'); | ||
| const looksLikeUsage = lower.includes('requires') || lower.includes('unknown subcommand') || lower.includes('must be'); | ||
| const code = looksLikeIssueRef ? 'invalid_issue_ref' : looksLikeUsage ? 'invalid_usage' : 'internal_error'; | ||
| return ErrorResultSchema.parse({ | ||
| schema_version: SCHEMA_VERSION, | ||
| gitworthy_version: packageVersion(), | ||
| ok: false, | ||
| command: input.command, | ||
| run_id: runId, | ||
| error: { | ||
| code, | ||
| category: categorize(code === 'internal_error' ? message : code), | ||
| message, | ||
| retryable: false, | ||
| status: null, | ||
| details: {} | ||
| }, | ||
| checked: ['parsed command name'], | ||
| not_checked: [message], | ||
| generated_at: new Date().toISOString() | ||
| }); | ||
| } | ||
| //# sourceMappingURL=serialize.js.map |
| {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/contracts/serialize.ts"],"names":[],"mappings":"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"} |
| import type { Finding } from '../contracts/findings.js'; | ||
| import type { Signal } from '../core/envelope.js'; | ||
| export type DecisionVerdict = 'ACT' | 'VERIFY' | 'SKIP'; | ||
| export type Disposition = 'greenfield' | 'land_only' | 'claim_first' | 'blocked' | 'crowded' | 'review'; | ||
| type SubResult = { | ||
| name: string; | ||
| ok: true; | ||
| result: { | ||
| signals?: Signal[]; | ||
| evidence?: Array<Record<string, unknown>>; | ||
| }; | ||
| } | { | ||
| name: string; | ||
| ok: false; | ||
| error: { | ||
| code: string; | ||
| message: string; | ||
| not_checked: string[]; | ||
| }; | ||
| }; | ||
| export type PolicyInput = { | ||
| signals: Signal[]; | ||
| sub_results: SubResult[]; | ||
| errors: SubResult[]; | ||
| priorAttempts: number; | ||
| referencedCommits: number; | ||
| networkPrs: number; | ||
| }; | ||
| export type PolicyDecision = { | ||
| verdict: DecisionVerdict; | ||
| disposition: Disposition; | ||
| findings: Finding[]; | ||
| reasons: string[]; | ||
| }; | ||
| /** Map provider signals + evidence into typed findings and a safe verdict. Heuristics never independently SKIP. */ | ||
| export declare function decideFromSignals(input: PolicyInput): PolicyDecision; | ||
| export {}; |
| import { newFindingId } from '../contracts/common.js'; | ||
| function finding(input) { | ||
| return { | ||
| id: newFindingId(), | ||
| type: input.type, | ||
| strength: input.strength, | ||
| effect: input.effect, | ||
| source: input.source, | ||
| message: input.message, | ||
| url: input.url, | ||
| data: input.data ?? {} | ||
| }; | ||
| } | ||
| function openLinkedPrs(subResults) { | ||
| const linked = subResults.find((result) => result.ok && result.name === 'linked_work'); | ||
| if (!linked?.ok) | ||
| return []; | ||
| return (linked.result.evidence ?? []).filter((item) => item.kind === 'linked_pr' && item.state === 'open' && item.ignored_reason !== 'automation_author'); | ||
| } | ||
| function classifyLinkedOpen(subResults) { | ||
| const opens = openLinkedPrs(subResults); | ||
| if (opens.length === 0) | ||
| return []; | ||
| const explicitCloser = opens.find((pr) => pr.closes_issue === true && pr.source !== 'title_overlap'); | ||
| if (explicitCloser) { | ||
| const number = typeof explicitCloser.number === 'number' ? explicitCloser.number : undefined; | ||
| return [finding({ | ||
| type: 'linked_pr_open', | ||
| strength: 'definitive', | ||
| effect: 'block', | ||
| source: 'github_pull_request', | ||
| message: number ? `PR #${number} explicitly closes the issue.` : 'An open PR explicitly closes the issue.', | ||
| url: typeof explicitCloser.url === 'string' ? explicitCloser.url : undefined, | ||
| data: { number, source: explicitCloser.source, closes_issue: true } | ||
| })]; | ||
| } | ||
| const nonTitle = opens.find((pr) => pr.source !== 'title_overlap'); | ||
| if (nonTitle) { | ||
| const number = typeof nonTitle.number === 'number' ? nonTitle.number : undefined; | ||
| return [finding({ | ||
| type: 'linked_pr_mention', | ||
| strength: 'corroborated', | ||
| effect: 'verify', | ||
| source: 'github_pull_request', | ||
| message: number ? `Open PR #${number} mentions the issue without an explicit closing relationship.` : 'An open PR mentions the issue without an explicit closing relationship.', | ||
| url: typeof nonTitle.url === 'string' ? nonTitle.url : undefined, | ||
| data: { number, source: nonTitle.source, closes_issue: false } | ||
| })]; | ||
| } | ||
| const titleOnly = opens[0]; | ||
| const number = typeof titleOnly.number === 'number' ? titleOnly.number : undefined; | ||
| return [finding({ | ||
| type: 'title_overlap_pr', | ||
| strength: 'heuristic', | ||
| effect: 'verify', | ||
| source: 'github_pull_request_search', | ||
| message: number ? `Open PR #${number} matched by title overlap only.` : 'An open PR matched by title overlap only.', | ||
| url: typeof titleOnly.url === 'string' ? titleOnly.url : undefined, | ||
| data: { number, source: 'title_overlap' } | ||
| })]; | ||
| } | ||
| function findingsForSignal(signal, subResults) { | ||
| switch (signal) { | ||
| case 'linked_pr_open': { | ||
| const classified = classifyLinkedOpen(subResults); | ||
| if (classified.length > 0) | ||
| return classified; | ||
| // Without classified evidence, do not invent a definitive blocker. | ||
| return [finding({ | ||
| type: 'linked_pr_open_unclassified', | ||
| strength: 'heuristic', | ||
| effect: 'verify', | ||
| source: 'linked_work', | ||
| message: 'Open linked PR signal present without classified evidence; verify before investing.' | ||
| })]; | ||
| } | ||
| case 'duplicate': | ||
| return [finding({ | ||
| type: 'lexical_duplicate', | ||
| strength: 'heuristic', | ||
| effect: 'verify', | ||
| source: 'dupe_cluster', | ||
| message: 'High lexical duplicate score found; confirm whether GitHub/maintainer marked a duplicate.' | ||
| })]; | ||
| case 'shipped': | ||
| return [finding({ | ||
| type: 'path_or_content_overlap', | ||
| strength: 'heuristic', | ||
| effect: 'verify', | ||
| source: 'issue_vs_main', | ||
| message: 'Path/content overlap on main is heuristic; verify the requested behavior is implemented.' | ||
| })]; | ||
| case 'in_flight': | ||
| return [finding({ | ||
| type: 'branch_match', | ||
| strength: 'heuristic', | ||
| effect: 'verify', | ||
| source: 'branch_scan', | ||
| message: 'Matching branch names are heuristic; they cannot hard-block by themselves.' | ||
| })]; | ||
| case 'released_fix': | ||
| return [finding({ | ||
| type: 'released_fix', | ||
| strength: 'definitive', | ||
| effect: 'block', | ||
| source: 'release_gap', | ||
| message: 'Exact issue-specific probe matched in the published artifact.' | ||
| })]; | ||
| case 'no_pr_path': | ||
| return [finding({ | ||
| type: 'no_pr_path', | ||
| strength: 'definitive', | ||
| effect: 'verify', | ||
| source: 'contrib_policy', | ||
| message: 'Repository policy rejects pull requests; use the stated alternate channel.' | ||
| })]; | ||
| case 'claim_required': | ||
| return [finding({ | ||
| type: 'claim_required', | ||
| strength: 'definitive', | ||
| effect: 'verify', | ||
| source: 'contrib_policy', | ||
| message: 'Contribution policy requires claiming or assignment before a PR.' | ||
| })]; | ||
| case 'assigned': | ||
| return [finding({ | ||
| type: 'assigned', | ||
| strength: 'definitive', | ||
| effect: 'verify', | ||
| source: 'linked_work', | ||
| message: 'Issue is assigned; coordinate before acting.' | ||
| })]; | ||
| case 'linked_pr_merged': | ||
| return [finding({ | ||
| type: 'linked_pr_merged', | ||
| strength: 'definitive', | ||
| effect: 'verify', | ||
| source: 'linked_work', | ||
| message: 'A linked PR was merged while the issue remains open; verify remaining work.' | ||
| })]; | ||
| case 'linked_pr_closed': | ||
| return [finding({ | ||
| type: 'linked_pr_closed', | ||
| strength: 'definitive', | ||
| effect: 'verify', | ||
| source: 'linked_work', | ||
| message: 'A linked PR was closed unmerged; read the prior attempt before retrying.' | ||
| })]; | ||
| case 'needs_repro': | ||
| return [finding({ | ||
| type: 'needs_repro', | ||
| strength: 'heuristic', | ||
| effect: 'verify', | ||
| source: 'issue_vs_main', | ||
| message: 'Bug-shaped issue lacks reproduction steps.' | ||
| })]; | ||
| default: | ||
| return [finding({ | ||
| type: signal, | ||
| strength: 'heuristic', | ||
| effect: 'verify', | ||
| source: 'unknown', | ||
| message: `Unrecognized signal ${signal} capped at VERIFY.` | ||
| })]; | ||
| } | ||
| } | ||
| function chooseDisposition(input) { | ||
| const types = new Set(input.findings.map((item) => item.type)); | ||
| if (input.findings.some((item) => item.effect === 'block' && item.strength === 'definitive' && item.type === 'released_fix')) | ||
| return 'blocked'; | ||
| if (types.has('linked_pr_open')) | ||
| return 'land_only'; | ||
| if (types.has('assigned') || types.has('claim_required')) | ||
| return 'claim_first'; | ||
| if (types.has('no_pr_path')) | ||
| return 'blocked'; | ||
| if (input.priorAttempts >= 2 || input.referencedCommits + input.networkPrs >= 3) | ||
| return 'crowded'; | ||
| if (input.verdict === 'ACT') | ||
| return 'greenfield'; | ||
| return 'review'; | ||
| } | ||
| /** Map provider signals + evidence into typed findings and a safe verdict. Heuristics never independently SKIP. */ | ||
| export function decideFromSignals(input) { | ||
| const findings = []; | ||
| const reasons = []; | ||
| for (const result of input.sub_results) { | ||
| if (!result.ok) | ||
| reasons.push(`${result.name} errored: ${result.error.message}`); | ||
| if (result.ok && (result.result.signals ?? []).length > 0) { | ||
| reasons.push(`${result.name}: ${(result.result.signals ?? []).join(', ')}`); | ||
| } | ||
| } | ||
| for (const signal of input.signals) { | ||
| findings.push(...findingsForSignal(signal, input.sub_results)); | ||
| } | ||
| if (input.errors.length > 0) { | ||
| findings.push(finding({ | ||
| type: 'mandatory_check_failed', | ||
| strength: 'definitive', | ||
| effect: 'verify', | ||
| source: 'worth_check', | ||
| message: 'A mandatory provider failed; capping at VERIFY.' | ||
| })); | ||
| } | ||
| const hasDefinitiveBlock = findings.some((item) => item.effect === 'block' && item.strength === 'definitive'); | ||
| const hasVerify = findings.some((item) => item.effect === 'verify' || (item.effect === 'block' && item.strength !== 'definitive')); | ||
| let verdict = 'ACT'; | ||
| // Mandatory failures always win over definitive blockers (invariant: failed check ⇒ VERIFY). | ||
| if (input.errors.length > 0) | ||
| verdict = 'VERIFY'; | ||
| else if (hasDefinitiveBlock) | ||
| verdict = 'SKIP'; | ||
| else if (hasVerify) | ||
| verdict = 'VERIFY'; | ||
| if (verdict === 'SKIP' && !hasDefinitiveBlock) | ||
| verdict = 'VERIFY'; | ||
| if (verdict === 'SKIP' && input.errors.length > 0) | ||
| verdict = 'VERIFY'; | ||
| const disposition = chooseDisposition({ | ||
| verdict, | ||
| findings, | ||
| priorAttempts: input.priorAttempts, | ||
| referencedCommits: input.referencedCommits, | ||
| networkPrs: input.networkPrs | ||
| }); | ||
| for (const item of findings.filter((findingItem) => findingItem.effect !== 'inform')) { | ||
| reasons.push(`${item.strength}/${item.effect}: ${item.message}`); | ||
| } | ||
| return { verdict, disposition, findings, reasons }; | ||
| } | ||
| //# sourceMappingURL=policy.js.map |
| {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/decision/policy.ts"],"names":[],"mappings":"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"} |
| /** Shared bounded HTTP client for GitHub / npm providers (GW-011). */ | ||
| export declare const DEFAULT_HTTP_TIMEOUT_MS = 20000; | ||
| export declare const DEFAULT_HTTP_MAX_RETRIES = 2; | ||
| export declare const DEFAULT_GITHUB_API_VERSION = "2022-11-28"; | ||
| export declare const DEFAULT_USER_AGENT = "gitworthy"; | ||
| export type HttpTransport = (input: string | URL, init?: RequestInit) => Promise<Response>; | ||
| export type RateLimitMeta = { | ||
| limit: number | null; | ||
| remaining: number | null; | ||
| reset: number | null; | ||
| resource: string | null; | ||
| retryAfterMs: number | null; | ||
| }; | ||
| export type RequestBudget = { | ||
| maxRequests: number; | ||
| usedRequests: number; | ||
| }; | ||
| export type HttpLogEvent = { | ||
| level: 'info' | 'warn' | 'error'; | ||
| message: string; | ||
| url: string; | ||
| method: string; | ||
| status?: number; | ||
| attempt: number; | ||
| delayMs?: number; | ||
| headers?: Record<string, string>; | ||
| }; | ||
| export type HttpClientOptions = { | ||
| timeoutMs?: number; | ||
| maxRetries?: number; | ||
| budget?: RequestBudget; | ||
| transport?: HttpTransport; | ||
| baseHeaders?: RequestInit['headers']; | ||
| userAgent?: string; | ||
| githubApiVersion?: string; | ||
| logger?: (event: HttpLogEvent) => void; | ||
| sleep?: (ms: number) => Promise<void>; | ||
| random?: () => number; | ||
| }; | ||
| export type HttpRequestOptions = { | ||
| method?: string; | ||
| headers?: RequestInit['headers']; | ||
| body?: RequestInit['body']; | ||
| signal?: AbortSignal; | ||
| timeoutMs?: number; | ||
| maxRetries?: number; | ||
| /** When false, skip GitHub API version / accept defaults (e.g. npm / raw). */ | ||
| github?: boolean; | ||
| }; | ||
| export type HttpResult = { | ||
| response: Response; | ||
| rateLimit: RateLimitMeta; | ||
| attempts: number; | ||
| }; | ||
| export declare class HttpClientError extends Error { | ||
| readonly code: string; | ||
| readonly status?: number; | ||
| readonly rateLimit?: RateLimitMeta; | ||
| readonly attempts?: number; | ||
| constructor(input: { | ||
| code: string; | ||
| message: string; | ||
| status?: number; | ||
| rateLimit?: RateLimitMeta; | ||
| attempts?: number; | ||
| }); | ||
| } | ||
| export declare function createRequestBudget(maxRequests: number): RequestBudget; | ||
| export declare function resetRequestBudget(budget: RequestBudget): void; | ||
| export declare function parseRateLimit(headers: Headers): RateLimitMeta; | ||
| export declare function redactHeaders(headers: RequestInit['headers'] | undefined): Record<string, string>; | ||
| export declare function githubApiHeaders(token?: string, apiVersion?: string): Record<string, string>; | ||
| export declare function createHttpClient(options?: HttpClientOptions): HttpClient; | ||
| export declare class HttpClient { | ||
| private readonly timeoutMs; | ||
| private readonly maxRetries; | ||
| private readonly budget; | ||
| private readonly transport; | ||
| private readonly baseHeaders; | ||
| private readonly userAgent; | ||
| private readonly githubApiVersion; | ||
| private readonly logger; | ||
| private readonly sleep; | ||
| private readonly random; | ||
| constructor(options?: HttpClientOptions); | ||
| getBudget(): RequestBudget | undefined; | ||
| request(url: string, options?: HttpRequestOptions): Promise<HttpResult>; | ||
| private consumeBudget; | ||
| private buildHeaders; | ||
| private isRetryable; | ||
| private retryDelayMs; | ||
| } |
| /** Shared bounded HTTP client for GitHub / npm providers (GW-011). */ | ||
| export const DEFAULT_HTTP_TIMEOUT_MS = 20_000; | ||
| export const DEFAULT_HTTP_MAX_RETRIES = 2; | ||
| export const DEFAULT_GITHUB_API_VERSION = '2022-11-28'; | ||
| export const DEFAULT_USER_AGENT = 'gitworthy'; | ||
| const RETRYABLE_5XX = new Set([500, 502, 503, 504]); | ||
| const IDEMPOTENT_METHODS = new Set(['GET', 'HEAD', 'OPTIONS']); | ||
| const SENSITIVE_HEADER = /^(authorization|proxy-authorization|cookie|set-cookie|x-api-key)$/i; | ||
| export class HttpClientError extends Error { | ||
| code; | ||
| status; | ||
| rateLimit; | ||
| attempts; | ||
| constructor(input) { | ||
| super(input.message); | ||
| this.name = 'HttpClientError'; | ||
| this.code = input.code; | ||
| this.status = input.status; | ||
| this.rateLimit = input.rateLimit; | ||
| this.attempts = input.attempts; | ||
| } | ||
| } | ||
| export function createRequestBudget(maxRequests) { | ||
| return { maxRequests, usedRequests: 0 }; | ||
| } | ||
| export function resetRequestBudget(budget) { | ||
| budget.usedRequests = 0; | ||
| } | ||
| export function parseRateLimit(headers) { | ||
| return { | ||
| limit: parseOptionalInt(headers.get('x-ratelimit-limit')), | ||
| remaining: parseOptionalInt(headers.get('x-ratelimit-remaining')), | ||
| reset: parseOptionalInt(headers.get('x-ratelimit-reset')), | ||
| resource: headers.get('x-ratelimit-resource'), | ||
| retryAfterMs: parseRetryAfterMs(headers.get('retry-after')) | ||
| }; | ||
| } | ||
| export function redactHeaders(headers) { | ||
| const out = {}; | ||
| if (!headers) | ||
| return out; | ||
| const normalized = headers instanceof Headers ? headers : new Headers(headers); | ||
| normalized.forEach((value, key) => { | ||
| out[key] = SENSITIVE_HEADER.test(key) ? '[redacted]' : value; | ||
| }); | ||
| return out; | ||
| } | ||
| export function githubApiHeaders(token, apiVersion = DEFAULT_GITHUB_API_VERSION) { | ||
| const headers = { | ||
| accept: 'application/vnd.github+json', | ||
| 'user-agent': DEFAULT_USER_AGENT, | ||
| 'x-github-api-version': apiVersion | ||
| }; | ||
| if (token) | ||
| headers.authorization = `Bearer ${token}`; | ||
| return headers; | ||
| } | ||
| export function createHttpClient(options = {}) { | ||
| return new HttpClient(options); | ||
| } | ||
| export class HttpClient { | ||
| timeoutMs; | ||
| maxRetries; | ||
| budget; | ||
| transport; | ||
| baseHeaders; | ||
| userAgent; | ||
| githubApiVersion; | ||
| logger; | ||
| sleep; | ||
| random; | ||
| constructor(options = {}) { | ||
| this.timeoutMs = options.timeoutMs ?? DEFAULT_HTTP_TIMEOUT_MS; | ||
| this.maxRetries = options.maxRetries ?? DEFAULT_HTTP_MAX_RETRIES; | ||
| this.budget = options.budget; | ||
| // Resolve global fetch at call time so test stubs (vi.stubGlobal) still apply. | ||
| this.transport = options.transport ?? ((input, init) => fetch(input, init)); | ||
| this.baseHeaders = options.baseHeaders; | ||
| this.userAgent = options.userAgent ?? DEFAULT_USER_AGENT; | ||
| this.githubApiVersion = options.githubApiVersion ?? DEFAULT_GITHUB_API_VERSION; | ||
| this.logger = options.logger; | ||
| this.sleep = options.sleep ?? defaultSleep; | ||
| this.random = options.random ?? Math.random; | ||
| } | ||
| getBudget() { | ||
| return this.budget; | ||
| } | ||
| async request(url, options = {}) { | ||
| const method = (options.method ?? 'GET').toUpperCase(); | ||
| const maxRetries = options.maxRetries ?? this.maxRetries; | ||
| const timeoutMs = options.timeoutMs ?? this.timeoutMs; | ||
| let attempt = 0; | ||
| while (true) { | ||
| this.consumeBudget(url, method, attempt); | ||
| attempt += 1; | ||
| const timeout = AbortSignal.timeout(timeoutMs); | ||
| const signal = options.signal ? AbortSignal.any([timeout, options.signal]) : timeout; | ||
| const headers = this.buildHeaders(options); | ||
| let response; | ||
| try { | ||
| response = await this.transport(url, { | ||
| method, | ||
| headers, | ||
| body: options.body, | ||
| signal | ||
| }); | ||
| } | ||
| catch (error) { | ||
| if (isAbortError(error)) { | ||
| if (options.signal?.aborted) | ||
| throw error; | ||
| throw new HttpClientError({ | ||
| code: 'http_timeout', | ||
| message: `HTTP request timed out after ${timeoutMs}ms for ${redactUrl(url)}.`, | ||
| attempts: attempt | ||
| }); | ||
| } | ||
| throw error; | ||
| } | ||
| const rateLimit = parseRateLimit(response.headers); | ||
| if (response.ok) { | ||
| return { response, rateLimit, attempts: attempt }; | ||
| } | ||
| const retryable = await this.isRetryable(method, response, attempt, maxRetries); | ||
| if (!retryable) { | ||
| return { response, rateLimit, attempts: attempt }; | ||
| } | ||
| const delayMs = this.retryDelayMs(rateLimit, attempt); | ||
| this.logger?.({ | ||
| level: 'warn', | ||
| message: 'retrying HTTP request after transient failure', | ||
| url: redactUrl(url), | ||
| method, | ||
| status: response.status, | ||
| attempt, | ||
| delayMs, | ||
| headers: redactHeaders(response.headers) | ||
| }); | ||
| // Drain/cancel body so the socket can be reused before sleeping. | ||
| try { | ||
| await response.arrayBuffer(); | ||
| } | ||
| catch { | ||
| // ignore body drain failures | ||
| } | ||
| await this.sleep(delayMs); | ||
| } | ||
| } | ||
| consumeBudget(url, method, attempt) { | ||
| if (!this.budget) | ||
| return; | ||
| if (this.budget.usedRequests >= this.budget.maxRequests) { | ||
| this.logger?.({ | ||
| level: 'error', | ||
| message: 'HTTP request budget exceeded', | ||
| url: redactUrl(url), | ||
| method, | ||
| attempt: attempt + 1 | ||
| }); | ||
| throw new HttpClientError({ | ||
| code: 'http_budget_exceeded', | ||
| message: `HTTP request budget exceeded (${this.budget.usedRequests}/${this.budget.maxRequests}).`, | ||
| attempts: attempt | ||
| }); | ||
| } | ||
| this.budget.usedRequests += 1; | ||
| } | ||
| buildHeaders(options) { | ||
| const headers = new Headers(this.baseHeaders); | ||
| if (!headers.has('user-agent')) | ||
| headers.set('user-agent', this.userAgent); | ||
| if (options.github !== false) { | ||
| if (!headers.has('accept')) | ||
| headers.set('accept', 'application/vnd.github+json'); | ||
| if (!headers.has('x-github-api-version')) | ||
| headers.set('x-github-api-version', this.githubApiVersion); | ||
| } | ||
| if (options.headers) { | ||
| new Headers(options.headers).forEach((value, key) => { | ||
| headers.set(key, value); | ||
| }); | ||
| } | ||
| return headers; | ||
| } | ||
| async isRetryable(method, response, attempt, maxRetries) { | ||
| if (attempt > maxRetries) | ||
| return false; | ||
| // Never automatically retry non-idempotent methods — mutations must not be duplicated. | ||
| if (!IDEMPOTENT_METHODS.has(method.toUpperCase())) | ||
| return false; | ||
| const status = response.status; | ||
| if (status === 401 || status === 404 || status === 422) | ||
| return false; | ||
| if (status === 429) | ||
| return true; | ||
| if (RETRYABLE_5XX.has(status)) | ||
| return true; | ||
| if (status === 403) | ||
| return isSafeSecondaryRateLimit(response); | ||
| return false; | ||
| } | ||
| retryDelayMs(rateLimit, attempt) { | ||
| if (rateLimit.retryAfterMs != null) | ||
| return rateLimit.retryAfterMs; | ||
| // Bounded exponential backoff with full jitter: [0, base * 2^(attempt-1)] | ||
| const baseMs = 250; | ||
| const capMs = 8_000; | ||
| const exp = Math.min(capMs, baseMs * 2 ** Math.max(0, attempt - 1)); | ||
| return Math.floor(this.random() * exp); | ||
| } | ||
| } | ||
| async function isSafeSecondaryRateLimit(response) { | ||
| // Primary quota exhaustion is not retried; callers surface it as rate_limit_exhausted. | ||
| if (response.headers.get('x-ratelimit-remaining') === '0') | ||
| return false; | ||
| if (response.headers.has('retry-after')) | ||
| return true; | ||
| try { | ||
| const body = await response.clone().text(); | ||
| return /secondary\s+rate\s+limit/i.test(body); | ||
| } | ||
| catch { | ||
| return false; | ||
| } | ||
| } | ||
| function parseOptionalInt(value) { | ||
| if (value == null || value === '') | ||
| return null; | ||
| const parsed = Number(value); | ||
| return Number.isFinite(parsed) ? parsed : null; | ||
| } | ||
| function parseRetryAfterMs(value) { | ||
| if (value == null || value === '') | ||
| return null; | ||
| const asSeconds = Number(value); | ||
| if (Number.isFinite(asSeconds)) | ||
| return Math.max(0, Math.floor(asSeconds * 1000)); | ||
| const asDate = Date.parse(value); | ||
| if (Number.isFinite(asDate)) | ||
| return Math.max(0, asDate - Date.now()); | ||
| return null; | ||
| } | ||
| function defaultSleep(ms) { | ||
| return new Promise((resolve) => setTimeout(resolve, ms)); | ||
| } | ||
| function isAbortError(error) { | ||
| return error instanceof Error && (error.name === 'AbortError' || error.name === 'TimeoutError'); | ||
| } | ||
| function redactUrl(url) { | ||
| try { | ||
| const parsed = new URL(url); | ||
| if (parsed.searchParams.has('access_token')) | ||
| parsed.searchParams.set('access_token', '[redacted]'); | ||
| if (parsed.username) | ||
| parsed.username = '[redacted]'; | ||
| if (parsed.password) | ||
| parsed.password = '[redacted]'; | ||
| return parsed.toString(); | ||
| } | ||
| catch { | ||
| return url.replace(/([?&](?:access_token|token)=)[^&]*/gi, '$1[redacted]'); | ||
| } | ||
| } | ||
| //# sourceMappingURL=http-client.js.map |
| {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../src/lib/http-client.ts"],"names":[],"mappings":"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"} |
+55
| # Roadmap | ||
| Path from the current OSS preflight tool to a trustworthy local-first **1.0**, then optional hosted layers. | ||
| Source of truth for implementation detail: the v1 productization build specification. This file is the public summary. | ||
| ## Product decision | ||
| **1.0 is:** a trusted local decision engine (CLI + MCP) that answers: *Should I invest the next unit of work in this issue now?* with `ACT` / `VERIFY` / `SKIP`, explicit evidence, and explicit limitations. | ||
| **1.0 is not:** hosted SaaS, team billing, private-repo requirement, autonomous implementation agents, LLM verdicts, always-on telemetry, or background daemons. | ||
| The core stays **MIT-licensed and open source**. Paid value after 1.0 should come from coordination, shared history, private data, and hosted reliability — not from hiding checks. | ||
| ## Release ladder | ||
| | Release | Outcome | Audience | | ||
| |---|---|---| | ||
| | `0.3.10` | Reproducible baseline, CI, package/release discipline, clean backlog | Maintainer | | ||
| | `0.4.0` | Safe hard decisions, versioned contracts, bounded hostile-input handling | Maintainer | | ||
| | `0.5.0` | Durable runs, decisions, outcomes, captures, config, briefs | Maintainer | | ||
| | `0.6.0` | Frozen adjudicated eval separate from live drift | Maintainer + reviewers | | ||
| | `0.7.0` | Strong hunt funnel and resumable runs | Design partners | | ||
| | `0.8.0` | Onboarding, doctor, CLI/MCP UX, public beta support | First public users | | ||
| | `0.9.0` | Contract freeze, migration proof, soak/security/cross-platform RC | Beta + reviewers | | ||
| | `1.0.0` | Stable trusted local decision engine | GA | | ||
| ## Non-negotiable invariants | ||
| 1. Heuristic evidence must never independently create `SKIP`. | ||
| 2. Hard `SKIP` requires definitive evidence. | ||
| 3. Failed mandatory checks cap at `VERIFY`. | ||
| 4. Every result includes meaningful `checked` and `not_checked`. | ||
| 5. Target repositories and packages are hostile input (no code execution; budgets/timeouts). | ||
| 6. No telemetry required for calibration; outcome data is local by default. | ||
| 7. Tokens never land in config, captures, logs, or exports. | ||
| ## Work item IDs | ||
| Roadmap tickets use local IDs `GW-001` … `GW-038` (see GitHub milestones). Do not reorder trust work ahead of discovery features: complete the `0.4.0` trust boundary before broad hunt UX, and invite external users only after durable outcomes (`0.5`) and frozen eval (`0.6`). | ||
| ## Post-1.0 (not started) | ||
| Likely layers after the local engine is proven: | ||
| 1. Hosted scheduled hunts / watchlists | ||
| 2. Shared team ledger and outcome graph | ||
| 3. Private-repository support and org policy | ||
| 4. API access for coding-agent dispatch | ||
| 5. Notifications and maintainer-side queues | ||
| 6. Aggregate benchmarks (advisory semantic retrieval never as an opaque blocker) | ||
| ## How to contribute along the roadmap | ||
| See `CONTRIBUTING.md`. Prefer milestone issues over drive-by features. Security reports: `SECURITY.md`. |
| { | ||
| "$schema": "https://json-schema.org/draft/2020-12/schema", | ||
| "type": "object", | ||
| "properties": { | ||
| "schema_version": { | ||
| "type": "string", | ||
| "const": "1.0-draft.1" | ||
| }, | ||
| "gitworthy_version": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "command": { | ||
| "type": "string", | ||
| "const": "check" | ||
| }, | ||
| "run_id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "generated_at": { | ||
| "type": "string", | ||
| "format": "date-time", | ||
| "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" | ||
| }, | ||
| "cached": { | ||
| "type": "boolean" | ||
| }, | ||
| "summary": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "checked": { | ||
| "minItems": 1, | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "not_checked": { | ||
| "minItems": 1, | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "checks": { | ||
| "default": [], | ||
| "type": "array", | ||
| "items": { | ||
| "type": "object", | ||
| "properties": { | ||
| "id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "status": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "complete", | ||
| "skipped", | ||
| "failed", | ||
| "not_applicable" | ||
| ] | ||
| }, | ||
| "duration_ms": { | ||
| "type": "number", | ||
| "minimum": 0 | ||
| }, | ||
| "cached": { | ||
| "type": "boolean" | ||
| } | ||
| }, | ||
| "required": [ | ||
| "id", | ||
| "status" | ||
| ], | ||
| "additionalProperties": false | ||
| } | ||
| }, | ||
| "findings": { | ||
| "default": [], | ||
| "type": "array", | ||
| "items": { | ||
| "type": "object", | ||
| "properties": { | ||
| "id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "type": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "strength": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "definitive", | ||
| "corroborated", | ||
| "heuristic" | ||
| ] | ||
| }, | ||
| "effect": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "block", | ||
| "verify", | ||
| "inform" | ||
| ] | ||
| }, | ||
| "source": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "message": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "url": { | ||
| "type": "string" | ||
| }, | ||
| "data": { | ||
| "default": {}, | ||
| "type": "object", | ||
| "propertyNames": { | ||
| "type": "string" | ||
| }, | ||
| "additionalProperties": {} | ||
| } | ||
| }, | ||
| "required": [ | ||
| "id", | ||
| "type", | ||
| "strength", | ||
| "effect", | ||
| "source", | ||
| "message", | ||
| "data" | ||
| ], | ||
| "additionalProperties": false | ||
| } | ||
| }, | ||
| "metrics": { | ||
| "default": {}, | ||
| "type": "object", | ||
| "properties": { | ||
| "duration_ms": { | ||
| "type": "number", | ||
| "minimum": 0 | ||
| }, | ||
| "github_requests": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "git_commands": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "bytes_read": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "cache_hits": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| } | ||
| }, | ||
| "additionalProperties": {} | ||
| }, | ||
| "decision_id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "target": { | ||
| "type": "object", | ||
| "properties": { | ||
| "input_repo": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "canonical_repo": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "issue_number": { | ||
| "type": "integer", | ||
| "exclusiveMinimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "issue_state": { | ||
| "type": "string" | ||
| }, | ||
| "issue_url": { | ||
| "type": "string" | ||
| }, | ||
| "head_sha": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "required": [ | ||
| "input_repo", | ||
| "canonical_repo", | ||
| "issue_number" | ||
| ], | ||
| "additionalProperties": false | ||
| }, | ||
| "verdict": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "ACT", | ||
| "VERIFY", | ||
| "SKIP" | ||
| ] | ||
| }, | ||
| "disposition": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "greenfield", | ||
| "land_only", | ||
| "claim_first", | ||
| "blocked", | ||
| "crowded", | ||
| "review" | ||
| ] | ||
| }, | ||
| "next_actions": { | ||
| "default": [], | ||
| "type": "array", | ||
| "items": { | ||
| "type": "object", | ||
| "properties": { | ||
| "kind": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "message": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| } | ||
| }, | ||
| "required": [ | ||
| "kind", | ||
| "message" | ||
| ], | ||
| "additionalProperties": false | ||
| } | ||
| }, | ||
| "verdict_summary": { | ||
| "type": "string" | ||
| }, | ||
| "evidence": { | ||
| "type": "array", | ||
| "items": { | ||
| "type": "object", | ||
| "propertyNames": { | ||
| "type": "string" | ||
| }, | ||
| "additionalProperties": {} | ||
| } | ||
| }, | ||
| "signals": { | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "reasons": { | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "sub_results": { | ||
| "type": "array", | ||
| "items": {} | ||
| }, | ||
| "timings_ms": { | ||
| "type": "object", | ||
| "propertyNames": { | ||
| "type": "string" | ||
| }, | ||
| "additionalProperties": { | ||
| "type": "number" | ||
| } | ||
| }, | ||
| "perf": { | ||
| "type": "object", | ||
| "propertyNames": { | ||
| "type": "string" | ||
| }, | ||
| "additionalProperties": {} | ||
| }, | ||
| "fetched_at": { | ||
| "type": "string", | ||
| "format": "date-time", | ||
| "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" | ||
| } | ||
| }, | ||
| "required": [ | ||
| "schema_version", | ||
| "gitworthy_version", | ||
| "command", | ||
| "run_id", | ||
| "generated_at", | ||
| "cached", | ||
| "summary", | ||
| "checked", | ||
| "not_checked", | ||
| "checks", | ||
| "findings", | ||
| "metrics", | ||
| "decision_id", | ||
| "target", | ||
| "verdict", | ||
| "disposition", | ||
| "next_actions" | ||
| ], | ||
| "additionalProperties": false | ||
| } |
| { | ||
| "$schema": "https://json-schema.org/draft/2020-12/schema", | ||
| "type": "object", | ||
| "properties": { | ||
| "schema_version": { | ||
| "type": "string", | ||
| "const": "1.0-draft.1" | ||
| }, | ||
| "gitworthy_version": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "command": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "run_id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "generated_at": { | ||
| "type": "string", | ||
| "format": "date-time", | ||
| "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" | ||
| }, | ||
| "cached": { | ||
| "type": "boolean" | ||
| }, | ||
| "summary": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "checked": { | ||
| "minItems": 1, | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "not_checked": { | ||
| "minItems": 1, | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "checks": { | ||
| "default": [], | ||
| "type": "array", | ||
| "items": { | ||
| "type": "object", | ||
| "properties": { | ||
| "id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "status": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "complete", | ||
| "skipped", | ||
| "failed", | ||
| "not_applicable" | ||
| ] | ||
| }, | ||
| "duration_ms": { | ||
| "type": "number", | ||
| "minimum": 0 | ||
| }, | ||
| "cached": { | ||
| "type": "boolean" | ||
| } | ||
| }, | ||
| "required": [ | ||
| "id", | ||
| "status" | ||
| ], | ||
| "additionalProperties": false | ||
| } | ||
| }, | ||
| "findings": { | ||
| "default": [], | ||
| "type": "array", | ||
| "items": {} | ||
| }, | ||
| "metrics": { | ||
| "default": {}, | ||
| "type": "object", | ||
| "properties": { | ||
| "duration_ms": { | ||
| "type": "number", | ||
| "minimum": 0 | ||
| }, | ||
| "github_requests": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "git_commands": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "bytes_read": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "cache_hits": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| } | ||
| }, | ||
| "additionalProperties": {} | ||
| } | ||
| }, | ||
| "required": [ | ||
| "schema_version", | ||
| "gitworthy_version", | ||
| "command", | ||
| "run_id", | ||
| "generated_at", | ||
| "cached", | ||
| "summary", | ||
| "checked", | ||
| "not_checked", | ||
| "checks", | ||
| "findings", | ||
| "metrics" | ||
| ], | ||
| "additionalProperties": false | ||
| } |
| { | ||
| "$schema": "https://json-schema.org/draft/2020-12/schema", | ||
| "type": "object", | ||
| "properties": { | ||
| "schema_version": { | ||
| "type": "string", | ||
| "const": "1.0-draft.1" | ||
| }, | ||
| "gitworthy_version": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "command": { | ||
| "type": "string", | ||
| "const": "doctor" | ||
| }, | ||
| "run_id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "generated_at": { | ||
| "type": "string", | ||
| "format": "date-time", | ||
| "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" | ||
| }, | ||
| "cached": { | ||
| "type": "boolean" | ||
| }, | ||
| "summary": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "checked": { | ||
| "minItems": 1, | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "not_checked": { | ||
| "minItems": 1, | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "checks": { | ||
| "default": [], | ||
| "type": "array", | ||
| "items": { | ||
| "type": "object", | ||
| "properties": { | ||
| "id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "status": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "complete", | ||
| "skipped", | ||
| "failed", | ||
| "not_applicable" | ||
| ] | ||
| }, | ||
| "duration_ms": { | ||
| "type": "number", | ||
| "minimum": 0 | ||
| }, | ||
| "cached": { | ||
| "type": "boolean" | ||
| } | ||
| }, | ||
| "required": [ | ||
| "id", | ||
| "status" | ||
| ], | ||
| "additionalProperties": false | ||
| } | ||
| }, | ||
| "findings": { | ||
| "default": [], | ||
| "type": "array", | ||
| "items": {} | ||
| }, | ||
| "metrics": { | ||
| "default": {}, | ||
| "type": "object", | ||
| "properties": { | ||
| "duration_ms": { | ||
| "type": "number", | ||
| "minimum": 0 | ||
| }, | ||
| "github_requests": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "git_commands": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "bytes_read": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "cache_hits": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| } | ||
| }, | ||
| "additionalProperties": {} | ||
| } | ||
| }, | ||
| "required": [ | ||
| "schema_version", | ||
| "gitworthy_version", | ||
| "command", | ||
| "run_id", | ||
| "generated_at", | ||
| "cached", | ||
| "summary", | ||
| "checked", | ||
| "not_checked", | ||
| "checks", | ||
| "findings", | ||
| "metrics" | ||
| ], | ||
| "additionalProperties": {} | ||
| } |
| { | ||
| "$schema": "https://json-schema.org/draft/2020-12/schema", | ||
| "type": "object", | ||
| "properties": { | ||
| "schema_version": { | ||
| "type": "string", | ||
| "const": "1.0-draft.1" | ||
| }, | ||
| "gitworthy_version": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "ok": { | ||
| "type": "boolean", | ||
| "const": false | ||
| }, | ||
| "command": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "run_id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "error": { | ||
| "type": "object", | ||
| "properties": { | ||
| "code": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "category": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "input", | ||
| "auth", | ||
| "network", | ||
| "provider", | ||
| "budget", | ||
| "storage", | ||
| "internal" | ||
| ] | ||
| }, | ||
| "message": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "retryable": { | ||
| "type": "boolean" | ||
| }, | ||
| "status": { | ||
| "anyOf": [ | ||
| { | ||
| "type": "integer", | ||
| "minimum": -9007199254740991, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| { | ||
| "type": "null" | ||
| } | ||
| ] | ||
| }, | ||
| "details": { | ||
| "default": {}, | ||
| "type": "object", | ||
| "propertyNames": { | ||
| "type": "string" | ||
| }, | ||
| "additionalProperties": {} | ||
| } | ||
| }, | ||
| "required": [ | ||
| "code", | ||
| "category", | ||
| "message", | ||
| "retryable", | ||
| "details" | ||
| ], | ||
| "additionalProperties": false | ||
| }, | ||
| "checked": { | ||
| "minItems": 1, | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "not_checked": { | ||
| "minItems": 1, | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "generated_at": { | ||
| "type": "string", | ||
| "format": "date-time", | ||
| "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" | ||
| } | ||
| }, | ||
| "required": [ | ||
| "schema_version", | ||
| "gitworthy_version", | ||
| "ok", | ||
| "command", | ||
| "run_id", | ||
| "error", | ||
| "checked", | ||
| "not_checked", | ||
| "generated_at" | ||
| ], | ||
| "additionalProperties": false | ||
| } |
| { | ||
| "$schema": "https://json-schema.org/draft/2020-12/schema", | ||
| "type": "object", | ||
| "properties": { | ||
| "id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "type": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "strength": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "definitive", | ||
| "corroborated", | ||
| "heuristic" | ||
| ] | ||
| }, | ||
| "effect": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "block", | ||
| "verify", | ||
| "inform" | ||
| ] | ||
| }, | ||
| "source": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "message": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "url": { | ||
| "type": "string" | ||
| }, | ||
| "data": { | ||
| "default": {}, | ||
| "type": "object", | ||
| "propertyNames": { | ||
| "type": "string" | ||
| }, | ||
| "additionalProperties": {} | ||
| } | ||
| }, | ||
| "required": [ | ||
| "id", | ||
| "type", | ||
| "strength", | ||
| "effect", | ||
| "source", | ||
| "message", | ||
| "data" | ||
| ], | ||
| "additionalProperties": false | ||
| } |
| { | ||
| "$schema": "https://json-schema.org/draft/2020-12/schema", | ||
| "type": "object", | ||
| "properties": { | ||
| "schema_version": { | ||
| "type": "string", | ||
| "const": "1.0-draft.1" | ||
| }, | ||
| "gitworthy_version": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "command": { | ||
| "type": "string", | ||
| "const": "hunt" | ||
| }, | ||
| "run_id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "generated_at": { | ||
| "type": "string", | ||
| "format": "date-time", | ||
| "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" | ||
| }, | ||
| "cached": { | ||
| "type": "boolean" | ||
| }, | ||
| "summary": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "checked": { | ||
| "minItems": 1, | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "not_checked": { | ||
| "minItems": 1, | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "checks": { | ||
| "default": [], | ||
| "type": "array", | ||
| "items": { | ||
| "type": "object", | ||
| "properties": { | ||
| "id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "status": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "complete", | ||
| "skipped", | ||
| "failed", | ||
| "not_applicable" | ||
| ] | ||
| }, | ||
| "duration_ms": { | ||
| "type": "number", | ||
| "minimum": 0 | ||
| }, | ||
| "cached": { | ||
| "type": "boolean" | ||
| } | ||
| }, | ||
| "required": [ | ||
| "id", | ||
| "status" | ||
| ], | ||
| "additionalProperties": false | ||
| } | ||
| }, | ||
| "findings": { | ||
| "default": [], | ||
| "type": "array", | ||
| "items": {} | ||
| }, | ||
| "metrics": { | ||
| "default": {}, | ||
| "type": "object", | ||
| "properties": { | ||
| "duration_ms": { | ||
| "type": "number", | ||
| "minimum": 0 | ||
| }, | ||
| "github_requests": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "git_commands": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "bytes_read": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "cache_hits": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| } | ||
| }, | ||
| "additionalProperties": {} | ||
| } | ||
| }, | ||
| "required": [ | ||
| "schema_version", | ||
| "gitworthy_version", | ||
| "command", | ||
| "run_id", | ||
| "generated_at", | ||
| "cached", | ||
| "summary", | ||
| "checked", | ||
| "not_checked", | ||
| "checks", | ||
| "findings", | ||
| "metrics" | ||
| ], | ||
| "additionalProperties": {} | ||
| } |
| { | ||
| "$schema": "https://json-schema.org/draft/2020-12/schema", | ||
| "type": "object", | ||
| "properties": { | ||
| "schema_version": { | ||
| "type": "string", | ||
| "const": "1.0-draft.1" | ||
| }, | ||
| "gitworthy_version": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "command": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "ledger_list", | ||
| "ledger_show", | ||
| "ledger_record", | ||
| "ledger_lookup" | ||
| ] | ||
| }, | ||
| "run_id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "generated_at": { | ||
| "type": "string", | ||
| "format": "date-time", | ||
| "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" | ||
| }, | ||
| "cached": { | ||
| "type": "boolean" | ||
| }, | ||
| "summary": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "checked": { | ||
| "minItems": 1, | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "not_checked": { | ||
| "minItems": 1, | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "checks": { | ||
| "default": [], | ||
| "type": "array", | ||
| "items": { | ||
| "type": "object", | ||
| "properties": { | ||
| "id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "status": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "complete", | ||
| "skipped", | ||
| "failed", | ||
| "not_applicable" | ||
| ] | ||
| }, | ||
| "duration_ms": { | ||
| "type": "number", | ||
| "minimum": 0 | ||
| }, | ||
| "cached": { | ||
| "type": "boolean" | ||
| } | ||
| }, | ||
| "required": [ | ||
| "id", | ||
| "status" | ||
| ], | ||
| "additionalProperties": false | ||
| } | ||
| }, | ||
| "findings": { | ||
| "default": [], | ||
| "type": "array", | ||
| "items": {} | ||
| }, | ||
| "metrics": { | ||
| "default": {}, | ||
| "type": "object", | ||
| "properties": { | ||
| "duration_ms": { | ||
| "type": "number", | ||
| "minimum": 0 | ||
| }, | ||
| "github_requests": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "git_commands": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "bytes_read": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "cache_hits": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| } | ||
| }, | ||
| "additionalProperties": {} | ||
| } | ||
| }, | ||
| "required": [ | ||
| "schema_version", | ||
| "gitworthy_version", | ||
| "command", | ||
| "run_id", | ||
| "generated_at", | ||
| "cached", | ||
| "summary", | ||
| "checked", | ||
| "not_checked", | ||
| "checks", | ||
| "findings", | ||
| "metrics" | ||
| ], | ||
| "additionalProperties": {} | ||
| } |
| { | ||
| "$schema": "https://json-schema.org/draft/2020-12/schema", | ||
| "type": "object", | ||
| "properties": { | ||
| "event_version": { | ||
| "type": "number", | ||
| "const": 1 | ||
| }, | ||
| "event_id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "decision_id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "run_id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "target": { | ||
| "type": "object", | ||
| "properties": { | ||
| "repo": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "issue_number": { | ||
| "type": "integer", | ||
| "exclusiveMinimum": 0, | ||
| "maximum": 9007199254740991 | ||
| } | ||
| }, | ||
| "required": [ | ||
| "repo", | ||
| "issue_number" | ||
| ], | ||
| "additionalProperties": false | ||
| }, | ||
| "event": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "shortlisted", | ||
| "selected", | ||
| "claim_requested", | ||
| "claimed", | ||
| "repro_confirmed", | ||
| "repro_failed", | ||
| "patch_started", | ||
| "comment_posted", | ||
| "pr_opened", | ||
| "merged", | ||
| "closed_unmerged", | ||
| "rejected", | ||
| "abandoned", | ||
| "duplicate_confirmed", | ||
| "already_fixed_confirmed", | ||
| "maintainer_redirected" | ||
| ] | ||
| }, | ||
| "occurred_at": { | ||
| "type": "string", | ||
| "format": "date-time", | ||
| "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" | ||
| }, | ||
| "source": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "data": { | ||
| "default": {}, | ||
| "type": "object", | ||
| "propertyNames": { | ||
| "type": "string" | ||
| }, | ||
| "additionalProperties": {} | ||
| }, | ||
| "notes": { | ||
| "default": "", | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "required": [ | ||
| "event_version", | ||
| "event_id", | ||
| "decision_id", | ||
| "run_id", | ||
| "target", | ||
| "event", | ||
| "occurred_at", | ||
| "source", | ||
| "data", | ||
| "notes" | ||
| ], | ||
| "additionalProperties": false | ||
| } |
| { | ||
| "$schema": "https://json-schema.org/draft/2020-12/schema", | ||
| "type": "object", | ||
| "properties": { | ||
| "schema_version": { | ||
| "type": "string", | ||
| "const": "1.0-draft.1" | ||
| }, | ||
| "gitworthy_version": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "command": { | ||
| "type": "string", | ||
| "const": "scan" | ||
| }, | ||
| "run_id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "generated_at": { | ||
| "type": "string", | ||
| "format": "date-time", | ||
| "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" | ||
| }, | ||
| "cached": { | ||
| "type": "boolean" | ||
| }, | ||
| "summary": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "checked": { | ||
| "minItems": 1, | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "not_checked": { | ||
| "minItems": 1, | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| } | ||
| }, | ||
| "checks": { | ||
| "default": [], | ||
| "type": "array", | ||
| "items": { | ||
| "type": "object", | ||
| "properties": { | ||
| "id": { | ||
| "type": "string", | ||
| "minLength": 1 | ||
| }, | ||
| "status": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "complete", | ||
| "skipped", | ||
| "failed", | ||
| "not_applicable" | ||
| ] | ||
| }, | ||
| "duration_ms": { | ||
| "type": "number", | ||
| "minimum": 0 | ||
| }, | ||
| "cached": { | ||
| "type": "boolean" | ||
| } | ||
| }, | ||
| "required": [ | ||
| "id", | ||
| "status" | ||
| ], | ||
| "additionalProperties": false | ||
| } | ||
| }, | ||
| "findings": { | ||
| "default": [], | ||
| "type": "array", | ||
| "items": {} | ||
| }, | ||
| "metrics": { | ||
| "default": {}, | ||
| "type": "object", | ||
| "properties": { | ||
| "duration_ms": { | ||
| "type": "number", | ||
| "minimum": 0 | ||
| }, | ||
| "github_requests": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "git_commands": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "bytes_read": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| }, | ||
| "cache_hits": { | ||
| "type": "integer", | ||
| "minimum": 0, | ||
| "maximum": 9007199254740991 | ||
| } | ||
| }, | ||
| "additionalProperties": {} | ||
| } | ||
| }, | ||
| "required": [ | ||
| "schema_version", | ||
| "gitworthy_version", | ||
| "command", | ||
| "run_id", | ||
| "generated_at", | ||
| "cached", | ||
| "summary", | ||
| "checked", | ||
| "not_checked", | ||
| "checks", | ||
| "findings", | ||
| "metrics" | ||
| ], | ||
| "additionalProperties": {} | ||
| } |
+74
| # Security Policy | ||
| ## Supported versions | ||
| Security fixes are accepted for the latest published `gitworthy` release on npm. Pre-1.0 releases may receive hardening patches as part of the 1.0 roadmap. | ||
| ## Reporting a vulnerability | ||
| **Do not open a public GitHub issue for security vulnerabilities**, credential leaks, or anything that could help an attacker abuse repository/package inspection paths. | ||
| Please report privately via one of: | ||
| 1. GitHub Security Advisories for [trippyogi/gitworthy](https://github.com/trippyogi/gitworthy/security/advisories/new) (preferred). | ||
| 2. Email the maintainer listed in `package.json` / GitHub profile if advisory filing is unavailable. | ||
| Include: | ||
| - Affected version / commit | ||
| - Impact and attack scenario | ||
| - Minimal reproduction steps or a proof-of-concept fixture (preferred over a live exploit) | ||
| - Whether the issue involves local data under `~/.gitworthy`, GitHub API tokens, or inspected third-party repositories/packages | ||
| You should receive an acknowledgement within 7 days. | ||
| ## Trust boundaries (local-first) | ||
| Gitworthy is a local-first decision engine. Please treat these as security-sensitive: | ||
| - **Tokens** — accepted only via environment / external credential tooling. Never write tokens into config, captures, logs, fixtures, or exports. | ||
| - **Hostile input** — remote repositories, issue text, branch names, API bodies, package metadata, and tarballs are untrusted. Gitworthy must not execute code from a target repository or package. | ||
| - **Filesystem / archive inspection** — symlink escape, path traversal, archive bombs, and unbounded clones/downloads are in-scope defect classes. | ||
| - **Local outcome store** — corruption, race conditions between CLI and MCP processes, and silent data loss are treated as security/reliability bugs for 1.0. | ||
| ## Hostile-input security test suite | ||
| `test/security/` is the release-facing gate for the defect classes above. It | ||
| covers, with offline/mocked fixtures only (no live network): | ||
| - **Symlink hostility** — git symlink blobs are never followed for content | ||
| (addressing is always by blob sha, never by tree path); tar symlink/hardlink | ||
| entries are excluded purely by entry type, regardless of their link target. | ||
| - **Resource budgets** — per-file and aggregate byte budgets, and entry-count | ||
| budgets, for both git object reads and npm tarball streaming, including | ||
| boundary (cap vs. cap+1) cases and pinned regression checks on the default | ||
| cap values themselves. | ||
| - **Binary blobs** — null-byte content is detected and skipped rather than | ||
| returned as garbage text. | ||
| - **Path traversal / archive-link hostility** — `..`, absolute posix/Windows/UNC | ||
| paths, and dot-segment tricks are rejected as tarball content sources before | ||
| they are ever read. | ||
| - **Timeouts** — git subprocess, HTTP, and tarball-stream timeouts all surface | ||
| typed, stable-coded errors (`npm_tarball_timeout`, `http_timeout`, and typed | ||
| git failure codes) instead of hanging or crashing; a static guard asserts | ||
| every `git` subprocess call site passes an explicit timeout tied to | ||
| `GIT_SUBPROCESS_TIMEOUT_MS`. | ||
| - **Invalid CLI/MCP input** — malformed, injection-shaped, and unbounded-length | ||
| inputs are rejected with a stable `category: 'input'` error before any | ||
| network or git call is attempted. | ||
| Related coverage also lives in `test/lib/git.test.ts` (GW-012), | ||
| `test/lib/registry-tarball.test.ts` (GW-013), and | ||
| `test/cli-input-validation.test.ts` / `test/mcp-input-validation.test.ts` | ||
| (GW-007). | ||
| ## Out of scope for public issues | ||
| Use private reporting for: | ||
| - Token or authorization header leakage | ||
| - Ability to read files outside an inspected repository/archive boundary | ||
| - Remote code execution via clone, hook, LFS, or package extraction | ||
| - Denial-of-service via unbounded network, disk, or CPU consumption in default budgets | ||
| Product bugs that do not create a confidentiality, integrity, or availability risk (for example a wrong `VERIFY` disposition) can stay on the public tracker. |
+187
-112
@@ -6,2 +6,5 @@ #!/usr/bin/env node | ||
| import { branch_scan, contrib_policy, doctor, dupe_cluster, hunt, issue_vs_main, ledger_list, ledger_lookup, ledger_record, linked_work, listProbeTemplates, org_scan, related_cluster, release_gap, scan, worth_check } from '../core/index.js'; | ||
| import { GitworthyError } from '../core/envelope.js'; | ||
| import { packageVersion } from '../lib/package-meta.js'; | ||
| import { DispositionSchema, IssueNumberStringSchema, OrgOrUserLoginSchema, RepoRefSchema, VerdictSchema, parseArg, parseIssueRef, toCheckResult, toErrorResult, toStampedLegacyResult } from '../contracts/index.js'; | ||
| import { startMcpServer } from '../mcp/server.js'; | ||
@@ -12,2 +15,3 @@ const help = `gitworthy | ||
| gitworthy --help | ||
| gitworthy --version | ||
| gitworthy doctor [--json] | ||
@@ -31,8 +35,26 @@ gitworthy check owner/repo#123 [--npm-package name] [--probe-glob glob] [--probe-contains text] [--probe-template id] [--json] | ||
| `; | ||
| function parseIssueRef(ref) { | ||
| const match = ref.match(/^([^#]+)#(\d+)$/); | ||
| if (!match) | ||
| throw new Error('Expected issue ref like owner/repo#123.'); | ||
| return { repo: match[1], issue_number: Number(match[2]) }; | ||
| /** Every CLI input-validation failure is a GitworthyError with a stable code, never a bare Error. */ | ||
| function usageError(message) { | ||
| throw new GitworthyError({ code: 'invalid_usage', message, not_checked: [message] }); | ||
| } | ||
| function toCliError(error) { | ||
| if (error instanceof GitworthyError) | ||
| return error; | ||
| const message = error instanceof Error ? error.message : String(error); | ||
| return new GitworthyError({ code: 'invalid_usage', message, not_checked: [message] }); | ||
| } | ||
| function required(value, usage) { | ||
| if (!value) | ||
| usageError(usage); | ||
| return value; | ||
| } | ||
| function repoArg(value, usage) { | ||
| return parseArg(RepoRefSchema, required(value, usage), 'invalid_repo_ref'); | ||
| } | ||
| function orgArg(value, usage) { | ||
| return parseArg(OrgOrUserLoginSchema, required(value, usage), 'invalid_org_ref'); | ||
| } | ||
| function issueNumberArg(value, usage) { | ||
| return parseArg(IssueNumberStringSchema, required(value, usage), 'invalid_issue_number'); | ||
| } | ||
| function print(output, asJson, write) { | ||
@@ -78,44 +100,75 @@ if (asJson) | ||
| } | ||
| const CLI_OPTIONS = { | ||
| help: { type: 'boolean', short: 'h' }, | ||
| version: { type: 'boolean', short: 'V' }, | ||
| json: { type: 'boolean' }, | ||
| 'npm-package': { type: 'string' }, | ||
| 'probe-glob': { type: 'string' }, | ||
| 'probe-contains': { type: 'string' }, | ||
| 'probe-template': { type: 'string' }, | ||
| 'skill-profile': { type: 'string' }, | ||
| 'skip-policy-gate': { type: 'boolean' }, | ||
| 'force-refresh': { type: 'boolean' }, | ||
| label: { type: 'string' }, | ||
| keywords: { type: 'string' }, | ||
| since: { type: 'string' }, | ||
| limit: { type: 'string' }, | ||
| 'max-repos': { type: 'string' }, | ||
| 'max-checks': { type: 'string' }, | ||
| 'no-land-hints': { type: 'boolean' }, | ||
| repo: { type: 'string' }, | ||
| org: { type: 'boolean' }, | ||
| verdict: { type: 'string' }, | ||
| disposition: { type: 'string' }, | ||
| notes: { type: 'string' } | ||
| }; | ||
| function parseCliArgs(argv) { | ||
| return parseArgs({ | ||
| args: argv, | ||
| allowPositionals: true, | ||
| strict: true, | ||
| options: CLI_OPTIONS | ||
| }); | ||
| } | ||
| export async function runCli(argv = process.argv.slice(2), stdout = (text) => process.stdout.write(text), stderr = (text) => process.stderr.write(text)) { | ||
| const asJsonEarly = argv.includes('--json'); | ||
| if (argv[0] === 'branches' && argv[2]?.startsWith('-')) { | ||
| const first = argv[1]; | ||
| const second = argv[2]; | ||
| if (!first || !second) { | ||
| stderr('branches requires owner/repo and keywords.\n'); | ||
| return 1; | ||
| try { | ||
| const repo = repoArg(argv[1], 'branches requires owner/repo and keywords.'); | ||
| const second = required(argv[2], 'branches requires owner/repo and keywords.'); | ||
| stderr(`Warning: branch keyword "${second}" starts with a dash. Use -- before positional arguments if your shell or parser treats it as an option.\n`); | ||
| const output = toStampedLegacyResult('branch_scan', await branch_scan({ | ||
| repo, | ||
| keywords: second.split(',').filter(Boolean), | ||
| force_refresh: argv.includes('--force-refresh') | ||
| })); | ||
| print(output, asJsonEarly, stdout); | ||
| return 0; | ||
| } | ||
| stderr(`Warning: branch keyword "${second}" starts with a dash. Use -- before positional arguments if your shell or parser treats it as an option.\n`); | ||
| const output = await branch_scan({ repo: first, keywords: second.split(',').filter(Boolean), force_refresh: argv.includes('--force-refresh') }); | ||
| print(output, argv.includes('--json'), stdout); | ||
| catch (error) { | ||
| const structured = toErrorResult({ command: 'branch_scan', error }); | ||
| if (asJsonEarly) | ||
| stdout(`${JSON.stringify(structured, null, 2)}\n`); | ||
| else | ||
| stderr(`${structured.error.message}\n`); | ||
| return structured.error.category === 'input' ? 2 : 1; | ||
| } | ||
| } | ||
| let parsed; | ||
| try { | ||
| parsed = parseCliArgs(argv); | ||
| } | ||
| catch (error) { | ||
| const structured = toErrorResult({ command: 'cli', error: toCliError(error) }); | ||
| if (asJsonEarly) | ||
| stdout(`${JSON.stringify(structured, null, 2)}\n`); | ||
| else | ||
| stderr(`${structured.error.message}\n`); | ||
| return 2; | ||
| } | ||
| const [command, first, second] = parsed.positionals; | ||
| if (parsed.values.version || command === 'version') { | ||
| stdout(`${packageVersion()}\n`); | ||
| return 0; | ||
| } | ||
| const parsed = parseArgs({ | ||
| args: argv, | ||
| allowPositionals: true, | ||
| strict: false, | ||
| options: { | ||
| help: { type: 'boolean', short: 'h' }, | ||
| json: { type: 'boolean' }, | ||
| 'npm-package': { type: 'string' }, | ||
| 'probe-glob': { type: 'string' }, | ||
| 'probe-contains': { type: 'string' }, | ||
| 'probe-template': { type: 'string' }, | ||
| 'skill-profile': { type: 'string' }, | ||
| 'skip-policy-gate': { type: 'boolean' }, | ||
| 'force-refresh': { type: 'boolean' }, | ||
| label: { type: 'string' }, | ||
| keywords: { type: 'string' }, | ||
| since: { type: 'string' }, | ||
| limit: { type: 'string' }, | ||
| 'max-repos': { type: 'string' }, | ||
| 'max-checks': { type: 'string' }, | ||
| 'no-land-hints': { type: 'boolean' }, | ||
| repo: { type: 'string' }, | ||
| org: { type: 'boolean' }, | ||
| verdict: { type: 'string' }, | ||
| disposition: { type: 'string' }, | ||
| notes: { type: 'string' } | ||
| } | ||
| }); | ||
| const [command, first, second] = parsed.positionals; | ||
| if (parsed.values.help || !command) { | ||
@@ -130,12 +183,14 @@ stdout(help); | ||
| const asJson = parsed.values.json === true; | ||
| let commandName = command ?? 'unknown'; | ||
| try { | ||
| let output; | ||
| if (command === 'doctor') { | ||
| output = await doctor(); | ||
| commandName = 'doctor'; | ||
| output = toStampedLegacyResult('doctor', await doctor()); | ||
| } | ||
| else if (command === 'check') { | ||
| if (!first) | ||
| throw new Error('check requires owner/repo#123.'); | ||
| output = await worth_check({ | ||
| ...parseIssueRef(first), | ||
| commandName = 'check'; | ||
| const ref = parseIssueRef(required(first, 'check requires owner/repo#123.')); | ||
| const legacy = await worth_check({ | ||
| ...ref, | ||
| npm_package: stringValue(parsed.values['npm-package']), | ||
@@ -145,61 +200,67 @@ probe: probe(parsed.values), | ||
| }); | ||
| output = toCheckResult(legacy, ref); | ||
| } | ||
| else if (command === 'branches') { | ||
| if (!first || !second) | ||
| throw new Error('branches requires owner/repo and keywords.'); | ||
| for (const keyword of second.split(',').filter(Boolean)) | ||
| commandName = 'branch_scan'; | ||
| const repo = repoArg(first, 'branches requires owner/repo and keywords.'); | ||
| const keywordsArg = required(second, 'branches requires owner/repo and keywords.'); | ||
| for (const keyword of keywordsArg.split(',').filter(Boolean)) | ||
| if (keyword.startsWith('-')) | ||
| stderr(`Warning: branch keyword "${keyword}" starts with a dash. Use -- before positional arguments if your shell or parser treats it as an option.\n`); | ||
| output = await branch_scan({ repo: first, keywords: second.split(',').filter(Boolean), force_refresh: parsed.values['force-refresh'] === true }); | ||
| output = toStampedLegacyResult('branch_scan', await branch_scan({ repo, keywords: keywordsArg.split(',').filter(Boolean), force_refresh: parsed.values['force-refresh'] === true })); | ||
| } | ||
| else if (command === 'issue') { | ||
| if (!first || !second) | ||
| throw new Error('issue requires owner/repo and issue number.'); | ||
| output = await issue_vs_main({ repo: first, issue_number: Number(second) }); | ||
| commandName = 'issue_vs_main'; | ||
| const repo = repoArg(first, 'issue requires owner/repo and issue number.'); | ||
| const issue_number = issueNumberArg(second, 'issue requires owner/repo and issue number.'); | ||
| output = toStampedLegacyResult('issue_vs_main', await issue_vs_main({ repo, issue_number })); | ||
| } | ||
| else if (command === 'release') { | ||
| if (!first || !second) | ||
| throw new Error('release requires owner/repo and package name.'); | ||
| output = await release_gap({ | ||
| repo: first, | ||
| npm_package: second, | ||
| commandName = 'release_gap'; | ||
| const repo = repoArg(first, 'release requires owner/repo and package name.'); | ||
| const npm_package = required(second, 'release requires owner/repo and package name.'); | ||
| output = toStampedLegacyResult('release_gap', await release_gap({ | ||
| repo, | ||
| npm_package, | ||
| probe: probe(parsed.values), | ||
| probe_template: stringValue(parsed.values['probe-template']), | ||
| force_refresh: parsed.values['force-refresh'] === true | ||
| }); | ||
| })); | ||
| } | ||
| else if (command === 'dupes') { | ||
| if (!first || !second) | ||
| throw new Error('dupes requires owner/repo and issue number.'); | ||
| output = await dupe_cluster({ repo: first, issue_number: Number(second) }); | ||
| commandName = 'dupe_cluster'; | ||
| const repo = repoArg(first, 'dupes requires owner/repo and issue number.'); | ||
| const issue_number = issueNumberArg(second, 'dupes requires owner/repo and issue number.'); | ||
| output = toStampedLegacyResult('dupe_cluster', await dupe_cluster({ repo, issue_number })); | ||
| } | ||
| else if (command === 'related') { | ||
| if (!first) | ||
| throw new Error('related requires owner/repo.'); | ||
| commandName = 'related_cluster'; | ||
| const repo = repoArg(first, 'related requires owner/repo.'); | ||
| const filters = scanFilters(parsed.values); | ||
| output = await related_cluster({ | ||
| repo: first, | ||
| issue_number: second ? Number(second) : undefined, | ||
| output = toStampedLegacyResult('related_cluster', await related_cluster({ | ||
| repo, | ||
| issue_number: second ? parseArg(IssueNumberStringSchema, second, 'invalid_issue_number') : undefined, | ||
| label: filters.label, | ||
| keywords: filters.keywords, | ||
| limit: filters.limit | ||
| }); | ||
| })); | ||
| } | ||
| else if (command === 'linked') { | ||
| if (!first || !second) | ||
| throw new Error('linked requires owner/repo and issue number.'); | ||
| output = await linked_work({ repo: first, issue_number: Number(second) }); | ||
| commandName = 'linked_work'; | ||
| const repo = repoArg(first, 'linked requires owner/repo and issue number.'); | ||
| const issue_number = issueNumberArg(second, 'linked requires owner/repo and issue number.'); | ||
| output = toStampedLegacyResult('linked_work', await linked_work({ repo, issue_number })); | ||
| } | ||
| else if (command === 'policy') { | ||
| if (!first) | ||
| throw new Error('policy requires owner/repo.'); | ||
| output = await contrib_policy({ repo: first, force_refresh: parsed.values['force-refresh'] === true }); | ||
| commandName = 'contrib_policy'; | ||
| const repo = repoArg(first, 'policy requires owner/repo.'); | ||
| output = toStampedLegacyResult('contrib_policy', await contrib_policy({ repo, force_refresh: parsed.values['force-refresh'] === true })); | ||
| } | ||
| else if (command === 'hunt') { | ||
| if (!first) | ||
| throw new Error('hunt requires owner/repo or an org/user login.'); | ||
| commandName = 'hunt'; | ||
| const huntTarget = required(first, 'hunt requires owner/repo or an org/user login.'); | ||
| const maxChecksRaw = stringValue(parsed.values['max-checks']); | ||
| const maxChecks = maxChecksRaw ? Number(maxChecksRaw) : undefined; | ||
| if (maxChecksRaw && (!Number.isFinite(maxChecks) || maxChecks < 1)) { | ||
| throw new Error('--max-checks must be a positive number.'); | ||
| usageError('--max-checks must be a positive number.'); | ||
| } | ||
@@ -209,12 +270,15 @@ const maxReposRaw = stringValue(parsed.values['max-repos']); | ||
| if (maxReposRaw && (!Number.isFinite(maxRepos) || maxRepos < 1)) { | ||
| throw new Error('--max-repos must be a positive number.'); | ||
| usageError('--max-repos must be a positive number.'); | ||
| } | ||
| const filters = scanFilters(parsed.values); | ||
| // --org forces org mode; otherwise slash ⇒ repo, no slash ⇒ org/user. | ||
| const asOrg = parsed.values.org === true || !first.includes('/'); | ||
| if (parsed.values.org === true && first.includes('/')) { | ||
| throw new Error('hunt --org expects an org or user login, not owner/repo. Omit --org for a single repo.'); | ||
| if (parsed.values.org === true && huntTarget.includes('/')) { | ||
| usageError('hunt --org expects an org or user login, not owner/repo. Omit --org for a single repo.'); | ||
| } | ||
| output = await hunt({ | ||
| ...(asOrg ? { org: first } : { repo: first }), | ||
| const asOrg = parsed.values.org === true || !huntTarget.includes('/'); | ||
| const target = asOrg | ||
| ? { org: orgArg(huntTarget, 'hunt requires owner/repo or an org/user login.') } | ||
| : { repo: repoArg(huntTarget, 'hunt requires owner/repo or an org/user login.') }; | ||
| output = toStampedLegacyResult('hunt', await hunt({ | ||
| ...target, | ||
| label: filters.label, | ||
@@ -230,22 +294,23 @@ keywords: filters.keywords, | ||
| npm_package: stringValue(parsed.values['npm-package']) | ||
| }); | ||
| })); | ||
| } | ||
| else if (command === 'scan') { | ||
| if (!first) | ||
| throw new Error('scan requires owner/repo.'); | ||
| output = await scan({ repo: first, ...scanFilters(parsed.values) }); | ||
| commandName = 'scan'; | ||
| const repo = repoArg(first, 'scan requires owner/repo.'); | ||
| output = toStampedLegacyResult('scan', await scan({ repo, ...scanFilters(parsed.values) })); | ||
| } | ||
| else if (command === 'org') { | ||
| if (!first) | ||
| throw new Error('org requires an org or user login.'); | ||
| commandName = 'org_scan'; | ||
| const org = orgArg(first, 'org requires an org or user login.'); | ||
| const maxRepos = stringValue(parsed.values['max-repos']); | ||
| output = await org_scan({ | ||
| org: first, | ||
| output = toStampedLegacyResult('org_scan', await org_scan({ | ||
| org, | ||
| ...scanFilters(parsed.values), | ||
| max_repos: maxRepos ? Number(maxRepos) : undefined | ||
| }); | ||
| })); | ||
| } | ||
| else if (command === 'probes') { | ||
| commandName = 'probes'; | ||
| const templates = listProbeTemplates(); | ||
| output = { | ||
| output = toStampedLegacyResult('probes', { | ||
| verdict_summary: `listed ${templates.length} probe templates.`, | ||
@@ -258,3 +323,3 @@ evidence: templates, | ||
| fetched_at: new Date().toISOString() | ||
| }; | ||
| }); | ||
| } | ||
@@ -264,29 +329,33 @@ else if (command === 'ledger') { | ||
| if (action === 'list') { | ||
| output = await ledger_list({ | ||
| repo: stringValue(parsed.values.repo), | ||
| commandName = 'ledger_list'; | ||
| const repoFilter = stringValue(parsed.values.repo); | ||
| output = toStampedLegacyResult('ledger_list', await ledger_list({ | ||
| repo: repoFilter ? parseArg(RepoRefSchema, repoFilter, 'invalid_repo_ref') : undefined, | ||
| limit: stringValue(parsed.values.limit) ? Number(stringValue(parsed.values.limit)) : undefined | ||
| }); | ||
| })); | ||
| } | ||
| else if (action === 'show') { | ||
| if (!second) | ||
| throw new Error('ledger show requires owner/repo#123.'); | ||
| output = await ledger_lookup(parseIssueRef(second)); | ||
| commandName = 'ledger_lookup'; | ||
| const ref = parseIssueRef(required(second, 'ledger show requires owner/repo#123.')); | ||
| output = toStampedLegacyResult('ledger_lookup', await ledger_lookup(ref)); | ||
| } | ||
| else if (action === 'record') { | ||
| if (!second) | ||
| throw new Error('ledger record requires owner/repo#123.'); | ||
| output = await ledger_record({ | ||
| ...parseIssueRef(second), | ||
| verdict: stringValue(parsed.values.verdict), | ||
| disposition: stringValue(parsed.values.disposition), | ||
| commandName = 'ledger_record'; | ||
| const ref = parseIssueRef(required(second, 'ledger record requires owner/repo#123.')); | ||
| const verdictRaw = stringValue(parsed.values.verdict); | ||
| const dispositionRaw = stringValue(parsed.values.disposition); | ||
| output = toStampedLegacyResult('ledger_record', await ledger_record({ | ||
| ...ref, | ||
| verdict: verdictRaw ? parseArg(VerdictSchema, verdictRaw, 'invalid_usage') : undefined, | ||
| disposition: dispositionRaw ? parseArg(DispositionSchema, dispositionRaw, 'invalid_usage') : undefined, | ||
| notes: stringValue(parsed.values.notes), | ||
| source: 'cli' | ||
| }); | ||
| })); | ||
| } | ||
| else { | ||
| throw new Error('ledger requires list, show, or record.'); | ||
| usageError('ledger requires list, show, or record.'); | ||
| } | ||
| } | ||
| else { | ||
| throw new Error(`Unknown subcommand ${command}.`); | ||
| usageError(`Unknown subcommand ${command}.`); | ||
| } | ||
@@ -297,4 +366,10 @@ print(output, asJson, stdout); | ||
| catch (error) { | ||
| stderr(`${error instanceof Error ? error.message : String(error)}\n`); | ||
| return 1; | ||
| const structured = toErrorResult({ command: commandName, error }); | ||
| if (asJson) { | ||
| stdout(`${JSON.stringify(structured, null, 2)}\n`); | ||
| } | ||
| else { | ||
| stderr(`${structured.error.message}\n`); | ||
| } | ||
| return structured.error.category === 'input' ? 2 : 1; | ||
| } | ||
@@ -301,0 +376,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"} |
@@ -1,5 +0,3 @@ | ||
| import { readFile } from 'node:fs/promises'; | ||
| import path from 'node:path'; | ||
| import { githubJson } from '../lib/github.js'; | ||
| import { listCloneFiles, shallowClone } from '../lib/git.js'; | ||
| import { DEFAULT_MAX_TREE_FILES, listCloneFiles, readClonedFilesBatch, shallowClone } from '../lib/git.js'; | ||
| import { assessRepro, looksLikeBug } from './candidate-quality.js'; | ||
@@ -10,2 +8,5 @@ import { createEnvelope } from './envelope.js'; | ||
| const FUZZY_SKIP = 'issue_vs_main tree/grep skipped: no concrete path terms (src/…, extensions/…, or ≥2 path-like tokens); assessed repro signals only.'; | ||
| /** Budgets bound how much of a hostile tree we ever grep in one scan. */ | ||
| const MAX_GREP_FILES = 2000; | ||
| const MAX_GREP_TOTAL_BYTES = 20_000_000; | ||
| function explicitPathTerms(issue) { | ||
@@ -97,10 +98,13 @@ const text = `${issue.title}\n${issue.body ?? ''}`; | ||
| const listed = await listCloneFiles(input.repo); | ||
| const root = listed.dir; | ||
| const files = listed.files; | ||
| const allTreeMatches = files.map((file) => normalizePath(path.relative(root, file))).filter((relative) => candidates.some((term) => relative.toLowerCase().includes(term.toLowerCase()))); | ||
| const allTreeMatches = files.map((file) => file.path).filter((relative) => candidates.some((term) => relative.toLowerCase().includes(term.toLowerCase()))); | ||
| const treeMatches = allTreeMatches.sort((left, right) => Number(exactPathTerms.some((term) => right.toLowerCase().includes(term.toLowerCase()))) - Number(exactPathTerms.some((term) => left.toLowerCase().includes(term.toLowerCase())))).slice(0, 50); | ||
| const grepMatches = []; | ||
| for (const file of files.slice(0, 2000)) { | ||
| const relative = normalizePath(path.relative(root, file)); | ||
| const text = await readFile(file, 'utf8').catch(() => ''); | ||
| const grepFileSlice = files.slice(0, MAX_GREP_FILES); | ||
| const contentsByPath = await readClonedFilesBatch(input.repo, grepFileSlice.map((file) => file.path), { maxTotalBytes: MAX_GREP_TOTAL_BYTES }); | ||
| for (const file of grepFileSlice) { | ||
| const text = contentsByPath.get(file.path); | ||
| if (text == null) | ||
| continue; // symlink, binary, missing, oversized, or over the aggregate budget | ||
| const relative = file.path; | ||
| const lines = text.split('\n'); | ||
@@ -135,2 +139,6 @@ for (let index = 0; index < lines.length; index += 1) { | ||
| : 'no evidence on main.'; | ||
| const notChecked = [INTENT_LIMIT]; | ||
| if (listed.truncated) { | ||
| notChecked.push(`git tree listing was soft-capped at ${DEFAULT_MAX_TREE_FILES} files; matching paths beyond the cap may be missing.`); | ||
| } | ||
| return createEnvelope({ | ||
@@ -147,8 +155,8 @@ verdict_summary, | ||
| `fetched issue ${input.repo}#${input.issue_number}`, | ||
| clone.cached ? `reused pooled shallow clone of ${input.repo}` : `shallow cloned ${input.repo}`, | ||
| listed.cached ? `reused cached file list for ${input.repo}` : `walked file list for ${input.repo}`, | ||
| clone.cached ? `reused pooled bare clone of ${input.repo}` : `bare cloned ${input.repo}`, | ||
| listed.cached ? `reused cached tree listing for ${input.repo}` : `listed git tree for ${input.repo}`, | ||
| `searched candidate terms in tree and file contents`, | ||
| 'assessed reproduction-step signals in the issue body' | ||
| ], | ||
| not_checked: [INTENT_LIMIT], | ||
| not_checked: notChecked, | ||
| cached: false | ||
@@ -155,0 +163,0 @@ }); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"issue-vs-main.js","sourceRoot":"","sources":["../../src/core/issue-vs-main.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"issue-vs-main.js","sourceRoot":"","sources":["../../src/core/issue-vs-main.ts"],"names":[],"mappings":"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"} |
+82
-34
@@ -73,3 +73,3 @@ import { githubJson } from '../lib/github.js'; | ||
| } | ||
| async function timelineLinkedPrs(repo, events, issueNumber) { | ||
| async function timelineLinkedPrs(homeRepo, events, issueNumber) { | ||
| const prs = new Map(); | ||
@@ -79,4 +79,8 @@ for (const event of events) { | ||
| continue; | ||
| const pr = await prDetails(repo, event.source.issue.number); | ||
| prs.set(pr.number, linkedPrEvidence(pr, event.created_at ?? pr.created_at, 'timeline', issueNumber)); | ||
| // The cross-referenced PR may live in a different repo (fork/sibling); resolve its true home | ||
| // from the timeline's own pull_request url/html_url instead of assuming homeRepo. | ||
| const prRepo = repoFromPrRefs(event.source.issue.pull_request) ?? homeRepo; | ||
| const pr = await prDetails(prRepo, event.source.issue.number); | ||
| const key = prIdentityKey(prRepo, pr.number); | ||
| prs.set(key, linkedPrEvidence(pr, event.created_at ?? pr.created_at, 'timeline', issueNumber, { repo: prRepo })); | ||
| } | ||
@@ -123,2 +127,22 @@ return [...prs.values()].sort((left, right) => left.number - right.number); | ||
| } | ||
| /** Extracts an "owner/repo" full name from a pull request reference's API `url` (pulls) or `html_url`. */ | ||
| function repoFromPrRefs(pr) { | ||
| if (!pr) | ||
| return null; | ||
| if (pr.url) { | ||
| const match = pr.url.match(/\/repos\/([^/]+\/[^/]+)\/pulls\/\d+$/); | ||
| if (match) | ||
| return match[1]; | ||
| } | ||
| if (pr.html_url) { | ||
| const match = pr.html_url.match(/github\.com\/([^/]+\/[^/]+)\/pull\/\d+/i); | ||
| if (match) | ||
| return match[1]; | ||
| } | ||
| return null; | ||
| } | ||
| /** Case-insensitive "repo#number" identity key used to dedupe linked PR evidence across repos. */ | ||
| function prIdentityKey(repo, number) { | ||
| return `${repo.toLowerCase()}#${number}`; | ||
| } | ||
| /** | ||
@@ -219,3 +243,3 @@ * Soft secondary pass: searches the home repo's org for open/closed PRs (in other repos, e.g. forks) | ||
| } | ||
| async function searchLinkedPrs(repo, apiRepo, issueNumber, existing) { | ||
| async function searchLinkedPrs(repo, issueNumber, existing) { | ||
| const { result, context } = await runSearchWithCanonicalRepo(repo, async (fullName) => { | ||
@@ -225,12 +249,16 @@ const query = encodeURIComponent(`repo:${fullName} is:pr ${issueNumber}`); | ||
| }); | ||
| // Prefer URLs / Search canonical name over the caller alias so renamed repos share one identity key. | ||
| const homeRepo = context.full_name; | ||
| const prs = []; | ||
| for (const item of result.items) { | ||
| if (!('pull_request' in item) || existing.has(item.number)) | ||
| const itemRepo = repoFromSearchItem(item) ?? repoFromPrRefs(item.pull_request) ?? homeRepo; | ||
| const key = prIdentityKey(itemRepo, item.number); | ||
| if (!('pull_request' in item) || existing.has(key)) | ||
| continue; | ||
| const pr = await prDetails(apiRepo, item.number); | ||
| const pr = await prDetails(itemRepo, item.number); | ||
| const text = `${item.title ?? pr.title}\n${item.body ?? pr.body ?? ''}`; | ||
| if (!mentionsIssue(text, issueNumber)) | ||
| continue; | ||
| prs.push(linkedPrEvidence(pr, pr.created_at, 'search', issueNumber)); | ||
| existing.add(item.number); | ||
| prs.push(linkedPrEvidence(pr, pr.created_at, 'search', issueNumber, { repo: itemRepo })); | ||
| existing.add(key); | ||
| } | ||
@@ -243,14 +271,27 @@ return { | ||
| } | ||
| function commentPrNumbers(repos, body) { | ||
| const numbers = new Set(); | ||
| for (const repo of new Set(repos.filter(Boolean))) { | ||
| const escapedRepo = repo.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); | ||
| for (const match of body.matchAll(new RegExp(`github\\.com/${escapedRepo}/pull/(\\d+)`, 'gi'))) | ||
| numbers.add(Number(match[1])); | ||
| /** | ||
| * Finds pull request references in a comment body. Explicit "github.com/owner/repo/pull/N" links | ||
| * carry their own repo identity (which may differ from the home repo, e.g. a fork PR). Bare | ||
| * "PR #N" / "pull #N" mentions are ambiguous and default to the home repo. | ||
| */ | ||
| function commentPrRefs(homeRepo, body) { | ||
| const refs = new Map(); | ||
| for (const match of body.matchAll(/github\.com\/([^/\s]+\/[^/\s]+)\/pull\/(\d+)/gi)) { | ||
| const number = Number(match[2]); | ||
| if (!Number.isInteger(number)) | ||
| continue; | ||
| const repo = match[1]; | ||
| refs.set(prIdentityKey(repo, number), { repo, number }); | ||
| } | ||
| for (const match of body.matchAll(/(?:pull request|pull|pr)\s*#(\d+)/gi)) | ||
| numbers.add(Number(match[1])); | ||
| return [...numbers].filter((number) => Number.isInteger(number)); | ||
| for (const match of body.matchAll(/(?:pull request|pull|pr)\s*#(\d+)/gi)) { | ||
| const number = Number(match[1]); | ||
| if (!Number.isInteger(number)) | ||
| continue; | ||
| const key = prIdentityKey(homeRepo, number); | ||
| if (!refs.has(key)) | ||
| refs.set(key, { repo: homeRepo, number }); | ||
| } | ||
| return [...refs.values()]; | ||
| } | ||
| async function commentLinkedPrs(canonicalRepo, apiRepo, issueNumber, existing) { | ||
| async function commentLinkedPrs(apiRepo, issueNumber, existing) { | ||
| const comments = await githubJson(`/repos/${apiRepo}/issues/${issueNumber}/comments?per_page=100`); | ||
@@ -263,10 +304,11 @@ const prs = []; | ||
| claimComments = true; | ||
| for (const number of commentPrNumbers([canonicalRepo, apiRepo], body)) { | ||
| if (existing.has(number)) | ||
| for (const ref of commentPrRefs(apiRepo, body)) { | ||
| const key = prIdentityKey(ref.repo, ref.number); | ||
| if (existing.has(key)) | ||
| continue; | ||
| const pr = await maybePrDetails(apiRepo, number); | ||
| const pr = await maybePrDetails(ref.repo, ref.number); | ||
| if (!pr) | ||
| continue; | ||
| existing.add(number); | ||
| prs.push(linkedPrEvidence(pr, comment.created_at, 'comment', issueNumber, { referrer: comment.html_url })); | ||
| existing.add(key); | ||
| prs.push(linkedPrEvidence(pr, comment.created_at, 'comment', issueNumber, { referrer: comment.html_url, repo: ref.repo })); | ||
| } | ||
@@ -276,3 +318,3 @@ } | ||
| } | ||
| async function titleOverlapPrs(repo, apiRepo, issue, existing, force) { | ||
| async function titleOverlapPrs(repo, issue, existing, force) { | ||
| const terms = overlapTerms(issue.title, 5); | ||
@@ -295,2 +337,3 @@ if (terms.length < 2) { | ||
| }); | ||
| const homeRepo = context.full_name; | ||
| const issueText = `${issue.title}\n${issue.body ?? ''}`; | ||
@@ -301,5 +344,7 @@ const prs = []; | ||
| for (const item of result.items) { | ||
| if (!('pull_request' in item) || existing.has(item.number) || item.number === issue.number) | ||
| const itemRepo = repoFromSearchItem(item) ?? repoFromPrRefs(item.pull_request) ?? homeRepo; | ||
| const key = prIdentityKey(itemRepo, item.number); | ||
| if (!('pull_request' in item) || existing.has(key) || item.number === issue.number) | ||
| continue; | ||
| const pr = await prDetails(apiRepo, item.number); | ||
| const pr = await prDetails(itemRepo, item.number); | ||
| if (isAutomationAuthor(pr.user?.login)) | ||
@@ -310,4 +355,4 @@ continue; | ||
| continue; | ||
| prs.push(linkedPrEvidence(pr, pr.created_at, 'title_overlap', issue.number, { overlap_score: Number(score.toFixed(3)), shared_terms: shared })); | ||
| existing.add(item.number); | ||
| prs.push(linkedPrEvidence(pr, pr.created_at, 'title_overlap', issue.number, { overlap_score: Number(score.toFixed(3)), shared_terms: shared, repo: itemRepo })); | ||
| existing.add(key); | ||
| } | ||
@@ -347,18 +392,21 @@ return { | ||
| const resolved = await loadCanonicalRepo(input.repo); | ||
| // Prefer the resolved full_name for home-repo identity so alias inputs (renames) match | ||
| // timeline/search URL-derived keys instead of double-counting the same PR. | ||
| const homeRepo = resolved.full_name; | ||
| const issue = await githubJson(`/repos/${input.repo}/issues/${input.issue_number}`); | ||
| const { events, truncated: timelineTruncated } = await timeline(input.repo, input.issue_number); | ||
| const timelineNotes = timelineCapabilityNotes(events); | ||
| const timelinePrs = await timelineLinkedPrs(input.repo, events, input.issue_number); | ||
| const timelinePrs = await timelineLinkedPrs(homeRepo, events, input.issue_number); | ||
| const { commits, capped: commitsCapped } = referencedCommits(events); | ||
| const knownPrs = new Set(timelinePrs.map((pr) => pr.number)); | ||
| const { prs: commentPrs, claimComments } = await commentLinkedPrs(resolved.full_name, input.repo, input.issue_number, knownPrs); | ||
| const { prs: searchPrs, checked: searchChecked, not_checked: searchNotChecked } = await searchLinkedPrs(input.repo, input.repo, input.issue_number, knownPrs); | ||
| const knownPrs = new Set(timelinePrs.map((pr) => prIdentityKey(pr.repo ?? homeRepo, pr.number))); | ||
| const { prs: commentPrs, claimComments } = await commentLinkedPrs(homeRepo, input.issue_number, knownPrs); | ||
| const { prs: searchPrs, checked: searchChecked, not_checked: searchNotChecked } = await searchLinkedPrs(input.repo, input.issue_number, knownPrs); | ||
| const hasHumanLinked = [...timelinePrs, ...commentPrs, ...searchPrs].some((pr) => !isAutomationAuthor(pr.author)); | ||
| const shouldTitleSearch = claimComments || !hasHumanLinked; | ||
| const titleResult = shouldTitleSearch | ||
| ? await titleOverlapPrs(input.repo, input.repo, issue, knownPrs, claimComments) | ||
| ? await titleOverlapPrs(input.repo, issue, knownPrs, claimComments) | ||
| : { prs: [], checked: [], not_checked: ['title-overlap PR search skipped because explicit linkage already covered the issue.'] }; | ||
| // Soft secondary pass, always run (capped per_page) — surfaces fork/other-repo PRs as density | ||
| // evidence only; never treated as a linked_pr and never forces a SKIP signal on its own. | ||
| const { prs: networkPrs, checked: networkChecked, not_checked: networkNotChecked } = await networkLinkedPrs(input.repo, input.issue_number); | ||
| const { prs: networkPrs, checked: networkChecked, not_checked: networkNotChecked } = await networkLinkedPrs(homeRepo, input.issue_number); | ||
| const { active, ignored } = partitionLinkedPrs([...timelinePrs, ...commentPrs, ...searchPrs, ...titleResult.prs]); | ||
@@ -365,0 +413,0 @@ const linkedPrs = active.sort((left, right) => left.number - right.number); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"linked-work.js","sourceRoot":"","sources":["../../src/core/linked-work.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"linked-work.js","sourceRoot":"","sources":["../../src/core/linked-work.ts"],"names":[],"mappings":"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"} |
+20
-36
@@ -1,5 +0,3 @@ | ||
| import { readdir, readFile } from 'node:fs/promises'; | ||
| import path from 'node:path'; | ||
| import { readCache, writeCache } from '../lib/cache.js'; | ||
| import { downloadAndExtractTarball, npmMetadata, readPackageJsonFromClone } from '../lib/registry.js'; | ||
| import { inspectTarball, npmMetadata, readPackageJsonFromClone } from '../lib/registry.js'; | ||
| import { shallowClone } from '../lib/git.js'; | ||
@@ -9,10 +7,2 @@ import { createEnvelope } from './envelope.js'; | ||
| const TTL = 60 * 60 * 1000; | ||
| async function walk(dir) { | ||
| const entries = await readdir(dir, { withFileTypes: true }); | ||
| const nested = await Promise.all(entries.map(async (entry) => { | ||
| const full = path.join(dir, entry.name); | ||
| return entry.isDirectory() ? walk(full) : [full]; | ||
| })); | ||
| return nested.flat(); | ||
| } | ||
| function escapeRegex(value) { | ||
@@ -86,31 +76,25 @@ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); | ||
| if (probeRequested && latestMeta?.dist?.tarball) { | ||
| const tarball = await downloadAndExtractTarball(latestMeta.dist.tarball); | ||
| try { | ||
| const root = path.join(tarball.dir, 'package'); | ||
| const files = await walk(root); | ||
| const matches = []; | ||
| for (const file of files) { | ||
| const relative = path.relative(root, file).replace(/\\/g, '/'); | ||
| if (effectiveProbe?.file_glob && !globMatch(relative, effectiveProbe.file_glob)) | ||
| continue; | ||
| if (contentProbe) { | ||
| const text = await readFile(file, 'utf8').catch(() => ''); | ||
| if (text.includes(effectiveProbe.contains)) | ||
| matches.push({ path: relative, context: contextLines(text, effectiveProbe.contains) }); | ||
| } | ||
| else { | ||
| matches.push({ path: relative }); | ||
| } | ||
| const inspection = await inspectTarball(latestMeta.dist.tarball, { | ||
| matches: (relative) => !effectiveProbe?.file_glob || globMatch(relative, effectiveProbe.file_glob), | ||
| readContent: contentProbe | ||
| }); | ||
| const matches = []; | ||
| for (const match of inspection.matches) { | ||
| if (contentProbe) { | ||
| const text = match.content ?? ''; | ||
| if (text.includes(effectiveProbe.contains)) | ||
| matches.push({ path: match.path, context: contextLines(text, effectiveProbe.contains) }); | ||
| } | ||
| probe = { probe: effectiveProbe, matches, matched: matches.length > 0 }; | ||
| evidence.push(probe); | ||
| if (!probe.matched) { | ||
| evidence.push({ note: contentProbe | ||
| ? 'probe ran; no issue-specific match found in the published artifact' | ||
| : 'probe ran; no files matched the probe file_glob in the published artifact' }); | ||
| else { | ||
| matches.push({ path: match.path }); | ||
| } | ||
| } | ||
| finally { | ||
| await tarball.cleanup(); | ||
| probe = { probe: effectiveProbe, matches, matched: matches.length > 0 }; | ||
| evidence.push(probe); | ||
| if (!probe.matched) { | ||
| evidence.push({ note: contentProbe | ||
| ? 'probe ran; no issue-specific match found in the published artifact' | ||
| : 'probe ran; no files matched the probe file_glob in the published artifact' }); | ||
| } | ||
| checked.push(`inspected npm tarball for ${input.npm_package}@${latest} via bounded streaming read (unsafe paths, symlinks, and hardlinks are excluded as content sources)`); | ||
| } | ||
@@ -117,0 +101,0 @@ else if (probeRequested) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"release-gap.js","sourceRoot":"","sources":["../../src/core/release-gap.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"release-gap.js","sourceRoot":"","sources":["../../src/core/release-gap.ts"],"names":[],"mappings":"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"} |
| import { Envelope, Signal } from './envelope.js'; | ||
| import { type Disposition } from '../decision/policy.js'; | ||
| type Input = { | ||
@@ -25,3 +26,3 @@ repo: string; | ||
| }; | ||
| export type Disposition = 'greenfield' | 'land_only' | 'claim_first' | 'blocked' | 'crowded' | 'review'; | ||
| export type { Disposition }; | ||
| type WorthPerf = { | ||
@@ -50,2 +51,1 @@ short_circuited: boolean; | ||
| export declare function worth_check(input: Input): Promise<WorthEnvelope>; | ||
| export {}; |
+40
-120
@@ -11,34 +11,3 @@ import { branch_scan } from './branch-scan.js'; | ||
| import { upsertLedgerEntry } from '../lib/ledger.js'; | ||
| const CROWDED_PRIOR_ATTEMPTS = 2; | ||
| const CROWDED_COMMITS = 3; | ||
| function noPrFeedbackChannel(subResults) { | ||
| const policy = subResults.find((result) => result.ok && result.name === 'contrib_policy'); | ||
| if (!policy?.ok) | ||
| return 'not stated'; | ||
| const evidence = policy.result.evidence.find((item) => item.category === 'no_pr_path' && typeof item.feedback_channel === 'string'); | ||
| return typeof evidence?.feedback_channel === 'string' ? evidence.feedback_channel : 'not stated'; | ||
| } | ||
| function claimProtocolCitation(subResults) { | ||
| const policy = subResults.find((result) => result.ok && result.name === 'contrib_policy'); | ||
| if (!policy?.ok) | ||
| return 'follow repo claim/assignment instructions before opening a PR'; | ||
| const evidence = policy.result.evidence.find((item) => item.category === 'claim_required' && typeof item.excerpt === 'string'); | ||
| return typeof evidence?.excerpt === 'string' ? evidence.excerpt : 'follow repo claim/assignment instructions before opening a PR'; | ||
| } | ||
| function linkedPrCitation(subResults, predicate) { | ||
| const linked = subResults.find((result) => result.ok && result.name === 'linked_work'); | ||
| if (!linked?.ok) | ||
| return null; | ||
| const evidence = linked.result.evidence.find((item) => item.kind === 'linked_pr' && item.ignored_reason !== 'automation_author' && typeof item.number === 'number' && predicate(item)); | ||
| return evidence ? `#${evidence.number}${typeof evidence.url === 'string' ? ` ${evidence.url}` : ''}` : null; | ||
| } | ||
| function assignmentCitation(subResults) { | ||
| const linked = subResults.find((result) => result.ok && result.name === 'linked_work'); | ||
| if (!linked?.ok) | ||
| return null; | ||
| const evidence = linked.result.evidence.find((item) => item.kind === 'assignment' && typeof item.assignee === 'string'); | ||
| if (!evidence || typeof evidence.assignee !== 'string') | ||
| return null; | ||
| return `${evidence.assignee}${typeof evidence.assigned_at === 'string' ? ` at ${evidence.assigned_at}` : ''}`; | ||
| } | ||
| import { decideFromSignals } from '../decision/policy.js'; | ||
| function linkedDensity(subResults) { | ||
@@ -73,16 +42,12 @@ const linked = subResults.find((result) => result.ok && result.name === 'linked_work'); | ||
| } | ||
| function hasCleanLinkedWork(subResults) { | ||
| const linked = subResults.find((result) => result.name === 'linked_work'); | ||
| return Boolean(linked?.ok && (linked.result.signals ?? []).length === 0); | ||
| } | ||
| function isBranchOnlySkipSignal(signals, subResults) { | ||
| if (!hasCleanLinkedWork(subResults)) | ||
| function hasDefinitiveClosingOpenPr(subResults) { | ||
| const linked = subResults.find((result) => result.ok && result.name === 'linked_work'); | ||
| if (!linked?.ok) | ||
| return false; | ||
| const blocking = signals.filter((signal) => !['no_pr_path', 'linked_pr_merged', 'linked_pr_closed', 'assigned', 'needs_repro', 'claim_required'].includes(signal)); | ||
| return blocking.length === 1 && blocking[0] === 'in_flight'; | ||
| return linked.result.evidence.some((item) => item.kind === 'linked_pr' | ||
| && item.state === 'open' | ||
| && item.closes_issue === true | ||
| && item.source !== 'title_overlap' | ||
| && item.ignored_reason !== 'automation_author'); | ||
| } | ||
| function hasOpenLinkedPr(subResults) { | ||
| const linked = subResults.find((result) => result.ok && result.name === 'linked_work'); | ||
| return Boolean(linked?.ok && linked.result.signals.includes('linked_pr_open')); | ||
| } | ||
| function extractPerf(subResults, shortCircuited) { | ||
@@ -106,66 +71,19 @@ const issueMain = subResults.find((result) => result.ok && result.name === 'issue_vs_main'); | ||
| export function chooseDisposition(input) { | ||
| const { verdict, signals, priorAttempts, referencedCommits } = input; | ||
| const networkPrs = input.networkPrs ?? 0; | ||
| if (signals.some((signal) => ['shipped', 'released_fix', 'duplicate'].includes(signal))) | ||
| return 'blocked'; | ||
| if (signals.includes('linked_pr_open')) | ||
| return 'land_only'; | ||
| if (signals.includes('assigned') || signals.includes('claim_required')) | ||
| return 'claim_first'; | ||
| if (priorAttempts >= CROWDED_PRIOR_ATTEMPTS || referencedCommits + networkPrs >= CROWDED_COMMITS) | ||
| return 'crowded'; | ||
| if (verdict === 'ACT') | ||
| return 'greenfield'; | ||
| return 'review'; | ||
| return decideFromSignals({ | ||
| signals: input.signals, | ||
| sub_results: [], | ||
| errors: [], | ||
| priorAttempts: input.priorAttempts, | ||
| referencedCommits: input.referencedCommits, | ||
| networkPrs: input.networkPrs ?? 0 | ||
| }).disposition; | ||
| } | ||
| function finalize(sub_results, timings_ms, shortCircuited, extraNotChecked = []) { | ||
| const reasons = []; | ||
| const errors = sub_results.filter((result) => !result.ok); | ||
| const signals = [...new Set(sub_results.flatMap((result) => result.ok ? (result.result.signals ?? []) : []))]; | ||
| const verifySignals = ['no_pr_path', 'linked_pr_merged', 'linked_pr_closed', 'assigned', 'needs_repro', 'claim_required']; | ||
| const skipSignals = signals.filter((signal) => !verifySignals.includes(signal)); | ||
| const branchOnlyInFlightWithCleanLinkedWork = isBranchOnlySkipSignal(signals, sub_results); | ||
| const density = linkedDensity(sub_results); | ||
| for (const result of sub_results) { | ||
| if (!result.ok) | ||
| reasons.push(`${result.name} errored: ${result.error.message}`); | ||
| if (result.ok && (result.result.signals ?? []).length > 0) | ||
| reasons.push(`${result.name}: ${(result.result.signals ?? []).join(', ')}`); | ||
| } | ||
| let verdict = 'ACT'; | ||
| if (errors.length > 0) | ||
| verdict = 'VERIFY'; | ||
| else if (branchOnlyInFlightWithCleanLinkedWork) | ||
| verdict = 'VERIFY'; | ||
| else if (skipSignals.length > 0) | ||
| verdict = 'SKIP'; | ||
| else if (signals.some((signal) => verifySignals.includes(signal))) | ||
| verdict = 'VERIFY'; | ||
| if (branchOnlyInFlightWithCleanLinkedWork) | ||
| reasons.push('keyword-matched branches exist but no linked PR or assignee; read the matched branches.'); | ||
| if (signals.includes('no_pr_path')) | ||
| reasons.push(`repo accepts no pull requests; feedback channel: ${noPrFeedbackChannel(sub_results)}`); | ||
| if (signals.includes('claim_required')) | ||
| reasons.push(`repo requires claim/assignment before a PR: ${claimProtocolCitation(sub_results)}`); | ||
| if (signals.includes('needs_repro')) | ||
| reasons.push('bug-shaped issue lacks reproduction steps; confirm the failure before investing.'); | ||
| if (signals.includes('linked_pr_open')) { | ||
| const citation = density.openCloser | ||
| ?? linkedPrCitation(sub_results, (item) => item.state === 'open') | ||
| ?? 'citation unavailable'; | ||
| reasons.push(`open linked PR found: ${citation}`); | ||
| reasons.push(`disposition land_only: do not open a parallel fix; review or land ${citation}.`); | ||
| } | ||
| if (signals.includes('assigned')) | ||
| reasons.push(`issue is assigned: ${assignmentCitation(sub_results) ?? 'assignee date unavailable'}`); | ||
| if (signals.includes('linked_pr_merged')) | ||
| reasons.push(`linked PR was merged: ${linkedPrCitation(sub_results, (item) => item.merged === true) ?? 'citation unavailable'}`); | ||
| if (signals.includes('linked_pr_closed')) | ||
| reasons.push(`closed unmerged linked PR found (prior attempt): ${linkedPrCitation(sub_results, (item) => item.state === 'closed' && item.merged !== true) ?? 'citation unavailable'}`); | ||
| if (density.priorAttempts > 0 || density.referencedCommits > 0 || density.networkPrs > 0) { | ||
| reasons.push(`lane density: ${density.priorAttempts} prior closed unmerged PR(s), ${density.referencedCommits} referenced commit(s), ${density.networkPrs} network/fork PR(s).`); | ||
| } | ||
| const disposition = chooseDisposition({ | ||
| verdict, | ||
| const decision = decideFromSignals({ | ||
| signals, | ||
| sub_results, | ||
| errors, | ||
| priorAttempts: density.priorAttempts, | ||
@@ -175,11 +93,3 @@ referencedCommits: density.referencedCommits, | ||
| }); | ||
| if (disposition === 'crowded' && !signals.includes('linked_pr_open')) { | ||
| reasons.push('disposition crowded: multiple prior attempts or referenced commits — read linked_work evidence before investing.'); | ||
| } | ||
| if (disposition === 'claim_first') { | ||
| reasons.push('disposition claim_first: coordinate or claim before opening a PR.'); | ||
| } | ||
| if (disposition === 'blocked') { | ||
| reasons.push('disposition blocked: work appears already handled (shipped, released, or duplicate).'); | ||
| } | ||
| const reasons = [...decision.reasons]; | ||
| if (extraNotChecked.length > 0) { | ||
@@ -189,4 +99,14 @@ reasons.push(`perf short-circuit: skipped ${extraNotChecked.length} expensive sub-check${extraNotChecked.length === 1 ? '' : 's'} after open linked PR.`); | ||
| const base = createEnvelope({ | ||
| verdict_summary: verdict === 'ACT' ? 'no blocking evidence found by completed checks.' : verdict === 'SKIP' ? 'blocking evidence was found by completed checks.' : 'mixed signals or sub-check errors require human review.', | ||
| evidence: [], | ||
| verdict_summary: decision.verdict === 'ACT' ? 'no blocking evidence found by completed checks.' : decision.verdict === 'SKIP' ? 'blocking evidence was found by completed checks.' : 'mixed signals or sub-check errors require human review.', | ||
| evidence: decision.findings.map((item) => ({ | ||
| kind: 'finding', | ||
| id: item.id, | ||
| type: item.type, | ||
| strength: item.strength, | ||
| effect: item.effect, | ||
| source: item.source, | ||
| message: item.message, | ||
| ...(item.url ? { url: item.url } : {}), | ||
| data: item.data | ||
| })), | ||
| signals, | ||
@@ -202,4 +122,4 @@ checked: sub_results.filter((result) => result.ok).map((result) => result.name), | ||
| ...base, | ||
| verdict, | ||
| disposition, | ||
| verdict: decision.verdict, | ||
| disposition: decision.disposition, | ||
| reasons, | ||
@@ -252,8 +172,8 @@ sub_results, | ||
| timings_ms.phase1 = Date.now() - phase1Started; | ||
| if (hasOpenLinkedPr(phase1)) { | ||
| if (hasDefinitiveClosingOpenPr(phase1)) { | ||
| const skipped = [ | ||
| 'issue_vs_main skipped after open linked PR (perf short-circuit).', | ||
| 'branch_scan skipped after open linked PR (perf short-circuit).', | ||
| 'dupe_cluster skipped after open linked PR (perf short-circuit).', | ||
| ...(input.npm_package ? ['release_gap skipped after open linked PR (perf short-circuit).'] : []) | ||
| 'issue_vs_main skipped after definitive open closing PR (perf short-circuit).', | ||
| 'branch_scan skipped after definitive open closing PR (perf short-circuit).', | ||
| 'dupe_cluster skipped after definitive open closing PR (perf short-circuit).', | ||
| ...(input.npm_package ? ['release_gap skipped after definitive open closing PR (perf short-circuit).'] : []) | ||
| ]; | ||
@@ -260,0 +180,0 @@ timings_ms.total = Date.now() - totalStarted; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"worth-check.js","sourceRoot":"","sources":["../../src/core/worth-check.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"worth-check.js","sourceRoot":"","sources":["../../src/core/worth-check.ts"],"names":[],"mappings":"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"} |
+70
-3
@@ -5,4 +5,16 @@ export type RemoteHead = { | ||
| }; | ||
| /** A tracked file discovered via `git ls-tree`, never a working-tree fs entry. */ | ||
| export type ClonedFile = { | ||
| path: string; | ||
| sha: string; | ||
| symlink: boolean; | ||
| }; | ||
| /** All `git` subprocesses (clone, ls-tree, cat-file, ls-remote) must be bounded. */ | ||
| export declare const GIT_SUBPROCESS_TIMEOUT_MS = 15000; | ||
| /** Hostile repos can have huge trees; cap how many blob paths we ever consider. */ | ||
| export declare const DEFAULT_MAX_TREE_FILES = 20000; | ||
| /** Per-file content read cap; oversized blobs are treated as unreadable, not truncated. */ | ||
| export declare const DEFAULT_MAX_FILE_BYTES = 300000; | ||
| export declare function lsRemoteHeads(repo: string, force_refresh?: boolean): Promise<RemoteHead[]>; | ||
| /** Shallow-clone with a per-repo pool so consecutive checks on the same repo reuse one tree. */ | ||
| /** Bare-clone with a per-repo pool so consecutive checks on the same repo reuse one object store. */ | ||
| export declare function shallowClone(repo: string): Promise<{ | ||
@@ -13,10 +25,65 @@ dir: string; | ||
| }>; | ||
| /** Walk (or reuse) the file list for a pooled clone. Call while holding a shallowClone lease. */ | ||
| /** | ||
| * List blob paths tracked at `ref` by reading git's own tree objects | ||
| * (`git ls-tree`), never by walking a checked-out working tree. | ||
| */ | ||
| export declare function listTreeFiles(dir: string, opts?: { | ||
| ref?: string; | ||
| maxFiles?: number; | ||
| timeoutMs?: number; | ||
| }): Promise<{ | ||
| files: ClonedFile[]; | ||
| truncated: boolean; | ||
| }>; | ||
| /** | ||
| * Read a tracked blob's content directly from the object database | ||
| * (`git cat-file`), enforcing a byte budget and never dereferencing | ||
| * symlink entries. Returns null for symlinks, oversized blobs, binary | ||
| * blobs, or any git failure (missing object, timeout, etc.) — content | ||
| * inspection degrades to "not checked" rather than throwing. | ||
| */ | ||
| export declare function readTreeFile(dir: string, file: ClonedFile, opts?: { | ||
| maxBytes?: number; | ||
| timeoutMs?: number; | ||
| }): Promise<string | null>; | ||
| /** | ||
| * Read many tracked blobs' content in a small, fixed number of `git` | ||
| * subprocesses (`cat-file --batch-check` + `cat-file --batch`) instead of | ||
| * spawning one process per file — important both for perf and so a hostile | ||
| * repo with thousands of files cannot force unbounded subprocess fan-out. | ||
| * Symlinks, oversized blobs, blobs that would blow the aggregate byte | ||
| * budget, and binary blobs all map to `null`. | ||
| */ | ||
| export declare function readTreeFilesBatch(dir: string, files: ClonedFile[], opts?: { | ||
| maxBytes?: number; | ||
| maxTotalBytes?: number; | ||
| timeoutMs?: number; | ||
| }): Promise<Map<string, string | null>>; | ||
| /** List (or reuse) the tracked file set for a pooled clone. Call while holding a shallowClone lease. */ | ||
| export declare function listCloneFiles(repo: string): Promise<{ | ||
| files: string[]; | ||
| files: ClonedFile[]; | ||
| cached: boolean; | ||
| dir: string; | ||
| truncated: boolean; | ||
| }>; | ||
| /** | ||
| * Read one tracked file's content for a pooled clone. The path must already | ||
| * appear in `listCloneFiles`'s output (a path allowlist derived from the | ||
| * repo's own tree) — arbitrary or invented paths are refused, and symlink | ||
| * entries are never followed. | ||
| */ | ||
| export declare function readClonedFile(repo: string, filePath: string, opts?: { | ||
| maxBytes?: number; | ||
| }): Promise<string | null>; | ||
| /** | ||
| * Batched counterpart to `readClonedFile` for scanning many files at once | ||
| * (e.g. content grep). Same path-allowlist and symlink rules apply; paths | ||
| * missing from the pooled tree listing resolve to `null` in the result map. | ||
| */ | ||
| export declare function readClonedFilesBatch(repo: string, filePaths: string[], opts?: { | ||
| maxBytes?: number; | ||
| maxTotalBytes?: number; | ||
| }): Promise<Map<string, string | null>>; | ||
| export declare function gitOutput(cwd: string, args: string[]): Promise<string>; | ||
| /** Test helper: drop in-memory git caches. */ | ||
| export declare function resetGitCachesForTests(): Promise<void>; |
+290
-20
@@ -1,2 +0,2 @@ | ||
| import { mkdtemp, readdir, rm } from 'node:fs/promises'; | ||
| import { mkdtemp, rm } from 'node:fs/promises'; | ||
| import { tmpdir } from 'node:os'; | ||
@@ -8,2 +8,8 @@ import path from 'node:path'; | ||
| const CLONE_IDLE_MS = 10 * 60 * 1000; | ||
| /** All `git` subprocesses (clone, ls-tree, cat-file, ls-remote) must be bounded. */ | ||
| export const GIT_SUBPROCESS_TIMEOUT_MS = 15_000; | ||
| /** Hostile repos can have huge trees; cap how many blob paths we ever consider. */ | ||
| export const DEFAULT_MAX_TREE_FILES = 20_000; | ||
| /** Per-file content read cap; oversized blobs are treated as unreadable, not truncated. */ | ||
| export const DEFAULT_MAX_FILE_BYTES = 300_000; | ||
| const headsCache = new Map(); | ||
@@ -19,3 +25,3 @@ const clonePool = new Map(); | ||
| try { | ||
| const { stdout } = await execa('git', ['ls-remote', '--heads', remote]); | ||
| const { stdout } = await execa('git', ['ls-remote', '--heads', remote], { timeout: GIT_SUBPROCESS_TIMEOUT_MS }); | ||
| const heads = stdout.split('\n').filter(Boolean).map((line) => { | ||
@@ -35,3 +41,6 @@ const [sha, ref] = line.split(/\s+/); | ||
| try { | ||
| await execa('git', ['clone', '--depth', '1', `https://github.com/${repo}.git`, dir]); | ||
| // --bare + --no-checkout leaves no working tree at all, so there is nothing to | ||
| // walk with fs.readdir/fs.readFile and no working-tree symlink can ever be | ||
| // resolved. All content inspection below goes through git plumbing instead. | ||
| await execa('git', ['clone', '--bare', '--depth', '1', '--single-branch', `https://github.com/${repo}.git`, dir], { timeout: GIT_SUBPROCESS_TIMEOUT_MS }); | ||
| return dir; | ||
@@ -53,12 +62,2 @@ } | ||
| } | ||
| async function walkFiles(dir) { | ||
| const entries = await readdir(dir, { withFileTypes: true }); | ||
| const nested = await Promise.all(entries.map(async (entry) => { | ||
| const full = path.join(dir, entry.name); | ||
| if (entry.name === '.git' || entry.name === 'node_modules') | ||
| return []; | ||
| return entry.isDirectory() ? walkFiles(full) : [full]; | ||
| })); | ||
| return nested.flat(); | ||
| } | ||
| async function acquireLease(repo) { | ||
@@ -90,3 +89,3 @@ const existing = clonePool.get(repo); | ||
| } | ||
| /** Shallow-clone with a per-repo pool so consecutive checks on the same repo reuse one tree. */ | ||
| /** Bare-clone with a per-repo pool so consecutive checks on the same repo reuse one object store. */ | ||
| export async function shallowClone(repo) { | ||
@@ -116,3 +115,228 @@ const { lease, cached } = await acquireLease(repo); | ||
| } | ||
| /** Walk (or reuse) the file list for a pooled clone. Call while holding a shallowClone lease. */ | ||
| function parseLsTree(stdout, maxFiles) { | ||
| const entries = []; | ||
| let truncated = false; | ||
| for (const raw of stdout.split('\0')) { | ||
| if (!raw) | ||
| continue; | ||
| const tabIndex = raw.indexOf('\t'); | ||
| if (tabIndex < 0) | ||
| continue; | ||
| const meta = raw.slice(0, tabIndex); | ||
| const filePath = raw.slice(tabIndex + 1); | ||
| const [mode, type, sha] = meta.split(' '); | ||
| if (type !== 'blob' || !sha) | ||
| continue; | ||
| if (entries.length >= maxFiles) { | ||
| truncated = true; | ||
| break; | ||
| } | ||
| entries.push({ path: filePath.replace(/\\/g, '/'), sha, symlink: mode === '120000' }); | ||
| } | ||
| return { files: entries, truncated }; | ||
| } | ||
| /** | ||
| * List blob paths tracked at `ref` by reading git's own tree objects | ||
| * (`git ls-tree`), never by walking a checked-out working tree. | ||
| */ | ||
| export async function listTreeFiles(dir, opts = {}) { | ||
| const ref = opts.ref ?? 'HEAD'; | ||
| const maxFiles = opts.maxFiles ?? DEFAULT_MAX_TREE_FILES; | ||
| try { | ||
| const { stdout } = await execa('git', ['ls-tree', '-r', '-z', ref], { cwd: dir, timeout: opts.timeoutMs ?? GIT_SUBPROCESS_TIMEOUT_MS }); | ||
| return parseLsTree(stdout, maxFiles); | ||
| } | ||
| catch { | ||
| throw new GitworthyError({ code: 'git_ls_tree_failed', message: `git ls-tree failed in ${dir}.`, not_checked: [`Repository tree was not checked in ${dir}.`] }); | ||
| } | ||
| } | ||
| /** | ||
| * Read a tracked blob's content directly from the object database | ||
| * (`git cat-file`), enforcing a byte budget and never dereferencing | ||
| * symlink entries. Returns null for symlinks, oversized blobs, binary | ||
| * blobs, or any git failure (missing object, timeout, etc.) — content | ||
| * inspection degrades to "not checked" rather than throwing. | ||
| */ | ||
| export async function readTreeFile(dir, file, opts = {}) { | ||
| if (file.symlink) | ||
| return null; | ||
| const maxBytes = opts.maxBytes ?? DEFAULT_MAX_FILE_BYTES; | ||
| const timeout = opts.timeoutMs ?? GIT_SUBPROCESS_TIMEOUT_MS; | ||
| let size; | ||
| try { | ||
| const { stdout } = await execa('git', ['cat-file', '-s', file.sha], { cwd: dir, timeout }); | ||
| size = Number.parseInt(stdout.trim(), 10); | ||
| } | ||
| catch { | ||
| return null; | ||
| } | ||
| if (!Number.isFinite(size) || size > maxBytes) | ||
| return null; | ||
| try { | ||
| // `cat-file -p` writes raw blob bytes with no trailing separator of its own, so a blob whose | ||
| // content legitimately ends in `\n` must not have execa's default final-newline stripping | ||
| // silently eat that last byte. | ||
| const { stdout } = await execa('git', ['cat-file', '-p', file.sha], { cwd: dir, timeout, encoding: 'buffer', maxBuffer: maxBytes + 4096, stripFinalNewline: false }); | ||
| const buffer = Buffer.from(stdout); | ||
| if (buffer.includes(0)) | ||
| return null; // binary content, safe no-op | ||
| return buffer.toString('utf8'); | ||
| } | ||
| catch { | ||
| return null; | ||
| } | ||
| } | ||
| async function batchBlobSizes(dir, shas, timeout) { | ||
| const sizes = new Map(); | ||
| if (shas.length === 0) | ||
| return sizes; | ||
| try { | ||
| const { stdout } = await execa('git', ['cat-file', '--batch-check'], { cwd: dir, timeout, input: `${shas.join('\n')}\n` }); | ||
| for (const line of stdout.split('\n')) { | ||
| if (!line) | ||
| continue; | ||
| const parts = line.split(' '); | ||
| if (parts.length < 3 || parts[1] !== 'blob') | ||
| continue; // "<sha> missing" or ambiguous | ||
| const size = Number.parseInt(parts[2], 10); | ||
| if (Number.isFinite(size)) | ||
| sizes.set(parts[0], size); | ||
| } | ||
| } | ||
| catch { | ||
| // Leave sizes empty; callers treat unknown sizes as unreadable. | ||
| } | ||
| return sizes; | ||
| } | ||
| /** Parse `git cat-file --batch` output: `<sha> blob <size>\n<size bytes>\n` per requested object. */ | ||
| function parseBatchContents(buffer, shas) { | ||
| const results = new Map(); | ||
| let offset = 0; | ||
| for (const sha of shas) { | ||
| if (offset >= buffer.length) | ||
| break; | ||
| const headerEnd = buffer.indexOf(0x0a, offset); | ||
| if (headerEnd < 0) | ||
| break; | ||
| const header = buffer.toString('utf8', offset, headerEnd); | ||
| offset = headerEnd + 1; | ||
| const parts = header.split(' '); | ||
| if (parts.length < 3 || parts[1] !== 'blob') | ||
| continue; // "<sha> missing" | ||
| const size = Number.parseInt(parts[2], 10); | ||
| if (!Number.isFinite(size) || offset + size > buffer.length) | ||
| break; | ||
| const content = buffer.subarray(offset, offset + size); | ||
| results.set(sha, content.includes(0) ? null : content.toString('utf8')); | ||
| offset += size + 1; // trailing LF after object content | ||
| } | ||
| return results; | ||
| } | ||
| async function batchBlobContents(dir, shas, sizes, timeout) { | ||
| if (shas.length === 0) | ||
| return new Map(); | ||
| const totalBytes = shas.reduce((sum, sha) => sum + (sizes.get(sha) ?? 0), 0); | ||
| try { | ||
| const result = await execa('git', ['cat-file', '--batch'], { | ||
| cwd: dir, | ||
| timeout, | ||
| input: `${shas.join('\n')}\n`, | ||
| encoding: 'buffer', | ||
| maxBuffer: totalBytes + shas.length * 64 + 4096 | ||
| }); | ||
| const buffer = Buffer.from(result.stdout); | ||
| return parseBatchContents(buffer, shas); | ||
| } | ||
| catch { | ||
| return new Map(); | ||
| } | ||
| } | ||
| /** | ||
| * Read many tracked blobs' content in a small, fixed number of `git` | ||
| * subprocesses (`cat-file --batch-check` + `cat-file --batch`) instead of | ||
| * spawning one process per file — important both for perf and so a hostile | ||
| * repo with thousands of files cannot force unbounded subprocess fan-out. | ||
| * Symlinks, oversized blobs, blobs that would blow the aggregate byte | ||
| * budget, and binary blobs all map to `null`. | ||
| */ | ||
| export async function readTreeFilesBatch(dir, files, opts = {}) { | ||
| const maxBytes = opts.maxBytes ?? DEFAULT_MAX_FILE_BYTES; | ||
| const maxTotalBytes = opts.maxTotalBytes ?? Number.POSITIVE_INFINITY; | ||
| const timeout = opts.timeoutMs ?? GIT_SUBPROCESS_TIMEOUT_MS; | ||
| const results = new Map(); | ||
| const candidates = files.filter((file) => !file.symlink); | ||
| for (const file of files) | ||
| if (file.symlink) | ||
| results.set(file.path, null); | ||
| if (candidates.length === 0) | ||
| return results; | ||
| const uniqueShas = [...new Set(candidates.map((file) => file.sha))]; | ||
| const sizes = await batchBlobSizes(dir, uniqueShas, timeout); | ||
| // If batch-check failed entirely, fall back to per-file reads so one bad | ||
| // subprocess does not zero out the whole grep (matches the old per-file | ||
| // degrade-to-null behavior). | ||
| if (sizes.size === 0 && uniqueShas.length > 0) { | ||
| let runningTotal = 0; | ||
| for (const file of candidates) { | ||
| if (results.has(file.path)) | ||
| continue; | ||
| if (runningTotal >= maxTotalBytes) { | ||
| results.set(file.path, null); | ||
| continue; | ||
| } | ||
| const content = await readTreeFile(dir, file, { maxBytes, timeoutMs: timeout }); | ||
| if (content != null) { | ||
| const bytes = Buffer.byteLength(content, 'utf8'); | ||
| if (runningTotal + bytes > maxTotalBytes) { | ||
| results.set(file.path, null); | ||
| continue; | ||
| } | ||
| runningTotal += bytes; | ||
| } | ||
| results.set(file.path, content); | ||
| } | ||
| return results; | ||
| } | ||
| let runningTotal = 0; | ||
| const selectedShas = []; | ||
| const selectedShaSet = new Set(); | ||
| for (const file of candidates) { | ||
| const size = sizes.get(file.sha); | ||
| if (typeof size !== 'number' || size > maxBytes || runningTotal + size > maxTotalBytes) { | ||
| results.set(file.path, null); | ||
| continue; | ||
| } | ||
| if (!selectedShaSet.has(file.sha)) { | ||
| selectedShaSet.add(file.sha); | ||
| selectedShas.push(file.sha); | ||
| } | ||
| runningTotal += size; | ||
| } | ||
| if (selectedShas.length === 0) | ||
| return results; | ||
| let contentBySha = await batchBlobContents(dir, selectedShas, sizes, timeout); | ||
| if (contentBySha.size === 0) { | ||
| // Batch content read failed — recover with per-file cat-file for the | ||
| // already-selected (budget-approved) blobs only. | ||
| contentBySha = new Map(); | ||
| for (const file of candidates) { | ||
| if (results.has(file.path)) | ||
| continue; | ||
| if (!selectedShaSet.has(file.sha)) | ||
| continue; | ||
| if (!contentBySha.has(file.sha)) { | ||
| contentBySha.set(file.sha, await readTreeFile(dir, file, { maxBytes, timeoutMs: timeout })); | ||
| } | ||
| results.set(file.path, contentBySha.get(file.sha) ?? null); | ||
| } | ||
| return results; | ||
| } | ||
| for (const file of candidates) { | ||
| if (results.has(file.path)) | ||
| continue; // already resolved to null above | ||
| results.set(file.path, contentBySha.get(file.sha) ?? null); | ||
| } | ||
| return results; | ||
| } | ||
| /** List (or reuse) the tracked file set for a pooled clone. Call while holding a shallowClone lease. */ | ||
| export async function listCloneFiles(repo) { | ||
@@ -127,10 +351,56 @@ const lease = clonePool.get(repo); | ||
| } | ||
| if (lease.files) | ||
| return { files: lease.files, cached: true, dir: lease.dir }; | ||
| lease.files = await walkFiles(lease.dir); | ||
| return { files: lease.files, cached: false, dir: lease.dir }; | ||
| if (lease.files) { | ||
| return { files: lease.files, cached: true, dir: lease.dir, truncated: lease.treeTruncated === true }; | ||
| } | ||
| const listed = await listTreeFiles(lease.dir); | ||
| lease.files = listed.files; | ||
| lease.treeTruncated = listed.truncated; | ||
| lease.pathIndex = new Map(listed.files.map((entry) => [entry.path, entry])); | ||
| return { files: listed.files, cached: false, dir: lease.dir, truncated: listed.truncated }; | ||
| } | ||
| /** | ||
| * Read one tracked file's content for a pooled clone. The path must already | ||
| * appear in `listCloneFiles`'s output (a path allowlist derived from the | ||
| * repo's own tree) — arbitrary or invented paths are refused, and symlink | ||
| * entries are never followed. | ||
| */ | ||
| export async function readClonedFile(repo, filePath, opts = {}) { | ||
| const lease = clonePool.get(repo); | ||
| if (!lease?.pathIndex) | ||
| return null; | ||
| const file = lease.pathIndex.get(filePath.replace(/\\/g, '/')); | ||
| if (!file) | ||
| return null; | ||
| return readTreeFile(lease.dir, file, opts); | ||
| } | ||
| /** | ||
| * Batched counterpart to `readClonedFile` for scanning many files at once | ||
| * (e.g. content grep). Same path-allowlist and symlink rules apply; paths | ||
| * missing from the pooled tree listing resolve to `null` in the result map. | ||
| */ | ||
| export async function readClonedFilesBatch(repo, filePaths, opts = {}) { | ||
| const lease = clonePool.get(repo); | ||
| const results = new Map(); | ||
| if (!lease?.pathIndex) { | ||
| for (const filePath of filePaths) | ||
| results.set(filePath, null); | ||
| return results; | ||
| } | ||
| const files = []; | ||
| for (const filePath of filePaths) { | ||
| const file = lease.pathIndex.get(filePath.replace(/\\/g, '/')); | ||
| if (!file) { | ||
| results.set(filePath, null); | ||
| continue; | ||
| } | ||
| files.push(file); | ||
| } | ||
| const batch = await readTreeFilesBatch(lease.dir, files, opts); | ||
| for (const file of files) | ||
| results.set(file.path, batch.get(file.path) ?? null); | ||
| return results; | ||
| } | ||
| export async function gitOutput(cwd, args) { | ||
| try { | ||
| const { stdout } = await execa('git', args, { cwd }); | ||
| const { stdout } = await execa('git', args, { cwd, timeout: GIT_SUBPROCESS_TIMEOUT_MS }); | ||
| return stdout; | ||
@@ -137,0 +407,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"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"} |
+11
-0
@@ -0,1 +1,2 @@ | ||
| import { HttpTransport, RequestBudget } from './http-client.js'; | ||
| export type GithubIssue = { | ||
@@ -24,2 +25,11 @@ number: number; | ||
| export declare function githubToken(): string | undefined; | ||
| type GithubHttpTestOverrides = { | ||
| sleep?: (ms: number) => Promise<void>; | ||
| transport?: HttpTransport; | ||
| budget?: RequestBudget; | ||
| maxRetries?: number; | ||
| timeoutMs?: number; | ||
| }; | ||
| /** Test-only: replace HTTP client knobs (sleep/transport/budget) and rebuild the client. */ | ||
| export declare function configureGithubHttpForTests(overrides?: GithubHttpTestOverrides | null): void; | ||
| /** Clears the in-flight singleflight map and the TTL cache. For tests only. */ | ||
@@ -29,1 +39,2 @@ export declare function clearGithubCachesForTests(): void; | ||
| export declare function fetchRaw(repo: string, branch: string, filePath: string): Promise<string | null>; | ||
| export {}; |
+78
-10
| import { GitworthyError } from '../core/envelope.js'; | ||
| import { createHttpClient, DEFAULT_GITHUB_API_VERSION, DEFAULT_HTTP_MAX_RETRIES, DEFAULT_HTTP_TIMEOUT_MS, githubApiHeaders, HttpClientError } from './http-client.js'; | ||
| export function githubToken() { | ||
@@ -10,2 +11,21 @@ return process.env.GITHUB_TOKEN || process.env.GH_TOKEN; | ||
| const githubTtlCache = new Map(); | ||
| let httpTestOverrides = {}; | ||
| let githubHttp = createGithubHttpClient(); | ||
| function createGithubHttpClient() { | ||
| const options = { | ||
| timeoutMs: httpTestOverrides.timeoutMs ?? DEFAULT_HTTP_TIMEOUT_MS, | ||
| maxRetries: httpTestOverrides.maxRetries ?? DEFAULT_HTTP_MAX_RETRIES, | ||
| githubApiVersion: DEFAULT_GITHUB_API_VERSION, | ||
| userAgent: 'gitworthy', | ||
| budget: httpTestOverrides.budget, | ||
| transport: httpTestOverrides.transport, | ||
| sleep: httpTestOverrides.sleep | ||
| }; | ||
| return createHttpClient(options); | ||
| } | ||
| /** Test-only: replace HTTP client knobs (sleep/transport/budget) and rebuild the client. */ | ||
| export function configureGithubHttpForTests(overrides = null) { | ||
| httpTestOverrides = overrides ?? {}; | ||
| githubHttp = createGithubHttpClient(); | ||
| } | ||
| function githubCacheTtlMs() { | ||
@@ -64,11 +84,18 @@ const raw = process.env.GITWORTHY_GITHUB_CACHE_MS; | ||
| const url = path.startsWith('http') ? path : `https://api.github.com${path}`; | ||
| const response = await fetch(url, { | ||
| ...init, | ||
| headers: { | ||
| accept: 'application/vnd.github+json', | ||
| authorization: `Bearer ${token}`, | ||
| 'user-agent': 'gitworthy', | ||
| ...init.headers | ||
| } | ||
| }); | ||
| let response; | ||
| try { | ||
| const result = await githubHttp.request(url, { | ||
| method: init.method, | ||
| body: init.body, | ||
| signal: init.signal ?? undefined, | ||
| headers: { | ||
| ...githubApiHeaders(token), | ||
| ...headersToRecord(init.headers) | ||
| } | ||
| }); | ||
| response = result.response; | ||
| } | ||
| catch (error) { | ||
| throw mapHttpClientError(error, url); | ||
| } | ||
| if (!response.ok) { | ||
@@ -112,3 +139,16 @@ const remaining = response.headers.get('x-ratelimit-remaining'); | ||
| const token = githubToken(); | ||
| const response = await fetch(url, { headers: { 'user-agent': 'gitworthy', ...(token ? { authorization: `Bearer ${token}` } : {}) } }); | ||
| let response; | ||
| try { | ||
| const result = await githubHttp.request(url, { | ||
| github: false, | ||
| headers: { | ||
| 'user-agent': 'gitworthy', | ||
| ...(token ? { authorization: `Bearer ${token}` } : {}) | ||
| } | ||
| }); | ||
| response = result.response; | ||
| } | ||
| catch (error) { | ||
| throw mapHttpClientError(error, url); | ||
| } | ||
| if (response.status === 404) | ||
@@ -126,2 +166,30 @@ return null; | ||
| } | ||
| function mapHttpClientError(error, url) { | ||
| if (error instanceof HttpClientError) { | ||
| if (error.code === 'http_timeout') { | ||
| return new GitworthyError({ | ||
| code: 'github_timeout', | ||
| message: error.message, | ||
| not_checked: [`GitHub API request timed out for ${url}.`] | ||
| }); | ||
| } | ||
| if (error.code === 'http_budget_exceeded') { | ||
| return new GitworthyError({ | ||
| code: 'github_request_budget_exceeded', | ||
| message: error.message, | ||
| not_checked: [`GitHub API request budget was exceeded for ${url}.`] | ||
| }); | ||
| } | ||
| } | ||
| return error instanceof Error ? error : new Error(String(error)); | ||
| } | ||
| function headersToRecord(headers) { | ||
| if (!headers) | ||
| return {}; | ||
| const out = {}; | ||
| new Headers(headers).forEach((value, key) => { | ||
| out[key] = value; | ||
| }); | ||
| return out; | ||
| } | ||
| //# sourceMappingURL=github.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/lib/github.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/lib/github.ts"],"names":[],"mappings":"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"} |
@@ -0,1 +1,2 @@ | ||
| import { HttpClient } from './http-client.js'; | ||
| export type NpmMetadata = { | ||
@@ -15,6 +16,6 @@ name: string; | ||
| export declare function npmMetadata(packageName: string): Promise<NpmMetadata>; | ||
| export declare function downloadAndExtractTarball(tarballUrl: string): Promise<{ | ||
| dir: string; | ||
| cleanup: () => Promise<void>; | ||
| }>; | ||
| /** | ||
| * Read package.json from a bare/no-checkout clone directory via git objects | ||
| * (`git ls-tree` + `git cat-file`), never via a working-tree fs read. | ||
| */ | ||
| export declare function readPackageJsonFromClone(dir: string): Promise<{ | ||
@@ -24,1 +25,55 @@ version?: string; | ||
| }>; | ||
| /** | ||
| * Caps that bound npm tarball inspection (GW-013). Tarballs are hostile | ||
| * input: they are streamed and parsed incrementally, and never fully | ||
| * buffered or extracted to disk. | ||
| */ | ||
| export type TarballCaps = { | ||
| /** Total number of tar entries (files, dirs, links, ...) that may be scanned. */ | ||
| maxEntries: number; | ||
| /** Maximum declared/actual size, in bytes, of any single entry whose content is read. */ | ||
| maxEntryBytes: number; | ||
| /** Maximum sum of bytes read across all entries whose content is read. */ | ||
| maxTotalBytes: number; | ||
| /** Wall-clock budget, in milliseconds, for the entire fetch + parse. */ | ||
| timeoutMs: number; | ||
| }; | ||
| export declare const DEFAULT_TARBALL_CAPS: TarballCaps; | ||
| export type TarballMatch = { | ||
| /** Path relative to the package root, with the npm `package/` prefix stripped. Posix separators. */ | ||
| path: string; | ||
| size: number; | ||
| /** Only present when `readContent` was requested and the entry was actually read. */ | ||
| content?: string; | ||
| }; | ||
| export type TarballInspectOptions = { | ||
| /** Called with a normalized, traversal-safe relative path; return true to include the entry. */ | ||
| matches: (relativePath: string) => boolean; | ||
| /** When true, the content of matched file entries is read (subject to size caps). */ | ||
| readContent: boolean; | ||
| caps?: Partial<TarballCaps>; | ||
| /** Test-only: inject a preconfigured HttpClient instead of the shared default. */ | ||
| httpClient?: HttpClient; | ||
| }; | ||
| export type TarballInspectResult = { | ||
| matches: TarballMatch[]; | ||
| /** Total tar entries observed (including skipped/unsafe/non-file entries). */ | ||
| entriesScanned: number; | ||
| /** Total bytes of entry content actually read (bounded by maxTotalBytes). */ | ||
| bytesRead: number; | ||
| }; | ||
| /** | ||
| * Normalizes a raw tar entry path into a safe, package-relative posix path, | ||
| * or returns undefined when the entry must never be treated as a content | ||
| * source: absolute paths, `..` traversal segments, or empty paths. | ||
| */ | ||
| export declare function safeTarballRelativePath(entryPath: string): string | undefined; | ||
| /** | ||
| * Streams and inspects an npm tarball without buffering the whole archive | ||
| * or extracting it to disk (GW-013). Only entries that pass `matches()` and | ||
| * are safe, regular files are ever read into memory, and every dimension of | ||
| * resource usage (entry count, per-entry size, total bytes, wall clock) is | ||
| * capped. Absolute paths, `..` traversal, and symlink/hardlink entries are | ||
| * never used as content sources. | ||
| */ | ||
| export declare function inspectTarball(tarballUrl: string, options: TarballInspectOptions): Promise<TarballInspectResult>; |
+240
-15
@@ -1,6 +0,6 @@ | ||
| import { mkdtemp, readFile, rm } from 'node:fs/promises'; | ||
| import { tmpdir } from 'node:os'; | ||
| import path from 'node:path'; | ||
| import { extract } from 'tar'; | ||
| import { Readable } from 'node:stream'; | ||
| import { list as tarList } from 'tar'; | ||
| import { GitworthyError } from '../core/envelope.js'; | ||
| import { createHttpClient, HttpClientError } from './http-client.js'; | ||
| import { listTreeFiles, readTreeFile } from './git.js'; | ||
| export async function npmMetadata(packageName) { | ||
@@ -14,17 +14,242 @@ const url = `https://registry.npmjs.org/${encodeURIComponent(packageName).replace('%40', '@')}`; | ||
| } | ||
| export async function downloadAndExtractTarball(tarballUrl) { | ||
| const response = await fetch(tarballUrl, { headers: { 'user-agent': 'gitworthy' } }); | ||
| /** | ||
| * Read package.json from a bare/no-checkout clone directory via git objects | ||
| * (`git ls-tree` + `git cat-file`), never via a working-tree fs read. | ||
| */ | ||
| export async function readPackageJsonFromClone(dir) { | ||
| const { files } = await listTreeFiles(dir); | ||
| const entry = files.find((file) => file.path === 'package.json'); | ||
| if (!entry) { | ||
| throw new GitworthyError({ | ||
| code: 'git_package_json_missing', | ||
| message: `package.json was not found in the cloned tree at ${dir}.`, | ||
| not_checked: [`package.json content was not checked for the repository at ${dir}.`] | ||
| }); | ||
| } | ||
| const content = await readTreeFile(dir, entry); | ||
| if (content == null) { | ||
| throw new GitworthyError({ | ||
| code: 'git_package_json_unreadable', | ||
| message: `package.json could not be read from git objects at ${dir}.`, | ||
| not_checked: [`package.json content was not checked for the repository at ${dir}.`] | ||
| }); | ||
| } | ||
| return JSON.parse(content); | ||
| } | ||
| export const DEFAULT_TARBALL_CAPS = { | ||
| maxEntries: 20_000, | ||
| maxEntryBytes: 25 * 1024 * 1024, | ||
| maxTotalBytes: 150 * 1024 * 1024, | ||
| timeoutMs: 30_000 | ||
| }; | ||
| let defaultNpmHttp; | ||
| function npmHttpClient() { | ||
| defaultNpmHttp ??= createHttpClient({ userAgent: 'gitworthy' }); | ||
| return defaultNpmHttp; | ||
| } | ||
| /** | ||
| * Normalizes a raw tar entry path into a safe, package-relative posix path, | ||
| * or returns undefined when the entry must never be treated as a content | ||
| * source: absolute paths, `..` traversal segments, or empty paths. | ||
| */ | ||
| export function safeTarballRelativePath(entryPath) { | ||
| const normalized = entryPath.replace(/\\/g, '/'); | ||
| if (normalized.startsWith('/') || /^[a-zA-Z]:/.test(normalized)) | ||
| return undefined; | ||
| const segments = normalized.split('/').filter((segment) => segment.length > 0 && segment !== '.'); | ||
| if (segments.length === 0) | ||
| return undefined; | ||
| if (segments.some((segment) => segment === '..')) | ||
| return undefined; | ||
| if (segments[0] === 'package') | ||
| segments.shift(); | ||
| if (segments.length === 0) | ||
| return undefined; | ||
| return segments.join('/'); | ||
| } | ||
| function isAbortError(error) { | ||
| return error instanceof Error && (error.name === 'AbortError' || error.name === 'TimeoutError'); | ||
| } | ||
| function mapTarballHttpError(error, tarballUrl) { | ||
| if (error instanceof GitworthyError) | ||
| return error; | ||
| if (error instanceof HttpClientError) { | ||
| if (error.code === 'http_timeout') { | ||
| return new GitworthyError({ | ||
| code: 'npm_tarball_timeout', | ||
| message: error.message, | ||
| not_checked: [`npm tarball request timed out for ${tarballUrl}.`] | ||
| }); | ||
| } | ||
| if (error.code === 'http_budget_exceeded') { | ||
| return new GitworthyError({ | ||
| code: 'npm_tarball_budget_exceeded', | ||
| message: error.message, | ||
| not_checked: [`npm tarball request budget was exceeded for ${tarballUrl}.`] | ||
| }); | ||
| } | ||
| } | ||
| // The shared timeout signal also aborts body streaming that happens after | ||
| // the initial response headers arrive, which surfaces as a raw AbortError | ||
| // rather than an HttpClientError. | ||
| if (isAbortError(error)) { | ||
| return new GitworthyError({ | ||
| code: 'npm_tarball_timeout', | ||
| message: `npm tarball request timed out for ${tarballUrl}.`, | ||
| not_checked: [`npm tarball was not fully read before the timeout for ${tarballUrl}.`] | ||
| }); | ||
| } | ||
| return error instanceof Error ? error : new Error(String(error)); | ||
| } | ||
| /** | ||
| * node-tar's Parser is a Minipass stream. Node's `finished()` reports a false | ||
| * `ERR_STREAM_PREMATURE_CLOSE` after a clean parse, so wait on Parser events. | ||
| */ | ||
| function waitForTarParser(parser) { | ||
| return new Promise((resolve) => { | ||
| let settled = false; | ||
| const settle = () => { | ||
| if (settled) | ||
| return; | ||
| settled = true; | ||
| resolve(); | ||
| }; | ||
| parser.once('end', settle); | ||
| parser.once('finish', settle); | ||
| }); | ||
| } | ||
| /** | ||
| * Streams and inspects an npm tarball without buffering the whole archive | ||
| * or extracting it to disk (GW-013). Only entries that pass `matches()` and | ||
| * are safe, regular files are ever read into memory, and every dimension of | ||
| * resource usage (entry count, per-entry size, total bytes, wall clock) is | ||
| * capped. Absolute paths, `..` traversal, and symlink/hardlink entries are | ||
| * never used as content sources. | ||
| */ | ||
| export async function inspectTarball(tarballUrl, options) { | ||
| const caps = { ...DEFAULT_TARBALL_CAPS, ...options.caps }; | ||
| const http = options.httpClient ?? npmHttpClient(); | ||
| let response; | ||
| try { | ||
| const result = await http.request(tarballUrl, { github: false, timeoutMs: caps.timeoutMs, headers: { 'user-agent': 'gitworthy' } }); | ||
| response = result.response; | ||
| } | ||
| catch (error) { | ||
| throw mapTarballHttpError(error, tarballUrl); | ||
| } | ||
| if (!response.ok || !response.body) { | ||
| throw new GitworthyError({ code: 'npm_tarball_error', message: `npm tarball request failed with status ${response.status}.`, status: response.status, not_checked: [`npm tarball was not checked at ${tarballUrl}.`] }); | ||
| } | ||
| const dir = await mkdtemp(path.join(tmpdir(), 'gitworthy-npm-')); | ||
| const buffer = Buffer.from(await response.arrayBuffer()); | ||
| const tarPath = path.join(dir, 'package.tgz'); | ||
| await import('node:fs/promises').then((fs) => fs.writeFile(tarPath, buffer)); | ||
| await extract({ file: tarPath, cwd: dir }); | ||
| return { dir, cleanup: () => rm(dir, { recursive: true, force: true }) }; | ||
| const matches = []; | ||
| let entriesScanned = 0; | ||
| let bytesRead = 0; | ||
| let budgetError; | ||
| let parserError; | ||
| const failBudget = (message) => { | ||
| budgetError ??= new GitworthyError({ | ||
| code: 'npm_tarball_budget_exceeded', | ||
| message, | ||
| not_checked: [message] | ||
| }); | ||
| }; | ||
| const parser = tarList({ | ||
| onReadEntry: (entry) => { | ||
| if (budgetError) { | ||
| entry.resume(); | ||
| return; | ||
| } | ||
| entriesScanned += 1; | ||
| if (entriesScanned > caps.maxEntries) { | ||
| failBudget(`npm tarball exceeded the max entry count (${caps.maxEntries}) while reading ${tarballUrl}.`); | ||
| entry.resume(); | ||
| return; | ||
| } | ||
| // Only plain files are ever valid content sources: directories, symlinks, | ||
| // hardlinks, and other special types are drained and excluded from results. | ||
| if (entry.type !== 'File') { | ||
| entry.resume(); | ||
| return; | ||
| } | ||
| const relativePath = safeTarballRelativePath(entry.path); | ||
| if (relativePath === undefined) { | ||
| entry.resume(); | ||
| return; | ||
| } | ||
| if (entry.size > caps.maxEntryBytes) { | ||
| entry.resume(); | ||
| return; | ||
| } | ||
| if (!options.matches(relativePath)) { | ||
| entry.resume(); | ||
| return; | ||
| } | ||
| if (!options.readContent) { | ||
| matches.push({ path: relativePath, size: entry.size }); | ||
| entry.resume(); | ||
| return; | ||
| } | ||
| const chunks = []; | ||
| let entryBytes = 0; | ||
| entry.on('data', (chunk) => { | ||
| if (budgetError) | ||
| return; | ||
| entryBytes += chunk.length; | ||
| bytesRead += chunk.length; | ||
| if (entryBytes > caps.maxEntryBytes || bytesRead > caps.maxTotalBytes) { | ||
| failBudget(`npm tarball exceeded the byte budget while reading ${relativePath} from ${tarballUrl}.`); | ||
| return; | ||
| } | ||
| chunks.push(chunk); | ||
| }); | ||
| entry.on('end', () => { | ||
| if (budgetError) | ||
| return; | ||
| matches.push({ path: relativePath, size: entry.size, content: Buffer.concat(chunks).toString('utf8') }); | ||
| }); | ||
| } | ||
| }); | ||
| // The parser can abort internally (malformed gzip, decompression-ratio bomb, | ||
| // strict-mode archive errors). Without a listener, an unhandled 'error' event | ||
| // on an EventEmitter throws and would crash the process. | ||
| parser.on('error', (error) => { | ||
| parserError ??= error; | ||
| }); | ||
| // Subscribe before any writes/`end` so a synchronous finish cannot be missed. | ||
| const parserDrained = waitForTarParser(parser); | ||
| const nodeStream = Readable.fromWeb(response.body); | ||
| try { | ||
| for await (const chunk of nodeStream) { | ||
| if (!parser.write(chunk)) { | ||
| await new Promise((resolve) => { | ||
| parser.once('drain', resolve); | ||
| }); | ||
| } | ||
| if (budgetError || parserError) | ||
| break; | ||
| } | ||
| // Content matches are appended in per-entry `end` handlers (and gzip | ||
| // decompression is asynchronous). Do not return until the parser has | ||
| // fully drained; otherwise release_gap can miss released_fix probes. | ||
| parser.end(); | ||
| await parserDrained; | ||
| } | ||
| catch (error) { | ||
| parser.end(); | ||
| await parserDrained.catch(() => undefined); | ||
| throw mapTarballHttpError(error, tarballUrl); | ||
| } | ||
| finally { | ||
| nodeStream.destroy(); | ||
| } | ||
| if (budgetError) | ||
| throw budgetError; | ||
| if (parserError) { | ||
| throw new GitworthyError({ | ||
| code: 'npm_tarball_error', | ||
| message: `npm tarball at ${tarballUrl} could not be parsed: ${parserError.message}`, | ||
| not_checked: [`npm tarball was not fully checked at ${tarballUrl} because it could not be parsed.`] | ||
| }); | ||
| } | ||
| return { matches, entriesScanned, bytesRead }; | ||
| } | ||
| export async function readPackageJsonFromClone(dir) { | ||
| return JSON.parse(await readFile(path.join(dir, 'package.json'), 'utf8')); | ||
| } | ||
| //# sourceMappingURL=registry.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AASrD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB;IACnD,MAAM,GAAG,GAAG,8BAA8B,kBAAkB,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;IAChG,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IAC9E,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,2CAA2C,QAAQ,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,oCAAoC,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/N,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,EAA0B,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,UAAkB;IAChE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,0CAA0C,QAAQ,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,kCAAkC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1N,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAC9C,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7E,MAAM,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,GAAW;IACxD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAwC,CAAC;AACnH,CAAC"} | ||
| {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"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"} |
+42
-35
@@ -5,27 +5,26 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; | ||
| import { branch_scan, contrib_policy, doctor, dupe_cluster, hunt, issue_vs_main, ledger_list, ledger_lookup, ledger_record, linked_work, listProbeTemplates, org_scan, related_cluster, release_gap, scan, worth_check } from '../core/index.js'; | ||
| import { GitworthyError } from '../core/envelope.js'; | ||
| import { packageVersion } from '../lib/package-meta.js'; | ||
| function jsonText(value) { | ||
| const stamped = value !== null && typeof value === 'object' && !Array.isArray(value) | ||
| ? { ...value, gitworthy_version: packageVersion() } | ||
| : { result: value, gitworthy_version: packageVersion() }; | ||
| return { content: [{ type: 'text', text: JSON.stringify(stamped, null, 2) }] }; | ||
| import { BranchScanInputSchema, ContribPolicyInputSchema, DoctorInputSchema, DupeClusterInputSchema, HuntInputSchema, IssueVsMainInputSchema, LedgerListInputSchema, LedgerLookupInputSchema, LedgerRecordInputSchema, LinkedWorkInputSchema, OrgScanInputSchema, parseToolInput, RelatedClusterInputSchema, ReleaseGapInputSchema, ScanInputSchema, toCheckResult, toErrorResult, toStampedLegacyResult, WorthCheckInputSchema } from '../contracts/index.js'; | ||
| function jsonText(value, isError = false) { | ||
| return { | ||
| content: [{ type: 'text', text: JSON.stringify(value, null, 2) }], | ||
| ...(isError ? { isError: true } : {}) | ||
| }; | ||
| } | ||
| async function withToolErrors(run) { | ||
| async function withToolErrors(command, run, map) { | ||
| try { | ||
| return jsonText(await run()); | ||
| const value = await run(); | ||
| return jsonText(map ? map(value) : value); | ||
| } | ||
| catch (error) { | ||
| if (error instanceof GitworthyError) { | ||
| return jsonText({ | ||
| code: error.code, | ||
| message: error.message, | ||
| checked: error.checked, | ||
| not_checked: error.not_checked, | ||
| status: error.status | ||
| }); | ||
| } | ||
| throw error; | ||
| return jsonText(toErrorResult({ command, error }), true); | ||
| } | ||
| } | ||
| /** | ||
| * Tool registration shapes are intentionally loose (primitive zod types only). The MCP SDK | ||
| * validates `arguments` against this shape itself and throws a protocol-level McpError before our | ||
| * handler ever runs, so anything stricter here (regex/enum/positivity) would bypass our | ||
| * `withToolErrors` -> `toErrorResult` + `isError: true` contract. Real strictness is applied inside | ||
| * each handler via the shared contracts/inputs.ts schemas and `parseToolInput`. | ||
| */ | ||
| const skillProfileSchema = z.union([ | ||
@@ -39,15 +38,23 @@ z.string(), | ||
| ]).optional(); | ||
| const probeShape = { file_glob: z.string().optional(), contains: z.string().optional() }; | ||
| export function createMcpServer() { | ||
| const server = new McpServer({ name: 'gitworthy', version: packageVersion() }); | ||
| server.registerTool('doctor', { title: 'Doctor', inputSchema: { probe_repo: z.string().optional(), probe_issue_number: z.number().optional() } }, async (input) => withToolErrors(() => doctor(input))); | ||
| server.registerTool('branch_scan', { title: 'Branch scan', inputSchema: { repo: z.string(), keywords: z.array(z.string()), issue_number: z.number().optional(), max_age_days: z.number().optional(), force_refresh: z.boolean().optional() } }, async (input) => withToolErrors(() => branch_scan(input))); | ||
| server.registerTool('issue_vs_main', { title: 'Issue versus main', inputSchema: { repo: z.string(), issue_number: z.number() } }, async (input) => withToolErrors(() => issue_vs_main(input))); | ||
| server.registerTool('release_gap', { title: 'Release gap', inputSchema: { repo: z.string(), npm_package: z.string(), probe: z.object({ file_glob: z.string().optional(), contains: z.string().optional() }).optional(), probe_template: z.string().optional(), force_refresh: z.boolean().optional() } }, async (input) => withToolErrors(() => release_gap(input))); | ||
| server.registerTool('dupe_cluster', { title: 'Duplicate cluster', inputSchema: { repo: z.string(), issue_number: z.number(), max_candidates: z.number().optional() } }, async (input) => withToolErrors(() => dupe_cluster(input))); | ||
| server.registerTool('related_cluster', { title: 'Related cluster', inputSchema: { repo: z.string(), issue_number: z.number().optional(), label: z.string().optional(), keywords: z.array(z.string()).optional(), limit: z.number().optional(), min_score: z.number().optional() } }, async (input) => withToolErrors(() => related_cluster(input))); | ||
| server.registerTool('linked_work', { title: 'Linked work', inputSchema: { repo: z.string(), issue_number: z.number() } }, async (input) => withToolErrors(() => linked_work(input))); | ||
| server.registerTool('contrib_policy', { title: 'Contribution policy', inputSchema: { repo: z.string(), force_refresh: z.boolean().optional() } }, async (input) => withToolErrors(() => contrib_policy(input))); | ||
| server.registerTool('worth_check', { title: 'Worth check', inputSchema: { repo: z.string(), issue_number: z.number(), npm_package: z.string().optional(), probe: z.object({ file_glob: z.string().optional(), contains: z.string().optional() }).optional(), probe_template: z.string().optional() } }, async (input) => withToolErrors(() => worth_check(input))); | ||
| server.registerTool('scan', { title: 'Scan issues', inputSchema: { repo: z.string(), label: z.string().optional(), keywords: z.array(z.string()).optional(), since: z.string().optional(), limit: z.number().optional(), land_hints: z.boolean().optional(), skill_profile: skillProfileSchema } }, async (input) => withToolErrors(() => scan(input))); | ||
| server.registerTool('org_scan', { title: 'Org scan', inputSchema: { org: z.string(), label: z.string().optional(), keywords: z.array(z.string()).optional(), since: z.string().optional(), limit: z.number().optional(), max_repos: z.number().optional(), land_hints: z.boolean().optional(), skill_profile: skillProfileSchema } }, async (input) => withToolErrors(() => org_scan(input))); | ||
| const stamp = (command) => (value) => toStampedLegacyResult(command, value); | ||
| server.registerTool('doctor', { title: 'Doctor', inputSchema: { probe_repo: z.string().optional(), probe_issue_number: z.number().optional() } }, async (input) => withToolErrors('doctor', () => doctor(parseToolInput(DoctorInputSchema, input)), stamp('doctor'))); | ||
| server.registerTool('branch_scan', { title: 'Branch scan', inputSchema: { repo: z.string(), keywords: z.array(z.string()), issue_number: z.number().optional(), max_age_days: z.number().optional(), force_refresh: z.boolean().optional() } }, async (input) => withToolErrors('branch_scan', () => branch_scan(parseToolInput(BranchScanInputSchema, input)), stamp('branch_scan'))); | ||
| server.registerTool('issue_vs_main', { title: 'Issue versus main', inputSchema: { repo: z.string(), issue_number: z.number() } }, async (input) => withToolErrors('issue_vs_main', () => issue_vs_main(parseToolInput(IssueVsMainInputSchema, input)), stamp('issue_vs_main'))); | ||
| server.registerTool('release_gap', { title: 'Release gap', inputSchema: { repo: z.string(), npm_package: z.string(), probe: z.object(probeShape).optional(), probe_template: z.string().optional(), force_refresh: z.boolean().optional() } }, async (input) => withToolErrors('release_gap', () => release_gap(parseToolInput(ReleaseGapInputSchema, input)), stamp('release_gap'))); | ||
| server.registerTool('dupe_cluster', { title: 'Duplicate cluster', inputSchema: { repo: z.string(), issue_number: z.number(), max_candidates: z.number().optional() } }, async (input) => withToolErrors('dupe_cluster', () => dupe_cluster(parseToolInput(DupeClusterInputSchema, input)), stamp('dupe_cluster'))); | ||
| server.registerTool('related_cluster', { title: 'Related cluster', inputSchema: { repo: z.string(), issue_number: z.number().optional(), label: z.string().optional(), keywords: z.array(z.string()).optional(), limit: z.number().optional(), min_score: z.number().optional() } }, async (input) => withToolErrors('related_cluster', () => related_cluster(parseToolInput(RelatedClusterInputSchema, input)), stamp('related_cluster'))); | ||
| server.registerTool('linked_work', { title: 'Linked work', inputSchema: { repo: z.string(), issue_number: z.number() } }, async (input) => withToolErrors('linked_work', () => linked_work(parseToolInput(LinkedWorkInputSchema, input)), stamp('linked_work'))); | ||
| server.registerTool('contrib_policy', { title: 'Contribution policy', inputSchema: { repo: z.string(), force_refresh: z.boolean().optional() } }, async (input) => withToolErrors('contrib_policy', () => contrib_policy(parseToolInput(ContribPolicyInputSchema, input)), stamp('contrib_policy'))); | ||
| server.registerTool('worth_check', { title: 'Worth check', inputSchema: { repo: z.string(), issue_number: z.number(), npm_package: z.string().optional(), probe: z.object(probeShape).optional(), probe_template: z.string().optional() } }, async (input) => { | ||
| let parsed; | ||
| return withToolErrors('check', () => { | ||
| parsed = parseToolInput(WorthCheckInputSchema, input); | ||
| return worth_check(parsed); | ||
| }, (value) => toCheckResult(value, { repo: parsed.repo, issue_number: parsed.issue_number })); | ||
| }); | ||
| server.registerTool('scan', { title: 'Scan issues', inputSchema: { repo: z.string(), label: z.string().optional(), keywords: z.array(z.string()).optional(), since: z.string().optional(), limit: z.number().optional(), land_hints: z.boolean().optional(), skill_profile: skillProfileSchema } }, async (input) => withToolErrors('scan', () => scan(parseToolInput(ScanInputSchema, input)), stamp('scan'))); | ||
| server.registerTool('org_scan', { title: 'Org scan', inputSchema: { org: z.string(), label: z.string().optional(), keywords: z.array(z.string()).optional(), since: z.string().optional(), limit: z.number().optional(), max_repos: z.number().optional(), land_hints: z.boolean().optional(), skill_profile: skillProfileSchema } }, async (input) => withToolErrors('org_scan', () => org_scan(parseToolInput(OrgScanInputSchema, input)), stamp('org_scan'))); | ||
| server.registerTool('hunt', { | ||
@@ -73,4 +80,4 @@ title: 'Hunt', | ||
| } | ||
| }, async (input) => withToolErrors(() => hunt(input))); | ||
| server.registerTool('list_probe_templates', { title: 'List probe templates', inputSchema: {} }, async () => withToolErrors(async () => ({ | ||
| }, async (input) => withToolErrors('hunt', () => hunt(parseToolInput(HuntInputSchema, input)), stamp('hunt'))); | ||
| server.registerTool('list_probe_templates', { title: 'List probe templates', inputSchema: {} }, async () => withToolErrors('probes', async () => ({ | ||
| verdict_summary: `listed ${listProbeTemplates().length} probe templates.`, | ||
@@ -83,6 +90,6 @@ evidence: listProbeTemplates(), | ||
| fetched_at: new Date().toISOString() | ||
| }))); | ||
| server.registerTool('ledger_lookup', { title: 'Ledger lookup', inputSchema: { repo: z.string(), issue_number: z.number() } }, async (input) => withToolErrors(() => ledger_lookup(input))); | ||
| server.registerTool('ledger_record', { title: 'Ledger record', inputSchema: { repo: z.string(), issue_number: z.number(), verdict: z.string().optional(), disposition: z.string().optional(), quality_score: z.number().optional(), notes: z.string().optional(), source: z.string().optional() } }, async (input) => withToolErrors(() => ledger_record(input))); | ||
| server.registerTool('ledger_list', { title: 'Ledger list', inputSchema: { repo: z.string().optional(), limit: z.number().optional() } }, async (input) => withToolErrors(() => ledger_list(input))); | ||
| }), stamp('probes'))); | ||
| server.registerTool('ledger_lookup', { title: 'Ledger lookup', inputSchema: { repo: z.string(), issue_number: z.number() } }, async (input) => withToolErrors('ledger_lookup', () => ledger_lookup(parseToolInput(LedgerLookupInputSchema, input)), stamp('ledger_lookup'))); | ||
| server.registerTool('ledger_record', { title: 'Ledger record', inputSchema: { repo: z.string(), issue_number: z.number(), verdict: z.string().optional(), disposition: z.string().optional(), quality_score: z.number().optional(), notes: z.string().optional(), source: z.string().optional() } }, async (input) => withToolErrors('ledger_record', () => ledger_record(parseToolInput(LedgerRecordInputSchema, input)), stamp('ledger_record'))); | ||
| server.registerTool('ledger_list', { title: 'Ledger list', inputSchema: { repo: z.string().optional(), limit: z.number().optional() } }, async (input) => withToolErrors('ledger_list', () => ledger_list(parseToolInput(LedgerListInputSchema, input)), stamp('ledger_list'))); | ||
| return server; | ||
@@ -89,0 +96,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"} |
+14
-4
| { | ||
| "name": "gitworthy", | ||
| "version": "0.3.9", | ||
| "version": "0.4.0", | ||
| "mcpName": "io.github.trippyogi/gitworthy", | ||
@@ -8,2 +8,3 @@ "description": "is it worth your commit? A pre-flight tool for OSS contribution targets: checks whether an issue is already done, in flight, fixed but unreleased, duplicated, or genuinely open.", | ||
| "license": "MIT", | ||
| "packageManager": "pnpm@10.27.0", | ||
| "bin": { | ||
@@ -15,5 +16,11 @@ "gitworthy": "dist/cli/index.js" | ||
| "typecheck": "tsc -p tsconfig.json --noEmit", | ||
| "test": "pnpm build && vitest run", | ||
| "lint": "eslint .", | ||
| "test:unit": "vitest run", | ||
| "test": "pnpm build && pnpm test:unit", | ||
| "test:package": "tsx scripts/package-smoke.ts", | ||
| "schemas:generate": "tsx scripts/generate-schemas.ts", | ||
| "schemas:check": "tsx scripts/generate-schemas.ts --check", | ||
| "check": "pnpm lint && pnpm typecheck && pnpm build && pnpm test:unit && pnpm schemas:check", | ||
| "release:verify": "tsx scripts/release-verify.ts", | ||
| "dev": "tsx src/cli/index.ts", | ||
| "lint": "eslint .", | ||
| "eval": "tsx eval/run-eval.ts" | ||
@@ -40,6 +47,9 @@ }, | ||
| "dist", | ||
| "schemas", | ||
| "README.md", | ||
| "LICENSE", | ||
| "SKILL.md", | ||
| "CASE_STUDIES.md" | ||
| "CASE_STUDIES.md", | ||
| "SECURITY.md", | ||
| "ROADMAP.md" | ||
| ], | ||
@@ -46,0 +56,0 @@ "author": "Jeremy McKeehen", |
+11
-9
@@ -16,13 +16,15 @@ # gitworthy | ||
| See `ROADMAP.md` for the path to 1.0, `CONTRIBUTING.md` to develop, and `SECURITY.md` to report vulnerabilities privately. | ||
| ## Quickstart | ||
| ```sh | ||
| npx -y gitworthy@0.3.9 check owner/repo#123 | ||
| npx -y gitworthy@0.3.9 check owner/repo#123 --npm-package package-name --json | ||
| npx -y gitworthy@0.3.9 hunt owner/repo --json | ||
| npx -y gitworthy@0.3.9 hunt openclaw --max-checks 3 --json | ||
| npx -y gitworthy@0.3.9 scan Shopify/cli --label "good first issue" --json | ||
| npx -y gitworthy@0.3.9 org openclaw --json | ||
| npx -y gitworthy@0.3.9 doctor --json | ||
| npx -y gitworthy@0.3.9 mcp | ||
| npx -y gitworthy@0.3.10 check owner/repo#123 | ||
| npx -y gitworthy@0.3.10 check owner/repo#123 --npm-package package-name --json | ||
| npx -y gitworthy@0.3.10 hunt owner/repo --json | ||
| npx -y gitworthy@0.3.10 hunt openclaw --max-checks 3 --json | ||
| npx -y gitworthy@0.3.10 scan Shopify/cli --label "good first issue" --json | ||
| npx -y gitworthy@0.3.10 org openclaw --json | ||
| npx -y gitworthy@0.3.10 doctor --json | ||
| npx -y gitworthy@0.3.10 mcp | ||
| ``` | ||
@@ -58,3 +60,3 @@ | ||
| "command": "npx", | ||
| "args": ["-y", "gitworthy@0.3.9", "mcp"], | ||
| "args": ["-y", "gitworthy@0.3.10", "mcp"], | ||
| "env": { "GITHUB_TOKEN": "github_pat_..." } | ||
@@ -61,0 +63,0 @@ } |
+86
-6
@@ -5,4 +5,41 @@ # gitworthy skill | ||
| ## Hunt loop (perf) | ||
| ## Mandatory contribution loop | ||
| Never invert this order. Scout and execute are separate lanes; execute never skips gates. | ||
| ``` | ||
| 1. contrib_policy → 2. hunt/scan (optional) → 3. worth_check | ||
| ↓ | ||
| 4. ledger record / claim intent → 5. worth_check again (apply-lane revalidation) | ||
| ↓ | ||
| 6. fork → 7. repro → 8. implement → 9. review → 10. PR or comment | ||
| ``` | ||
| ### Gate 1: `contrib_policy` before fork, implement, or PR | ||
| Run contribution policy **before** forking, cloning for implementation, or opening a PR: | ||
| ```sh | ||
| npx gitworthy policy owner/repo --json | ||
| ``` | ||
| Or use `npx gitworthy scan owner/repo --json` / `npx gitworthy hunt …` only as tracker triage; follow policy reminders when no cached policy exists. | ||
| **Do not fork or implement until policy is read and the contribution path is chosen** (see path matrix below). | ||
| ### Gate 2: Path matrix from policy signals | ||
| Pick exactly one contribution path from `contrib_policy` evidence before investing: | ||
| | Path | When to use | Deliverable | | ||
| |------|-------------|-------------| | ||
| | **pr** | Default when policy allows PRs; no `no_pr_path`; no security-only channel | Fork → branch → PR | | ||
| | **issue_comment_patch** | `issue_first_or_alignment` in policy; or `no_pr_path` with a forum/discussion/issue feedback channel | Repro + minimal patch or steps in an issue comment (or linked discussion) | | ||
| | **security_report** | `SECURITY.md` or policy excerpt requires private disclosure | Report via stated channel; do not open a public PR for the vulnerability | | ||
| | **skip** | `worth_check` SKIP; or `no_pr_path` with no actionable alternate channel; or policy forbids the change type | Do not invest; pick the next queue item | | ||
| When `no_pr_path` is present, read `feedback_channel` in evidence and map it to **issue_comment_patch** or **security_report** — never default to **pr**. | ||
| ### Gate 3: Hunt loop (perf) | ||
| Wall time is usually **N × worth_check**, not one slow check. Prefer a narrow funnel: | ||
@@ -25,4 +62,2 @@ | ||
| Ordering rule: run contribution policy before investing in any unfamiliar repo. Use `npx gitworthy policy owner/repo --json`, or `npx gitworthy scan owner/repo --json` only as tracker triage and follow its policy reminder when no cached policy exists. | ||
| ```sh | ||
@@ -42,5 +77,5 @@ npx gitworthy check owner/repo#123 --json | ||
| - ACT means the completed deterministic checks did not find a blocking signal. | ||
| - VERIFY means a human must perform the named checks before investing or making any public claim. If `assigned` or `claim_required` is present, coordinate or claim before acting. If `needs_repro` is present, reproduce the failure first. If `linked_pr_closed` is present, read the prior attempt before retrying. If `no_pr_path` is present, do not plan a PR unless the stated feedback channel says otherwise. | ||
| - SKIP means the tool found a strong signal that the work is already handled, in flight, linked to an open PR, released, or duplicated. | ||
| - **ACT** means the completed deterministic checks did not find a blocking signal. ACT is a **queue candidate**, not permission to claim. | ||
| - **VERIFY** means a human must perform the named checks before investing or making any public claim. If `assigned` or `claim_required` is present, coordinate or claim before acting. If `needs_repro` is present, reproduce the failure first. If `linked_pr_closed` is present, read the prior attempt before retrying. If `no_pr_path` is present, do not plan a PR unless the stated feedback channel says otherwise. | ||
| - **SKIP** means the tool found a strong signal that the work is already handled, in flight, linked to an open PR, released, or duplicated. | ||
| - `disposition` refines hunt action without changing the verdict: `land_only` = review/land the open linked PR (do not open a parallel fix); `greenfield` = start work; `crowded` = dense prior attempts; `claim_first` / `blocked` / `review` as named. | ||
@@ -56,4 +91,49 @@ - Scan `likely_land_only` is a cheap prefilter only — still run `worth_check` before claiming. | ||
| ### Gate 4: Apply-lane revalidation at claim/implement time | ||
| When the user says **"take #N"** or you claim an issue for implementation, **re-run `worth_check` immediately** before forking: | ||
| ```sh | ||
| npx gitworthy check owner/repo#123 --json | ||
| ``` | ||
| Scout results go stale. Linked PRs merge, issues get assigned, and branches land. Treat the fresh result as authoritative; abandon or downgrade if the verdict changed. | ||
| Record the target in the scout ledger when available (`gitworthy ledger record owner/repo#123`). | ||
| ### Gate 5: ACT is not claimable without evidence review | ||
| Before claiming any ACT item, read: | ||
| 1. **`worth_check.reasons`** — every sub-check signal and error | ||
| 2. **`linked_work` sub-result** — all `evidence` entries, especially linked PRs | ||
| 3. **`contrib_policy` sub-result** — path matrix inputs | ||
| **Closed unmerged PRs:** inspect every closed linked PR before claiming. Read why it closed; if the fix was rejected or incomplete, only proceed with a clearly different approach. | ||
| Never treat ACT as "clear to claim" from the verdict alone. | ||
| ### Scout → execute bridge | ||
| - **`scan` / `hunt` + `worth_check` produce a ranked ACT list.** That list is a **queue**, not finished work. | ||
| - **"Take #N"** means: record in ledger → choose path from matrix → re-`worth_check` → fork → repro on main → implement → review branch diff → PR or issue comment per path. | ||
| - **Scout chats do not open PRs.** Execute chats do not re-scout without reading the ledger. | ||
| - Parallelize only across **claimed** issues (one worktree per claim). | ||
| ### Verdict quick reference | ||
| | Verdict | Scout lane | Execute lane | | ||
| |---------|------------|--------------| | ||
| | ACT | Add to queue; still read linked_work evidence | Re-check at claim; then fork/repro if still ACT | | ||
| | VERIFY | List with named human checks; do not rank as top pick | Perform checks first; do not fork until resolved | | ||
| | SKIP | Drop from queue | Abandon claim if re-check flips to SKIP | | ||
| ## Token note | ||
| For accurate `linked_work`, `GITHUB_TOKEN` must see issue **timeline cross-referenced** events (classic PAT, or fine-grained with **Issues: Read**). Weak tokens omit cross-links and under-count prior PRs; gitworthy falls back to title/body search and warns in `not_checked`. Prefer the same token quality you use with `gh` for hunts. Run `gitworthy doctor` to probe timeline visibility and rate remaining. | ||
| ## Privacy and security | ||
| - Prefer public repositories. Do not capture or export private repository content by default. | ||
| - Never place tokens in config files, fixtures, or chat logs. | ||
| - Security vulnerabilities in gitworthy itself: follow `SECURITY.md` (private disclosure). |
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
606810
53.32%154
52.48%8193
92.5%176
1.15%18
-14.29%3
-40%