@farmslot/protocol 0.8.0 → 0.10.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 +28 -0
- package/dist/agents/roles.js +2 -2
- package/dist/agents/roles.js.map +1 -1
- package/dist/contracts/agents.d.ts +7 -0
- package/dist/contracts/agents.d.ts.map +1 -1
- package/dist/contracts/backlog.d.ts +17 -0
- package/dist/contracts/backlog.d.ts.map +1 -1
- package/dist/contracts/backlog.js.map +1 -1
- package/dist/contracts/bug-input.d.ts +77 -0
- package/dist/contracts/bug-input.d.ts.map +1 -0
- package/dist/contracts/bug-input.js +300 -0
- package/dist/contracts/bug-input.js.map +1 -0
- package/dist/contracts/bug-score.d.ts +73 -0
- package/dist/contracts/bug-score.d.ts.map +1 -0
- package/dist/contracts/bug-score.js +208 -0
- package/dist/contracts/bug-score.js.map +1 -0
- package/dist/contracts/dispatch.d.ts +5 -1
- package/dist/contracts/dispatch.d.ts.map +1 -1
- package/dist/contracts/index.d.ts +5 -0
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +5 -0
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/pr-recommendation.d.ts +66 -0
- package/dist/contracts/pr-recommendation.d.ts.map +1 -0
- package/dist/contracts/pr-recommendation.js +88 -0
- package/dist/contracts/pr-recommendation.js.map +1 -0
- package/dist/contracts/recipes.js +1 -1
- package/dist/contracts/recipes.js.map +1 -1
- package/dist/contracts/reviews.d.ts +4 -1
- package/dist/contracts/reviews.d.ts.map +1 -1
- package/dist/contracts/reviews.js.map +1 -1
- package/dist/contracts/runner-ids.d.ts +4 -0
- package/dist/contracts/runner-ids.d.ts.map +1 -0
- package/dist/contracts/runner-ids.js +12 -0
- package/dist/contracts/runner-ids.js.map +1 -0
- package/dist/contracts/runs.d.ts +50 -2
- package/dist/contracts/runs.d.ts.map +1 -1
- package/dist/contracts/runs.js +42 -2
- package/dist/contracts/runs.js.map +1 -1
- package/dist/contracts/slot-selection.d.ts +41 -0
- package/dist/contracts/slot-selection.d.ts.map +1 -0
- package/dist/contracts/slot-selection.js +128 -0
- package/dist/contracts/slot-selection.js.map +1 -0
- package/dist/contracts/slots.d.ts +18 -0
- package/dist/contracts/slots.d.ts.map +1 -1
- package/dist/contracts/slots.js +11 -0
- package/dist/contracts/slots.js.map +1 -1
- package/dist/contracts/work-graph.d.ts +1 -1
- package/dist/contracts/work-graph.d.ts.map +1 -1
- package/dist/integrations/github-ref.js +1 -1
- package/dist/integrations/github-ref.js.map +1 -1
- package/dist/recipe/common.d.ts +3 -0
- package/dist/recipe/common.d.ts.map +1 -1
- package/dist/recipe/common.js.map +1 -1
- package/dist/recipe/index.d.ts +2 -1
- package/dist/recipe/index.d.ts.map +1 -1
- package/dist/recipe/index.js +2 -1
- package/dist/recipe/index.js.map +1 -1
- package/dist/recipe/manifest.d.ts.map +1 -1
- package/dist/recipe/manifest.js +14 -0
- package/dist/recipe/manifest.js.map +1 -1
- package/dist/recipe/trust.d.ts +45 -0
- package/dist/recipe/trust.d.ts.map +1 -0
- package/dist/recipe/trust.js +63 -0
- package/dist/recipe/trust.js.map +1 -0
- package/dist/recipe/workflow.d.ts +3 -0
- package/dist/recipe/workflow.d.ts.map +1 -1
- package/dist/recipe/workflow.js +37 -7
- package/dist/recipe/workflow.js.map +1 -1
- package/dist/rpc/backlog.d.ts +10 -0
- package/dist/rpc/backlog.d.ts.map +1 -1
- package/dist/rpc/backlog.js +1 -0
- package/dist/rpc/backlog.js.map +1 -1
- package/dist/rpc/dispatch.d.ts +1 -1
- package/dist/rpc/dispatch.d.ts.map +1 -1
- package/dist/rpc/registry.d.ts +6 -0
- package/dist/rpc/registry.d.ts.map +1 -1
- package/dist/rpc/registry.js +6 -0
- package/dist/rpc/registry.js.map +1 -1
- package/dist/rpc/run.d.ts +11 -1
- package/dist/rpc/run.d.ts.map +1 -1
- package/dist/rpc/slot.d.ts +53 -1
- package/dist/rpc/slot.d.ts.map +1 -1
- package/dist/rpc/slot.js +5 -0
- package/dist/rpc/slot.js.map +1 -1
- package/dist/rpc/tmux.d.ts +1 -1
- package/dist/rpc/tmux.d.ts.map +1 -1
- package/dist/runs/family-iteration-ledger.js +2 -2
- package/dist/runs/family-iteration-ledger.js.map +1 -1
- package/dist/runs/run-mode.d.ts +1 -1
- package/dist/runs/run-mode.js +2 -2
- package/dist/runs/run-mode.js.map +1 -1
- package/dist/transport/events.d.ts +2 -0
- package/dist/transport/events.d.ts.map +1 -1
- package/dist/transport/frames.d.ts +3 -0
- package/dist/transport/frames.d.ts.map +1 -1
- package/dist/transport/frames.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { type BugScore, type BugScoreDifficulty } from './bug-input.js';
|
|
2
|
+
export declare const LLM_COMPLEXITIES: readonly ["single-file change", "multi-file change", "architectural change", "unknown"];
|
|
3
|
+
export type LlmComplexity = (typeof LLM_COMPLEXITIES)[number];
|
|
4
|
+
export interface LlmGrade {
|
|
5
|
+
difficulty: BugScoreDifficulty;
|
|
6
|
+
confidence: number;
|
|
7
|
+
one_shot_probability: number;
|
|
8
|
+
reasoning: string;
|
|
9
|
+
similar_past_bugs: string[];
|
|
10
|
+
risk_factors: string[];
|
|
11
|
+
estimated_complexity: LlmComplexity;
|
|
12
|
+
}
|
|
13
|
+
export declare const FINAL_SCORE_SOURCES: readonly ["agreement", "conservative", "heuristic-only", "llm-only", "none"];
|
|
14
|
+
export type FinalScoreSource = (typeof FINAL_SCORE_SOURCES)[number];
|
|
15
|
+
export interface FinalScore {
|
|
16
|
+
difficulty: BugScoreDifficulty;
|
|
17
|
+
one_shot_probability: number;
|
|
18
|
+
recommended_model: string;
|
|
19
|
+
source: FinalScoreSource;
|
|
20
|
+
}
|
|
21
|
+
export interface BugValidation {
|
|
22
|
+
still_valid: boolean;
|
|
23
|
+
confidence: number;
|
|
24
|
+
reason: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Strip a leading Markdown code fence (```…```), if present, and parse the
|
|
28
|
+
* remainder as JSON. Mirrors the fence-stripping the grade-bug.sh /
|
|
29
|
+
* validate-bug.sh Python did before `json.loads`. Throws with a teaching error
|
|
30
|
+
* on invalid JSON; callers that tolerate unparseable LLM output (validity check)
|
|
31
|
+
* catch it and fall back to a default.
|
|
32
|
+
*/
|
|
33
|
+
export declare function parseLlmJson(text: string): unknown;
|
|
34
|
+
/**
|
|
35
|
+
* Validate a raw LLM grade object against the grade-bug.sh schema rules and
|
|
36
|
+
* return the cleaned, schema-only shape. Throws with a teaching error listing
|
|
37
|
+
* every violation. Optional fields (`risk_factors`, `similar_past_bugs`) default
|
|
38
|
+
* to empty arrays, matching the Python `setdefault` behaviour.
|
|
39
|
+
*/
|
|
40
|
+
export declare function normalizeLlmGrade(value: unknown): LlmGrade;
|
|
41
|
+
/**
|
|
42
|
+
* Deterministically merge an LLM grade with the optional heuristic score into a
|
|
43
|
+
* final assessment (grade-bug.sh's final-score block). When both exist and
|
|
44
|
+
* agree, the shared difficulty wins (`agreement`); when they differ, the harder
|
|
45
|
+
* estimate wins (`conservative`) and the one-shot probability is their mean
|
|
46
|
+
* rounded to two decimals. With no heuristic, the LLM grade passes through
|
|
47
|
+
* (`llm-only`).
|
|
48
|
+
*/
|
|
49
|
+
export declare function computeFinalScore(llm: LlmGrade, heuristic: BugScore | null): FinalScore;
|
|
50
|
+
/**
|
|
51
|
+
* Apply the validate-bug.sh defaults to a parsed validity object: fill missing
|
|
52
|
+
* `still_valid` (default true), `confidence` (0), and `reason` (empty), coercing
|
|
53
|
+
* each to its declared type. Unparseable LLM output is handled by the caller —
|
|
54
|
+
* pass `{ reason: 'LLM response unparseable' }` to reproduce that fallback.
|
|
55
|
+
*/
|
|
56
|
+
export declare function normalizeBugValidation(value: unknown): BugValidation;
|
|
57
|
+
export interface BatchIssueFilter {
|
|
58
|
+
/** ISO date (YYYY-MM-DD); issues last updated before it are dropped. */
|
|
59
|
+
since?: string;
|
|
60
|
+
/** Drop issues that already have an assignee. */
|
|
61
|
+
excludeAssigned?: boolean;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The batch-triage.sh GitHub post-filter: keep issues updated on/after `since`
|
|
65
|
+
* and (when `excludeAssigned`) drop already-assigned issues. ISO timestamps
|
|
66
|
+
* compare lexically, so the `updatedAt[:10] < since` string comparison the Python
|
|
67
|
+
* did is preserved.
|
|
68
|
+
*/
|
|
69
|
+
export declare function filterBatchIssues<T extends {
|
|
70
|
+
updatedAt?: string;
|
|
71
|
+
assigned?: boolean;
|
|
72
|
+
}>(issues: T[], filter: BatchIssueFilter): T[];
|
|
73
|
+
//# sourceMappingURL=bug-score.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bug-score.d.ts","sourceRoot":"","sources":["../../src/contracts/bug-score.ts"],"names":[],"mappings":"AAQA,OAAO,EAA0B,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAIhG,eAAO,MAAM,gBAAgB,yFAKnB,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,aAAa,CAAC;CACrC;AAED,eAAO,MAAM,mBAAmB,8EAMtB,CAAC;AACX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAID,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAgBlD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAiD1D;AAgBD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,GAAG,IAAI,GAAG,UAAU,CA6BvF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAWpE;AAID,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EACpF,MAAM,EAAE,CAAC,EAAE,EACX,MAAM,EAAE,gBAAgB,GACvB,CAAC,EAAE,CASL"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
// bug-score.ts — Pure decision cores for the LLM grading / validity / batch
|
|
2
|
+
// stages of the bug pipeline (ported from grade-bug.sh, validate-bug.sh, and
|
|
3
|
+
// the GitHub post-filter in batch-triage.sh). No IO — callers own the `claude`
|
|
4
|
+
// CLI edge, network fetches, and score-file reads/writes.
|
|
5
|
+
//
|
|
6
|
+
// Companion to bug-input.ts (parseBugInput / validateBugScore / deriveScoreKey);
|
|
7
|
+
// together they hold every decision the retired bug scripts encoded.
|
|
8
|
+
import { BUG_SCORE_DIFFICULTIES } from './bug-input.js';
|
|
9
|
+
// ── LLM grade (grade-bug.sh) ─────────────────────────────────────────────────
|
|
10
|
+
export const LLM_COMPLEXITIES = [
|
|
11
|
+
'single-file change',
|
|
12
|
+
'multi-file change',
|
|
13
|
+
'architectural change',
|
|
14
|
+
'unknown',
|
|
15
|
+
];
|
|
16
|
+
export const FINAL_SCORE_SOURCES = [
|
|
17
|
+
'agreement',
|
|
18
|
+
'conservative',
|
|
19
|
+
'heuristic-only',
|
|
20
|
+
'llm-only',
|
|
21
|
+
'none',
|
|
22
|
+
];
|
|
23
|
+
/**
|
|
24
|
+
* Strip a leading Markdown code fence (```…```), if present, and parse the
|
|
25
|
+
* remainder as JSON. Mirrors the fence-stripping the grade-bug.sh /
|
|
26
|
+
* validate-bug.sh Python did before `json.loads`. Throws with a teaching error
|
|
27
|
+
* on invalid JSON; callers that tolerate unparseable LLM output (validity check)
|
|
28
|
+
* catch it and fall back to a default.
|
|
29
|
+
*/
|
|
30
|
+
export function parseLlmJson(text) {
|
|
31
|
+
let body = text.trim();
|
|
32
|
+
if (body.startsWith('```')) {
|
|
33
|
+
// Drop the opening fence line, then everything from the closing fence on.
|
|
34
|
+
const afterFirstLine = body.slice(body.indexOf('\n') + 1);
|
|
35
|
+
const closeIdx = afterFirstLine.lastIndexOf('```');
|
|
36
|
+
body = (closeIdx === -1 ? afterFirstLine : afterFirstLine.slice(0, closeIdx)).trim();
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
return JSON.parse(body);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
throw Object.assign(new Error('could not parse LLM response as JSON'), {
|
|
43
|
+
code: 'LLM_PARSE_ERROR',
|
|
44
|
+
userAction: 'The model must return a single JSON object (optionally in a ``` fence).',
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Validate a raw LLM grade object against the grade-bug.sh schema rules and
|
|
50
|
+
* return the cleaned, schema-only shape. Throws with a teaching error listing
|
|
51
|
+
* every violation. Optional fields (`risk_factors`, `similar_past_bugs`) default
|
|
52
|
+
* to empty arrays, matching the Python `setdefault` behaviour.
|
|
53
|
+
*/
|
|
54
|
+
export function normalizeLlmGrade(value) {
|
|
55
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
56
|
+
throw Object.assign(new Error('LLM grade must be a JSON object'), {
|
|
57
|
+
code: 'INVALID_LLM_GRADE',
|
|
58
|
+
userAction: 'Ensure the grading model emits a JSON object.',
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
const d = value;
|
|
62
|
+
const errors = [];
|
|
63
|
+
if (!BUG_SCORE_DIFFICULTIES.includes(d['difficulty'])) {
|
|
64
|
+
errors.push(`difficulty must be one of ${JSON.stringify([...BUG_SCORE_DIFFICULTIES])}, got: ${JSON.stringify(d['difficulty'])}`);
|
|
65
|
+
}
|
|
66
|
+
const conf = d['confidence'];
|
|
67
|
+
if (typeof conf !== 'number' || isNaN(conf) || conf < 0 || conf > 1) {
|
|
68
|
+
errors.push(`confidence must be 0-1, got: ${JSON.stringify(conf)}`);
|
|
69
|
+
}
|
|
70
|
+
const prob = d['one_shot_probability'];
|
|
71
|
+
if (typeof prob !== 'number' || isNaN(prob) || prob < 0 || prob > 1) {
|
|
72
|
+
errors.push(`one_shot_probability must be 0-1, got: ${JSON.stringify(prob)}`);
|
|
73
|
+
}
|
|
74
|
+
const reasoning = d['reasoning'];
|
|
75
|
+
if (typeof reasoning !== 'string' || reasoning.length === 0) {
|
|
76
|
+
errors.push('reasoning is required and must be a non-empty string');
|
|
77
|
+
}
|
|
78
|
+
if (!LLM_COMPLEXITIES.includes(d['estimated_complexity'])) {
|
|
79
|
+
errors.push(`estimated_complexity must be one of ${JSON.stringify([...LLM_COMPLEXITIES])}, got: ${JSON.stringify(d['estimated_complexity'])}`);
|
|
80
|
+
}
|
|
81
|
+
if (errors.length > 0) {
|
|
82
|
+
throw Object.assign(new Error(`LLM response validation failed: ${errors.join('; ')}`), {
|
|
83
|
+
code: 'INVALID_LLM_GRADE',
|
|
84
|
+
userAction: 'Fix the grading prompt/model so its JSON satisfies the grade schema.',
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
difficulty: d['difficulty'],
|
|
89
|
+
confidence: conf,
|
|
90
|
+
one_shot_probability: prob,
|
|
91
|
+
reasoning: reasoning,
|
|
92
|
+
similar_past_bugs: toStringArray(d['similar_past_bugs']),
|
|
93
|
+
risk_factors: toStringArray(d['risk_factors']),
|
|
94
|
+
estimated_complexity: d['estimated_complexity'],
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const DIFFICULTY_RANK = {
|
|
98
|
+
low: 0,
|
|
99
|
+
medium: 1,
|
|
100
|
+
high: 2,
|
|
101
|
+
extreme: 3,
|
|
102
|
+
};
|
|
103
|
+
const MODEL_BY_DIFFICULTY = {
|
|
104
|
+
low: 'sonnet',
|
|
105
|
+
medium: 'sonnet',
|
|
106
|
+
high: 'sonnet',
|
|
107
|
+
extreme: 'opus',
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Deterministically merge an LLM grade with the optional heuristic score into a
|
|
111
|
+
* final assessment (grade-bug.sh's final-score block). When both exist and
|
|
112
|
+
* agree, the shared difficulty wins (`agreement`); when they differ, the harder
|
|
113
|
+
* estimate wins (`conservative`) and the one-shot probability is their mean
|
|
114
|
+
* rounded to two decimals. With no heuristic, the LLM grade passes through
|
|
115
|
+
* (`llm-only`).
|
|
116
|
+
*/
|
|
117
|
+
export function computeFinalScore(llm, heuristic) {
|
|
118
|
+
const lRank = DIFFICULTY_RANK[llm.difficulty];
|
|
119
|
+
let difficulty;
|
|
120
|
+
let oneShot;
|
|
121
|
+
let source;
|
|
122
|
+
if (heuristic) {
|
|
123
|
+
const hRank = DIFFICULTY_RANK[heuristic.difficulty];
|
|
124
|
+
if (hRank === lRank) {
|
|
125
|
+
difficulty = heuristic.difficulty;
|
|
126
|
+
source = 'agreement';
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
// Conservative: keep the harder estimate.
|
|
130
|
+
difficulty = hRank > lRank ? heuristic.difficulty : llm.difficulty;
|
|
131
|
+
source = 'conservative';
|
|
132
|
+
}
|
|
133
|
+
oneShot = round2((heuristic.one_shot_probability + llm.one_shot_probability) / 2);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
difficulty = llm.difficulty;
|
|
137
|
+
oneShot = llm.one_shot_probability;
|
|
138
|
+
source = 'llm-only';
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
difficulty,
|
|
142
|
+
one_shot_probability: oneShot,
|
|
143
|
+
recommended_model: MODEL_BY_DIFFICULTY[difficulty],
|
|
144
|
+
source,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Apply the validate-bug.sh defaults to a parsed validity object: fill missing
|
|
149
|
+
* `still_valid` (default true), `confidence` (0), and `reason` (empty), coercing
|
|
150
|
+
* each to its declared type. Unparseable LLM output is handled by the caller —
|
|
151
|
+
* pass `{ reason: 'LLM response unparseable' }` to reproduce that fallback.
|
|
152
|
+
*/
|
|
153
|
+
export function normalizeBugValidation(value) {
|
|
154
|
+
const v = value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
155
|
+
? value
|
|
156
|
+
: {};
|
|
157
|
+
return {
|
|
158
|
+
still_valid: typeof v['still_valid'] === 'boolean' ? v['still_valid'] : true,
|
|
159
|
+
confidence: typeof v['confidence'] === 'number' && !isNaN(v['confidence']) ? v['confidence'] : 0,
|
|
160
|
+
reason: typeof v['reason'] === 'string' ? v['reason'] : '',
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* The batch-triage.sh GitHub post-filter: keep issues updated on/after `since`
|
|
165
|
+
* and (when `excludeAssigned`) drop already-assigned issues. ISO timestamps
|
|
166
|
+
* compare lexically, so the `updatedAt[:10] < since` string comparison the Python
|
|
167
|
+
* did is preserved.
|
|
168
|
+
*/
|
|
169
|
+
export function filterBatchIssues(issues, filter) {
|
|
170
|
+
return issues.filter((issue) => {
|
|
171
|
+
if (filter.since) {
|
|
172
|
+
const updated = (issue.updatedAt ?? '').slice(0, 10);
|
|
173
|
+
if (updated < filter.since)
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
if (filter.excludeAssigned && issue.assigned)
|
|
177
|
+
return false;
|
|
178
|
+
return true;
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
// ── Private helpers ──────────────────────────────────────────────────────────
|
|
182
|
+
function toStringArray(raw) {
|
|
183
|
+
if (!Array.isArray(raw))
|
|
184
|
+
return [];
|
|
185
|
+
return raw.filter((v) => typeof v === 'string');
|
|
186
|
+
}
|
|
187
|
+
// Round half to even (banker's rounding) at 2 decimals, approximating the
|
|
188
|
+
// retired Python grader's round(x, 2). Math.round rounds half up and diverged on
|
|
189
|
+
// clean decimal ties (mean 0.125 → 0.13 vs Python's 0.12), desyncing new score
|
|
190
|
+
// files from the ones already on disk; the exact-*.5 branch below fixes those.
|
|
191
|
+
//
|
|
192
|
+
// NOTE: this does NOT bit-match Python round(x, 2) on *binary* near-ties. Python
|
|
193
|
+
// rounds the true IEEE-754 double, while we round n*100 — a value like
|
|
194
|
+
// (0.01 + 0.02) / 2 is 0.015000000000000001 in JS, so n*100 lands just above
|
|
195
|
+
// 1.5 and we round to 0.02, whereas Python's round(0.015, 2) yields 0.01. We do
|
|
196
|
+
// not chase bit-parity (it would need arbitrary-precision decimal handling for a
|
|
197
|
+
// cosmetic 0.01 on a probability); scores may therefore differ by 0.01 from the
|
|
198
|
+
// retired Python grader on such near-ties. See the CHANGELOG entry for this port.
|
|
199
|
+
function round2(n) {
|
|
200
|
+
const scaled = n * 100;
|
|
201
|
+
const remainder = scaled - Math.floor(scaled);
|
|
202
|
+
if (remainder === 0.5) {
|
|
203
|
+
const floor = Math.floor(scaled);
|
|
204
|
+
return (floor % 2 === 0 ? floor : floor + 1) / 100;
|
|
205
|
+
}
|
|
206
|
+
return Math.round(scaled) / 100;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=bug-score.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bug-score.js","sourceRoot":"","sources":["../../src/contracts/bug-score.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,10 @@ export interface QueueItem {
|
|
|
28
28
|
launchCandidateId?: string;
|
|
29
29
|
launchGroupId?: string;
|
|
30
30
|
launchSlotPolicy?: import('./backlog.js').BacklogLaunchSlotPolicy['kind'];
|
|
31
|
+
/** Monotonic per-candidate launch attempt: each (re)enqueue of a
|
|
32
|
+
* launch-plan candidate stamps a strictly higher value so run observations can tell
|
|
33
|
+
* a legitimate takeover from a stale echo of a superseded run. */
|
|
34
|
+
launchAttempt?: number;
|
|
31
35
|
label?: string;
|
|
32
36
|
flowType: FlowType;
|
|
33
37
|
project: string;
|
|
@@ -66,7 +70,7 @@ export interface QueueItem {
|
|
|
66
70
|
startRef?: RunStartRefProvenance | null;
|
|
67
71
|
/** Fix-bug publication review depth requested when the queue item was created. */
|
|
68
72
|
reviewDepth?: ReviewDepthPolicy;
|
|
69
|
-
/** Ordered
|
|
73
|
+
/** Ordered independent review loops to run before the first ready gate. */
|
|
70
74
|
pendingReviewPlan?: ReviewLoopRequest[];
|
|
71
75
|
evalCell?: EvalQueueCell;
|
|
72
76
|
priority: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/contracts/dispatch.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/contracts/dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export * from './agents.js';
|
|
2
2
|
export * from './analytics.js';
|
|
3
3
|
export * from './backlog.js';
|
|
4
|
+
export * from './bug-input.js';
|
|
5
|
+
export * from './bug-score.js';
|
|
4
6
|
export * from './chat.js';
|
|
5
7
|
export * from './common.js';
|
|
6
8
|
export * from './config.js';
|
|
@@ -8,12 +10,15 @@ export * from './dispatch.js';
|
|
|
8
10
|
export * from './evals.js';
|
|
9
11
|
export * from './family.js';
|
|
10
12
|
export * from './interactive-operator-packets.js';
|
|
13
|
+
export * from './pr-recommendation.js';
|
|
11
14
|
export * from './recipes.js';
|
|
12
15
|
export * from './resources.js';
|
|
13
16
|
export * from './reviews.js';
|
|
14
17
|
export * from './roadmap.js';
|
|
15
18
|
export * from './run-bundles.js';
|
|
19
|
+
export * from './runner-ids.js';
|
|
16
20
|
export * from './runs.js';
|
|
21
|
+
export * from './slot-selection.js';
|
|
17
22
|
export * from './slots.js';
|
|
18
23
|
export * from './task.js';
|
|
19
24
|
export * from './terminal.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mCAAmC,CAAC;AAClD,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mCAAmC,CAAC;AAClD,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC"}
|
package/dist/contracts/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export * from './agents.js';
|
|
2
2
|
export * from './analytics.js';
|
|
3
3
|
export * from './backlog.js';
|
|
4
|
+
export * from './bug-input.js';
|
|
5
|
+
export * from './bug-score.js';
|
|
4
6
|
export * from './chat.js';
|
|
5
7
|
export * from './common.js';
|
|
6
8
|
export * from './config.js';
|
|
@@ -8,12 +10,15 @@ export * from './dispatch.js';
|
|
|
8
10
|
export * from './evals.js';
|
|
9
11
|
export * from './family.js';
|
|
10
12
|
export * from './interactive-operator-packets.js';
|
|
13
|
+
export * from './pr-recommendation.js';
|
|
11
14
|
export * from './recipes.js';
|
|
12
15
|
export * from './resources.js';
|
|
13
16
|
export * from './reviews.js';
|
|
14
17
|
export * from './roadmap.js';
|
|
15
18
|
export * from './run-bundles.js';
|
|
19
|
+
export * from './runner-ids.js';
|
|
16
20
|
export * from './runs.js';
|
|
21
|
+
export * from './slot-selection.js';
|
|
17
22
|
export * from './slots.js';
|
|
18
23
|
export * from './task.js';
|
|
19
24
|
export * from './terminal.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mCAAmC,CAAC;AAClD,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mCAAmC,CAAC;AAClD,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { PRFamilyMergeState, PRFamilyWorkflowState, PRRecommendation } from './reviews.js';
|
|
2
|
+
/**
|
|
3
|
+
* Minimal family context consumed by recommendation + merge-state functions.
|
|
4
|
+
* The gateway's PRFamilyContext is a superset of this; structural typing
|
|
5
|
+
* means any PRFamilyContext satisfies PRFamilyContextForRecommendation.
|
|
6
|
+
*/
|
|
7
|
+
export interface PRFamilyContextForRecommendation {
|
|
8
|
+
workflowState: PRFamilyWorkflowState;
|
|
9
|
+
ownedPrFamily: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface PRRecommendationParams {
|
|
12
|
+
prState: 'OPEN' | 'CLOSED' | 'MERGED';
|
|
13
|
+
workerActive: boolean;
|
|
14
|
+
anyFailed: boolean;
|
|
15
|
+
mergeConflict: boolean;
|
|
16
|
+
actionableCount: number;
|
|
17
|
+
allPassed: boolean;
|
|
18
|
+
approved: boolean;
|
|
19
|
+
familyContext: PRFamilyContextForRecommendation | null;
|
|
20
|
+
}
|
|
21
|
+
export interface PRMergeStateParams {
|
|
22
|
+
prState: 'OPEN' | 'CLOSED' | 'MERGED';
|
|
23
|
+
familyContext: PRFamilyContextForRecommendation | null;
|
|
24
|
+
anyFailed: boolean;
|
|
25
|
+
mergeConflict: boolean;
|
|
26
|
+
actionableCount: number;
|
|
27
|
+
allPassed: boolean;
|
|
28
|
+
approved: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Returns true when the PR is in a "passive merge wait" state: the workflow
|
|
32
|
+
* is complete, CI has passed, the PR is approved, and there are no blockers.
|
|
33
|
+
* The operator just needs to click Merge (or enable auto-merge).
|
|
34
|
+
*
|
|
35
|
+
* NOTE: prState='OPEN' is intentional — the PR has not merged yet but is
|
|
36
|
+
* fully ready. Callers filter familyContext to ownedPrFamily=true before
|
|
37
|
+
* passing it here.
|
|
38
|
+
*/
|
|
39
|
+
export declare function isPassiveMergeWaitCandidate(params: PRMergeStateParams): boolean;
|
|
40
|
+
export declare function derivePRMergeState(params: PRMergeStateParams): PRFamilyMergeState;
|
|
41
|
+
/**
|
|
42
|
+
* First-match rule engine mapping PR state to a recommendation.
|
|
43
|
+
*
|
|
44
|
+
* Rule ordering vs. pr-monitor.sh (bash):
|
|
45
|
+
* INTENTIONAL DIFFERENCE — workerActive is evaluated first (before
|
|
46
|
+
* MERGED/CLOSED). Bash checks MERGED/CLOSED first, then worker-active
|
|
47
|
+
* within sub-cases. The TS ordering surfaces the live worker sooner in
|
|
48
|
+
* the UI; MERGED/CLOSED slots with an active worker are handled by
|
|
49
|
+
* the pr-monitor.sh formatter using the merged/prState PRStatus fields.
|
|
50
|
+
*
|
|
51
|
+
* Rule ordering vs. bash rule engine (first-match order, bash → TS):
|
|
52
|
+
* merged → MERGED (bash: MERGED)
|
|
53
|
+
* pr_state=CLOSED → CLOSED_WITHOUT_MERGE (bash: CLOSED)
|
|
54
|
+
* merge_conflict → NEEDS_ATTENTION (bash: MERGE CONFLICT [worker-active|action-needed])
|
|
55
|
+
* any_failed → NEEDS_ATTENTION (bash: CI FAILED [worker-active|action-needed])
|
|
56
|
+
* has_actionable → NEEDS_ATTENTION (bash: COMMENTS [worker-active|action-needed])
|
|
57
|
+
* all_passed && !actionable → READY/WAITING (bash: READY)
|
|
58
|
+
* else → IN_REVIEW (bash: PENDING)
|
|
59
|
+
*
|
|
60
|
+
* The bash sub-classifications (worker-active vs action-needed within each
|
|
61
|
+
* NEEDS_ATTENTION case) are visible in PRStatus.workerActive + the individual
|
|
62
|
+
* boolean fields (mergeConflict, anyFailed, actionableBotComments) so
|
|
63
|
+
* formatters can still derive the bash-style detail strings.
|
|
64
|
+
*/
|
|
65
|
+
export declare function computePRRecommendation(params: PRRecommendationParams): PRRecommendation;
|
|
66
|
+
//# sourceMappingURL=pr-recommendation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-recommendation.d.ts","sourceRoot":"","sources":["../../src/contracts/pr-recommendation.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhG;;;;GAIG;AACH,MAAM,WAAW,gCAAgC;IAC/C,aAAa,EAAE,qBAAqB,CAAC;IACrC,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACtC,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,gCAAgC,GAAG,IAAI,CAAC;CACxD;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACtC,aAAa,EAAE,gCAAgC,GAAG,IAAI,CAAC;IACvD,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAW/E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,kBAAkB,CAKjF;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,sBAAsB,GAAG,gBAAgB,CAqBxF"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// pr-recommendation.ts — pure decision functions for PR recommendation.
|
|
2
|
+
// Canonical home for computePRRecommendation, isPassiveMergeWaitCandidate,
|
|
3
|
+
// and derivePRMergeState, shared by gateway (methods/pr.ts), CLI internal
|
|
4
|
+
// verbs, and tests without importing services/gateway.
|
|
5
|
+
//
|
|
6
|
+
// Ported from services/gateway/src/methods/pr.ts as part of the Phase 3 CLI
|
|
7
|
+
// overhaul (bash-decision-core-inventory.md item 4: reconcile pr-monitor.sh
|
|
8
|
+
// rules with computePRRecommendation).
|
|
9
|
+
/**
|
|
10
|
+
* Returns true when the PR is in a "passive merge wait" state: the workflow
|
|
11
|
+
* is complete, CI has passed, the PR is approved, and there are no blockers.
|
|
12
|
+
* The operator just needs to click Merge (or enable auto-merge).
|
|
13
|
+
*
|
|
14
|
+
* NOTE: prState='OPEN' is intentional — the PR has not merged yet but is
|
|
15
|
+
* fully ready. Callers filter familyContext to ownedPrFamily=true before
|
|
16
|
+
* passing it here.
|
|
17
|
+
*/
|
|
18
|
+
export function isPassiveMergeWaitCandidate(params) {
|
|
19
|
+
return Boolean(params.familyContext &&
|
|
20
|
+
params.prState === 'OPEN' &&
|
|
21
|
+
params.familyContext.workflowState === 'complete' &&
|
|
22
|
+
!params.anyFailed &&
|
|
23
|
+
!params.mergeConflict &&
|
|
24
|
+
params.actionableCount === 0 &&
|
|
25
|
+
params.allPassed &&
|
|
26
|
+
params.approved);
|
|
27
|
+
}
|
|
28
|
+
export function derivePRMergeState(params) {
|
|
29
|
+
if (!params.familyContext)
|
|
30
|
+
return 'not_applicable';
|
|
31
|
+
if (params.prState === 'MERGED')
|
|
32
|
+
return 'merged';
|
|
33
|
+
if (params.prState === 'CLOSED')
|
|
34
|
+
return 'closed_without_merge';
|
|
35
|
+
return isPassiveMergeWaitCandidate(params) ? 'waiting_for_merge' : 'not_applicable';
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* First-match rule engine mapping PR state to a recommendation.
|
|
39
|
+
*
|
|
40
|
+
* Rule ordering vs. pr-monitor.sh (bash):
|
|
41
|
+
* INTENTIONAL DIFFERENCE — workerActive is evaluated first (before
|
|
42
|
+
* MERGED/CLOSED). Bash checks MERGED/CLOSED first, then worker-active
|
|
43
|
+
* within sub-cases. The TS ordering surfaces the live worker sooner in
|
|
44
|
+
* the UI; MERGED/CLOSED slots with an active worker are handled by
|
|
45
|
+
* the pr-monitor.sh formatter using the merged/prState PRStatus fields.
|
|
46
|
+
*
|
|
47
|
+
* Rule ordering vs. bash rule engine (first-match order, bash → TS):
|
|
48
|
+
* merged → MERGED (bash: MERGED)
|
|
49
|
+
* pr_state=CLOSED → CLOSED_WITHOUT_MERGE (bash: CLOSED)
|
|
50
|
+
* merge_conflict → NEEDS_ATTENTION (bash: MERGE CONFLICT [worker-active|action-needed])
|
|
51
|
+
* any_failed → NEEDS_ATTENTION (bash: CI FAILED [worker-active|action-needed])
|
|
52
|
+
* has_actionable → NEEDS_ATTENTION (bash: COMMENTS [worker-active|action-needed])
|
|
53
|
+
* all_passed && !actionable → READY/WAITING (bash: READY)
|
|
54
|
+
* else → IN_REVIEW (bash: PENDING)
|
|
55
|
+
*
|
|
56
|
+
* The bash sub-classifications (worker-active vs action-needed within each
|
|
57
|
+
* NEEDS_ATTENTION case) are visible in PRStatus.workerActive + the individual
|
|
58
|
+
* boolean fields (mergeConflict, anyFailed, actionableBotComments) so
|
|
59
|
+
* formatters can still derive the bash-style detail strings.
|
|
60
|
+
*/
|
|
61
|
+
export function computePRRecommendation(params) {
|
|
62
|
+
if (params.workerActive)
|
|
63
|
+
return 'WORKING';
|
|
64
|
+
if (params.prState === 'MERGED')
|
|
65
|
+
return 'MERGED';
|
|
66
|
+
if (params.prState === 'CLOSED')
|
|
67
|
+
return 'CLOSED_WITHOUT_MERGE';
|
|
68
|
+
if (params.mergeConflict)
|
|
69
|
+
return 'NEEDS_ATTENTION';
|
|
70
|
+
if (params.anyFailed)
|
|
71
|
+
return 'NEEDS_ATTENTION';
|
|
72
|
+
if (params.actionableCount > 0)
|
|
73
|
+
return 'NEEDS_ATTENTION';
|
|
74
|
+
if (isPassiveMergeWaitCandidate({
|
|
75
|
+
prState: params.prState,
|
|
76
|
+
familyContext: params.familyContext,
|
|
77
|
+
anyFailed: params.anyFailed,
|
|
78
|
+
mergeConflict: params.mergeConflict,
|
|
79
|
+
actionableCount: params.actionableCount,
|
|
80
|
+
allPassed: params.allPassed,
|
|
81
|
+
approved: params.approved,
|
|
82
|
+
}))
|
|
83
|
+
return 'WAITING_FOR_MERGE';
|
|
84
|
+
if (params.allPassed && params.approved && params.actionableCount === 0)
|
|
85
|
+
return 'READY';
|
|
86
|
+
return 'IN_REVIEW';
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=pr-recommendation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-recommendation.js","sourceRoot":"","sources":["../../src/contracts/pr-recommendation.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,2EAA2E;AAC3E,0EAA0E;AAC1E,uDAAuD;AACvD,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,uCAAuC;AAmCvC;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAA0B;IACpE,OAAO,OAAO,CACZ,MAAM,CAAC,aAAa;QACpB,MAAM,CAAC,OAAO,KAAK,MAAM;QACzB,MAAM,CAAC,aAAa,CAAC,aAAa,KAAK,UAAU;QACjD,CAAC,MAAM,CAAC,SAAS;QACjB,CAAC,MAAM,CAAC,aAAa;QACrB,MAAM,CAAC,eAAe,KAAK,CAAC;QAC5B,MAAM,CAAC,SAAS;QAChB,MAAM,CAAC,QAAQ,CAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAA0B;IAC3D,IAAI,CAAC,MAAM,CAAC,aAAa;QAAE,OAAO,gBAAgB,CAAC;IACnD,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACjD,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,sBAAsB,CAAC;IAC/D,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACtF,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAA8B;IACpE,IAAI,MAAM,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACjD,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,sBAAsB,CAAC;IAC/D,IAAI,MAAM,CAAC,aAAa;QAAE,OAAO,iBAAiB,CAAC;IACnD,IAAI,MAAM,CAAC,SAAS;QAAE,OAAO,iBAAiB,CAAC;IAC/C,IAAI,MAAM,CAAC,eAAe,GAAG,CAAC;QAAE,OAAO,iBAAiB,CAAC;IACzD,IACE,2BAA2B,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC;QAEF,OAAO,mBAAmB,CAAC;IAC7B,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,eAAe,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACxF,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipes.js","sourceRoot":"","sources":["../../src/contracts/recipes.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,MAAM,sBAAsB,GAG/B;IACF,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,mCAAmC,EAAE;IAC7E,QAAQ,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,oCAAoC,EAAE;IACvF,KAAK,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,yCAAyC,EAAE;CACnF,CAAC;AAuCF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC;AAEjD,8EAA8E;AAC9E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AACzE,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC/C,MAAM;IACN,MAAM;IACN,MAAM;IACN,gBAAgB;CACR,CAAC;AACX,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,MAAM;IACN,OAAO;IACP,OAAO;IACP,YAAY;IACZ,OAAO;IACP,SAAS;CACD,CAAC;AACX,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,QAAQ;IACR,SAAS;IACT,0BAA0B;IAC1B,sBAAsB;IACtB,iBAAiB;IACjB,kBAAkB;CACV,CAAC;AACX,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,0BAA0B;IAC1B,sBAAsB;IACtB,iBAAiB;IACjB,kBAAkB;CACV,CAAC;AAEX,MAAM,yBAAyB,GAAG;IAChC,SAAS;IACT,WAAW;IACX,KAAK;IACL,aAAa;IACb,
|
|
1
|
+
{"version":3,"file":"recipes.js","sourceRoot":"","sources":["../../src/contracts/recipes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export interface CICheck {
|
|
2
2
|
name: string;
|
|
3
|
-
status: 'pass' | 'fail' | 'pending';
|
|
3
|
+
status: 'pass' | 'fail' | 'pending' | 'skipped';
|
|
4
4
|
watchName: string;
|
|
5
5
|
}
|
|
6
6
|
export interface BotComment {
|
|
@@ -30,6 +30,7 @@ export interface PRStatus {
|
|
|
30
30
|
passed: number;
|
|
31
31
|
failed: number;
|
|
32
32
|
pending: number;
|
|
33
|
+
skipped: number;
|
|
33
34
|
total: number;
|
|
34
35
|
};
|
|
35
36
|
allCheckSummary?: {
|
|
@@ -56,6 +57,8 @@ export interface PRStatus {
|
|
|
56
57
|
mergeConflict: boolean;
|
|
57
58
|
reviewDecision: string;
|
|
58
59
|
recommendation: PRRecommendation;
|
|
60
|
+
/** True when a dispatch worker is actively running against this PR. */
|
|
61
|
+
workerActive?: boolean;
|
|
59
62
|
ownedFamily?: boolean;
|
|
60
63
|
familyId?: string | null;
|
|
61
64
|
familyRootTicketOrPr?: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviews.d.ts","sourceRoot":"","sources":["../../src/contracts/reviews.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"reviews.d.ts","sourceRoot":"","sources":["../../src/contracts/reviews.ts"],"names":[],"mappings":"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"}
|