@farmslot/protocol 0.38.0 → 0.40.0
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/CHANGELOG.md +26 -0
- package/dist/agents/reviewer-context.d.ts +4 -4
- package/dist/agents/reviewer-context.d.ts.map +1 -1
- package/dist/agents/reviewer-context.js +10 -10
- package/dist/agents/reviewer-context.js.map +1 -1
- package/dist/agents/roles.d.ts +2 -2
- package/dist/agents/roles.d.ts.map +1 -1
- package/dist/agents/roles.js +5 -9
- package/dist/agents/roles.js.map +1 -1
- package/dist/checklist-target.d.ts +6 -6
- package/dist/checklist-target.d.ts.map +1 -1
- package/dist/checklist-target.js +11 -11
- package/dist/checklist-target.js.map +1 -1
- package/dist/contracts/acceptance.d.ts +19 -34
- package/dist/contracts/acceptance.d.ts.map +1 -1
- package/dist/contracts/acceptance.js +11 -156
- package/dist/contracts/acceptance.js.map +1 -1
- package/dist/contracts/agents.d.ts +7 -2
- package/dist/contracts/agents.d.ts.map +1 -1
- package/dist/contracts/agents.js +13 -2
- package/dist/contracts/agents.js.map +1 -1
- package/dist/contracts/analytics.d.ts +2 -2
- package/dist/contracts/analytics.d.ts.map +1 -1
- package/dist/contracts/backlog.d.ts +16 -7
- package/dist/contracts/backlog.d.ts.map +1 -1
- package/dist/contracts/backlog.js.map +1 -1
- package/dist/contracts/config.d.ts +12 -3
- package/dist/contracts/config.d.ts.map +1 -1
- package/dist/contracts/config.js +32 -0
- package/dist/contracts/config.js.map +1 -1
- package/dist/contracts/dispatch.d.ts +7 -4
- package/dist/contracts/dispatch.d.ts.map +1 -1
- package/dist/contracts/family.d.ts +2 -2
- package/dist/contracts/family.d.ts.map +1 -1
- package/dist/contracts/index.d.ts +3 -0
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +3 -0
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/pr-monitoring.d.ts +8 -8
- package/dist/contracts/pr-monitoring.d.ts.map +1 -1
- package/dist/contracts/pr-rules.d.ts +5 -7
- package/dist/contracts/pr-rules.d.ts.map +1 -1
- package/dist/contracts/pr-rules.js +4 -6
- package/dist/contracts/pr-rules.js.map +1 -1
- package/dist/contracts/qa.d.ts +2 -2
- package/dist/contracts/qa.d.ts.map +1 -1
- package/dist/contracts/qa.js +5 -9
- package/dist/contracts/qa.js.map +1 -1
- package/dist/contracts/recipe-conformance.d.ts +51 -0
- package/dist/contracts/recipe-conformance.d.ts.map +1 -1
- package/dist/contracts/recipe-conformance.js +134 -1
- package/dist/contracts/recipe-conformance.js.map +1 -1
- package/dist/contracts/resources.d.ts +1 -1
- package/dist/contracts/resources.d.ts.map +1 -1
- package/dist/contracts/resources.js.map +1 -1
- package/dist/contracts/reviews.d.ts +19 -3
- package/dist/contracts/reviews.d.ts.map +1 -1
- package/dist/contracts/reviews.js +2 -2
- package/dist/contracts/reviews.js.map +1 -1
- package/dist/contracts/run-gate-readiness.d.ts +26 -0
- package/dist/contracts/run-gate-readiness.d.ts.map +1 -0
- package/dist/contracts/run-gate-readiness.js +5 -0
- package/dist/contracts/run-gate-readiness.js.map +1 -0
- package/dist/contracts/run-lifecycle-view.d.ts +17 -0
- package/dist/contracts/run-lifecycle-view.d.ts.map +1 -0
- package/dist/contracts/run-lifecycle-view.js +70 -0
- package/dist/contracts/run-lifecycle-view.js.map +1 -0
- package/dist/contracts/runner-mobile-keys.d.ts +217 -0
- package/dist/contracts/runner-mobile-keys.d.ts.map +1 -0
- package/dist/contracts/runner-mobile-keys.js +189 -0
- package/dist/contracts/runner-mobile-keys.js.map +1 -0
- package/dist/contracts/runs.d.ts +109 -91
- package/dist/contracts/runs.d.ts.map +1 -1
- package/dist/contracts/runs.js +12 -14
- package/dist/contracts/runs.js.map +1 -1
- package/dist/contracts/runtime-capabilities.d.ts +2 -0
- package/dist/contracts/runtime-capabilities.d.ts.map +1 -1
- package/dist/contracts/runtime-capabilities.js.map +1 -1
- package/dist/contracts/template-placeholders.d.ts +0 -6
- package/dist/contracts/template-placeholders.d.ts.map +1 -1
- package/dist/contracts/template-placeholders.js +22 -4
- package/dist/contracts/template-placeholders.js.map +1 -1
- package/dist/contracts/worker-terminal.d.ts +19 -0
- package/dist/contracts/worker-terminal.d.ts.map +1 -1
- package/dist/contracts/worker-terminal.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/pr-monitoring.d.ts.map +1 -1
- package/dist/integrations/pr-monitoring.js +9 -3
- package/dist/integrations/pr-monitoring.js.map +1 -1
- package/dist/integrations/pr-rule-config.d.ts.map +1 -1
- package/dist/integrations/pr-rule-config.js +21 -25
- package/dist/integrations/pr-rule-config.js.map +1 -1
- package/dist/integrations/pr-workflow-defaults.d.ts.map +1 -1
- package/dist/integrations/pr-workflow-defaults.js +2 -5
- package/dist/integrations/pr-workflow-defaults.js.map +1 -1
- package/dist/recipe/artifact.d.ts.map +1 -1
- package/dist/recipe/artifact.js +20 -4
- package/dist/recipe/artifact.js.map +1 -1
- package/dist/recipe/document.d.ts +5 -1
- package/dist/recipe/document.d.ts.map +1 -1
- package/dist/recipe/document.js +66 -37
- package/dist/recipe/document.js.map +1 -1
- package/dist/recipe/evidence.d.ts +128 -0
- package/dist/recipe/evidence.d.ts.map +1 -0
- package/dist/recipe/evidence.js +141 -0
- package/dist/recipe/evidence.js.map +1 -0
- package/dist/recipe/hud-intent.d.ts +56 -0
- package/dist/recipe/hud-intent.d.ts.map +1 -0
- package/dist/recipe/hud-intent.js +46 -0
- package/dist/recipe/hud-intent.js.map +1 -0
- package/dist/recipe/index.d.ts +4 -2
- package/dist/recipe/index.d.ts.map +1 -1
- package/dist/recipe/index.js +4 -2
- package/dist/recipe/index.js.map +1 -1
- package/dist/recipe/recording.d.ts +7 -0
- package/dist/recipe/recording.d.ts.map +1 -1
- package/dist/recipe/recording.js +48 -0
- package/dist/recipe/recording.js.map +1 -1
- package/dist/recipe/workflow.d.ts.map +1 -1
- package/dist/recipe/workflow.js +23 -1
- package/dist/recipe/workflow.js.map +1 -1
- package/dist/recipes/step-io.d.ts +8 -4
- package/dist/recipes/step-io.d.ts.map +1 -1
- package/dist/recipes/step-io.js.map +1 -1
- package/dist/rpc/copilot-runtime.d.ts +1 -1
- package/dist/rpc/copilot-runtime.d.ts.map +1 -1
- package/dist/rpc/dispatch.d.ts +10 -6
- package/dist/rpc/dispatch.d.ts.map +1 -1
- package/dist/rpc/native-session.d.ts +1 -0
- package/dist/rpc/native-session.d.ts.map +1 -1
- package/dist/rpc/native-session.js.map +1 -1
- package/dist/rpc/roadmap.d.ts +2 -0
- package/dist/rpc/roadmap.d.ts.map +1 -1
- package/dist/rpc/run.d.ts +5 -3
- package/dist/rpc/run.d.ts.map +1 -1
- package/dist/rpc/run.js.map +1 -1
- package/dist/rpc/slot.d.ts +1 -0
- package/dist/rpc/slot.d.ts.map +1 -1
- package/dist/rpc/tmux.d.ts +10 -0
- package/dist/rpc/tmux.d.ts.map +1 -1
- package/dist/runs/ci-decision-context.d.ts +40 -0
- package/dist/runs/ci-decision-context.d.ts.map +1 -0
- package/dist/runs/ci-decision-context.js +129 -0
- package/dist/runs/ci-decision-context.js.map +1 -0
- package/dist/runs/decision-resolution.d.ts +37 -1
- package/dist/runs/decision-resolution.d.ts.map +1 -1
- package/dist/runs/decision-resolution.js +44 -1
- package/dist/runs/decision-resolution.js.map +1 -1
- package/dist/runs/family-iteration-ledger.js +1 -1
- package/dist/runs/family-iteration-ledger.js.map +1 -1
- package/dist/runs/publish-approval.d.ts +20 -0
- package/dist/runs/publish-approval.d.ts.map +1 -0
- package/dist/runs/publish-approval.js +29 -0
- package/dist/runs/publish-approval.js.map +1 -0
- package/dist/runs/review-chain.d.ts +2 -2
- package/dist/runs/review-chain.d.ts.map +1 -1
- package/dist/runs/review-chain.js +4 -4
- package/dist/runs/review-chain.js.map +1 -1
- package/dist/runs/review-curation.d.ts +51 -0
- package/dist/runs/review-curation.d.ts.map +1 -0
- package/dist/runs/review-curation.js +138 -0
- package/dist/runs/review-curation.js.map +1 -0
- package/dist/runs/review-policy.d.ts +9 -0
- package/dist/runs/review-policy.d.ts.map +1 -0
- package/dist/runs/review-policy.js +34 -0
- package/dist/runs/review-policy.js.map +1 -0
- package/dist/runs/review-retries.d.ts +10 -10
- package/dist/runs/review-retries.d.ts.map +1 -1
- package/dist/runs/review-retries.js +17 -22
- package/dist/runs/review-retries.js.map +1 -1
- package/dist/runs/slot-resolution.js +1 -1
- package/dist/runs/slot-resolution.js.map +1 -1
- package/dist/transport/signal.d.ts +3 -3
- package/dist/transport/signal.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +9 -2
- package/schemas/recipe-v1.schema.json +113 -22
- package/scripts/acceptance.d.mts +16 -0
- package/scripts/acceptance.mjs +233 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-chain.d.ts","sourceRoot":"","sources":["../../src/runs/review-chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAEhB,
|
|
1
|
+
{"version":3,"file":"review-chain.d.ts","sourceRoot":"","sources":["../../src/runs/review-chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAEhB,UAAU,EACV,GAAG,EACH,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAE/B,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,CAAC,GAC3C,eAAe,GAAG,IAAI,CAOxB;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,IAAI,CACP,GAAG,EACD,IAAI,GACJ,UAAU,GACV,WAAW,GACX,aAAa,GACb,WAAW,GACX,cAAc,GACd,SAAS,GACT,qBAAqB,CACxB,GACA,gBAAgB,GAAG,IAAI,CA4BzB;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC,GACjD,gBAAgB,EAAE,CAMpB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,GAC5D,UAAU,CAEZ;AAED,+EAA+E;AAC/E,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GACvC,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,SAAS,CAEpE"}
|
|
@@ -22,11 +22,11 @@ export function currentReviewChainEntry(run) {
|
|
|
22
22
|
prNumber: context.prNumber,
|
|
23
23
|
...(payload?.reviewSnapshot?.baseSha
|
|
24
24
|
? { baseSha: payload.reviewSnapshot.baseSha }
|
|
25
|
-
: context.
|
|
25
|
+
: context.mode === 'warm' && context.priorReviewedHeadSha
|
|
26
26
|
? { baseSha: context.priorReviewedHeadSha }
|
|
27
27
|
: {}),
|
|
28
28
|
headSha: payload?.reviewSnapshot?.headSha ?? context.currentHeadSha,
|
|
29
|
-
|
|
29
|
+
mode: context.mode,
|
|
30
30
|
validationDepth: context.validationDepth,
|
|
31
31
|
verdict: payload?.recommendation?.trim() || 'pending',
|
|
32
32
|
unresolvedCount: payload ? payload.lineComments.length : null,
|
|
@@ -45,8 +45,8 @@ export function reviewChainForRun(run) {
|
|
|
45
45
|
return [];
|
|
46
46
|
return [...(run.repeatReviewContext?.priorGenerations ?? []), current].sort((left, right) => left.generation - right.generation || left.runId.localeCompare(right.runId));
|
|
47
47
|
}
|
|
48
|
-
export function
|
|
49
|
-
return context?.
|
|
48
|
+
export function reviewModeForContext(context) {
|
|
49
|
+
return context?.mode ?? 'cold';
|
|
50
50
|
}
|
|
51
51
|
/** Never turn missing launch evidence into an affirmative continuity claim. */
|
|
52
52
|
export function observedReviewSessionContinuity(entry) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-chain.js","sourceRoot":"","sources":["../../src/runs/review-chain.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,kBAAkB,CAChC,GAA4C;IAE5C,IAAI,GAAG,CAAC,YAAY;QAAE,OAAO,GAAG,CAAC,YAAY,CAAC;IAC9C,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAClE,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAwC,CAAC;QAC/E,IAAI,OAAO,EAAE,IAAI,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,GAUC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC;IACxC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxC,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,KAAK,EAAE,GAAG,CAAC,EAAE;QACb,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO;YAClC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE;YAC7C,CAAC,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"review-chain.js","sourceRoot":"","sources":["../../src/runs/review-chain.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,kBAAkB,CAChC,GAA4C;IAE5C,IAAI,GAAG,CAAC,YAAY;QAAE,OAAO,GAAG,CAAC,YAAY,CAAC;IAC9C,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAClE,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAwC,CAAC;QAC/E,IAAI,OAAO,EAAE,IAAI,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,GAUC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC;IACxC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxC,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,KAAK,EAAE,GAAG,CAAC,EAAE;QACb,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO;YAClC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE;YAC7C,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,oBAAoB;gBACvD,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,oBAAoB,EAAE;gBAC3C,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,IAAI,OAAO,CAAC,cAAc;QACnE,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,SAAS;QACrD,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QAC7D,YAAY,EAAE,OAAO,EAAE,gBAAgB,IAAI,EAAE;QAC7C,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI;QAClC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI;QAC3D,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,iBAAiB,CAC/B,GAAkD;IAElD,MAAM,OAAO,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,EAAE,gBAAgB,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CACzE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAC7F,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,OAA6D;IAE7D,OAAO,OAAO,EAAE,IAAI,IAAI,MAAM,CAAC;AACjC,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,+BAA+B,CAC7C,KAAwC;IAExC,OAAO,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,SAAS,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { PRReviewThread } from '../contracts/reviews.js';
|
|
2
|
+
import type { ReviewGatePayload, ReviewLineComment, RunReviewResult } from '../contracts/runs.js';
|
|
3
|
+
export declare function reviewCommentKey(comment: ReviewLineComment): string;
|
|
4
|
+
export declare function reviewCommentsByFile(comments: readonly ReviewLineComment[]): Map<string, ReviewLineComment[]>;
|
|
5
|
+
export declare function reviewCommentCountByFile(commentsByFile: ReadonlyMap<string, readonly ReviewLineComment[]>): Map<string, number>;
|
|
6
|
+
export declare function reviewThreadsForFile(commentsByFile: ReadonlyMap<string, readonly ReviewLineComment[]>, filePath: string, timestamp?: () => string): PRReviewThread[];
|
|
7
|
+
export declare const REVIEW_POST_RECOMMENDATIONS: readonly ["COMMENT", "REQUEST_CHANGES", "APPROVE"];
|
|
8
|
+
export type ReviewPostRecommendation = (typeof REVIEW_POST_RECOMMENDATIONS)[number];
|
|
9
|
+
export declare function reviewPostRecommendation(payload: Pick<ReviewGatePayload, 'recommendation'>): ReviewPostRecommendation;
|
|
10
|
+
/** Bind user choices to content, excluding refresh times and transient artifact URLs. */
|
|
11
|
+
export declare function reviewPostingFingerprint(payload: RunReviewResult): string;
|
|
12
|
+
export interface ReviewCurationState {
|
|
13
|
+
reviewFingerprint: string;
|
|
14
|
+
includedIndices: number[];
|
|
15
|
+
recommendation: ReviewPostRecommendation;
|
|
16
|
+
includeEvidence: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function createReviewCuration(payload: ReviewGatePayload): ReviewCurationState;
|
|
19
|
+
export declare function toggleReviewFinding(state: ReviewCurationState, index: number): ReviewCurationState;
|
|
20
|
+
export declare function reviewCurationView(payload: ReviewGatePayload, state: ReviewCurationState): {
|
|
21
|
+
fingerprint: string;
|
|
22
|
+
reviewedSha: string | null;
|
|
23
|
+
findings: {
|
|
24
|
+
index: number;
|
|
25
|
+
included: boolean;
|
|
26
|
+
path: string;
|
|
27
|
+
line: number;
|
|
28
|
+
body: string;
|
|
29
|
+
severity: string;
|
|
30
|
+
}[];
|
|
31
|
+
includedCount: number;
|
|
32
|
+
recommendation: "APPROVE" | "REQUEST_CHANGES" | "COMMENT";
|
|
33
|
+
evidenceAvailable: boolean;
|
|
34
|
+
includeEvidence: boolean;
|
|
35
|
+
reportNote: string;
|
|
36
|
+
};
|
|
37
|
+
export declare function assertReviewCurationFresh(payload: RunReviewResult, selection?: Record<string, unknown>): void;
|
|
38
|
+
/** Existing publication selection semantics, shared with both client models. */
|
|
39
|
+
export declare function selectReviewFindings(result: RunReviewResult, selection: Record<string, unknown>): RunReviewResult;
|
|
40
|
+
export interface ReviewedSourceLine {
|
|
41
|
+
number: number;
|
|
42
|
+
text: string;
|
|
43
|
+
target: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface ReviewedFindingContext {
|
|
46
|
+
available: boolean;
|
|
47
|
+
note: string;
|
|
48
|
+
lines: ReviewedSourceLine[];
|
|
49
|
+
}
|
|
50
|
+
export declare function reviewedFindingContext(content: string, line: number): ReviewedFindingContext;
|
|
51
|
+
//# sourceMappingURL=review-curation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-curation.d.ts","sourceRoot":"","sources":["../../src/runs/review-curation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGlG,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAEnE;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,GACrC,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAQlC;AAED,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC,GAChE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAMrB;AAED,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC,EACjE,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAM,MAAuC,GACvD,cAAc,EAAE,CAkBlB;AAED,eAAO,MAAM,2BAA2B,oDAAqD,CAAC;AAC9F,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpF,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,GACjD,wBAAwB,CAG1B;AAED,yFAAyF;AACzF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAWzE;AAED,MAAM,WAAW,mBAAmB;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,wBAAwB,CAAC;IACzC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,mBAAmB,CAOpF;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,mBAAmB,EAC1B,KAAK,EAAE,MAAM,GACZ,mBAAmB,CAOrB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,mBAAmB;;;;;;;;;;;;;;;;EAexF;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,eAAe,EACxB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,IAAI,CAUN;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,eAAe,CAyBjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AACD,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AACD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAkB5F"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { digestRecipeDocument } from '../recipe/digest.js';
|
|
2
|
+
export function reviewCommentKey(comment) {
|
|
3
|
+
return `${comment.path}\u0000${comment.line}\u0000${comment.body}`;
|
|
4
|
+
}
|
|
5
|
+
export function reviewCommentsByFile(comments) {
|
|
6
|
+
const map = new Map();
|
|
7
|
+
for (const comment of comments) {
|
|
8
|
+
const list = map.get(comment.path) ?? [];
|
|
9
|
+
list.push(comment);
|
|
10
|
+
map.set(comment.path, list);
|
|
11
|
+
}
|
|
12
|
+
return map;
|
|
13
|
+
}
|
|
14
|
+
export function reviewCommentCountByFile(commentsByFile) {
|
|
15
|
+
const map = new Map();
|
|
16
|
+
for (const [path, comments] of commentsByFile) {
|
|
17
|
+
map.set(path, comments.length);
|
|
18
|
+
}
|
|
19
|
+
return map;
|
|
20
|
+
}
|
|
21
|
+
export function reviewThreadsForFile(commentsByFile, filePath, timestamp = () => new Date().toISOString()) {
|
|
22
|
+
const comments = commentsByFile.get(filePath) ?? [];
|
|
23
|
+
return comments.map((comment, index) => ({
|
|
24
|
+
id: `review-${index}-${comment.line}`,
|
|
25
|
+
path: comment.path,
|
|
26
|
+
line: comment.line,
|
|
27
|
+
resolved: false,
|
|
28
|
+
outdated: false,
|
|
29
|
+
comments: [
|
|
30
|
+
{
|
|
31
|
+
id: index,
|
|
32
|
+
body: `**[${comment.severity}]** ${comment.body}`,
|
|
33
|
+
author: 'Review Agent',
|
|
34
|
+
createdAt: timestamp(),
|
|
35
|
+
updatedAt: timestamp(),
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
export const REVIEW_POST_RECOMMENDATIONS = ['COMMENT', 'REQUEST_CHANGES', 'APPROVE'];
|
|
41
|
+
export function reviewPostRecommendation(payload) {
|
|
42
|
+
const value = payload.recommendation?.trim().toUpperCase();
|
|
43
|
+
return value === 'APPROVE' || value === 'REQUEST_CHANGES' ? value : 'COMMENT';
|
|
44
|
+
}
|
|
45
|
+
/** Bind user choices to content, excluding refresh times and transient artifact URLs. */
|
|
46
|
+
export function reviewPostingFingerprint(payload) {
|
|
47
|
+
const snapshot = payload.reviewSnapshot;
|
|
48
|
+
return digestRecipeDocument([
|
|
49
|
+
snapshot?.baseSha ?? null,
|
|
50
|
+
snapshot?.headSha ?? null,
|
|
51
|
+
snapshot?.diffHash ?? null,
|
|
52
|
+
snapshot?.untrackedFiles ?? [],
|
|
53
|
+
payload.reviewMd,
|
|
54
|
+
payload.recommendation,
|
|
55
|
+
payload.lineComments,
|
|
56
|
+
]);
|
|
57
|
+
}
|
|
58
|
+
export function createReviewCuration(payload) {
|
|
59
|
+
return {
|
|
60
|
+
reviewFingerprint: reviewPostingFingerprint(payload),
|
|
61
|
+
includedIndices: payload.lineComments.map((_, index) => index),
|
|
62
|
+
recommendation: reviewPostRecommendation(payload),
|
|
63
|
+
includeEvidence: true,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export function toggleReviewFinding(state, index) {
|
|
67
|
+
return {
|
|
68
|
+
...state,
|
|
69
|
+
includedIndices: state.includedIndices.includes(index)
|
|
70
|
+
? state.includedIndices.filter((value) => value !== index)
|
|
71
|
+
: [...state.includedIndices, index].sort((a, b) => a - b),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export function reviewCurationView(payload, state) {
|
|
75
|
+
return {
|
|
76
|
+
fingerprint: reviewPostingFingerprint(payload),
|
|
77
|
+
reviewedSha: payload.reviewSnapshot?.headSha?.trim() || null,
|
|
78
|
+
findings: payload.lineComments.map((comment, index) => ({
|
|
79
|
+
...comment,
|
|
80
|
+
index,
|
|
81
|
+
included: state.includedIndices.includes(index),
|
|
82
|
+
})),
|
|
83
|
+
includedCount: state.includedIndices.length,
|
|
84
|
+
recommendation: state.recommendation,
|
|
85
|
+
evidenceAvailable: Boolean(payload.evidenceMarkdown?.trim()),
|
|
86
|
+
includeEvidence: state.includeEvidence,
|
|
87
|
+
reportNote: 'Selection controls finding comments. The original review report stays unchanged.',
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export function assertReviewCurationFresh(payload, selection) {
|
|
91
|
+
const fingerprint = selection?.reviewFingerprint;
|
|
92
|
+
if (fingerprint !== undefined &&
|
|
93
|
+
(typeof fingerprint !== 'string' || fingerprint !== reviewPostingFingerprint(payload))) {
|
|
94
|
+
throw Object.assign(new Error('Review changed. Inspect the current review before posting.'), {
|
|
95
|
+
code: 'REVIEW_CHANGED',
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** Existing publication selection semantics, shared with both client models. */
|
|
100
|
+
export function selectReviewFindings(result, selection) {
|
|
101
|
+
assertReviewCurationFresh(result, selection);
|
|
102
|
+
const recommendation = selection.recommendation ?? result.recommendation;
|
|
103
|
+
if (typeof recommendation !== 'string' ||
|
|
104
|
+
!REVIEW_POST_RECOMMENDATIONS.includes(recommendation))
|
|
105
|
+
throw new Error('Invalid selected review recommendation');
|
|
106
|
+
const indices = selection.includedIndices;
|
|
107
|
+
if (indices !== undefined &&
|
|
108
|
+
(!Array.isArray(indices) ||
|
|
109
|
+
indices.some((index) => !Number.isInteger(index) || index < 0 || index >= result.lineComments.length)))
|
|
110
|
+
throw new Error('Invalid selected review comments');
|
|
111
|
+
return {
|
|
112
|
+
...result,
|
|
113
|
+
recommendation,
|
|
114
|
+
lineComments: indices === undefined
|
|
115
|
+
? result.lineComments
|
|
116
|
+
: result.lineComments.filter((_, index) => indices.includes(index)),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
export function reviewedFindingContext(content, line) {
|
|
120
|
+
const lines = content.replace(/\r\n?/g, '\n').split('\n');
|
|
121
|
+
if (lines.at(-1) === '')
|
|
122
|
+
lines.pop();
|
|
123
|
+
if (!Number.isSafeInteger(line) || line < 1 || line > lines.length)
|
|
124
|
+
return {
|
|
125
|
+
available: false,
|
|
126
|
+
note: 'Finding line is unavailable in the reviewed revision.',
|
|
127
|
+
lines: [],
|
|
128
|
+
};
|
|
129
|
+
const start = Math.max(1, line - 4), end = Math.min(lines.length, line + 4);
|
|
130
|
+
return {
|
|
131
|
+
available: true,
|
|
132
|
+
note: '',
|
|
133
|
+
lines: lines
|
|
134
|
+
.slice(start - 1, end)
|
|
135
|
+
.map((text, index) => ({ number: start + index, text, target: start + index === line })),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=review-curation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-curation.js","sourceRoot":"","sources":["../../src/runs/review-curation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ReviewPolicy, ReviewStatus } from '../contracts/runs.js';
|
|
2
|
+
export declare function defaultReviewPolicy(existing?: ReviewPolicy | null): ReviewPolicy;
|
|
3
|
+
export declare function effectiveRequiredReviewCount(policy: ReviewPolicy): number;
|
|
4
|
+
/** A separate reviewer session and a captured reviewed head are required evidence. */
|
|
5
|
+
export declare function isQualifyingReview(review: ReviewStatus): boolean;
|
|
6
|
+
/** Retrying a session replaces its verdict, including a later failure on the same head. */
|
|
7
|
+
export declare function qualifyingPassingReviews(reviews: ReviewStatus[]): ReviewStatus[];
|
|
8
|
+
export declare function reviewPolicySatisfied(policy: ReviewPolicy, reviews: ReviewStatus[]): boolean;
|
|
9
|
+
//# sourceMappingURL=review-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-policy.d.ts","sourceRoot":"","sources":["../../src/runs/review-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEvE,wBAAgB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,YAAY,CAKhF;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAEzE;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAKhE;AAED,2FAA2F;AAC3F,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAehF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAE5F"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export function defaultReviewPolicy(existing) {
|
|
2
|
+
return {
|
|
3
|
+
minimumReviews: Math.max(0, existing?.minimumReviews ?? 1),
|
|
4
|
+
requestedBy: existing?.requestedBy ?? 'dispatch',
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
export function effectiveRequiredReviewCount(policy) {
|
|
8
|
+
return Math.max(0, policy.minimumReviews);
|
|
9
|
+
}
|
|
10
|
+
/** A separate reviewer session and a captured reviewed head are required evidence. */
|
|
11
|
+
export function isQualifyingReview(review) {
|
|
12
|
+
return (!!review.reviewerSessionId?.trim() &&
|
|
13
|
+
!!(review.reviewedHeadSha ?? review.reviewSnapshot?.headSha)?.trim());
|
|
14
|
+
}
|
|
15
|
+
/** Retrying a session replaces its verdict, including a later failure on the same head. */
|
|
16
|
+
export function qualifyingPassingReviews(reviews) {
|
|
17
|
+
const latest = new Map();
|
|
18
|
+
for (const review of reviews)
|
|
19
|
+
latest.set(review.id, review);
|
|
20
|
+
const sessions = new Set();
|
|
21
|
+
return [...latest.values()].filter((review) => {
|
|
22
|
+
if (!isQualifyingReview(review) ||
|
|
23
|
+
review.verdict !== 'pass' ||
|
|
24
|
+
review.unresolvedCount !== 0 ||
|
|
25
|
+
sessions.has(review.reviewerSessionId))
|
|
26
|
+
return false;
|
|
27
|
+
sessions.add(review.reviewerSessionId);
|
|
28
|
+
return true;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
export function reviewPolicySatisfied(policy, reviews) {
|
|
32
|
+
return qualifyingPassingReviews(reviews).length >= effectiveRequiredReviewCount(policy);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=review-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-policy.js","sourceRoot":"","sources":["../../src/runs/review-policy.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAAC,QAA8B;IAChE,OAAO;QACL,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,IAAI,CAAC,CAAC;QAC1D,WAAW,EAAE,QAAQ,EAAE,WAAW,IAAI,UAAU;KACjD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAoB;IAC/D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;AAC5C,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,OAAO,CACL,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,EAAE;QAClC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CACrE,CAAC;AACJ,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,wBAAwB,CAAC,OAAuB;IAC9D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC/C,KAAK,MAAM,MAAM,IAAI,OAAO;QAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;QAC5C,IACE,CAAC,kBAAkB,CAAC,MAAM,CAAC;YAC3B,MAAM,CAAC,OAAO,KAAK,MAAM;YACzB,MAAM,CAAC,eAAe,KAAK,CAAC;YAC5B,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAkB,CAAC;YAEvC,OAAO,KAAK,CAAC;QACf,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAkB,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAoB,EAAE,OAAuB;IACjF,OAAO,wBAAwB,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,4BAA4B,CAAC,MAAM,CAAC,CAAC;AAC1F,CAAC"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ReviewStatus } from '../contracts/runs.js';
|
|
2
2
|
export declare const APPROVE_PUBLISH_UNRESOLVED_ACTION = "approve-publish-unresolved";
|
|
3
|
-
type ReviewRetryFields = Partial<Pick<
|
|
4
|
-
export declare function
|
|
3
|
+
type ReviewRetryFields = Partial<Pick<ReviewStatus, 'source' | 'verdict' | 'unresolvedCount' | 'issues' | 'feedbackSent' | 'recoveryContinuationPending' | 'retryCount' | 'maxRetries' | 'maxRetriesExhausted' | 'attempts' | 'reviewedHeadSha' | 'reviewedReviewSubjectHash' | 'reviewSnapshot'>>;
|
|
4
|
+
export declare function reviewRetryCount(review: ReviewRetryFields): number;
|
|
5
5
|
/**
|
|
6
|
-
* True when an
|
|
6
|
+
* True when an review consumed its auto-fix budget with
|
|
7
7
|
* findings still open. `max_retries: 0` is not a cap-hit: the operator still
|
|
8
8
|
* uses Continue Fixing to authorize the first worker pass.
|
|
9
9
|
*
|
|
10
10
|
* Records without `maxRetries` are exhausted only when `maxRetriesExhausted`
|
|
11
11
|
* was persisted. Missing cap fields are not inferred.
|
|
12
12
|
*/
|
|
13
|
-
export declare function
|
|
13
|
+
export declare function reviewFixRetriesExhausted(review: ReviewRetryFields): boolean;
|
|
14
14
|
/** Repair wiped `retryCount: 0` and stamp a missing cap from project config. */
|
|
15
|
-
export declare function
|
|
16
|
-
export declare function
|
|
17
|
-
export declare function
|
|
18
|
-
/** Latest terminal
|
|
19
|
-
export declare function
|
|
15
|
+
export declare function stampReviewRetryCap<T extends ReviewRetryFields>(review: T, configuredMaxRetries?: number): T;
|
|
16
|
+
export declare function reviewRetryCapReason(review: ReviewRetryFields): string;
|
|
17
|
+
export declare function latestReview(reviews: readonly ReviewRetryFields[] | undefined): ReviewRetryFields | undefined;
|
|
18
|
+
/** Latest terminal review that hit its auto-fix cap. Package HEAD drift does not hide this. */
|
|
19
|
+
export declare function latestExhaustedReview(reviews: readonly ReviewRetryFields[] | undefined): ReviewRetryFields | undefined;
|
|
20
20
|
export {};
|
|
21
21
|
//# sourceMappingURL=review-retries.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-retries.d.ts","sourceRoot":"","sources":["../../src/runs/review-retries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"review-retries.d.ts","sourceRoot":"","sources":["../../src/runs/review-retries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,eAAO,MAAM,iCAAiC,+BAA+B,CAAC;AAE9E,KAAK,iBAAiB,GAAG,OAAO,CAC9B,IAAI,CACF,YAAY,EACV,QAAQ,GACR,SAAS,GACT,iBAAiB,GACjB,QAAQ,GACR,cAAc,GACd,6BAA6B,GAC7B,YAAY,GACZ,YAAY,GACZ,qBAAqB,GACrB,UAAU,GACV,iBAAiB,GACjB,2BAA2B,GAC3B,gBAAgB,CACnB,CACF,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAMlE;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAW5E;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,iBAAiB,EAC7D,MAAM,EAAE,CAAC,EACT,oBAAoB,CAAC,EAAE,MAAM,GAC5B,CAAC,CAeH;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAQtE;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,SAAS,iBAAiB,EAAE,GAAG,SAAS,GAChD,iBAAiB,GAAG,SAAS,CAI/B;AAED,+FAA+F;AAC/F,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,iBAAiB,EAAE,GAAG,SAAS,GAChD,iBAAiB,GAAG,SAAS,CAI/B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export const APPROVE_PUBLISH_UNRESOLVED_ACTION = 'approve-publish-unresolved';
|
|
2
|
-
export function
|
|
2
|
+
export function reviewRetryCount(review) {
|
|
3
3
|
const fromAttempts = Math.max(0, (review.attempts?.length ?? 1) - 1);
|
|
4
4
|
if (typeof review.retryCount === 'number' && Number.isFinite(review.retryCount)) {
|
|
5
5
|
return Math.max(0, Math.round(review.retryCount), fromAttempts);
|
|
@@ -7,22 +7,20 @@ export function independentReviewRetryCount(review) {
|
|
|
7
7
|
return fromAttempts;
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
* True when an
|
|
10
|
+
* True when an review consumed its auto-fix budget with
|
|
11
11
|
* findings still open. `max_retries: 0` is not a cap-hit: the operator still
|
|
12
12
|
* uses Continue Fixing to authorize the first worker pass.
|
|
13
13
|
*
|
|
14
14
|
* Records without `maxRetries` are exhausted only when `maxRetriesExhausted`
|
|
15
15
|
* was persisted. Missing cap fields are not inferred.
|
|
16
16
|
*/
|
|
17
|
-
export function
|
|
18
|
-
if (review.source === 'self-review')
|
|
19
|
-
return false;
|
|
17
|
+
export function reviewFixRetriesExhausted(review) {
|
|
20
18
|
if (review.verdict !== 'issues')
|
|
21
19
|
return false;
|
|
22
20
|
const findings = Math.max(review.unresolvedCount ?? 0, review.issues?.length ?? 0);
|
|
23
21
|
if (findings <= 0)
|
|
24
22
|
return false;
|
|
25
|
-
const retryCount =
|
|
23
|
+
const retryCount = reviewRetryCount(review);
|
|
26
24
|
if (typeof review.maxRetries === 'number' && Number.isFinite(review.maxRetries)) {
|
|
27
25
|
if (review.maxRetries <= 0)
|
|
28
26
|
return false;
|
|
@@ -33,10 +31,8 @@ export function independentReviewFixRetriesExhausted(review) {
|
|
|
33
31
|
return review.maxRetriesExhausted === true;
|
|
34
32
|
}
|
|
35
33
|
/** Repair wiped `retryCount: 0` and stamp a missing cap from project config. */
|
|
36
|
-
export function
|
|
37
|
-
|
|
38
|
-
return review;
|
|
39
|
-
const retryCount = independentReviewRetryCount(review);
|
|
34
|
+
export function stampReviewRetryCap(review, configuredMaxRetries) {
|
|
35
|
+
const retryCount = reviewRetryCount(review);
|
|
40
36
|
const maxRetries = typeof review.maxRetries === 'number' && Number.isFinite(review.maxRetries)
|
|
41
37
|
? review.maxRetries
|
|
42
38
|
: typeof configuredMaxRetries === 'number' && Number.isFinite(configuredMaxRetries)
|
|
@@ -47,29 +43,28 @@ export function stampIndependentReviewRetryCap(review, configuredMaxRetries) {
|
|
|
47
43
|
retryCount,
|
|
48
44
|
...(typeof maxRetries === 'number' ? { maxRetries } : {}),
|
|
49
45
|
};
|
|
50
|
-
if (!
|
|
46
|
+
if (!reviewFixRetriesExhausted(next))
|
|
51
47
|
return next;
|
|
52
48
|
return { ...next, maxRetriesExhausted: true, recoveryContinuationPending: false };
|
|
53
49
|
}
|
|
54
|
-
export function
|
|
55
|
-
const retryCount =
|
|
50
|
+
export function reviewRetryCapReason(review) {
|
|
51
|
+
const retryCount = reviewRetryCount(review);
|
|
56
52
|
const findings = Math.max(review.unresolvedCount ?? 0, review.issues?.length ?? 0);
|
|
57
53
|
const findingLabel = `${findings} finding${findings === 1 ? '' : 's'}`;
|
|
58
54
|
if (typeof review.maxRetries === 'number' && Number.isFinite(review.maxRetries)) {
|
|
59
|
-
return `
|
|
55
|
+
return `Review stopped after ${retryCount}/${review.maxRetries} fix attempts; ${findingLabel} remain. Request another review, or bypass publish (dangerous).`;
|
|
60
56
|
}
|
|
61
|
-
return `
|
|
57
|
+
return `Review stopped after ${retryCount} fix attempt${retryCount === 1 ? '' : 's'}; ${findingLabel} remain. Request another review, or bypass publish (dangerous).`;
|
|
62
58
|
}
|
|
63
|
-
export function
|
|
59
|
+
export function latestReview(reviews) {
|
|
64
60
|
return [...(reviews ?? [])]
|
|
65
61
|
.reverse()
|
|
66
|
-
.find((review) => review.
|
|
67
|
-
(review.verdict === 'pass' || review.verdict === 'issues'));
|
|
62
|
+
.find((review) => review.verdict === 'pass' || review.verdict === 'issues');
|
|
68
63
|
}
|
|
69
|
-
/** Latest terminal
|
|
70
|
-
export function
|
|
71
|
-
const latest =
|
|
72
|
-
if (!latest || !
|
|
64
|
+
/** Latest terminal review that hit its auto-fix cap. Package HEAD drift does not hide this. */
|
|
65
|
+
export function latestExhaustedReview(reviews) {
|
|
66
|
+
const latest = latestReview(reviews);
|
|
67
|
+
if (!latest || !reviewFixRetriesExhausted(latest))
|
|
73
68
|
return undefined;
|
|
74
69
|
return latest;
|
|
75
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-retries.js","sourceRoot":"","sources":["../../src/runs/review-retries.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iCAAiC,GAAG,4BAA4B,CAAC;AAqB9E,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"review-retries.js","sourceRoot":"","sources":["../../src/runs/review-retries.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ export function resolveRunSlotId(run) {
|
|
|
4
4
|
const topLevel = run.slotId?.trim();
|
|
5
5
|
if (topLevel)
|
|
6
6
|
return topLevel;
|
|
7
|
-
const preferredRoles = ['
|
|
7
|
+
const preferredRoles = ['review-fix', 'review', 'dev'];
|
|
8
8
|
for (const role of preferredRoles) {
|
|
9
9
|
const context = run.agentContexts
|
|
10
10
|
?.slice()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slot-resolution.js","sourceRoot":"","sources":["../../src/runs/slot-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,EAAE,EAAY,MAAM,sBAAsB,CAAC;AAErE,2GAA2G;AAC3G,MAAM,UAAU,gBAAgB,CAC9B,GAAoD;IAEpD,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;IACpC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,cAAc,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"slot-resolution.js","sourceRoot":"","sources":["../../src/runs/slot-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,EAAE,EAAY,MAAM,sBAAsB,CAAC;AAErE,2GAA2G;AAC3G,MAAM,UAAU,gBAAgB,CAC9B,GAAoD;IAEpD,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;IACpC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,cAAc,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAU,CAAC;IAChE,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa;YAC/B,EAAE,KAAK,EAAE;aACR,OAAO,EAAE;aACT,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,IAAI,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5D,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACpF,IAAI,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAEhE,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC;IACtE,MAAM,YAAY,GAChB,QAAQ,EAAE,OACX,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACxB,OAAO,YAAY,IAAI,IAAI,CAAC;AAC9B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AgentRole, WorkerTerminalDisposition, WorkerTerminalEvidence } from '../contracts/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* Where a child checklist unit hangs off its parent (ADR-060). The checklist is
|
|
4
|
-
* a task-dir basename (`CHECKLIST.md`, `
|
|
4
|
+
* a task-dir basename (`CHECKLIST.md`, `REVIEW.md`), never a path, so the
|
|
5
5
|
* link survives the task directory travelling to a slot.
|
|
6
6
|
*/
|
|
7
7
|
export interface WorkerSignalParentLink {
|
|
@@ -24,8 +24,8 @@ export interface WorkerSignal {
|
|
|
24
24
|
step?: string;
|
|
25
25
|
reason?: string;
|
|
26
26
|
prNumber?: number;
|
|
27
|
-
/** The worker completed a trivial update-branch task that does not need
|
|
28
|
-
|
|
27
|
+
/** The worker completed a trivial update-branch task that does not need review. */
|
|
28
|
+
needsReview?: boolean;
|
|
29
29
|
/** Set only on a child unit signal under `subtasks/`; names the owning step. */
|
|
30
30
|
parent?: WorkerSignalParentLink;
|
|
31
31
|
timestamp: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/transport/signal.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,SAAS,EACT,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAE/B;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/D,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,eAAe,CAAC,EAAE,2BAA2B,CAAC;IAC9C,eAAe,CAAC,EAAE,2BAA2B,CAAC;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/transport/signal.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const PROTOCOL_VERSION = "0.
|
|
1
|
+
export declare const PROTOCOL_VERSION = "0.40.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
// fleet can be upgraded deliberately; optional method/event fields remain
|
|
4
4
|
// backward-compatible unless a caller requires a new node capability.
|
|
5
5
|
// Format: semver-ish, increment when methods/events/frame format changes.
|
|
6
|
-
export const PROTOCOL_VERSION = '0.
|
|
6
|
+
export const PROTOCOL_VERSION = '0.40.0';
|
|
7
7
|
//# sourceMappingURL=version.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@farmslot/protocol",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.40.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -373,6 +373,10 @@
|
|
|
373
373
|
"types": "./dist/node/pack-portability.d.ts",
|
|
374
374
|
"import": "./dist/node/pack-portability.js",
|
|
375
375
|
"default": "./dist/node/pack-portability.js"
|
|
376
|
+
},
|
|
377
|
+
"./scripts/acceptance.mjs": {
|
|
378
|
+
"types": "./scripts/acceptance.d.mts",
|
|
379
|
+
"default": "./scripts/acceptance.mjs"
|
|
376
380
|
}
|
|
377
381
|
},
|
|
378
382
|
"scripts": {
|
|
@@ -419,7 +423,10 @@
|
|
|
419
423
|
"dist/**/*.js",
|
|
420
424
|
"dist/**/*.d.ts",
|
|
421
425
|
"dist/**/*.d.ts.map",
|
|
422
|
-
"dist/**/*.js.map"
|
|
426
|
+
"dist/**/*.js.map",
|
|
427
|
+
"scripts/acceptance.mjs",
|
|
428
|
+
"scripts/acceptance.d.cts",
|
|
429
|
+
"scripts/acceptance.d.mts"
|
|
423
430
|
],
|
|
424
431
|
"publishConfig": {
|
|
425
432
|
"access": "public"
|