@on-par/factory-cli 0.9.7-next.2 → 0.9.7-next.20
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/cli/doctor-config.d.ts +14 -0
- package/dist/cli/doctor-config.d.ts.map +1 -0
- package/dist/cli/doctor-config.js +126 -0
- package/dist/cli/doctor-config.js.map +1 -0
- package/dist/cli/doctor-health.d.ts +73 -0
- package/dist/cli/doctor-health.d.ts.map +1 -0
- package/dist/cli/doctor-health.js +156 -0
- package/dist/cli/doctor-health.js.map +1 -0
- package/dist/cli/doctor.d.ts +26 -81
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +214 -268
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +19 -71
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +82 -816
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/run-lane.d.ts +52 -0
- package/dist/cli/run-lane.d.ts.map +1 -0
- package/dist/cli/run-lane.js +239 -0
- package/dist/cli/run-lane.js.map +1 -0
- package/dist/cli/run.d.ts +52 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +200 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/ship.d.ts.map +1 -1
- package/dist/cli/ship.js.map +1 -1
- package/dist/cli/status.d.ts +23 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +179 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/update-state.d.ts.map +1 -1
- package/dist/cli/update-state.js +2 -4
- package/dist/cli/update-state.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { LanePausedPayload, getFactoryPaths, RunOutcome } from '@on-par/factory-core';
|
|
2
|
+
import { logEvent } from '@on-par/factory-core/internal';
|
|
3
|
+
import type { QueueClaim, QueueReleaseOutcome } from '@on-par/factory-core/internal';
|
|
4
|
+
import { type BaseHoldDecision } from './base-hold.js';
|
|
5
|
+
import { waitForMerge } from './land.js';
|
|
6
|
+
export type RunLaneDeps = {
|
|
7
|
+
/** Lane circuit breaker (#1918): pause after this many consecutive parks with the same
|
|
8
|
+
* non-empty failure signature. 0 or absent = off; cmdRun wires the resolved
|
|
9
|
+
* budget.laneBreakerThreshold. */
|
|
10
|
+
laneBreakerThreshold?: number;
|
|
11
|
+
/** Posts the lane-paused comment on the tripping issue (#1919). Defaults to a no-op so
|
|
12
|
+
* injected-deps callers and tests are unaffected; cmdRun wires it to issues.createComment. */
|
|
13
|
+
commentIssue?: (issue: number, body: string) => Promise<void>;
|
|
14
|
+
ship?: (issue: number, opts: {
|
|
15
|
+
product?: string;
|
|
16
|
+
autoRework?: boolean;
|
|
17
|
+
interactive?: boolean;
|
|
18
|
+
approvePlan?: boolean;
|
|
19
|
+
}, ctx?: {
|
|
20
|
+
repoRoot: string;
|
|
21
|
+
ghRepo: string;
|
|
22
|
+
paths: ReturnType<typeof getFactoryPaths>;
|
|
23
|
+
lane?: string;
|
|
24
|
+
onOutcome?: (outcome: RunOutcome) => void;
|
|
25
|
+
}) => Promise<string>;
|
|
26
|
+
waitMerge?: typeof waitForMerge;
|
|
27
|
+
/** ADR-0161: records a landed stack layer as merged in the slice-plan comment. Defaults to a no-op. */
|
|
28
|
+
recordStackMerge?: (issue: number, prNumber: number) => Promise<void>;
|
|
29
|
+
pathExists?: (path: string) => boolean;
|
|
30
|
+
emitEvent?: typeof logEvent;
|
|
31
|
+
claimNext?: () => Promise<QueueClaim | null>;
|
|
32
|
+
releaseIssue?: (issue: number, outcome: QueueReleaseOutcome) => Promise<void>;
|
|
33
|
+
/** Refreshes the claim lease every HEARTBEAT_INTERVAL_MS while an issue is in flight
|
|
34
|
+
* (#1500). Absent for static local-queue lanes, which carry no remote claim to lease. */
|
|
35
|
+
heartbeat?: (issue: number) => Promise<unknown>;
|
|
36
|
+
/** Eager park-time worktree reap (#1007). Defaults to a no-op so injected-deps callers and
|
|
37
|
+
* tests are unaffected; cmdRun wires it to reapParkedLaneWorktree. */
|
|
38
|
+
reapWorktree?: (issue: number) => Promise<void>;
|
|
39
|
+
/** Between-issues worktree GC pass (#1757), run after every terminal outcome before the
|
|
40
|
+
* lane moves on. Defaults to a no-op so injected-deps callers and tests are unaffected;
|
|
41
|
+
* cmdRun wires it to sweepBetweenLaneIssues. */
|
|
42
|
+
sweepFinished?: (issue: number) => Promise<void>;
|
|
43
|
+
/** Number of issues still claimable on this lane's remote queue (#1222). Absent for
|
|
44
|
+
* static local lanes, whose pending list is the whole truth. */
|
|
45
|
+
countRemaining?: () => Promise<number>;
|
|
46
|
+
/** Base-hold claim gate (#2349): consulted before every remote claim; 'hold' stops the lane
|
|
47
|
+
* without claiming. Absent = always claim (local lanes, injected-deps callers, tests). */
|
|
48
|
+
baseHoldGate?: () => Promise<BaseHoldDecision>;
|
|
49
|
+
};
|
|
50
|
+
export declare function renderLanePausedComment(payload: LanePausedPayload): string;
|
|
51
|
+
export declare function runLane(lane: string, issues: number[], repoRoot: string, ghRepo: string, paths: ReturnType<typeof getFactoryPaths>, deps?: RunLaneDeps): Promise<void>;
|
|
52
|
+
//# sourceMappingURL=run-lane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-lane.d.ts","sourceRoot":"","sources":["../../src/cli/run-lane.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAErF,OAAO,EAAE,KAAK,gBAAgB,EAAiB,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAKzC,MAAM,MAAM,WAAW,GAAG;IACxB;;uCAEmC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;mGAC+F;IAC/F,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE,CACL,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,EAC9F,GAAG,CAAC,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;KAC3C,KACE,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,YAAY,CAAC;IAChC,uGAAuG;IACvG,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,SAAS,CAAC,EAAE,OAAO,QAAQ,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAC7C,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E;8FAC0F;IAC1F,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD;2EACuE;IACvE,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD;;qDAEiD;IACjD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD;qEACiE;IACjE,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC;+FAC2F;IAC3F,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAChD,CAAC;AA0BF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAU1E;AAED,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EAAE,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,EACzC,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CAuQf"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
// packages/cli/src/cli/run-lane.ts — the lane loop, moved out of index.ts (#2800)
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { parkReasonFor } from '@on-par/factory-core';
|
|
4
|
+
import { logEvent } from '@on-par/factory-core/internal';
|
|
5
|
+
import { writeBaseHold } from './base-hold.js';
|
|
6
|
+
import { waitForMerge } from './land.js';
|
|
7
|
+
import { AwaitingReviewError } from './land-pr.js';
|
|
8
|
+
import { shipIssue } from './ship.js';
|
|
9
|
+
import { shipRuntime } from './ship-runtime.js';
|
|
10
|
+
/** How often an in-flight issue's claim lease is refreshed (#1500). Well inside the
|
|
11
|
+
* 15-minute default lease (github-queue.ts's DEFAULT_CLAIM_LEASE_MS) so a normal poll
|
|
12
|
+
* cadence never lets the lease lapse mid-ship. */
|
|
13
|
+
const HEARTBEAT_INTERVAL_MS = 5 * 60 * 1000;
|
|
14
|
+
/** Runs `work` while periodically calling `heartbeat(issue)` so a long-running ship or
|
|
15
|
+
* merge wait keeps this claimant's lease fresh. A heartbeat failure is swallowed — losing
|
|
16
|
+
* one refresh must never abort the work it is protecting. */
|
|
17
|
+
async function withHeartbeat(issue, heartbeat, work) {
|
|
18
|
+
if (!heartbeat)
|
|
19
|
+
return work();
|
|
20
|
+
const timer = setInterval(() => {
|
|
21
|
+
heartbeat(issue).catch(() => { });
|
|
22
|
+
}, HEARTBEAT_INTERVAL_MS);
|
|
23
|
+
try {
|
|
24
|
+
return await work();
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
clearInterval(timer);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function renderLanePausedComment(payload) {
|
|
31
|
+
const checks = payload.failingChecks.length
|
|
32
|
+
? payload.failingChecks.map((c) => `\`${c}\``).join(', ')
|
|
33
|
+
: 'none recorded';
|
|
34
|
+
return [
|
|
35
|
+
`Lane '${payload.lane}' is paused: this issue and #${payload.firstIssue} parked with the same failure signature, so the factory stopped claiming issues on this lane.`,
|
|
36
|
+
`Shared failing checks: ${checks}`,
|
|
37
|
+
`To resume: fix the shared failure (often on the base branch), then re-run \`factory run\` to resume lane '${payload.lane}'.`,
|
|
38
|
+
`Failure signature: \`${payload.signature}\``,
|
|
39
|
+
].join('\n\n');
|
|
40
|
+
}
|
|
41
|
+
export async function runLane(lane, issues, repoRoot, ghRepo, paths, deps = {}) {
|
|
42
|
+
const { ship = shipIssue, waitMerge = waitForMerge, recordStackMerge = async () => { }, pathExists = existsSync, emitEvent = logEvent, claimNext = async () => null, releaseIssue = async () => { }, heartbeat, reapWorktree = async () => { }, sweepFinished = async () => { }, countRemaining, baseHoldGate, laneBreakerThreshold = 0, commentIssue = async () => { }, } = deps;
|
|
43
|
+
let streak = null;
|
|
44
|
+
let merged = 0;
|
|
45
|
+
let awaitingReview = 0;
|
|
46
|
+
let skipped = 0;
|
|
47
|
+
let decomposed = 0;
|
|
48
|
+
let parked = 0;
|
|
49
|
+
const buildClaim = (issue) => ({ issue, decision: { kind: 'build' } });
|
|
50
|
+
const pending = issues.map(buildClaim);
|
|
51
|
+
const seen = new Set(issues);
|
|
52
|
+
// Truthful park-time remaining count (#1222): local pending plus the lane's still-queued
|
|
53
|
+
// remote issues. Fail-closed — a count lookup may never change the message beyond the
|
|
54
|
+
// local truth, and never lane flow.
|
|
55
|
+
const remainingAfter = async (index) => {
|
|
56
|
+
const local = pending.length - index - 1;
|
|
57
|
+
if (!countRemaining)
|
|
58
|
+
return local;
|
|
59
|
+
try {
|
|
60
|
+
return local + (await countRemaining());
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return local;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
// Every terminal outcome releases the claim, then gives finished worktrees a GC pass before
|
|
67
|
+
// the lane moves on (#1757). The pass is fail-closed and must never change lane flow.
|
|
68
|
+
const settle = async (issue, outcome) => {
|
|
69
|
+
await releaseIssue(issue, outcome);
|
|
70
|
+
await sweepFinished(issue).catch(() => { });
|
|
71
|
+
};
|
|
72
|
+
for (let i = 0;; i++) {
|
|
73
|
+
if (i >= pending.length) {
|
|
74
|
+
// A persisted base hold on the unchanged origin/main SHA means the base is still broken
|
|
75
|
+
// (#2349): claiming would just cycle an issue again, so stop this lane without claiming.
|
|
76
|
+
const gate = baseHoldGate ? await baseHoldGate().catch(() => ({ kind: 'claim' })) : null;
|
|
77
|
+
if (gate?.kind === 'hold') {
|
|
78
|
+
emitEvent(paths.events, 'warn', lane, `lane '${lane}' not claiming: base hold on ${gate.hold.baseSha.slice(0, 8)} (${gate.hold.failingChecks.join(', ')}) — origin/main unchanged and its CI is not green`, { lane });
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const claimed = await claimNext();
|
|
82
|
+
if (claimed === null)
|
|
83
|
+
break;
|
|
84
|
+
seen.add(claimed.issue);
|
|
85
|
+
pending.push(claimed);
|
|
86
|
+
}
|
|
87
|
+
const { issue, decision } = pending[i];
|
|
88
|
+
if (pathExists(paths.stop)) {
|
|
89
|
+
emitEvent(paths.events, 'stopped', issue, 'STOP file present', { lane });
|
|
90
|
+
await releaseIssue(issue, 'queued');
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (decision.kind === 'park') {
|
|
94
|
+
emitEvent(paths.events, 'escalate', issue, decision.reason, { lane });
|
|
95
|
+
emitEvent(paths.events, 'parked', issue, `issue #${issue} parked (${decision.reason}); lane '${lane}' continuing, ${await remainingAfter(i)} issue(s) remaining`, { lane });
|
|
96
|
+
// A preflight-parked issue may still have a stale worktree from a prior run; the reap
|
|
97
|
+
// is fail-closed and must never change lane flow.
|
|
98
|
+
await reapWorktree(issue).catch(() => { });
|
|
99
|
+
await settle(issue, 'parked');
|
|
100
|
+
parked++;
|
|
101
|
+
streak = null;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const layer = decision.kind === 'adopt' ? decision.stackLayer : undefined;
|
|
105
|
+
try {
|
|
106
|
+
const sliceOutcome = {};
|
|
107
|
+
const branch = decision.kind === 'adopt'
|
|
108
|
+
? decision.branch
|
|
109
|
+
: await withHeartbeat(issue, heartbeat, () => ship(issue, {}, {
|
|
110
|
+
repoRoot,
|
|
111
|
+
ghRepo,
|
|
112
|
+
paths,
|
|
113
|
+
lane,
|
|
114
|
+
onOutcome: (o) => {
|
|
115
|
+
sliceOutcome.value = o;
|
|
116
|
+
},
|
|
117
|
+
}));
|
|
118
|
+
const shipped = sliceOutcome.value;
|
|
119
|
+
if (shipped?.state === 'ready' && shipped.slice && shipped.slice.index < shipped.slice.count) {
|
|
120
|
+
// ADR-0147: a non-final slice's PR is open; hand the issue back for the next slice
|
|
121
|
+
// instead of waiting for the merge.
|
|
122
|
+
awaitingReview++;
|
|
123
|
+
streak = null;
|
|
124
|
+
await settle(issue, 'queued');
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (layer) {
|
|
128
|
+
// ADR-0161: land exactly this layer's branch, record it, and re-queue for the next layer.
|
|
129
|
+
await withHeartbeat(issue, heartbeat, () => waitMerge(issue, branch, repoRoot, ghRepo, paths, { landBranch: branch }));
|
|
130
|
+
await recordStackMerge(issue, layer.prNumber).catch((err) => emitEvent(paths.events, 'warn', issue, `slice ${layer.index}/${layer.count} merged but recording it failed: ${shipRuntime().errorDetail(err)}`, { lane }));
|
|
131
|
+
merged++;
|
|
132
|
+
streak = null;
|
|
133
|
+
await settle(issue, layer.index < layer.count ? 'queued' : 'done');
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
await withHeartbeat(issue, heartbeat, () => waitMerge(issue, branch, repoRoot, ghRepo, paths));
|
|
137
|
+
merged++;
|
|
138
|
+
streak = null;
|
|
139
|
+
await settle(issue, 'done');
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
const { LaneParkError, LaneEnvironmentPauseError, IssueSkippedError, IssueDecomposedError } = shipRuntime();
|
|
143
|
+
if (err instanceof AwaitingReviewError) {
|
|
144
|
+
// The land path already emitted the awaiting-review event and cleaned the
|
|
145
|
+
// worktree — this is a clean outcome, not a park; move to the next issue.
|
|
146
|
+
awaitingReview++;
|
|
147
|
+
streak = null;
|
|
148
|
+
await settle(issue, layer && layer.index < layer.count ? 'queued' : 'done');
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (err instanceof IssueSkippedError) {
|
|
152
|
+
// shipIssue already emitted skipped-already-closed; nothing was attempted.
|
|
153
|
+
skipped++;
|
|
154
|
+
await settle(issue, 'done');
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
if (err instanceof IssueDecomposedError) {
|
|
158
|
+
// shipIssue already rewrote the queue — splice the children in after the
|
|
159
|
+
// current issue so this same lane run ships them, deduping ones already queued.
|
|
160
|
+
const fresh = err.childIssues.filter((n) => !seen.has(n));
|
|
161
|
+
for (const n of fresh)
|
|
162
|
+
seen.add(n);
|
|
163
|
+
pending.splice(i + 1, 0, ...fresh.map(buildClaim));
|
|
164
|
+
decomposed++;
|
|
165
|
+
emitEvent(paths.events, 'decompose_filed', issue, `lane '${lane}' continuing with ${fresh.length} child issue(s) in place of #${issue}`, { lane });
|
|
166
|
+
await settle(issue, 'done');
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
if (err instanceof LaneEnvironmentPauseError) {
|
|
170
|
+
// The base is broken, not the issue (#1928): release to queued (never parked),
|
|
171
|
+
// pause the lane whatever laneBreakerThreshold is, and stop claiming.
|
|
172
|
+
streak = null;
|
|
173
|
+
// A preserved build is kept for `factory resume --from check` (#2564).
|
|
174
|
+
if (!err.buildPreserved)
|
|
175
|
+
await reapWorktree(issue).catch(() => { });
|
|
176
|
+
await settle(issue, 'queued');
|
|
177
|
+
// Persist the hold so a restarted supervisor remembers the broken base (#2348);
|
|
178
|
+
// best-effort, never allowed to change lane flow.
|
|
179
|
+
try {
|
|
180
|
+
writeBaseHold(paths.baseHold, {
|
|
181
|
+
repo: ghRepo,
|
|
182
|
+
baseSha: err.baseSha,
|
|
183
|
+
failingChecks: err.failingChecks,
|
|
184
|
+
since: new Date().toISOString(),
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
catch { }
|
|
188
|
+
const payload = {
|
|
189
|
+
lane,
|
|
190
|
+
signature: err.failureSignature ?? '',
|
|
191
|
+
failingChecks: err.failingChecks,
|
|
192
|
+
firstIssue: issue,
|
|
193
|
+
secondIssue: issue,
|
|
194
|
+
cause: 'environment',
|
|
195
|
+
baseSha: err.baseSha,
|
|
196
|
+
};
|
|
197
|
+
emitEvent(paths.events, 'lane-paused', lane, `lane '${lane}' paused: #${issue} failed only on checkers that also fail on base ${err.baseSha.slice(0, 8)} (${err.failingChecks.join(', ')}); #${issue} released to queued`, { lane, lanePaused: payload });
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const reason = parkReasonFor(err);
|
|
201
|
+
// Terminal reason events (escalate/timeout/fail/conflict) are emitted exactly
|
|
202
|
+
// once by the layer that detects the failure — shipIssue for pipeline failures,
|
|
203
|
+
// the land path for merge failures. runLane owns only lane-lifecycle events
|
|
204
|
+
// (stopped/parked/lane-done), so injected ship functions never change ownership.
|
|
205
|
+
const signature = err instanceof LaneParkError ? err.failureSignature : undefined;
|
|
206
|
+
const checks = err instanceof LaneParkError ? (err.failingChecks ?? []) : [];
|
|
207
|
+
if (!signature)
|
|
208
|
+
streak = null;
|
|
209
|
+
else if (streak && streak.signature === signature)
|
|
210
|
+
streak.count++;
|
|
211
|
+
else
|
|
212
|
+
streak = { signature, firstIssue: issue, failingChecks: checks, count: 1 };
|
|
213
|
+
const tripped = laneBreakerThreshold > 0 && streak !== null && streak.count >= laneBreakerThreshold;
|
|
214
|
+
emitEvent(paths.events, 'parked', issue, `issue #${issue} parked (${reason}); ${tripped ? `lane '${lane}' paused (lane breaker)` : `lane '${lane}' continuing`}, ${await remainingAfter(i)} issue(s) remaining`, { lane });
|
|
215
|
+
// Remove the parked lane's own worktree so a parked issue stops leaving a sibling
|
|
216
|
+
// checkout behind (#1007); fail-closed and never allowed to change lane flow.
|
|
217
|
+
await reapWorktree(issue).catch(() => { });
|
|
218
|
+
await settle(issue, 'parked');
|
|
219
|
+
parked++;
|
|
220
|
+
if (tripped && streak) {
|
|
221
|
+
const { signature: tripSignature, firstIssue, failingChecks: firstChecks } = streak;
|
|
222
|
+
const payload = {
|
|
223
|
+
lane,
|
|
224
|
+
signature: tripSignature,
|
|
225
|
+
failingChecks: checks.filter((c) => firstChecks.includes(c)),
|
|
226
|
+
firstIssue,
|
|
227
|
+
secondIssue: issue,
|
|
228
|
+
};
|
|
229
|
+
emitEvent(paths.events, 'lane-paused', lane, `lane '${lane}' paused: #${payload.firstIssue} and #${payload.secondIssue} parked with the same failure signature (${payload.failingChecks.join(', ') || 'no failing checks'})`, { lane, lanePaused: payload });
|
|
230
|
+
// Tell the developer on GitHub why the lane stopped (#1919); fail-closed, never changes lane flow.
|
|
231
|
+
await commentIssue(payload.secondIssue, renderLanePausedComment(payload)).catch(() => { });
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
emitEvent(paths.events, 'lane-done', lane, `lane complete (${merged} merged, ${awaitingReview} awaiting review, ${skipped} skipped, ${decomposed} decomposed, ${parked} parked)`, { lane });
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=run-lane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-lane.js","sourceRoot":"","sources":["../../src/cli/run-lane.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Octokit } from '@octokit/rest';
|
|
2
|
+
import { getFactoryPaths } from '@on-par/factory-core';
|
|
3
|
+
import type { FactoryEvent, HealthKpis, KpiReconstruction, QueueDiagnostic } from '@on-par/factory-core';
|
|
4
|
+
import { type KeychainProbeStatus } from './doctor.js';
|
|
5
|
+
import type { CliDeps, CliExitError, createQueuePreflightOps, planRunLanes, preflightQueuedIssue, reapParkedLaneWorktree, resolveUsageKnobs, startLaneProxy, sweepBetweenLaneIssues, usageWatchSourceLabel, withRepoRunLock } from './index.js';
|
|
6
|
+
export interface RunOptions {
|
|
7
|
+
localQueue?: boolean;
|
|
8
|
+
autoMerge?: boolean;
|
|
9
|
+
prClassifier?: boolean;
|
|
10
|
+
usageWatch?: boolean;
|
|
11
|
+
usageThreshold?: string;
|
|
12
|
+
usagePoll?: string;
|
|
13
|
+
branchPrefix?: string;
|
|
14
|
+
}
|
|
15
|
+
/** index.ts's helpers for `factory run`, built at call time so main() deps injection reaches the handler. */
|
|
16
|
+
export interface RunRuntime {
|
|
17
|
+
configLoaders: Required<Pick<CliDeps, 'loadFactoryConfigForRepo' | 'loadRepoConfig' | 'loadModelsConfig' | 'resolveEffectiveModelPins'>>;
|
|
18
|
+
coreOps: Required<Pick<CliDeps, 'ModelRegistry' | 'watchUsage'>>;
|
|
19
|
+
shellOps: Required<Pick<CliDeps, 'exec'>>;
|
|
20
|
+
readCosts: Required<CliDeps>['readCosts'];
|
|
21
|
+
getRepoRoot: () => Promise<string>;
|
|
22
|
+
getGitHubRepo: () => Promise<string>;
|
|
23
|
+
getOctokit: () => Octokit;
|
|
24
|
+
branchPrefixOrExit: (raw: string | undefined) => string;
|
|
25
|
+
withRepoRunLock: typeof withRepoRunLock;
|
|
26
|
+
runAutoWorktreeGc: (repoRoot: string, paths: ReturnType<typeof getFactoryPaths>, ghRepo: string, eventScope: string | number) => Promise<void>;
|
|
27
|
+
planRunLanes: typeof planRunLanes;
|
|
28
|
+
preflightQueuedIssue: typeof preflightQueuedIssue;
|
|
29
|
+
createQueuePreflightOps: typeof createQueuePreflightOps;
|
|
30
|
+
warnQueueDiagnostics: (diagnostics: QueueDiagnostic[]) => void;
|
|
31
|
+
resolveUsageKnobs: typeof resolveUsageKnobs;
|
|
32
|
+
usageFlagOverrides: (opts: {
|
|
33
|
+
usageWatch?: boolean;
|
|
34
|
+
usageThreshold?: string;
|
|
35
|
+
usagePoll?: string;
|
|
36
|
+
}, threshold: 'stopAt' | 'resumeAt') => Parameters<typeof resolveUsageKnobs>[2];
|
|
37
|
+
usageWatchSourceLabel: typeof usageWatchSourceLabel;
|
|
38
|
+
probeClaudeKeychain: () => KeychainProbeStatus;
|
|
39
|
+
startLaneProxy: typeof startLaneProxy;
|
|
40
|
+
sweepBetweenLaneIssues: typeof sweepBetweenLaneIssues;
|
|
41
|
+
reapParkedLaneWorktree: typeof reapParkedLaneWorktree;
|
|
42
|
+
reconstructHumanEventsForKpis: (events: FactoryEvent[], branchPrefix: string) => Promise<KpiReconstruction & {
|
|
43
|
+
owner: string;
|
|
44
|
+
repoName: string;
|
|
45
|
+
}>;
|
|
46
|
+
appendKpiSnapshot: (paths: ReturnType<typeof getFactoryPaths>, repoRoot: string, kpis: HealthKpis, opts?: {
|
|
47
|
+
partial?: boolean;
|
|
48
|
+
}) => Promise<unknown>;
|
|
49
|
+
CliExitError: typeof CliExitError;
|
|
50
|
+
}
|
|
51
|
+
export declare function cmdRun(opts: RunOptions, rt: RunRuntime): Promise<void>;
|
|
52
|
+
//# sourceMappingURL=run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/run.js
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
// packages/cli/src/cli/run.ts — the factory run handler, moved out of index.ts (#2800)
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
4
|
+
import { styleText } from 'node:util';
|
|
5
|
+
import { applyRepoConfig, clearProxyState, computeHealthKpis, getFactoryPaths, provisionLaneContainer, readEvents, resolveCodexDisabled, resolveEffectiveBuildRoute, resolveEnvironmentProxy, resolveLaneBreakerThreshold, resolveMergePolicy, resolveSizeGateMode, } from '@on-par/factory-core';
|
|
6
|
+
import { createDockerEngine, createGithubQueue, createOctokitGreenPrClient, createOctokitQueueClient, logEvent, recordSliceMerged, resolveLocalOnly, resolveRunUsageHarness, slugify, withAdmissionGuard, } from '@on-par/factory-core/internal';
|
|
7
|
+
import { admissionStateReaderFor } from './admission.js';
|
|
8
|
+
import { createBaseHoldGate, formatBaseHoldCleared } from './base-hold.js';
|
|
9
|
+
import { keychainPreflightError } from './doctor.js';
|
|
10
|
+
import { waitForMerge } from './land.js';
|
|
11
|
+
import { runLane } from './run-lane.js';
|
|
12
|
+
import { writeRunFlagOverrides } from './run-flags.js';
|
|
13
|
+
import { shipIssue } from './ship.js';
|
|
14
|
+
import { readStopFileStatus, stopSentinelRunSkipMessage } from './stop-sentinel.js';
|
|
15
|
+
export async function cmdRun(opts, rt) {
|
|
16
|
+
const repoRoot = await rt.getRepoRoot();
|
|
17
|
+
const paths = getFactoryPaths(repoRoot);
|
|
18
|
+
const branchPrefix = rt.branchPrefixOrExit(opts.branchPrefix);
|
|
19
|
+
return rt.withRepoRunLock(paths, 'factory run', async () => {
|
|
20
|
+
const stopStatus = readStopFileStatus(paths);
|
|
21
|
+
if (stopStatus.present) {
|
|
22
|
+
const msg = stopSentinelRunSkipMessage(stopStatus);
|
|
23
|
+
console.log(styleText('yellow', `!! ${msg}`));
|
|
24
|
+
logEvent(paths.events, 'stopped', 'all', msg);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
writeRunFlagOverrides(paths.runFlags, { autoMerge: opts.autoMerge, prClassifier: opts.prClassifier });
|
|
28
|
+
const ghRepo = await rt.getGitHubRepo();
|
|
29
|
+
const factoryConfig = rt.configLoaders.loadFactoryConfigForRepo(paths.config);
|
|
30
|
+
const keychainErr = keychainPreflightError(rt.probeClaudeKeychain());
|
|
31
|
+
if (keychainErr) {
|
|
32
|
+
logEvent(paths.events, 'environment_warning', 'all', keychainErr);
|
|
33
|
+
throw new Error(keychainErr);
|
|
34
|
+
}
|
|
35
|
+
await rt.runAutoWorktreeGc(repoRoot, paths, ghRepo, 'all');
|
|
36
|
+
const { lanes, diagnostics } = await rt.planRunLanes({
|
|
37
|
+
localQueue: opts.localQueue === true,
|
|
38
|
+
readLocalQueue: () => (existsSync(paths.queue) ? readFileSync(paths.queue, 'utf-8') : null),
|
|
39
|
+
queue: () => {
|
|
40
|
+
const [owner, repo] = ghRepo.split('/');
|
|
41
|
+
const octokit = rt.getOctokit();
|
|
42
|
+
return createGithubQueue({
|
|
43
|
+
client: createOctokitQueueClient(octokit),
|
|
44
|
+
owner,
|
|
45
|
+
repo,
|
|
46
|
+
preflight: withAdmissionGuard({
|
|
47
|
+
reader: admissionStateReaderFor(paths.state),
|
|
48
|
+
preflight: (issue) => rt.preflightQueuedIssue(issue, rt.createQueuePreflightOps(octokit, owner, repo, {
|
|
49
|
+
autoMergeStack: resolveSizeGateMode(factoryConfig) === 'stack' &&
|
|
50
|
+
resolveMergePolicy(factoryConfig, process.env, { auto: opts.autoMerge }).auto,
|
|
51
|
+
})),
|
|
52
|
+
onConflict: (issue, verdict) => {
|
|
53
|
+
const line = `#${issue} refused — ${verdict.reason} | repair: ${verdict.repair}`;
|
|
54
|
+
console.error(styleText('yellow', `factory: ${line}`));
|
|
55
|
+
logEvent(paths.events, 'queue_admission_conflict', String(issue), line);
|
|
56
|
+
},
|
|
57
|
+
}),
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
rt.warnQueueDiagnostics(diagnostics);
|
|
62
|
+
let knobs;
|
|
63
|
+
let laneBreakerThreshold;
|
|
64
|
+
try {
|
|
65
|
+
knobs = rt.resolveUsageKnobs(process.env, rt.configLoaders.loadRepoConfig(repoRoot), rt.usageFlagOverrides(opts, 'stopAt'));
|
|
66
|
+
laneBreakerThreshold = resolveLaneBreakerThreshold(rt.configLoaders.loadRepoConfig(repoRoot));
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
throw new rt.CliExitError(`factory: ${err.message}`, 2);
|
|
70
|
+
}
|
|
71
|
+
if (knobs.watchSource === 'flag') {
|
|
72
|
+
const detail = `usage watchdog ${knobs.watch ? 'enabled' : 'disabled'} by ${rt.usageWatchSourceLabel(knobs.watchSource, knobs.watch)}`;
|
|
73
|
+
console.log(`[factory] run: ${detail}`);
|
|
74
|
+
logEvent(paths.events, 'watchdog', 'all', detail);
|
|
75
|
+
}
|
|
76
|
+
if (knobs.stopAtSource === 'flag') {
|
|
77
|
+
const detail = 'usage watchdog threshold set by flag: --usage-threshold';
|
|
78
|
+
console.log(`[factory] run: ${detail}`);
|
|
79
|
+
logEvent(paths.events, 'watchdog', 'all', detail);
|
|
80
|
+
}
|
|
81
|
+
if (knobs.pollSource === 'flag') {
|
|
82
|
+
const detail = 'usage watchdog poll set by flag: --usage-poll';
|
|
83
|
+
console.log(`[factory] run: ${detail}`);
|
|
84
|
+
logEvent(paths.events, 'watchdog', 'all', detail);
|
|
85
|
+
}
|
|
86
|
+
let watchdogHarness;
|
|
87
|
+
if (knobs.watch) {
|
|
88
|
+
try {
|
|
89
|
+
const repoConfig = rt.configLoaders.loadRepoConfig(repoRoot);
|
|
90
|
+
const registry = new rt.coreOps.ModelRegistry(applyRepoConfig(rt.configLoaders.loadModelsConfig(), repoConfig));
|
|
91
|
+
const pins = rt.configLoaders.resolveEffectiveModelPins(registry, repoConfig, process.env);
|
|
92
|
+
const build = resolveEffectiveBuildRoute(registry, repoConfig, pins);
|
|
93
|
+
watchdogHarness = resolveRunUsageHarness({
|
|
94
|
+
buildRoute: build.route,
|
|
95
|
+
buildRouteSource: build.source,
|
|
96
|
+
planHarnesses: [pins.plan, pins.planFallback]
|
|
97
|
+
.filter((m) => !!m)
|
|
98
|
+
.map((m) => registry.getHarnessId(m)),
|
|
99
|
+
codexDisabled: resolveCodexDisabled(repoConfig),
|
|
100
|
+
localOnly: resolveLocalOnly(),
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
watchdogHarness = undefined; // unresolvable config keeps today's Claude gating
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const controller = new AbortController();
|
|
108
|
+
const watchdog = knobs.watch
|
|
109
|
+
? rt.coreOps
|
|
110
|
+
.watchUsage({
|
|
111
|
+
cap: knobs.cap,
|
|
112
|
+
stopAt: knobs.stopAt,
|
|
113
|
+
pollMs: knobs.pollMs,
|
|
114
|
+
stopFile: paths.stop,
|
|
115
|
+
eventsFile: paths.events,
|
|
116
|
+
signal: controller.signal,
|
|
117
|
+
estimator: knobs.estimator,
|
|
118
|
+
...(watchdogHarness ? { harness: watchdogHarness } : {}),
|
|
119
|
+
})
|
|
120
|
+
.catch((err) => {
|
|
121
|
+
// a watchdog crash must never take down the run
|
|
122
|
+
logEvent(paths.events, 'warn', '-', `usage watchdog crashed: ${err.message}`);
|
|
123
|
+
})
|
|
124
|
+
: Promise.resolve();
|
|
125
|
+
const { proxy } = await rt.startLaneProxy(paths, resolveEnvironmentProxy(factoryConfig));
|
|
126
|
+
const workspaceBackend = factoryConfig.workspace?.backend ?? 'host';
|
|
127
|
+
const runId = randomUUID();
|
|
128
|
+
const containerEngine = workspaceBackend === 'disposable-docker' ? createDockerEngine({}) : undefined;
|
|
129
|
+
try {
|
|
130
|
+
// Run lanes in parallel
|
|
131
|
+
const pids = [];
|
|
132
|
+
for (const planned of lanes) {
|
|
133
|
+
logEvent(paths.events, 'lane-start', '-', `lane '${planned.lane}' started${planned.issues.length ? ` (${planned.issues.length} issues)` : ''}`, { lane: planned.lane });
|
|
134
|
+
if (containerEngine) {
|
|
135
|
+
const provision = await provisionLaneContainer(containerEngine, workspaceBackend, runId, slugify(planned.lane), ghRepo);
|
|
136
|
+
if (provision.attempted && !provision.created) {
|
|
137
|
+
logEvent(paths.events, 'warn', '-', `disposable-docker container creation failed for lane '${planned.lane}': ${provision.error}`, { lane: planned.lane });
|
|
138
|
+
}
|
|
139
|
+
else if (provision.attempted && provision.created && provision.workspaceCloned === false) {
|
|
140
|
+
logEvent(paths.events, 'warn', '-', `disposable-docker workspace clone failed for lane '${planned.lane}': ${provision.workspaceError}`, { lane: planned.lane });
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
pids.push(runLane(planned.lane, planned.issues, repoRoot, ghRepo, paths, {
|
|
144
|
+
...planned.deps,
|
|
145
|
+
laneBreakerThreshold,
|
|
146
|
+
baseHoldGate: opts.localQueue === true
|
|
147
|
+
? undefined
|
|
148
|
+
: createBaseHoldGate({
|
|
149
|
+
file: paths.baseHold,
|
|
150
|
+
repo: ghRepo,
|
|
151
|
+
onCleared: (c) => logEvent(paths.events, 'base-hold-cleared', planned.lane, formatBaseHoldCleared(c), {
|
|
152
|
+
lane: planned.lane,
|
|
153
|
+
}),
|
|
154
|
+
git: (cmd) => rt.shellOps.exec(cmd, { cwd: repoRoot }).then((r) => r.stdout),
|
|
155
|
+
listCheckRuns: (ref) => {
|
|
156
|
+
const [owner, repoName] = ghRepo.split('/');
|
|
157
|
+
return createOctokitGreenPrClient(rt.getOctokit()).listCheckRuns({ owner, repo: repoName, ref });
|
|
158
|
+
},
|
|
159
|
+
}),
|
|
160
|
+
commentIssue: async (issue, body) => {
|
|
161
|
+
const [owner, repoName] = ghRepo.split('/');
|
|
162
|
+
await rt.getOctokit().rest.issues.createComment({ owner, repo: repoName, issue_number: issue, body });
|
|
163
|
+
},
|
|
164
|
+
ship: (issue, o, c) => shipIssue(issue, { ...o, branchPrefix, prClassifier: opts.prClassifier }, c),
|
|
165
|
+
sweepFinished: (issue) => rt.sweepBetweenLaneIssues(issue, planned.lane, repoRoot, ghRepo, paths).then(() => { }),
|
|
166
|
+
reapWorktree: (issue) => rt.reapParkedLaneWorktree(issue, repoRoot, ghRepo, paths, opts.branchPrefix === undefined ? undefined : branchPrefix),
|
|
167
|
+
recordStackMerge: (issue, prNumber) => recordSliceMerged({ octokit: rt.getOctokit(), repo: ghRepo, issue, prNumber }).then(() => { }),
|
|
168
|
+
waitMerge: (issue, branch, root, gh, p, d = {}) => waitForMerge(issue, branch, root, gh, p, { ...d, mergeOverrides: { auto: opts.autoMerge } }),
|
|
169
|
+
}));
|
|
170
|
+
}
|
|
171
|
+
await Promise.allSettled(pids);
|
|
172
|
+
controller.abort();
|
|
173
|
+
await watchdog;
|
|
174
|
+
logEvent(paths.events, 'run-done', 'all', 'all lanes finished');
|
|
175
|
+
}
|
|
176
|
+
finally {
|
|
177
|
+
if (proxy) {
|
|
178
|
+
await proxy.stop();
|
|
179
|
+
clearProxyState(paths.proxyState);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (lanes.length > 0) {
|
|
183
|
+
try {
|
|
184
|
+
const events = existsSync(paths.events) ? readEvents(paths.events) : [];
|
|
185
|
+
const costs = existsSync(paths.costs) ? rt.readCosts(paths.costs) : [];
|
|
186
|
+
const recon = await rt.reconstructHumanEventsForKpis(events, branchPrefix);
|
|
187
|
+
const kpis = computeHealthKpis(recon.events, costs);
|
|
188
|
+
await rt.appendKpiSnapshot(paths, repoRoot, kpis, { partial: recon.partial });
|
|
189
|
+
if (recon.partial) {
|
|
190
|
+
logEvent(paths.events, 'warn', 'all', `kpi snapshot partial: GitHub human-event reconstruction failed: ${recon.error}`);
|
|
191
|
+
}
|
|
192
|
+
logEvent(paths.events, 'kpi-snapshot', 'all', `KPI snapshot appended to ${paths.kpiHistory}`);
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
logEvent(paths.events, 'warn', 'all', `kpi snapshot failed: ${err.message}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/ship.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ship.d.ts","sourceRoot":"","sources":["../../src/cli/ship.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"ship.d.ts","sourceRoot":"","sources":["../../src/cli/ship.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAQV,eAAe,EAEf,UAAU,EAIV,WAAW,EACX,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAML,eAAe,EAiBf,KAAK,YAAY,EAKlB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,iBAAiB,EAA2C,MAAM,+BAA+B,CAAC;AAkBhH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAe5F,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wFAAwF;IACxF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,EACD,GAAG,CAAC,EAAE;IACJ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;yEACqE;IACrE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,mGAAmG;IACnG,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,qBAAqB,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9D;0EACsE;IACtE,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC,EACD,IAAI,GAAE,IAAI,CACR,OAAO,EACL,SAAS,GACT,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,WAAW,GACX,iBAAiB,GACjB,eAAe,GACf,QAAQ,GACR,UAAU,GACV,SAAS,CACP,GACL,OAAO,CAAC,MAAM,CAAC,CA+VjB"}
|