🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

gitworthy

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gitworthy - npm Package Compare versions

Comparing version
0.3.9
to
0.4.0
+106
dist/contracts/check.d.ts
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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,kFAAkF;AAClF,MAAM,CAAC,MAAM,cAAc,GAAG,aAAsB,CAAC;AAErD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAE7D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEpH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAE7F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,MAAM,EAAE,iBAAiB;IACzB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IAChD,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IAChD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IAC1D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACvD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACrD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAEzB,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,cAAc,EAAE,mBAAmB;IACnC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,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,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAChD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;CACnC,CAAC,CAAC;AAIH,MAAM,UAAU,QAAQ;IACtB,OAAO,OAAO,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,YAAY,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,WAAW,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AACrD,CAAC"}
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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"}
# 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": {}
}
# 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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"}

@@ -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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"}

@@ -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 {};

@@ -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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"}

@@ -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>;

@@ -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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"}

@@ -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 {};
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>;

@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,IAAI,OAAO,EAAkB,MAAM,KAAK,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAc,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AASvD,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;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,GAAW;IACxD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;IACjE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,cAAc,CAAC;YACvB,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,oDAAoD,GAAG,GAAG;YACnE,WAAW,EAAE,CAAC,8DAA8D,GAAG,GAAG,CAAC;SACpF,CAAC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/C,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,MAAM,IAAI,cAAc,CAAC;YACvB,IAAI,EAAE,6BAA6B;YACnC,OAAO,EAAE,sDAAsD,GAAG,GAAG;YACrE,WAAW,EAAE,CAAC,8DAA8D,GAAG,GAAG,CAAC;SACpF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAwC,CAAC;AACpE,CAAC;AAkBD,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,UAAU,EAAE,MAAM;IAClB,aAAa,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;IAC/B,aAAa,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;IAChC,SAAS,EAAE,MAAM;CAClB,CAAC;AA4BF,IAAI,cAAsC,CAAC;AAE3C,SAAS,aAAa;IACpB,cAAc,KAAK,gBAAgB,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;IAChE,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAAiB;IACvD,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjD,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IAClF,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC;IAClG,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACnE,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;IAChD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc,EAAE,UAAkB;IAC7D,IAAI,KAAK,YAAY,cAAc;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAClC,OAAO,IAAI,cAAc,CAAC;gBACxB,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,WAAW,EAAE,CAAC,qCAAqC,UAAU,GAAG,CAAC;aAClE,CAAC,CAAC;QACL,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YAC1C,OAAO,IAAI,cAAc,CAAC;gBACxB,IAAI,EAAE,6BAA6B;gBACnC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,WAAW,EAAE,CAAC,+CAA+C,UAAU,GAAG,CAAC;aAC5E,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,0EAA0E;IAC1E,0EAA0E;IAC1E,kCAAkC;IAClC,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,cAAc,CAAC;YACxB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,qCAAqC,UAAU,GAAG;YAC3D,WAAW,EAAE,CAAC,yDAAyD,UAAU,GAAG,CAAC;SACtF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,MAAkE;IAC1F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB,EAAE,OAA8B;IACrF,MAAM,IAAI,GAAgB,EAAE,GAAG,oBAAoB,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IACvE,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,IAAI,aAAa,EAAE,CAAC;IAEnD,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QACpI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,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;IAED,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,WAAuC,CAAC;IAC5C,IAAI,WAA8B,CAAC;IAEnC,MAAM,UAAU,GAAG,CAAC,OAAe,EAAQ,EAAE;QAC3C,WAAW,KAAK,IAAI,cAAc,CAAC;YACjC,IAAI,EAAE,6BAA6B;YACnC,OAAO;YACP,WAAW,EAAE,CAAC,OAAO,CAAC;SACvB,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,OAAO,CAAC;QACrB,WAAW,EAAE,CAAC,KAAgB,EAAE,EAAE;YAChC,IAAI,WAAW,EAAE,CAAC;gBAChB,KAAK,CAAC,MAAM,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YACD,cAAc,IAAI,CAAC,CAAC;YACpB,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrC,UAAU,CAAC,6CAA6C,IAAI,CAAC,UAAU,mBAAmB,UAAU,GAAG,CAAC,CAAC;gBACzG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,0EAA0E;YAC1E,4EAA4E;YAC5E,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,KAAK,CAAC,MAAM,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,MAAM,YAAY,GAAG,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/B,KAAK,CAAC,MAAM,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBACpC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBACvD,KAAK,CAAC,MAAM,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACjC,IAAI,WAAW;oBAAE,OAAO;gBACxB,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;gBAC3B,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC;gBAC1B,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;oBACtE,UAAU,CAAC,sDAAsD,YAAY,SAAS,UAAU,GAAG,CAAC,CAAC;oBACrG,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACnB,IAAI,WAAW;oBAAE,OAAO;gBACxB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1G,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;IAEH,6EAA6E;IAC7E,8EAA8E;IAC9E,yDAAyD;IACzD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;QAClC,WAAW,KAAK,KAAK,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,8EAA8E;IAC9E,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE/C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAA4D,CAAC,CAAC;IAC3G,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAe,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAClC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,WAAW,IAAI,WAAW;gBAAE,MAAM;QACxC,CAAC;QACD,qEAAqE;QACrE,qEAAqE;QACrE,qEAAqE;QACrE,MAAM,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,aAAa,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,WAAW;QAAE,MAAM,WAAW,CAAC;IACnC,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI,cAAc,CAAC;YACvB,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,kBAAkB,UAAU,yBAAyB,WAAW,CAAC,OAAO,EAAE;YACnF,WAAW,EAAE,CAAC,wCAAwC,UAAU,kCAAkC,CAAC;SACpG,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;AAChD,CAAC"}

@@ -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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"}
{
"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",

@@ -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 @@ }

@@ -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).