opencode-swarm 7.161.1 → 7.162.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/background/pr-review-contract.d.ts +1 -24
- package/dist/cli/authorization-vstrh7ra.js +23 -0
- package/dist/cli/{coder-settlement-2jteb5vy.js → coder-settlement-zrda71k0.js} +9 -9
- package/dist/cli/{config-doctor-1yn317qf.js → config-doctor-gjw4hdvt.js} +2 -2
- package/dist/cli/{core-k687jrr3.js → core-q5j5a7fh.js} +1 -1
- package/dist/cli/{curation-policy-ej9xc0cd.js → curation-policy-nv31cr6t.js} +5 -5
- package/dist/cli/{curator-llm-factory-m1ke17eq.js → curator-llm-factory-8d6kqsj1.js} +33 -31
- package/dist/cli/{curator-q017rjfk.js → curator-njskp28b.js} +33 -31
- package/dist/cli/{evidence-summary-service-6jzfa547.js → evidence-summary-service-5rry81jm.js} +13 -13
- package/dist/cli/{gate-evidence-j6nskaka.js → gate-evidence-b6k9wng8.js} +5 -5
- package/dist/cli/{guardrail-explain-xw3ma90f.js → guardrail-explain-5yw549sm.js} +34 -32
- package/dist/cli/{guardrail-log-etmzhbge.js → guardrail-log-nrnx87ac.js} +7 -7
- package/dist/cli/{guardrail-reset-z9fkxksy.js → guardrail-reset-zm5an5bw.js} +33 -31
- package/dist/cli/{hive-promoter-dmwjya83.js → hive-promoter-zzgnfhxr.js} +33 -31
- package/dist/cli/{index-32avgbyq.js → index-0myjf1y2.js} +2 -2
- package/dist/cli/{index-dq41vsf9.js → index-1eqbnwm6.js} +1 -1
- package/dist/cli/{index-dh5q6z7y.js → index-3b762978.js} +7 -4
- package/dist/cli/{index-qd9mrd7e.js → index-3fs3p6ck.js} +5 -5
- package/dist/cli/{index-cbcfpgz9.js → index-3gym3fjj.js} +6 -6
- package/dist/cli/{index-c6zyqgpq.js → index-3nsewz46.js} +1 -1
- package/dist/cli/{index-nm0cpfrv.js → index-5a8nk165.js} +4 -4
- package/dist/cli/{index-d8st72j7.js → index-63s6t3z4.js} +1 -1
- package/dist/cli/{index-7d79mj06.js → index-7322jr05.js} +9 -9
- package/dist/cli/{index-bn78ywnb.js → index-9cvfa8p8.js} +1 -1
- package/dist/cli/{index-k55td019.js → index-9m1ze4z4.js} +1 -1
- package/dist/cli/{index-hvfsz7e3.js → index-a1bh2e4f.js} +6 -6
- package/dist/cli/{index-c1geyan9.js → index-bgzdwkpe.js} +1 -1
- package/dist/cli/{index-epjvntnm.js → index-cjjcey0h.js} +1 -1
- package/dist/cli/{index-29f9te70.js → index-f18bqg18.js} +5 -3
- package/dist/cli/{index-awjx0wgk.js → index-fckfgptr.js} +1 -1
- package/dist/cli/{index-88wb0z9r.js → index-gss86tj3.js} +2 -2
- package/dist/cli/{index-za42r41w.js → index-gwbxeh8j.js} +14 -643
- package/dist/cli/{index-1j532307.js → index-hq1gdz0g.js} +2 -2
- package/dist/cli/{index-zhdfqz89.js → index-j1gq4qm8.js} +5 -5
- package/dist/cli/{index-4p6x3xxy.js → index-m24pv3f4.js} +4 -4
- package/dist/cli/{index-jm21vbyp.js → index-m516tpxe.js} +2 -2
- package/dist/cli/index-mmngnxev.js +883 -0
- package/dist/cli/{index-134d35c1.js → index-n249fbw7.js} +9 -0
- package/dist/cli/{index-s33ee2w3.js → index-nbfpnb0w.js} +1 -1
- package/dist/cli/{index-7619tk9a.js → index-rkr19fdv.js} +1 -1
- package/dist/cli/{index-9kp3cp5n.js → index-ttdjphep.js} +3 -3
- package/dist/cli/{index-f5axf6vq.js → index-v0t8z5ab.js} +1 -1
- package/dist/cli/{index-rracnf2y.js → index-vcen0ne4.js} +1 -1
- package/dist/cli/{index-y14mwbk8.js → index-w1sfjffe.js} +2 -2
- package/dist/cli/index-w7ekntej.js +643 -0
- package/dist/cli/{index-hq57ytm5.js → index-wvfgkms6.js} +1 -1
- package/dist/cli/{index-e0re84cx.js → index-xsv6zv7n.js} +35 -33
- package/dist/cli/{index-cs9w1hfs.js → index-xtjvg1wx.js} +2691 -2781
- package/dist/cli/{index-k4xey4kh.js → index-y3fgbx8g.js} +1 -1
- package/dist/cli/{index-yhadrxka.js → index-z74stz9p.js} +4 -4
- package/dist/cli/index.js +33 -31
- package/dist/cli/{knowledge-escalator-cqyxfjfh.js → knowledge-escalator-8y3adkn0.js} +11 -11
- package/dist/cli/{knowledge-events-g707awjf.js → knowledge-events-mnexhwe2.js} +9 -9
- package/dist/cli/{knowledge-link-8knefv8x.js → knowledge-link-jr8rqr39.js} +4 -4
- package/dist/cli/{knowledge-store-byhv66xq.js → knowledge-store-cp42ccd1.js} +5 -5
- package/dist/cli/{knowledge-validator-qfkr8eje.js → knowledge-validator-hwp1t6x3.js} +7 -7
- package/dist/cli/{pending-delegations-n3baz9m3.js → pending-delegations-jj5vaq9q.js} +5 -4
- package/dist/cli/{pr-subscriptions-3zwthnan.js → pr-subscriptions-mm6kyyv0.js} +4 -4
- package/dist/cli/{runner-fzgkd6m1.js → runner-d402vnq3.js} +5 -5
- package/dist/cli/{scan-cursor-fbtgyeft.js → scan-cursor-d75dh3hv.js} +6 -6
- package/dist/cli/{schema-xb7d31wq.js → schema-djm1bhb8.js} +1 -1
- package/dist/cli/{scope-persistence-5npzdfjf.js → scope-persistence-g0yc6dfa.js} +8 -8
- package/dist/cli/{skill-generator-k1e7nee3.js → skill-generator-9ppgxz4j.js} +13 -13
- package/dist/cli/{sqlite-loader-r1kgt2pq.js → sqlite-loader-c92413n7.js} +1 -1
- package/dist/cli/{worktree-collision-ownership-jfam09nj.js → worktree-collision-ownership-061zmyyp.js} +6 -5
- package/dist/cli/{worktree-isolation-avp3yxcs.js → worktree-isolation-vk82698z.js} +33 -31
- package/dist/db/sqlite-loader.d.ts +1 -0
- package/dist/hooks/pr-workflow-gate.d.ts +20 -245
- package/dist/index.js +392 -378
- package/dist/memory/curator-decision-helpers.d.ts +1 -0
- package/dist/memory/index.d.ts +1 -1
- package/dist/memory/local-jsonl-provider.d.ts +2 -0
- package/dist/memory/proposal-load.d.ts +15 -0
- package/dist/memory/relation-constants.d.ts +3 -0
- package/dist/memory/relations.d.ts +8 -0
- package/dist/memory/schema.d.ts +8 -0
- package/dist/memory/sqlite-provider.d.ts +3 -0
- package/dist/memory/types.d.ts +21 -0
- package/dist/{hooks/pr-review-reentry-authorization.d.ts → pr-review/authorization.d.ts} +32 -10
- package/dist/{hooks/pr-review-resilience-circuit.d.ts → pr-review/circuit.d.ts} +60 -3
- package/dist/pr-review/completion.d.ts +373 -0
- package/dist/pr-review/critic-routing.d.ts +37 -0
- package/dist/pr-review/guardrails.d.ts +67 -0
- package/dist/pr-review/legacy-transcript-adapter.d.ts +276 -0
- package/dist/pr-review/persistence.d.ts +107 -0
- package/dist/pr-review/reducer.d.ts +54 -0
- package/dist/pr-review/types.d.ts +225 -0
- package/package.json +1 -1
- package/dist/cli/pr-review-reentry-authorization-ttctn8xv.js +0 -301
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
import {
|
|
3
3
|
canonicalRootKeyFresh
|
|
4
4
|
} from "./index-ddszzne4.js";
|
|
5
|
+
import {
|
|
6
|
+
PrReviewResultReceiptSchema
|
|
7
|
+
} from "./index-w7ekntej.js";
|
|
5
8
|
import {
|
|
6
9
|
validateSwarmPath
|
|
7
10
|
} from "./index-dtn0pne5.js";
|
|
@@ -10,7 +13,7 @@ import {
|
|
|
10
13
|
} from "./index-r3mvsbtq.js";
|
|
11
14
|
import {
|
|
12
15
|
observeDelegationLedgerPressure
|
|
13
|
-
} from "./index-
|
|
16
|
+
} from "./index-9m1ze4z4.js";
|
|
14
17
|
import {
|
|
15
18
|
EvidenceLockTimeoutError,
|
|
16
19
|
withEvidenceLock
|
|
@@ -30,7 +33,7 @@ import {
|
|
|
30
33
|
|
|
31
34
|
// src/background/pending-delegations.ts
|
|
32
35
|
init_zod();
|
|
33
|
-
import { createHash as
|
|
36
|
+
import { createHash as createHash2 } from "crypto";
|
|
34
37
|
import * as fs2 from "fs";
|
|
35
38
|
import * as path2 from "path";
|
|
36
39
|
import { isDeepStrictEqual } from "util";
|
|
@@ -393,638 +396,6 @@ function parsePrReviewCollectionReceiptFooter(binding, result) {
|
|
|
393
396
|
const payload = parsed.data;
|
|
394
397
|
return payload.parentSessionId === binding.parentSessionId && payload.batchId === (binding.batchId ?? binding.callID) && payload.laneId === (binding.laneId ?? binding.correlationId) && payload.mode === binding.mode && payload.workflowLane === binding.workflowLane && payload.outputDigest === result.digest ? payload : null;
|
|
395
398
|
}
|
|
396
|
-
|
|
397
|
-
// src/background/pr-review-contract.ts
|
|
398
|
-
init_zod();
|
|
399
|
-
import { createHash as createHash2 } from "crypto";
|
|
400
|
-
var PR_REVIEW_REVIEWER_CLASSIFICATIONS = [
|
|
401
|
-
"CONFIRMED",
|
|
402
|
-
"DISPROVED",
|
|
403
|
-
"UNVERIFIED",
|
|
404
|
-
"PRE_EXISTING"
|
|
405
|
-
];
|
|
406
|
-
var PR_REVIEW_REVIEWER_EVIDENCE_TYPES = [
|
|
407
|
-
"STRUCTURALLY_PROVEN",
|
|
408
|
-
"EXECUTION_PROVEN",
|
|
409
|
-
"STATIC_TRACE_PROVEN",
|
|
410
|
-
"PLAUSIBLE_BUT_UNVERIFIED"
|
|
411
|
-
];
|
|
412
|
-
var PR_REVIEW_SEVERITIES = [
|
|
413
|
-
"CRITICAL",
|
|
414
|
-
"HIGH",
|
|
415
|
-
"MEDIUM",
|
|
416
|
-
"LOW",
|
|
417
|
-
"INFO",
|
|
418
|
-
"NONE"
|
|
419
|
-
];
|
|
420
|
-
var PR_REVIEW_CRITIC_STATUSES = [
|
|
421
|
-
"UPHELD",
|
|
422
|
-
"DOWNGRADED",
|
|
423
|
-
"DISPROVED",
|
|
424
|
-
"NEEDS_MORE_EVIDENCE"
|
|
425
|
-
];
|
|
426
|
-
var PR_REVIEW_FINDING_STATUSES = [
|
|
427
|
-
"PENDING",
|
|
428
|
-
"CONFIRMED",
|
|
429
|
-
"DISPROVED",
|
|
430
|
-
"PRE_EXISTING"
|
|
431
|
-
];
|
|
432
|
-
var PR_REVIEW_FINDING_ACTIONS = [
|
|
433
|
-
"route_to_reviewer",
|
|
434
|
-
"route_to_critic",
|
|
435
|
-
"report",
|
|
436
|
-
"suppress_with_reason",
|
|
437
|
-
"handoff_to_feedback"
|
|
438
|
-
];
|
|
439
|
-
var PR_REVIEW_ARTIFACT_BOUNDARIES = [
|
|
440
|
-
"post_explorer",
|
|
441
|
-
"post_reviewer",
|
|
442
|
-
"post_critic"
|
|
443
|
-
];
|
|
444
|
-
var PR_REVIEW_BASE_DIMENSION_IDS = [
|
|
445
|
-
"intent-architecture",
|
|
446
|
-
"correctness-state",
|
|
447
|
-
"tests-falsifiability",
|
|
448
|
-
"security-trust",
|
|
449
|
-
"reliability-performance",
|
|
450
|
-
"compatibility-delivery"
|
|
451
|
-
];
|
|
452
|
-
var PR_REVIEW_RISK_IMPACTS = [
|
|
453
|
-
"ORDINARY",
|
|
454
|
-
"HIGH_IMPACT",
|
|
455
|
-
"UNKNOWN"
|
|
456
|
-
];
|
|
457
|
-
var PR_REVIEW_RISK_TAGS = [
|
|
458
|
-
"SECURITY",
|
|
459
|
-
"AUTH_PERMISSIONS",
|
|
460
|
-
"STATE_INTEGRITY",
|
|
461
|
-
"WRITE_PATH",
|
|
462
|
-
"EVIDENCE_INTEGRITY",
|
|
463
|
-
"GIT",
|
|
464
|
-
"CONFIGURATION"
|
|
465
|
-
];
|
|
466
|
-
var PR_REVIEW_RESULT_LANE_MODES = [
|
|
467
|
-
"swarm-pr-review:base",
|
|
468
|
-
"swarm-pr-review:micro"
|
|
469
|
-
];
|
|
470
|
-
var PR_REVIEW_RESULT_OUTCOMES = [
|
|
471
|
-
"CLEAN",
|
|
472
|
-
"FINDINGS",
|
|
473
|
-
"INCOMPLETE"
|
|
474
|
-
];
|
|
475
|
-
var PR_REVIEW_RESULT_FINDING_SEVERITIES = [
|
|
476
|
-
"CRITICAL",
|
|
477
|
-
"HIGH",
|
|
478
|
-
"MEDIUM",
|
|
479
|
-
"LOW",
|
|
480
|
-
"INFO"
|
|
481
|
-
];
|
|
482
|
-
var PR_REVIEW_RESULT_UNRESOLVED_REASONS = [
|
|
483
|
-
"NOT_EXECUTED",
|
|
484
|
-
"PARTIAL_OUTPUT",
|
|
485
|
-
"CONTRACT_FAILURE",
|
|
486
|
-
"RESOURCE_LIMIT",
|
|
487
|
-
"DEADLINE_EXCEEDED",
|
|
488
|
-
"STALE_BINDING",
|
|
489
|
-
"PARENT_CANCELLED"
|
|
490
|
-
];
|
|
491
|
-
var MAX_PR_REVIEW_RESULT_OWNED_LANES = 11;
|
|
492
|
-
var MAX_PR_REVIEW_RESULT_FINDINGS = 256;
|
|
493
|
-
var MAX_PR_REVIEW_RESULT_RECEIPT_BYTES = 64 * 1024;
|
|
494
|
-
function prReviewLegacyTranscriptCompatibilityEnabled(value) {
|
|
495
|
-
return value === true;
|
|
496
|
-
}
|
|
497
|
-
var PrReviewResultLaneIdSchema = exports_external.string().trim().min(1).max(120);
|
|
498
|
-
var PrReviewResultChildSessionSchema = exports_external.string().trim().min(1).max(256);
|
|
499
|
-
var PrReviewResultShaSchema = exports_external.string().trim().regex(/^[0-9a-f]{6,64}$/i);
|
|
500
|
-
var PrReviewResultDigestSchema = exports_external.string().trim().regex(/^[0-9a-f]{64}$/i);
|
|
501
|
-
function addDuplicateIssue(ctx, path2, label, value) {
|
|
502
|
-
ctx.addIssue({
|
|
503
|
-
code: exports_external.ZodIssueCode.custom,
|
|
504
|
-
path: path2,
|
|
505
|
-
message: `${label} must not contain duplicate value "${value}"`
|
|
506
|
-
});
|
|
507
|
-
}
|
|
508
|
-
function assertUniqueStrings(values, ctx, path2, label) {
|
|
509
|
-
const seen = new Set;
|
|
510
|
-
for (const value of values) {
|
|
511
|
-
if (seen.has(value)) {
|
|
512
|
-
addDuplicateIssue(ctx, path2, label, value);
|
|
513
|
-
return;
|
|
514
|
-
}
|
|
515
|
-
seen.add(value);
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
var PrReviewResultLocationSchema = exports_external.discriminatedUnion("kind", [
|
|
519
|
-
exports_external.object({
|
|
520
|
-
kind: exports_external.literal("local"),
|
|
521
|
-
file: exports_external.string().trim().min(1).max(4096),
|
|
522
|
-
line: exports_external.number().int().positive().max(1e6).optional(),
|
|
523
|
-
endLine: exports_external.number().int().positive().max(1e6).optional(),
|
|
524
|
-
column: exports_external.number().int().positive().max(1e4).optional(),
|
|
525
|
-
endColumn: exports_external.number().int().positive().max(1e4).optional()
|
|
526
|
-
}).strict().superRefine((value, ctx) => {
|
|
527
|
-
if (value.endLine !== undefined && value.line !== undefined && value.endLine < value.line) {
|
|
528
|
-
ctx.addIssue({
|
|
529
|
-
code: exports_external.ZodIssueCode.custom,
|
|
530
|
-
path: ["endLine"],
|
|
531
|
-
message: "endLine must be greater than or equal to line"
|
|
532
|
-
});
|
|
533
|
-
}
|
|
534
|
-
if (value.endColumn !== undefined && value.column !== undefined && value.endColumn < value.column) {
|
|
535
|
-
ctx.addIssue({
|
|
536
|
-
code: exports_external.ZodIssueCode.custom,
|
|
537
|
-
path: ["endColumn"],
|
|
538
|
-
message: "endColumn must be greater than or equal to column"
|
|
539
|
-
});
|
|
540
|
-
}
|
|
541
|
-
}),
|
|
542
|
-
exports_external.object({
|
|
543
|
-
kind: exports_external.literal("non_local"),
|
|
544
|
-
label: exports_external.string().trim().min(1).max(200),
|
|
545
|
-
detail: exports_external.string().trim().min(1).max(2000)
|
|
546
|
-
}).strict()
|
|
547
|
-
]);
|
|
548
|
-
var PrReviewResultFindingSchema = exports_external.object({
|
|
549
|
-
id: exports_external.string().trim().min(1).max(128),
|
|
550
|
-
workflowLane: PrReviewResultLaneIdSchema,
|
|
551
|
-
severity: exports_external.enum(PR_REVIEW_RESULT_FINDING_SEVERITIES),
|
|
552
|
-
riskImpact: exports_external.enum(PR_REVIEW_RISK_IMPACTS),
|
|
553
|
-
riskTags: exports_external.array(exports_external.enum(PR_REVIEW_RISK_TAGS)).max(PR_REVIEW_RISK_TAGS.length),
|
|
554
|
-
title: exports_external.string().trim().min(1).max(200),
|
|
555
|
-
body: exports_external.string().trim().min(1).max(4000),
|
|
556
|
-
evidence: exports_external.string().trim().min(1).max(4000),
|
|
557
|
-
location: PrReviewResultLocationSchema
|
|
558
|
-
}).strict().superRefine((value, ctx) => {
|
|
559
|
-
assertUniqueStrings(value.riskTags, ctx, ["riskTags"], "riskTags");
|
|
560
|
-
});
|
|
561
|
-
var PrReviewCleanAttestationSchema = exports_external.object({
|
|
562
|
-
workflowLane: PrReviewResultLaneIdSchema,
|
|
563
|
-
coverageScope: exports_external.string().trim().min(12).max(2000),
|
|
564
|
-
evidence: exports_external.string().trim().min(20).max(4000)
|
|
565
|
-
}).strict();
|
|
566
|
-
var PrReviewUnresolvedLaneSchema = exports_external.object({
|
|
567
|
-
workflowLane: PrReviewResultLaneIdSchema,
|
|
568
|
-
reason: exports_external.enum(PR_REVIEW_RESULT_UNRESOLVED_REASONS),
|
|
569
|
-
detail: exports_external.string().trim().min(1).max(4000)
|
|
570
|
-
}).strict();
|
|
571
|
-
var PrReviewLaneResultEnvelopeSchema = exports_external.object({
|
|
572
|
-
schemaVersion: exports_external.literal(1),
|
|
573
|
-
outcome: exports_external.enum(PR_REVIEW_RESULT_OUTCOMES),
|
|
574
|
-
creditedLanes: exports_external.array(PrReviewResultLaneIdSchema).max(MAX_PR_REVIEW_RESULT_OWNED_LANES),
|
|
575
|
-
findings: exports_external.array(PrReviewResultFindingSchema).max(MAX_PR_REVIEW_RESULT_FINDINGS),
|
|
576
|
-
cleanAttestations: exports_external.array(PrReviewCleanAttestationSchema).max(MAX_PR_REVIEW_RESULT_OWNED_LANES),
|
|
577
|
-
unresolved: exports_external.array(PrReviewUnresolvedLaneSchema).max(MAX_PR_REVIEW_RESULT_OWNED_LANES)
|
|
578
|
-
}).strict().superRefine((value, ctx) => {
|
|
579
|
-
assertUniqueStrings(value.creditedLanes, ctx, ["creditedLanes"], "creditedLanes");
|
|
580
|
-
const findingIds = value.findings.map((finding) => finding.id);
|
|
581
|
-
assertUniqueStrings(findingIds, ctx, ["findings"], "findings");
|
|
582
|
-
const findingLanes = value.findings.map((finding) => finding.workflowLane);
|
|
583
|
-
assertUniqueStrings(value.cleanAttestations.map((entry) => entry.workflowLane), ctx, ["cleanAttestations"], "cleanAttestations");
|
|
584
|
-
assertUniqueStrings(value.unresolved.map((entry) => entry.workflowLane), ctx, ["unresolved"], "unresolved");
|
|
585
|
-
for (const lane of findingLanes) {
|
|
586
|
-
if (value.cleanAttestations.some((entry) => entry.workflowLane === lane)) {
|
|
587
|
-
ctx.addIssue({
|
|
588
|
-
code: exports_external.ZodIssueCode.custom,
|
|
589
|
-
path: ["findings"],
|
|
590
|
-
message: `workflow lane "${lane}" cannot be both CLEAN and FINDINGS`
|
|
591
|
-
});
|
|
592
|
-
return;
|
|
593
|
-
}
|
|
594
|
-
}
|
|
595
|
-
const coveredLanes = new Set([
|
|
596
|
-
...findingLanes,
|
|
597
|
-
...value.cleanAttestations.map((entry) => entry.workflowLane)
|
|
598
|
-
]);
|
|
599
|
-
for (const lane of value.creditedLanes) {
|
|
600
|
-
if (!coveredLanes.has(lane)) {
|
|
601
|
-
ctx.addIssue({
|
|
602
|
-
code: exports_external.ZodIssueCode.custom,
|
|
603
|
-
path: ["creditedLanes"],
|
|
604
|
-
message: `credited workflow lane "${lane}" must be backed by a finding or CLEAN attestation`
|
|
605
|
-
});
|
|
606
|
-
return;
|
|
607
|
-
}
|
|
608
|
-
}
|
|
609
|
-
for (const lane of coveredLanes) {
|
|
610
|
-
if (!value.creditedLanes.includes(lane)) {
|
|
611
|
-
ctx.addIssue({
|
|
612
|
-
code: exports_external.ZodIssueCode.custom,
|
|
613
|
-
path: ["creditedLanes"],
|
|
614
|
-
message: `covered workflow lane "${lane}" must appear in creditedLanes`
|
|
615
|
-
});
|
|
616
|
-
return;
|
|
617
|
-
}
|
|
618
|
-
}
|
|
619
|
-
for (const lane of value.unresolved.map((entry) => entry.workflowLane)) {
|
|
620
|
-
if (coveredLanes.has(lane)) {
|
|
621
|
-
ctx.addIssue({
|
|
622
|
-
code: exports_external.ZodIssueCode.custom,
|
|
623
|
-
path: ["unresolved"],
|
|
624
|
-
message: `workflow lane "${lane}" cannot be both credited and unresolved`
|
|
625
|
-
});
|
|
626
|
-
return;
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
const totalCovered = value.creditedLanes.length + value.unresolved.length;
|
|
630
|
-
if (totalCovered === 0) {
|
|
631
|
-
ctx.addIssue({
|
|
632
|
-
code: exports_external.ZodIssueCode.custom,
|
|
633
|
-
path: ["creditedLanes"],
|
|
634
|
-
message: "result envelope must cover at least one workflow lane"
|
|
635
|
-
});
|
|
636
|
-
return;
|
|
637
|
-
}
|
|
638
|
-
if (value.outcome === "CLEAN") {
|
|
639
|
-
if (value.findings.length > 0 || value.unresolved.length > 0) {
|
|
640
|
-
ctx.addIssue({
|
|
641
|
-
code: exports_external.ZodIssueCode.custom,
|
|
642
|
-
path: ["outcome"],
|
|
643
|
-
message: "CLEAN outcome cannot include findings or unresolved lanes"
|
|
644
|
-
});
|
|
645
|
-
}
|
|
646
|
-
if (value.cleanAttestations.length !== value.creditedLanes.length) {
|
|
647
|
-
ctx.addIssue({
|
|
648
|
-
code: exports_external.ZodIssueCode.custom,
|
|
649
|
-
path: ["cleanAttestations"],
|
|
650
|
-
message: "CLEAN outcome must attest every credited workflow lane exactly once"
|
|
651
|
-
});
|
|
652
|
-
}
|
|
653
|
-
}
|
|
654
|
-
if (value.outcome === "FINDINGS") {
|
|
655
|
-
if (value.findings.length === 0) {
|
|
656
|
-
ctx.addIssue({
|
|
657
|
-
code: exports_external.ZodIssueCode.custom,
|
|
658
|
-
path: ["findings"],
|
|
659
|
-
message: "FINDINGS outcome requires at least one finding"
|
|
660
|
-
});
|
|
661
|
-
}
|
|
662
|
-
if (value.unresolved.length > 0) {
|
|
663
|
-
ctx.addIssue({
|
|
664
|
-
code: exports_external.ZodIssueCode.custom,
|
|
665
|
-
path: ["unresolved"],
|
|
666
|
-
message: "FINDINGS outcome cannot include unresolved lanes"
|
|
667
|
-
});
|
|
668
|
-
}
|
|
669
|
-
}
|
|
670
|
-
if (value.outcome === "INCOMPLETE" && value.unresolved.length === 0) {
|
|
671
|
-
ctx.addIssue({
|
|
672
|
-
code: exports_external.ZodIssueCode.custom,
|
|
673
|
-
path: ["unresolved"],
|
|
674
|
-
message: "INCOMPLETE outcome requires at least one unresolved lane"
|
|
675
|
-
});
|
|
676
|
-
}
|
|
677
|
-
});
|
|
678
|
-
function serializedPrReviewResultReceiptBytes(value) {
|
|
679
|
-
return new TextEncoder().encode(JSON.stringify(value)).byteLength;
|
|
680
|
-
}
|
|
681
|
-
function prReviewLaneResultEnvelopeDigest(value) {
|
|
682
|
-
return createHash2("sha256").update(JSON.stringify(value)).digest("hex");
|
|
683
|
-
}
|
|
684
|
-
var PrReviewResultReceiptSchema = exports_external.object({
|
|
685
|
-
schemaVersion: exports_external.literal(1),
|
|
686
|
-
mode: exports_external.enum(PR_REVIEW_RESULT_LANE_MODES),
|
|
687
|
-
workflowInstanceId: exports_external.string().trim().min(1).max(256),
|
|
688
|
-
workflowRevision: exports_external.number().int().nonnegative(),
|
|
689
|
-
batchId: exports_external.string().trim().min(1).max(120),
|
|
690
|
-
laneId: exports_external.string().trim().min(1).max(120),
|
|
691
|
-
workflowLane: PrReviewResultLaneIdSchema,
|
|
692
|
-
ownedWorkflowLanes: exports_external.array(PrReviewResultLaneIdSchema).min(1).max(MAX_PR_REVIEW_RESULT_OWNED_LANES),
|
|
693
|
-
baseSha: PrReviewResultShaSchema,
|
|
694
|
-
headSha: PrReviewResultShaSchema,
|
|
695
|
-
dispatchRevisionDigest: PrReviewResultDigestSchema,
|
|
696
|
-
childSessionId: PrReviewResultChildSessionSchema,
|
|
697
|
-
generation: exports_external.number().int().positive().max(1e6),
|
|
698
|
-
semanticEnvelopeDigest: PrReviewResultDigestSchema,
|
|
699
|
-
envelope: PrReviewLaneResultEnvelopeSchema
|
|
700
|
-
}).strict().superRefine((value, ctx) => {
|
|
701
|
-
assertUniqueStrings(value.ownedWorkflowLanes, ctx, ["ownedWorkflowLanes"], "ownedWorkflowLanes");
|
|
702
|
-
if (!value.ownedWorkflowLanes.includes(value.workflowLane)) {
|
|
703
|
-
ctx.addIssue({
|
|
704
|
-
code: exports_external.ZodIssueCode.custom,
|
|
705
|
-
path: ["workflowLane"],
|
|
706
|
-
message: "workflowLane must be included in ownedWorkflowLanes"
|
|
707
|
-
});
|
|
708
|
-
}
|
|
709
|
-
const covered = new Set([
|
|
710
|
-
...value.envelope.creditedLanes,
|
|
711
|
-
...value.envelope.unresolved.map((entry) => entry.workflowLane)
|
|
712
|
-
]);
|
|
713
|
-
if (covered.size !== value.ownedWorkflowLanes.length) {
|
|
714
|
-
ctx.addIssue({
|
|
715
|
-
code: exports_external.ZodIssueCode.custom,
|
|
716
|
-
path: ["envelope"],
|
|
717
|
-
message: "envelope credited and unresolved workflow lanes must exactly partition ownedWorkflowLanes"
|
|
718
|
-
});
|
|
719
|
-
return;
|
|
720
|
-
}
|
|
721
|
-
for (const lane of value.ownedWorkflowLanes) {
|
|
722
|
-
if (!covered.has(lane)) {
|
|
723
|
-
ctx.addIssue({
|
|
724
|
-
code: exports_external.ZodIssueCode.custom,
|
|
725
|
-
path: ["ownedWorkflowLanes"],
|
|
726
|
-
message: `owned workflow lane "${lane}" is missing from the envelope coverage`
|
|
727
|
-
});
|
|
728
|
-
return;
|
|
729
|
-
}
|
|
730
|
-
}
|
|
731
|
-
const expectedDigest = prReviewLaneResultEnvelopeDigest(value.envelope);
|
|
732
|
-
if (value.semanticEnvelopeDigest !== expectedDigest) {
|
|
733
|
-
ctx.addIssue({
|
|
734
|
-
code: exports_external.ZodIssueCode.custom,
|
|
735
|
-
path: ["semanticEnvelopeDigest"],
|
|
736
|
-
message: "semanticEnvelopeDigest must match the canonical envelope digest"
|
|
737
|
-
});
|
|
738
|
-
}
|
|
739
|
-
const bytes = serializedPrReviewResultReceiptBytes(value);
|
|
740
|
-
if (bytes > MAX_PR_REVIEW_RESULT_RECEIPT_BYTES) {
|
|
741
|
-
ctx.addIssue({
|
|
742
|
-
code: exports_external.ZodIssueCode.custom,
|
|
743
|
-
path: [],
|
|
744
|
-
message: `receipt exceeds the ${MAX_PR_REVIEW_RESULT_RECEIPT_BYTES}-byte bound`
|
|
745
|
-
});
|
|
746
|
-
}
|
|
747
|
-
});
|
|
748
|
-
var PR_REVIEW_FINDINGS_MAX_BYTES = 10 * 1024 * 1024;
|
|
749
|
-
var PR_REVIEW_FINDINGS_WRITE_MAX_BYTES = 3 * 1024 * 1024;
|
|
750
|
-
var PR_REVIEW_HANDOFF_MAX_BYTES = 128 * 1024;
|
|
751
|
-
var PR_REVIEW_HANDOFF_WRITE_MAX_BYTES = 120 * 1024;
|
|
752
|
-
var PR_REVIEW_DISCARDED_EXAMPLE_ITEM_ID = "discarded-id";
|
|
753
|
-
function serializedPrReviewArtifactInputBytes(value) {
|
|
754
|
-
return new TextEncoder().encode(JSON.stringify(value)).byteLength;
|
|
755
|
-
}
|
|
756
|
-
var PrReviewRunIdSchema = exports_external.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/, "run_id must be a safe relative identifier");
|
|
757
|
-
var PrReviewFindingSchema = exports_external.object({
|
|
758
|
-
finding_id: exports_external.string().trim().min(1).max(128),
|
|
759
|
-
status: exports_external.enum(PR_REVIEW_FINDING_STATUSES),
|
|
760
|
-
file_line: exports_external.string().trim().min(1).max(1000),
|
|
761
|
-
evidence: exports_external.string().trim().min(1).max(20000),
|
|
762
|
-
next_action: exports_external.enum(PR_REVIEW_FINDING_ACTIONS),
|
|
763
|
-
severity: exports_external.enum(PR_REVIEW_SEVERITIES).optional(),
|
|
764
|
-
category: exports_external.string().trim().min(1).max(128).optional(),
|
|
765
|
-
risk_impact: exports_external.enum(PR_REVIEW_RISK_IMPACTS).optional(),
|
|
766
|
-
risk_tags: exports_external.array(exports_external.enum(PR_REVIEW_RISK_TAGS)).max(PR_REVIEW_RISK_TAGS.length).optional()
|
|
767
|
-
}).strict().superRefine((value, ctx) => {
|
|
768
|
-
if (value.status !== "CONFIRMED")
|
|
769
|
-
return;
|
|
770
|
-
if (value.risk_impact === undefined) {
|
|
771
|
-
ctx.addIssue({
|
|
772
|
-
code: "custom",
|
|
773
|
-
path: ["risk_impact"],
|
|
774
|
-
message: "is required on every newly written CONFIRMED finding (issue #2383 typed critic routing)"
|
|
775
|
-
});
|
|
776
|
-
}
|
|
777
|
-
if (value.risk_tags === undefined) {
|
|
778
|
-
ctx.addIssue({
|
|
779
|
-
code: "custom",
|
|
780
|
-
path: ["risk_tags"],
|
|
781
|
-
message: "is required on every newly written CONFIRMED finding (issue #2383 typed critic routing)"
|
|
782
|
-
});
|
|
783
|
-
}
|
|
784
|
-
});
|
|
785
|
-
function prReviewFindingRequiresCritic(input) {
|
|
786
|
-
if (input.classification !== "CONFIRMED")
|
|
787
|
-
return false;
|
|
788
|
-
const impact = input.risk_impact ?? "UNKNOWN";
|
|
789
|
-
const tags = input.risk_tags ?? [];
|
|
790
|
-
if (impact === "UNKNOWN")
|
|
791
|
-
return true;
|
|
792
|
-
if (input.severity === undefined)
|
|
793
|
-
return true;
|
|
794
|
-
if (input.severity === "CRITICAL" || input.severity === "HIGH")
|
|
795
|
-
return true;
|
|
796
|
-
if (input.severity === "MEDIUM") {
|
|
797
|
-
return impact === "HIGH_IMPACT" || tags.length > 0;
|
|
798
|
-
}
|
|
799
|
-
return false;
|
|
800
|
-
}
|
|
801
|
-
var PrReviewHandoffSchema = exports_external.object({
|
|
802
|
-
pr_url: exports_external.string().url().max(2000),
|
|
803
|
-
finding_ids: exports_external.array(exports_external.string().trim().min(1).max(128)).min(1).max(1000),
|
|
804
|
-
summary: exports_external.string().trim().min(1).max(20000),
|
|
805
|
-
provenance: exports_external.array(exports_external.string().trim().min(1).max(4000)).min(1).max(1000)
|
|
806
|
-
}).strict();
|
|
807
|
-
var PrReviewPartialBaseCoverageSchema = exports_external.object({
|
|
808
|
-
unresolved_dimensions: exports_external.array(exports_external.enum(PR_REVIEW_BASE_DIMENSION_IDS)).min(1).max(PR_REVIEW_BASE_DIMENSION_IDS.length)
|
|
809
|
-
}).strict().superRefine((value, ctx) => {
|
|
810
|
-
const seen = new Set;
|
|
811
|
-
for (const dimension of value.unresolved_dimensions) {
|
|
812
|
-
if (seen.has(dimension)) {
|
|
813
|
-
ctx.addIssue({
|
|
814
|
-
code: "custom",
|
|
815
|
-
path: ["unresolved_dimensions"],
|
|
816
|
-
message: `must not contain duplicate dimension "${dimension}"`
|
|
817
|
-
});
|
|
818
|
-
return;
|
|
819
|
-
}
|
|
820
|
-
seen.add(dimension);
|
|
821
|
-
}
|
|
822
|
-
});
|
|
823
|
-
var WritePrReviewArtifactArgsSchema = exports_external.discriminatedUnion("kind", [
|
|
824
|
-
exports_external.object({
|
|
825
|
-
kind: exports_external.literal("findings"),
|
|
826
|
-
run_id: PrReviewRunIdSchema.optional(),
|
|
827
|
-
pr_head_sha: exports_external.string().trim().regex(/^[0-9a-f]{6,64}$/i),
|
|
828
|
-
boundary: exports_external.enum(PR_REVIEW_ARTIFACT_BOUNDARIES),
|
|
829
|
-
records: exports_external.array(PrReviewFindingSchema).min(1).max(1000),
|
|
830
|
-
partial_base_coverage: PrReviewPartialBaseCoverageSchema.optional()
|
|
831
|
-
}).strict(),
|
|
832
|
-
exports_external.object({
|
|
833
|
-
kind: exports_external.literal("handoff"),
|
|
834
|
-
run_id: PrReviewRunIdSchema.optional(),
|
|
835
|
-
pr_head_sha: exports_external.string().trim().regex(/^[0-9a-f]{6,64}$/i),
|
|
836
|
-
handoff: PrReviewHandoffSchema
|
|
837
|
-
}).strict()
|
|
838
|
-
]).superRefine((value, ctx) => {
|
|
839
|
-
if (value.kind === "findings" && value.partial_base_coverage !== undefined && value.boundary !== "post_explorer") {
|
|
840
|
-
ctx.addIssue({
|
|
841
|
-
code: "custom",
|
|
842
|
-
path: ["partial_base_coverage"],
|
|
843
|
-
message: "is valid only for the post_explorer boundary"
|
|
844
|
-
});
|
|
845
|
-
}
|
|
846
|
-
const bytes = serializedPrReviewArtifactInputBytes(value);
|
|
847
|
-
const maxBytes = value.kind === "findings" ? PR_REVIEW_FINDINGS_WRITE_MAX_BYTES : PR_REVIEW_HANDOFF_WRITE_MAX_BYTES;
|
|
848
|
-
if (bytes > maxBytes) {
|
|
849
|
-
ctx.addIssue({
|
|
850
|
-
code: "custom",
|
|
851
|
-
path: [value.kind === "findings" ? "records" : "handoff"],
|
|
852
|
-
message: `serialized UTF-8 payload must be at most ${maxBytes} bytes (got ${bytes})`
|
|
853
|
-
});
|
|
854
|
-
}
|
|
855
|
-
});
|
|
856
|
-
var introducedByPrSchema = exports_external.string().regex(/^(?:introduced_by_pr\s*:\s*)?(?:YES|NO|UNKNOWN)$/i);
|
|
857
|
-
var PrReviewRiskTagsFieldPattern = new RegExp(`^(?:(?:${PR_REVIEW_RISK_TAGS.join("|")})(?:,(?:${PR_REVIEW_RISK_TAGS.join("|")}))*)?$`);
|
|
858
|
-
var PrReviewRiskTagsFieldSchema = exports_external.string().regex(PrReviewRiskTagsFieldPattern, `must be a comma-separated subset of the canonical risk tags (${PR_REVIEW_RISK_TAGS.join(", ")}), or empty`);
|
|
859
|
-
var PR_REVIEW_REVIEWER_LEGACY_FIELD_COUNT = 10;
|
|
860
|
-
function parsePrReviewRiskTagsField(field) {
|
|
861
|
-
const trimmed = field.trim();
|
|
862
|
-
if (!trimmed)
|
|
863
|
-
return [];
|
|
864
|
-
return trimmed.split(",").map((tag) => tag.trim());
|
|
865
|
-
}
|
|
866
|
-
var PrReviewReviewerVerdictFieldsSchema = exports_external.tuple([
|
|
867
|
-
exports_external.literal("[REVIEWED]"),
|
|
868
|
-
exports_external.string().min(1),
|
|
869
|
-
exports_external.enum(PR_REVIEW_REVIEWER_CLASSIFICATIONS),
|
|
870
|
-
exports_external.enum(PR_REVIEW_REVIEWER_EVIDENCE_TYPES),
|
|
871
|
-
exports_external.enum(PR_REVIEW_SEVERITIES),
|
|
872
|
-
introducedByPrSchema,
|
|
873
|
-
exports_external.string().min(1),
|
|
874
|
-
exports_external.string().min(8),
|
|
875
|
-
exports_external.string().min(5),
|
|
876
|
-
exports_external.string().min(3),
|
|
877
|
-
exports_external.enum(PR_REVIEW_RISK_IMPACTS),
|
|
878
|
-
PrReviewRiskTagsFieldSchema
|
|
879
|
-
]).superRefine((fields, ctx) => {
|
|
880
|
-
if (fields[2] === "DISPROVED" && fields[4] !== "NONE") {
|
|
881
|
-
ctx.addIssue({
|
|
882
|
-
code: "custom",
|
|
883
|
-
path: [4],
|
|
884
|
-
message: "DISPROVED reviewer severity must be NONE"
|
|
885
|
-
});
|
|
886
|
-
}
|
|
887
|
-
});
|
|
888
|
-
var PrReviewCriticVerdictFieldsSchema = exports_external.tuple([
|
|
889
|
-
exports_external.literal("[CRITIC]"),
|
|
890
|
-
exports_external.string().min(1),
|
|
891
|
-
exports_external.enum(PR_REVIEW_CRITIC_STATUSES),
|
|
892
|
-
exports_external.enum(PR_REVIEW_SEVERITIES),
|
|
893
|
-
exports_external.string().min(6),
|
|
894
|
-
exports_external.string().min(6)
|
|
895
|
-
]).superRefine((fields, ctx) => {
|
|
896
|
-
const status = fields[2];
|
|
897
|
-
const severity = fields[3];
|
|
898
|
-
if (status === "NEEDS_MORE_EVIDENCE") {
|
|
899
|
-
ctx.addIssue({
|
|
900
|
-
code: "custom",
|
|
901
|
-
path: [2],
|
|
902
|
-
message: "NEEDS_MORE_EVIDENCE is not a terminal transport verdict"
|
|
903
|
-
});
|
|
904
|
-
}
|
|
905
|
-
if (status === "DISPROVED" && severity !== "NONE") {
|
|
906
|
-
ctx.addIssue({
|
|
907
|
-
code: "custom",
|
|
908
|
-
path: [3],
|
|
909
|
-
message: "DISPROVED critic severity must be NONE"
|
|
910
|
-
});
|
|
911
|
-
}
|
|
912
|
-
if (status === "UPHELD" && !["CRITICAL", "HIGH", "MEDIUM"].includes(severity)) {
|
|
913
|
-
ctx.addIssue({
|
|
914
|
-
code: "custom",
|
|
915
|
-
path: [3],
|
|
916
|
-
message: "UPHELD critic severity must be CRITICAL, HIGH, or MEDIUM"
|
|
917
|
-
});
|
|
918
|
-
}
|
|
919
|
-
if (status === "DOWNGRADED" && severity === "CRITICAL") {
|
|
920
|
-
ctx.addIssue({
|
|
921
|
-
code: "custom",
|
|
922
|
-
path: [3],
|
|
923
|
-
message: "DOWNGRADED critic severity cannot be CRITICAL"
|
|
924
|
-
});
|
|
925
|
-
}
|
|
926
|
-
});
|
|
927
|
-
var PR_REVIEW_VERDICT_ROW_DESCRIPTORS = {
|
|
928
|
-
reviewer: {
|
|
929
|
-
marker: "[REVIEWED]",
|
|
930
|
-
fieldCount: 12,
|
|
931
|
-
fieldRoles: [
|
|
932
|
-
"marker",
|
|
933
|
-
"item_id",
|
|
934
|
-
"classification",
|
|
935
|
-
"evidence_type",
|
|
936
|
-
"severity",
|
|
937
|
-
"introduced_by_pr",
|
|
938
|
-
"file:line",
|
|
939
|
-
"rationale",
|
|
940
|
-
"probe",
|
|
941
|
-
"reviewer_notes",
|
|
942
|
-
"risk_impact",
|
|
943
|
-
"risk_tags"
|
|
944
|
-
],
|
|
945
|
-
schema: PrReviewReviewerVerdictFieldsSchema
|
|
946
|
-
},
|
|
947
|
-
critic: {
|
|
948
|
-
marker: "[CRITIC]",
|
|
949
|
-
fieldCount: 6,
|
|
950
|
-
fieldRoles: [
|
|
951
|
-
"marker",
|
|
952
|
-
"item_id",
|
|
953
|
-
"status",
|
|
954
|
-
"severity",
|
|
955
|
-
"rationale",
|
|
956
|
-
"required_change"
|
|
957
|
-
],
|
|
958
|
-
schema: PrReviewCriticVerdictFieldsSchema
|
|
959
|
-
}
|
|
960
|
-
};
|
|
961
|
-
function parsePrReviewVerdictRow(line, kind) {
|
|
962
|
-
const descriptor = PR_REVIEW_VERDICT_ROW_DESCRIPTORS[kind];
|
|
963
|
-
const fields = [];
|
|
964
|
-
let current = "";
|
|
965
|
-
let usedCanonicalEscape = false;
|
|
966
|
-
for (let index = 0;index < line.length; index++) {
|
|
967
|
-
const char = line[index];
|
|
968
|
-
if (char === "\\") {
|
|
969
|
-
const next = line[index + 1];
|
|
970
|
-
if (next === "\\") {
|
|
971
|
-
current += "\\";
|
|
972
|
-
usedCanonicalEscape = true;
|
|
973
|
-
index++;
|
|
974
|
-
continue;
|
|
975
|
-
}
|
|
976
|
-
if (next === "|") {
|
|
977
|
-
current += "|";
|
|
978
|
-
usedCanonicalEscape = true;
|
|
979
|
-
index++;
|
|
980
|
-
continue;
|
|
981
|
-
}
|
|
982
|
-
if (next === "n") {
|
|
983
|
-
current += `
|
|
984
|
-
`;
|
|
985
|
-
usedCanonicalEscape = true;
|
|
986
|
-
index++;
|
|
987
|
-
continue;
|
|
988
|
-
}
|
|
989
|
-
if (next === "r") {
|
|
990
|
-
current += "\r";
|
|
991
|
-
usedCanonicalEscape = true;
|
|
992
|
-
index++;
|
|
993
|
-
continue;
|
|
994
|
-
}
|
|
995
|
-
current += "\\";
|
|
996
|
-
continue;
|
|
997
|
-
}
|
|
998
|
-
if (char === "|") {
|
|
999
|
-
fields.push(current.trim());
|
|
1000
|
-
current = "";
|
|
1001
|
-
continue;
|
|
1002
|
-
}
|
|
1003
|
-
current += char;
|
|
1004
|
-
}
|
|
1005
|
-
fields.push(current.trim());
|
|
1006
|
-
if (fields[0] !== descriptor.marker)
|
|
1007
|
-
return null;
|
|
1008
|
-
if (kind === "reviewer" && fields.length === PR_REVIEW_REVIEWER_LEGACY_FIELD_COUNT) {
|
|
1009
|
-
fields.push("UNKNOWN", "");
|
|
1010
|
-
}
|
|
1011
|
-
if (fields.length > descriptor.fieldCount) {
|
|
1012
|
-
const retained = fields.slice(0, descriptor.fieldCount - 1);
|
|
1013
|
-
retained.push(fields.slice(descriptor.fieldCount - 1).join("|"));
|
|
1014
|
-
return {
|
|
1015
|
-
marker: descriptor.marker,
|
|
1016
|
-
fields: retained,
|
|
1017
|
-
recoveredOverflow: true,
|
|
1018
|
-
overflowClass: fields.length === descriptor.fieldCount + 1 && fields[fields.length - 1] === "" ? "legacy-fidelity-safe" : "legacy-lossy"
|
|
1019
|
-
};
|
|
1020
|
-
}
|
|
1021
|
-
return {
|
|
1022
|
-
marker: descriptor.marker,
|
|
1023
|
-
fields,
|
|
1024
|
-
recoveredOverflow: false,
|
|
1025
|
-
overflowClass: fields.length === descriptor.fieldCount ? usedCanonicalEscape ? "canonical" : "legacy-fidelity-safe" : "legacy-lossy"
|
|
1026
|
-
};
|
|
1027
|
-
}
|
|
1028
399
|
// src/background/pending-delegations.ts
|
|
1029
400
|
var BACKGROUND_DELEGATIONS_FILE = "background-delegations.jsonl";
|
|
1030
401
|
var BACKGROUND_DELEGATION_FALLBACK_DIR = "background-delegation-fallback";
|
|
@@ -1503,7 +874,7 @@ function readDelegationCheckpoint(directory) {
|
|
|
1503
874
|
return { kind: "ok", checkpoint: parsed.data, bytes };
|
|
1504
875
|
}
|
|
1505
876
|
function sha256Hex(data) {
|
|
1506
|
-
return
|
|
877
|
+
return createHash2("sha256").update(data).digest("hex");
|
|
1507
878
|
}
|
|
1508
879
|
function checkpointPayloadChecksum(checkpoint) {
|
|
1509
880
|
return sha256Hex(JSON.stringify([
|
|
@@ -2382,7 +1753,7 @@ function buildPromptSnapshot(text, maxChars) {
|
|
|
2382
1753
|
text: bounded,
|
|
2383
1754
|
chars: text.length,
|
|
2384
1755
|
truncated,
|
|
2385
|
-
digest:
|
|
1756
|
+
digest: createHash2("sha256").update(text).digest("hex")
|
|
2386
1757
|
};
|
|
2387
1758
|
}
|
|
2388
1759
|
async function appendDelegationTransition(directory, correlationId, transition) {
|
|
@@ -2485,7 +1856,7 @@ async function publishPrReviewResultReceipt(directory, input) {
|
|
|
2485
1856
|
...current.result ?? {
|
|
2486
1857
|
chars: 0,
|
|
2487
1858
|
truncated: false,
|
|
2488
|
-
digest:
|
|
1859
|
+
digest: createHash2("sha256").update("").digest("hex")
|
|
2489
1860
|
},
|
|
2490
1861
|
prReviewResultReceipt: parsed.data
|
|
2491
1862
|
}
|
|
@@ -2509,7 +1880,7 @@ function buildBackgroundCompletionEventId(input) {
|
|
|
2509
1880
|
input.status,
|
|
2510
1881
|
input.resultDigest
|
|
2511
1882
|
]);
|
|
2512
|
-
return `bgc1:${
|
|
1883
|
+
return `bgc1:${createHash2("sha256").update(canonical).digest("hex")}`;
|
|
2513
1884
|
}
|
|
2514
1885
|
function sameJson(left, right) {
|
|
2515
1886
|
return JSON.stringify(left) === JSON.stringify(right);
|
|
@@ -2967,7 +2338,7 @@ async function claimDelegationIngestion(directory, correlationId, options) {
|
|
|
2967
2338
|
}
|
|
2968
2339
|
const disposition = current.status === "ingestion_error" || current.ingestion?.state === "claimed" ? "retry" : "claimed";
|
|
2969
2340
|
const attempt = (current.ingestion?.attempt ?? 0) + 1;
|
|
2970
|
-
const claimToken =
|
|
2341
|
+
const claimToken = createHash2("sha256").update(JSON.stringify([correlationId, options.claimantId, attempt, now])).digest("hex");
|
|
2971
2342
|
const next = {
|
|
2972
2343
|
...current,
|
|
2973
2344
|
schemaVersion: current.schemaVersion === 4 ? 4 : 3,
|
|
@@ -3319,7 +2690,7 @@ async function sweepStaleDelegations(directory, timeoutMs, options = {}) {
|
|
|
3319
2690
|
}
|
|
3320
2691
|
}
|
|
3321
2692
|
function fallbackRelativePath(correlationId) {
|
|
3322
|
-
const digest =
|
|
2693
|
+
const digest = createHash2("sha256").update(correlationId).digest("hex");
|
|
3323
2694
|
return path2.join(BACKGROUND_DELEGATION_FALLBACK_DIR, `${digest}.json`);
|
|
3324
2695
|
}
|
|
3325
2696
|
function fallbackPath(directory, correlationId) {
|
|
@@ -3577,7 +2948,7 @@ function reservationStorePath(directory) {
|
|
|
3577
2948
|
}
|
|
3578
2949
|
function buildBackgroundCoderReservationId(input) {
|
|
3579
2950
|
const ownerIdentity = input.planTaskId === null ? ["call", input.parentSessionId, input.callID] : ["task", input.parentSessionId, input.planTaskId];
|
|
3580
|
-
return `bgcr1:${
|
|
2951
|
+
return `bgcr1:${createHash2("sha256").update(JSON.stringify(ownerIdentity)).digest("hex")}`;
|
|
3581
2952
|
}
|
|
3582
2953
|
function scanBackgroundCoderReservationsForAdmission(directory) {
|
|
3583
2954
|
let absolutePath;
|
|
@@ -3937,7 +3308,7 @@ async function reconcileLegacyCoderSettlements(directory, maxRecords, onReconcil
|
|
|
3937
3308
|
const candidates = readDelegations(directory).filter((record) => record.normalizedAgent === "coder" && Boolean(record.legacyCoderSettlementTransfer) && Boolean(record.terminalResult)).slice(0, maxRecords);
|
|
3938
3309
|
if (candidates.length === 0)
|
|
3939
3310
|
return 0;
|
|
3940
|
-
const { transferCoderSettlementToBackground } = await import("./coder-settlement-
|
|
3311
|
+
const { transferCoderSettlementToBackground } = await import("./coder-settlement-zrda71k0.js");
|
|
3941
3312
|
let transferred = 0;
|
|
3942
3313
|
for (const record of candidates) {
|
|
3943
3314
|
try {
|
|
@@ -4294,4 +3665,4 @@ async function maintainBackgroundDelegations(directory, options = {}) {
|
|
|
4294
3665
|
return emitObservation("ok");
|
|
4295
3666
|
}
|
|
4296
3667
|
|
|
4297
|
-
export {
|
|
3668
|
+
export { MAX_RECOVERY_LEDGER_BYTES, readDelegationHealthArtifact, collectDelegationLedgerHealth, MAX_PR_REVIEW_COLLECTION_RECEIPT_ITEM_IDS, BACKGROUND_DELEGATIONS_FILE, BACKGROUND_DELEGATION_FALLBACK_DIR, BACKGROUND_CODER_RESERVATIONS_FILE, BACKGROUND_DELEGATIONS_CHECKPOINT_FILE, BACKGROUND_DELEGATIONS_MANIFEST_FILE, MAX_LIVE_BACKGROUND_FALLBACKS, MAX_LIVE_BACKGROUND_CODER_RESERVATIONS, MAX_BACKGROUND_OBSERVED_FILES, MAX_BACKGROUND_ADVISORY_CHARS, LEGACY_CODER_SETTLEMENT_PENDING_ADVISORY_MARKER, DELEGATION_COMPACTION_LOW_WATER_BYTES, DELEGATION_COMPACTION_HIGH_WATER_BYTES, MAX_CHECKPOINT_BYTES, MAX_CHECKPOINT_RECORDS, TOMBSTONE_MIN_AGE_MS, BACKGROUND_INGESTION_LEASE_MS, BACKGROUND_CODER_RESERVATION_LEASE_MS, BACKGROUND_CODER_RESERVATION_LEASE_MAX_MS, BACKGROUND_CODER_RESERVATION_LEASE_MIN_MS, DEFAULT_STALE_DELEGATION_TIMEOUT_MS, DEFAULT_SWEEPABLE_DELEGATION_STATUSES, _checkpointInternals, isUnsettledWorktreeOwner, compactBackgroundDelegations, readDelegations, scanDelegationsForRecovery, findByCorrelationId, recordPendingDelegationDetailed, recordPendingDelegation, buildPromptSnapshot, appendDelegationTransition, publishPrReviewResultReceipt, buildBackgroundCompletionEventId, claimTerminalResult, claimCoderSettlement, normalizeBackgroundObservedFiles, updateCoderSettlement, registerLegacyCoderSettlementReconciler, _internals, markLegacyCoderSettlementTransferPending, clearLegacyCoderSettlementTransferPending, claimDelegationIngestion, recordDelegationIngestionResult, putPendingBackgroundAdvisory, replacePendingBackgroundAdvisory, preparePendingBackgroundAdvisories, acknowledgeObservedBackgroundAdvisories, releasePreparedBackgroundAdvisories, findByBatchId, findOpenAsyncLaneBatches, isTerminalDelegationStatus, sweepStaleDelegations, readDelegationFallback, listDelegationFallbacks, scanDelegationFallbacksForRecovery, writeDelegationFallback, removeDelegationFallback, findDelegationForCompletion, promoteDelegationFallback, buildBackgroundCoderReservationId, scanBackgroundCoderReservationsForAdmission, reserveBackgroundCoderSlot, bindBackgroundCoderReservation, releaseBackgroundCoderReservation, maintainBackgroundDelegations };
|