@farmslot/protocol 0.53.0 → 0.55.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 +25 -2
- package/dist/client-cache/index.d.ts +11 -0
- package/dist/client-cache/index.d.ts.map +1 -0
- package/dist/client-cache/index.js +2 -0
- package/dist/client-cache/index.js.map +1 -0
- package/dist/contracts/acceptance.d.ts +10 -0
- package/dist/contracts/acceptance.d.ts.map +1 -1
- package/dist/contracts/acceptance.js +2 -0
- package/dist/contracts/acceptance.js.map +1 -1
- package/dist/contracts/agents.d.ts +1 -1
- package/dist/contracts/agents.d.ts.map +1 -1
- package/dist/contracts/assessment.d.ts +2 -0
- package/dist/contracts/assessment.d.ts.map +1 -1
- package/dist/contracts/dispatch.d.ts +5 -0
- package/dist/contracts/dispatch.d.ts.map +1 -1
- package/dist/contracts/family.d.ts +2 -0
- package/dist/contracts/family.d.ts.map +1 -1
- package/dist/contracts/family.js.map +1 -1
- package/dist/contracts/pr-monitoring.d.ts +3 -0
- package/dist/contracts/pr-monitoring.d.ts.map +1 -1
- package/dist/contracts/pr-rules.d.ts +6 -0
- package/dist/contracts/pr-rules.d.ts.map +1 -1
- package/dist/contracts/review-publication.d.ts +2 -0
- package/dist/contracts/review-publication.d.ts.map +1 -1
- package/dist/contracts/review-publication.js.map +1 -1
- package/dist/contracts/runs.d.ts +118 -21
- package/dist/contracts/runs.d.ts.map +1 -1
- package/dist/contracts/runs.js +32 -0
- package/dist/contracts/runs.js.map +1 -1
- package/dist/contracts/slots.d.ts +7 -0
- package/dist/contracts/slots.d.ts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/node/farm-layout.d.ts +26 -0
- package/dist/node/farm-layout.d.ts.map +1 -0
- package/dist/node/farm-layout.js +62 -0
- package/dist/node/farm-layout.js.map +1 -0
- package/dist/recipe/claim-reviews.d.ts +2 -0
- package/dist/recipe/claim-reviews.d.ts.map +1 -1
- package/dist/recipe/claim-reviews.js +13 -1
- package/dist/recipe/claim-reviews.js.map +1 -1
- package/dist/recipe/evidence.d.ts +7 -0
- package/dist/recipe/evidence.d.ts.map +1 -1
- package/dist/recipe/evidence.js.map +1 -1
- package/dist/recipe/index.d.ts +1 -0
- package/dist/recipe/index.d.ts.map +1 -1
- package/dist/recipe/index.js +1 -0
- package/dist/recipe/index.js.map +1 -1
- package/dist/recipe/pipeline-visual-judgments.d.ts +179 -5
- package/dist/recipe/pipeline-visual-judgments.d.ts.map +1 -1
- package/dist/recipe/pipeline-visual-judgments.js +64 -4
- package/dist/recipe/pipeline-visual-judgments.js.map +1 -1
- package/dist/recipe/repair.d.ts +93 -0
- package/dist/recipe/repair.d.ts.map +1 -0
- package/dist/recipe/repair.js +213 -0
- package/dist/recipe/repair.js.map +1 -0
- package/dist/runs/decision-resolution.d.ts.map +1 -1
- package/dist/runs/decision-resolution.js +4 -0
- package/dist/runs/decision-resolution.js.map +1 -1
- package/dist/runs/evidence-summary.d.ts +24 -2
- package/dist/runs/evidence-summary.d.ts.map +1 -1
- package/dist/runs/evidence-summary.js +143 -53
- package/dist/runs/evidence-summary.js.map +1 -1
- package/dist/runs/family-readiness.d.ts.map +1 -1
- package/dist/runs/family-readiness.js +6 -8
- package/dist/runs/family-readiness.js.map +1 -1
- package/dist/runs/portable-bundle.d.ts +1 -1
- package/dist/runs/portable-bundle.d.ts.map +1 -1
- package/dist/runs/portable-bundle.js +2 -2
- package/dist/runs/portable-bundle.js.map +1 -1
- package/dist/runs/run-family-groups.d.ts +21 -0
- package/dist/runs/run-family-groups.d.ts.map +1 -0
- package/dist/runs/run-family-groups.js +71 -0
- package/dist/runs/run-family-groups.js.map +1 -0
- package/dist/runs/run-list-view.d.ts +23 -0
- package/dist/runs/run-list-view.d.ts.map +1 -0
- package/dist/runs/run-list-view.js +52 -0
- package/dist/runs/run-list-view.js.map +1 -0
- package/dist/sources/changes.d.ts +37 -0
- package/dist/sources/changes.d.ts.map +1 -0
- package/dist/sources/changes.js +79 -0
- package/dist/sources/changes.js.map +1 -0
- package/dist/sources/controller.d.ts +20 -0
- package/dist/sources/controller.d.ts.map +1 -1
- package/dist/sources/controller.js +64 -1
- package/dist/sources/controller.js.map +1 -1
- package/dist/sources/status-view.d.ts +6 -1
- package/dist/sources/status-view.d.ts.map +1 -1
- package/dist/sources/status-view.js +27 -10
- package/dist/sources/status-view.js.map +1 -1
- package/dist/transport/events.d.ts +16 -0
- package/dist/transport/events.d.ts.map +1 -1
- package/dist/transport/events.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +11 -1
- package/scripts/acceptance.d.mts +4 -0
- package/scripts/acceptance.mjs +13 -1
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { isActiveListRun } from '../contracts/runs.js';
|
|
2
|
+
import { buildFamilySummary } from './family-readiness.js';
|
|
3
|
+
function isFamilyRoot(run) {
|
|
4
|
+
return run.id === run.familyId || run.parentRunId == null;
|
|
5
|
+
}
|
|
6
|
+
function sortByCreatedAtDesc(runs) {
|
|
7
|
+
return [...runs].sort((left, right) => right.createdAt.localeCompare(left.createdAt));
|
|
8
|
+
}
|
|
9
|
+
export function sortRunsForFamilyView(runs) {
|
|
10
|
+
return [...runs].sort((left, right) => {
|
|
11
|
+
if (isFamilyRoot(left) !== isFamilyRoot(right))
|
|
12
|
+
return isFamilyRoot(left) ? -1 : 1;
|
|
13
|
+
if ((left.variant ?? null) !== (right.variant ?? null)) {
|
|
14
|
+
return (left.variant ?? '').localeCompare(right.variant ?? '');
|
|
15
|
+
}
|
|
16
|
+
return right.createdAt.localeCompare(left.createdAt);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/** Runs grouped by project and family, newest family first; Command Center and Companion share it. */
|
|
20
|
+
export function groupRunsByFamily(runs) {
|
|
21
|
+
const grouped = new Map();
|
|
22
|
+
for (const run of runs) {
|
|
23
|
+
const familyId = run.familyId || run.id;
|
|
24
|
+
const key = `${run.project}::${familyId}`;
|
|
25
|
+
const current = grouped.get(key);
|
|
26
|
+
if (current)
|
|
27
|
+
current.runs.push(run);
|
|
28
|
+
else
|
|
29
|
+
grouped.set(key, { familyId, project: run.project, runs: [run] });
|
|
30
|
+
}
|
|
31
|
+
return [...grouped.values()]
|
|
32
|
+
.map(({ familyId, project, runs: familyRuns }) => {
|
|
33
|
+
const orderedRuns = sortRunsForFamilyView(familyRuns);
|
|
34
|
+
const rootRun = orderedRuns.find(isFamilyRoot) ?? null;
|
|
35
|
+
const newestByCreatedAt = sortByCreatedAtDesc(orderedRuns)[0];
|
|
36
|
+
const representativeRun = rootRun ?? newestByCreatedAt;
|
|
37
|
+
const latestCreatedAt = orderedRuns.reduce((latest, run) => (run.createdAt > latest ? run.createdAt : latest), orderedRuns[0]?.createdAt ?? '');
|
|
38
|
+
const variants = [
|
|
39
|
+
...new Set(orderedRuns
|
|
40
|
+
.map((run) => run.variant)
|
|
41
|
+
.filter((variant) => Boolean(variant))),
|
|
42
|
+
];
|
|
43
|
+
const retrospectiveDecisions = orderedRuns.flatMap((run) => (run.decisions ?? []).filter((decision) => decision.type === 'retrospective'));
|
|
44
|
+
return {
|
|
45
|
+
familyId,
|
|
46
|
+
project,
|
|
47
|
+
familyRootTicketOrPr: rootRun?.familyRootTicketOrPr ??
|
|
48
|
+
representativeRun?.familyRootTicketOrPr ??
|
|
49
|
+
representativeRun?.ticketOrPr ??
|
|
50
|
+
familyId,
|
|
51
|
+
rootRun,
|
|
52
|
+
representativeRun,
|
|
53
|
+
familySummary: buildFamilySummary(rootRun, newestByCreatedAt, orderedRuns),
|
|
54
|
+
runs: orderedRuns,
|
|
55
|
+
latestCreatedAt,
|
|
56
|
+
activeCount: orderedRuns.filter(isActiveListRun).length,
|
|
57
|
+
comparisonCount: orderedRuns.filter((run) => run.lane === 'comparison').length,
|
|
58
|
+
retrospectiveCount: retrospectiveDecisions.length,
|
|
59
|
+
pendingRetrospectiveCount: retrospectiveDecisions.filter((decision) => !decision.resolvedAt)
|
|
60
|
+
.length,
|
|
61
|
+
variants,
|
|
62
|
+
};
|
|
63
|
+
})
|
|
64
|
+
.sort((left, right) => right.latestCreatedAt.localeCompare(left.latestCreatedAt));
|
|
65
|
+
}
|
|
66
|
+
export function selectRecentRunFamilyGroups(runs, limit) {
|
|
67
|
+
if (limit <= 0)
|
|
68
|
+
return [];
|
|
69
|
+
return groupRunsByFamily(runs).slice(0, limit);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=run-family-groups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-family-groups.js","sourceRoot":"","sources":["../../src/runs/run-family-groups.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type FlowType, type Run, type RunLane, type RunStatus } from '../contracts/runs.js';
|
|
2
|
+
import type { SlotStatus } from '../contracts/slots.js';
|
|
3
|
+
/** `active` follows `isActiveListRun`, `history` keeps terminal runs, `all` keeps every run. */
|
|
4
|
+
export type RunListScope = 'active' | 'history' | 'all';
|
|
5
|
+
export interface RunListQuery {
|
|
6
|
+
scope: RunListScope;
|
|
7
|
+
projects?: readonly string[];
|
|
8
|
+
machines?: readonly string[];
|
|
9
|
+
/** Fleet slot to machine. A slot missing here matches a machine by its `<machine>-` prefix. */
|
|
10
|
+
slotMachines?: ReadonlyMap<string, string>;
|
|
11
|
+
status?: RunStatus;
|
|
12
|
+
flow?: FlowType;
|
|
13
|
+
lane?: RunLane;
|
|
14
|
+
tag?: string;
|
|
15
|
+
search?: string;
|
|
16
|
+
}
|
|
17
|
+
/** The runs a run list shows, in input order. Command Center and Companion both list through this. */
|
|
18
|
+
export declare function selectRunList(runs: readonly Run[], query: RunListQuery): Run[];
|
|
19
|
+
/** The `slotMachines` map for a fleet snapshot. */
|
|
20
|
+
export declare function slotMachineMap(slots: readonly Pick<SlotStatus, 'slot' | 'machine'>[]): Map<string, string>;
|
|
21
|
+
/** Incoming runs replace stored runs with the same id; newest first. */
|
|
22
|
+
export declare function mergeRunsById(existing: readonly Run[], incoming: readonly Run[]): Run[];
|
|
23
|
+
//# sourceMappingURL=run-list-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-list-view.d.ts","sourceRoot":"","sources":["../../src/runs/run-list-view.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EAIb,KAAK,GAAG,EACR,KAAK,OAAO,EACZ,KAAK,SAAS,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAIxD,gGAAgG;AAChG,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,+FAA+F;IAC/F,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,sGAAsG;AACtG,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,GAAG,EAAE,CAc9E;AAED,mDAAmD;AACnD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,GACrD,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAErB;AAED,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,CAIvF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { isActiveListRun, isTerminalRunStatus, normalizeRunTags, } from '../contracts/runs.js';
|
|
2
|
+
import { resolveRunSlotId } from './slot-resolution.js';
|
|
3
|
+
/** The runs a run list shows, in input order. Command Center and Companion both list through this. */
|
|
4
|
+
export function selectRunList(runs, query) {
|
|
5
|
+
const [tag] = normalizeRunTags(query.tag ? [query.tag] : []);
|
|
6
|
+
const search = query.search?.trim().toLowerCase();
|
|
7
|
+
return runs.filter((run) => inScope(run, query.scope) &&
|
|
8
|
+
(!query.projects?.length || query.projects.includes(run.project)) &&
|
|
9
|
+
(!query.machines?.length || onMachines(run, query.machines, query.slotMachines)) &&
|
|
10
|
+
(!query.status || run.status === query.status) &&
|
|
11
|
+
(!query.flow || run.flowType === query.flow) &&
|
|
12
|
+
(!query.lane || run.lane === query.lane) &&
|
|
13
|
+
(!tag || normalizeRunTags(run.tags).includes(tag)) &&
|
|
14
|
+
(!search || matchesSearch(run, search)));
|
|
15
|
+
}
|
|
16
|
+
/** The `slotMachines` map for a fleet snapshot. */
|
|
17
|
+
export function slotMachineMap(slots) {
|
|
18
|
+
return new Map(slots.map((slot) => [slot.slot, slot.machine]));
|
|
19
|
+
}
|
|
20
|
+
/** Incoming runs replace stored runs with the same id; newest first. */
|
|
21
|
+
export function mergeRunsById(existing, incoming) {
|
|
22
|
+
const byId = new Map(existing.map((run) => [run.id, run]));
|
|
23
|
+
for (const run of incoming)
|
|
24
|
+
byId.set(run.id, run);
|
|
25
|
+
return [...byId.values()].sort((left, right) => right.createdAt.localeCompare(left.createdAt));
|
|
26
|
+
}
|
|
27
|
+
function inScope(run, scope) {
|
|
28
|
+
if (scope === 'active')
|
|
29
|
+
return isActiveListRun(run);
|
|
30
|
+
if (scope === 'history')
|
|
31
|
+
return isTerminalRunStatus(run.status);
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
function onMachines(run, machines, slotMachines) {
|
|
35
|
+
const slotId = resolveRunSlotId(run);
|
|
36
|
+
if (!slotId)
|
|
37
|
+
return false;
|
|
38
|
+
const machine = slotMachines?.get(slotId);
|
|
39
|
+
if (machine)
|
|
40
|
+
return machines.includes(machine);
|
|
41
|
+
return machines.some((name) => slotId === name || slotId.startsWith(`${name}-`));
|
|
42
|
+
}
|
|
43
|
+
function matchesSearch(run, search) {
|
|
44
|
+
return [
|
|
45
|
+
run.ticketOrPr,
|
|
46
|
+
run.summary,
|
|
47
|
+
resolveRunSlotId(run),
|
|
48
|
+
run.metrics.disposition?.replace(/_/g, ' '),
|
|
49
|
+
...(run.tags ?? []),
|
|
50
|
+
].some((value) => value?.toLowerCase().includes(search));
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=run-list-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-list-view.js","sourceRoot":"","sources":["../../src/runs/run-list-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EACf,mBAAmB,EACnB,gBAAgB,GAIjB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAkBxD,sGAAsG;AACtG,MAAM,UAAU,aAAa,CAAC,IAAoB,EAAE,KAAmB;IACrE,MAAM,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClD,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,GAAG,EAAE,EAAE,CACN,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC;QACzB,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAChF,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC;QAC9C,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,CAAC,IAAI,CAAC;QAC5C,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;QACxC,CAAC,CAAC,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC,CAAC,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAC1C,CAAC;AACJ,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,cAAc,CAC5B,KAAsD;IAEtD,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,aAAa,CAAC,QAAwB,EAAE,QAAwB;IAC9E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3D,KAAK,MAAM,GAAG,IAAI,QAAQ;QAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,OAAO,CAAC,GAAQ,EAAE,KAAmB;IAC5C,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IACpD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CACjB,GAAQ,EACR,QAA2B,EAC3B,YAAqD;IAErD,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,MAAM,OAAO,GAAG,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,OAAO;QAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,aAAa,CAAC,GAAQ,EAAE,MAAc;IAC7C,OAAO;QACL,GAAG,CAAC,UAAU;QACd,GAAG,CAAC,OAAO;QACX,gBAAgB,CAAC,GAAG,CAAC;QACrB,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;QAC3C,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;KACpB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type ResourceChangedPayload } from '../transport/events.js';
|
|
2
|
+
/** The source revision a controller compares; revisions never compare across epochs. */
|
|
3
|
+
export interface SourceRevisionMark {
|
|
4
|
+
epoch: string;
|
|
5
|
+
revision: number;
|
|
6
|
+
}
|
|
7
|
+
/** The one carrier decoder. */
|
|
8
|
+
export declare function sourceResourceChanges(event: string, payload: unknown): ResourceChangedPayload | undefined;
|
|
9
|
+
/** True when `next` is a change a reader holding `seen` has not covered. */
|
|
10
|
+
export declare function isNewerSourceRevision(next: SourceRevisionMark, seen: SourceRevisionMark | undefined): boolean;
|
|
11
|
+
export interface SourceChangeFeedState {
|
|
12
|
+
/** Undefined until this connection's `hello` arrives. */
|
|
13
|
+
announced?: boolean;
|
|
14
|
+
latest?: SourceRevisionMark;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* One feed per gateway connection, fed with every received event. It remembers
|
|
18
|
+
* whether `hello` announced the signal so panels mounted later can tell.
|
|
19
|
+
*/
|
|
20
|
+
export declare class SourceChangeFeed {
|
|
21
|
+
private state;
|
|
22
|
+
private listeners;
|
|
23
|
+
getState: () => SourceChangeFeedState;
|
|
24
|
+
subscribe: (listener: () => void) => (() => void);
|
|
25
|
+
receive(event: string, payload: unknown): void;
|
|
26
|
+
/** A new connection must announce again; its revisions start a new comparison. */
|
|
27
|
+
disconnected(): void;
|
|
28
|
+
}
|
|
29
|
+
export declare function createSourceChangeFeed(): SourceChangeFeed;
|
|
30
|
+
/** The part of a host's gateway client that feeds source changes. */
|
|
31
|
+
export interface SourceChangeConnection {
|
|
32
|
+
subscribe(event: string, handler: (payload: unknown) => void): unknown;
|
|
33
|
+
onConnectionChange(listener: (state: string) => void): unknown;
|
|
34
|
+
}
|
|
35
|
+
/** Wire a host connection to its feed; hosts call this once per gateway client. */
|
|
36
|
+
export declare function connectSourceChangeFeed(feed: SourceChangeFeed, connection: SourceChangeConnection): void;
|
|
37
|
+
//# sourceMappingURL=changes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changes.d.ts","sourceRoot":"","sources":["../../src/sources/changes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAE7E,wFAAwF;AACxF,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAQD,+BAA+B;AAC/B,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf,sBAAsB,GAAG,SAAS,CAapC;AAaD,4EAA4E;AAC5E,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE,kBAAkB,GAAG,SAAS,GACnC,OAAO,CAET;AAED,MAAM,WAAW,qBAAqB;IACpC,yDAAyD;IACzD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,SAAS,CAAyB;IAE1C,QAAQ,QAAO,qBAAqB,CAAe;IAEnD,SAAS,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAG9C;IAEF,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAW9C,kFAAkF;IAClF,YAAY,IAAI,IAAI;CAKrB;AAED,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD;AAED,qEAAqE;AACrE,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC;IACvE,kBAAkB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC;CAChE;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,sBAAsB,GACjC,IAAI,CAMN"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Events } from '../transport/events.js';
|
|
2
|
+
/**
|
|
3
|
+
* The carrier (ADR-069 Amendment 1). Until `resource.changed` exists the payload rides on
|
|
4
|
+
* `hello` and `fleet.updated`; adopting ADR-071 changes only these events and the decoder.
|
|
5
|
+
*/
|
|
6
|
+
const SOURCE_CHANGE_EVENTS = [Events.HELLO, Events.FLEET_UPDATED];
|
|
7
|
+
/** The one carrier decoder. */
|
|
8
|
+
export function sourceResourceChanges(event, payload) {
|
|
9
|
+
if (!SOURCE_CHANGE_EVENTS.includes(event))
|
|
10
|
+
return undefined;
|
|
11
|
+
const changes = payload?.resourceChanges;
|
|
12
|
+
if (!changes || typeof changes !== 'object')
|
|
13
|
+
return undefined;
|
|
14
|
+
const candidate = changes;
|
|
15
|
+
if (candidate.version !== 1 ||
|
|
16
|
+
typeof candidate.epoch !== 'string' ||
|
|
17
|
+
!candidate.epoch ||
|
|
18
|
+
!Array.isArray(candidate.changes))
|
|
19
|
+
return undefined;
|
|
20
|
+
return candidate;
|
|
21
|
+
}
|
|
22
|
+
function sourceMark(payload) {
|
|
23
|
+
const change = payload.changes.find((entry) => entry?.key?.family === 'sources' &&
|
|
24
|
+
entry.key.scope === 'farm' &&
|
|
25
|
+
Number.isSafeInteger(entry.revision) &&
|
|
26
|
+
entry.revision >= 0);
|
|
27
|
+
return change ? { epoch: payload.epoch, revision: change.revision } : undefined;
|
|
28
|
+
}
|
|
29
|
+
/** True when `next` is a change a reader holding `seen` has not covered. */
|
|
30
|
+
export function isNewerSourceRevision(next, seen) {
|
|
31
|
+
return !seen || next.epoch !== seen.epoch || next.revision > seen.revision;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* One feed per gateway connection, fed with every received event. It remembers
|
|
35
|
+
* whether `hello` announced the signal so panels mounted later can tell.
|
|
36
|
+
*/
|
|
37
|
+
export class SourceChangeFeed {
|
|
38
|
+
constructor() {
|
|
39
|
+
this.state = {};
|
|
40
|
+
this.listeners = new Set();
|
|
41
|
+
this.getState = () => this.state;
|
|
42
|
+
this.subscribe = (listener) => {
|
|
43
|
+
this.listeners.add(listener);
|
|
44
|
+
return () => this.listeners.delete(listener);
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
receive(event, payload) {
|
|
48
|
+
const changes = sourceResourceChanges(event, payload);
|
|
49
|
+
const mark = changes ? sourceMark(changes) : undefined;
|
|
50
|
+
const announced = event === Events.HELLO ? Boolean(mark) : this.state.announced;
|
|
51
|
+
const latest = mark && isNewerSourceRevision(mark, this.state.latest) ? mark : this.state.latest;
|
|
52
|
+
if (announced === this.state.announced && latest === this.state.latest)
|
|
53
|
+
return;
|
|
54
|
+
this.state = { announced, latest };
|
|
55
|
+
for (const listener of this.listeners)
|
|
56
|
+
listener();
|
|
57
|
+
}
|
|
58
|
+
/** A new connection must announce again; its revisions start a new comparison. */
|
|
59
|
+
disconnected() {
|
|
60
|
+
if (this.state.announced === undefined && !this.state.latest)
|
|
61
|
+
return;
|
|
62
|
+
this.state = {};
|
|
63
|
+
for (const listener of this.listeners)
|
|
64
|
+
listener();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export function createSourceChangeFeed() {
|
|
68
|
+
return new SourceChangeFeed();
|
|
69
|
+
}
|
|
70
|
+
/** Wire a host connection to its feed; hosts call this once per gateway client. */
|
|
71
|
+
export function connectSourceChangeFeed(feed, connection) {
|
|
72
|
+
for (const event of SOURCE_CHANGE_EVENTS)
|
|
73
|
+
connection.subscribe(event, (payload) => feed.receive(event, payload));
|
|
74
|
+
connection.onConnectionChange((state) => {
|
|
75
|
+
if (state !== 'connected')
|
|
76
|
+
feed.disconnected();
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=changes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changes.js","sourceRoot":"","sources":["../../src/sources/changes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type SourceChangeFeed } from './changes.js';
|
|
1
2
|
import { type PreparedSourceCommand, type SourceCommandClient } from './client.js';
|
|
2
3
|
import type { SourceSelection } from './pins.js';
|
|
3
4
|
import { type SourceStatusViewContext, type SourceStatusViewModel, type SourceViewAction } from './status-view.js';
|
|
@@ -15,6 +16,12 @@ export interface SourceStatusSnapshot {
|
|
|
15
16
|
interactive: boolean;
|
|
16
17
|
canEdit: boolean;
|
|
17
18
|
selectionRefusal?: string;
|
|
19
|
+
/** Render nothing: no facts or failure yet, an empty context, or a viewer that cannot read. */
|
|
20
|
+
hidden: boolean;
|
|
21
|
+
/** Render the rows' pin and sync controls. */
|
|
22
|
+
controls: boolean;
|
|
23
|
+
/** The gateway reports sources but did not announce live source status. */
|
|
24
|
+
unsupported: boolean;
|
|
18
25
|
}
|
|
19
26
|
/** One context-bound controller serves thin web/native status and selection renderers. */
|
|
20
27
|
export declare class SourceStatusController {
|
|
@@ -25,10 +32,23 @@ export declare class SourceStatusController {
|
|
|
25
32
|
private listeners;
|
|
26
33
|
private snapshot;
|
|
27
34
|
private pendingConnectionKey?;
|
|
35
|
+
private feed?;
|
|
36
|
+
private covered?;
|
|
37
|
+
/** The version of the read in flight; a context change abandons it. */
|
|
38
|
+
private readingVersion?;
|
|
39
|
+
private rereadAfterRead;
|
|
40
|
+
private deniedRead;
|
|
28
41
|
constructor(client: SourceCommandClient, context: SourceStatusViewContext);
|
|
29
42
|
getSnapshot: () => SourceStatusSnapshot;
|
|
30
43
|
subscribe: (listener: () => void) => (() => void);
|
|
31
44
|
private update;
|
|
45
|
+
/**
|
|
46
|
+
* Live source status (ADR-069 Amendment 1): reread when the gateway's source
|
|
47
|
+
* revision passes what the last read covered. Reconnects stay with the host,
|
|
48
|
+
* which already rereads on every new connection.
|
|
49
|
+
*/
|
|
50
|
+
attachFeed(feed: SourceChangeFeed): () => void;
|
|
51
|
+
private observeFeed;
|
|
32
52
|
setContext(context: SourceStatusViewContext): boolean;
|
|
33
53
|
refresh(): Promise<void>;
|
|
34
54
|
select(selection: SourceSelection): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/sources/controller.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EAEzB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,qBAAqB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/sources/controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EAEzB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,qBAAqB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+FAA+F;IAC/F,MAAM,EAAE,OAAO,CAAC;IAChB,8CAA8C;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,WAAW,EAAE,OAAO,CAAC;CACtB;AAQD,0FAA0F;AAC1F,qBAAa,sBAAsB;IAe/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAdzB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,MAAM,CAAC,CAAsB;IACrC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,oBAAoB,CAAC,CAAS;IACtC,OAAO,CAAC,IAAI,CAAC,CAAmB;IAChC,OAAO,CAAC,OAAO,CAAC,CAAqB;IACrC,uEAAuE;IACvE,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,UAAU,CAAS;gBAGR,MAAM,EAAE,mBAAmB,EAC5C,OAAO,EAAE,uBAAuB;IAgBlC,WAAW,QAAO,oBAAoB,CAAkB;IAExD,SAAS,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAG9C;IAEF,OAAO,CAAC,MAAM;IAsCd;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAU9C,OAAO,CAAC,WAAW;IAiBnB,UAAU,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO;IAmC/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAiC9B,MAAM,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IASxC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOhC,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CjE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YASd,aAAa;CAmC5B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isNewerSourceRevision, } from './changes.js';
|
|
1
2
|
import { sourceStatusParamsForTarget, } from './client.js';
|
|
2
3
|
import { deriveSourceStatusView, } from './status-view.js';
|
|
3
4
|
function commandLabel(command) {
|
|
@@ -11,6 +12,8 @@ export class SourceStatusController {
|
|
|
11
12
|
this.client = client;
|
|
12
13
|
this.version = 0;
|
|
13
14
|
this.listeners = new Set();
|
|
15
|
+
this.rereadAfterRead = false;
|
|
16
|
+
this.deniedRead = false;
|
|
14
17
|
this.getSnapshot = () => this.snapshot;
|
|
15
18
|
this.subscribe = (listener) => {
|
|
16
19
|
this.listeners.add(listener);
|
|
@@ -23,6 +26,9 @@ export class SourceStatusController {
|
|
|
23
26
|
selections: structuredClone([...(context.selections ?? [])]),
|
|
24
27
|
interactive: true,
|
|
25
28
|
canEdit: false,
|
|
29
|
+
hidden: true,
|
|
30
|
+
controls: false,
|
|
31
|
+
unsupported: false,
|
|
26
32
|
};
|
|
27
33
|
this.update({});
|
|
28
34
|
}
|
|
@@ -38,6 +44,15 @@ export class SourceStatusController {
|
|
|
38
44
|
this.snapshot.interactive =
|
|
39
45
|
!this.snapshot.busy && !this.snapshot.loading && !this.snapshot.pending;
|
|
40
46
|
this.snapshot.canEdit = this.snapshot.interactive && this.snapshot.view?.editable === true;
|
|
47
|
+
const view = this.snapshot.view;
|
|
48
|
+
// A failed read stays visible, even over a context that was empty when last read.
|
|
49
|
+
this.snapshot.hidden =
|
|
50
|
+
(view?.hidden === true && this.snapshot.error === undefined) ||
|
|
51
|
+
(this.snapshot.error !== undefined && this.deniedRead) ||
|
|
52
|
+
(!view && this.snapshot.error === undefined && !this.snapshot.pending);
|
|
53
|
+
this.snapshot.controls = Boolean(view && (view.editable || view.draft || view.actions.length > 0));
|
|
54
|
+
this.snapshot.unsupported =
|
|
55
|
+
this.status?.configured === true && this.feed?.getState().announced === false;
|
|
41
56
|
this.snapshot.selectionRefusal =
|
|
42
57
|
this.snapshot.view?.selectionErrors[0] ??
|
|
43
58
|
(!this.context.target &&
|
|
@@ -53,6 +68,37 @@ export class SourceStatusController {
|
|
|
53
68
|
for (const listener of this.listeners)
|
|
54
69
|
listener();
|
|
55
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Live source status (ADR-069 Amendment 1): reread when the gateway's source
|
|
73
|
+
* revision passes what the last read covered. Reconnects stay with the host,
|
|
74
|
+
* which already rereads on every new connection.
|
|
75
|
+
*/
|
|
76
|
+
attachFeed(feed) {
|
|
77
|
+
this.feed = feed;
|
|
78
|
+
const unsubscribe = feed.subscribe(() => this.observeFeed());
|
|
79
|
+
this.observeFeed();
|
|
80
|
+
return () => {
|
|
81
|
+
unsubscribe();
|
|
82
|
+
if (this.feed === feed)
|
|
83
|
+
this.feed = undefined;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
observeFeed() {
|
|
87
|
+
const latest = this.feed?.getState().latest;
|
|
88
|
+
if (latest && isNewerSourceRevision(latest, this.covered)) {
|
|
89
|
+
// A change during any read, the first included, is not covered by it.
|
|
90
|
+
if (this.readingVersion === this.version) {
|
|
91
|
+
this.rereadAfterRead = true;
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
// Before the first read the host's initial load covers the current state.
|
|
95
|
+
if (this.status || this.snapshot.error) {
|
|
96
|
+
void this.refresh();
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
this.update({});
|
|
101
|
+
}
|
|
56
102
|
setContext(context) {
|
|
57
103
|
if (JSON.stringify(context) === JSON.stringify(this.context))
|
|
58
104
|
return false;
|
|
@@ -90,18 +136,35 @@ export class SourceStatusController {
|
|
|
90
136
|
async refresh() {
|
|
91
137
|
const version = ++this.version;
|
|
92
138
|
const params = this.context.params ?? sourceStatusParamsForTarget(undefined, this.context.target);
|
|
139
|
+
// Gateways publish only after a change is readable, so this read covers the mark.
|
|
140
|
+
this.covered = this.feed?.getState().latest;
|
|
141
|
+
this.readingVersion = version;
|
|
142
|
+
this.rereadAfterRead = false;
|
|
93
143
|
this.update({ loading: true, error: undefined });
|
|
94
144
|
try {
|
|
95
145
|
const status = await this.client.status(params);
|
|
96
146
|
if (version !== this.version)
|
|
97
147
|
return;
|
|
98
148
|
this.status = status;
|
|
149
|
+
this.deniedRead = false;
|
|
99
150
|
this.update({ loading: false });
|
|
100
151
|
}
|
|
101
152
|
catch (error) {
|
|
102
153
|
// Read failures remain visible; stale responses cannot replace another context's facts.
|
|
103
|
-
if (version === this.version)
|
|
154
|
+
if (version === this.version) {
|
|
155
|
+
this.deniedRead = error.code === 'AUTH_FORBIDDEN';
|
|
104
156
|
this.update({ loading: false, error: error.message });
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
finally {
|
|
160
|
+
if (version === this.version) {
|
|
161
|
+
this.readingVersion = undefined;
|
|
162
|
+
// A change seen during the read is not covered by it: read once more.
|
|
163
|
+
if (this.rereadAfterRead) {
|
|
164
|
+
this.rereadAfterRead = false;
|
|
165
|
+
void this.refresh();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
105
168
|
}
|
|
106
169
|
}
|
|
107
170
|
select(selection) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/sources/controller.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/sources/controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,8 @@ export interface SourceStatusViewContext {
|
|
|
13
13
|
selections?: readonly SourceSelection[];
|
|
14
14
|
}
|
|
15
15
|
export interface SourceStatusRowView {
|
|
16
|
+
/** This source's part of the view's one line. */
|
|
17
|
+
line: string;
|
|
16
18
|
summary: string;
|
|
17
19
|
details: string[];
|
|
18
20
|
declaration: SourceDeclaration;
|
|
@@ -36,7 +38,10 @@ export interface SourceStatusRowView {
|
|
|
36
38
|
}
|
|
37
39
|
export interface SourceStatusViewModel {
|
|
38
40
|
configured: boolean;
|
|
39
|
-
|
|
41
|
+
/** Render nothing: no declared sources, pins or recorded run inputs in this context. */
|
|
42
|
+
hidden: boolean;
|
|
43
|
+
/** One line naming each source's effective ref, with branch and scope for pins. */
|
|
44
|
+
line: string;
|
|
40
45
|
declarationRevision?: number;
|
|
41
46
|
pinRevision?: number;
|
|
42
47
|
target?: SourcePinTarget;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-view.d.ts","sourceRoot":"","sources":["../../src/sources/status-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGlF,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,eAAe,EAGrB,MAAM,WAAW,CAAC;AAEnB,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;AACxD,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAItE,CAAC;AAEF,2FAA2F;AAC3F,MAAM,WAAW,uBAAuB;IACtC,8FAA8F;IAC9F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrC,UAAU,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QAAC,KAAK,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;IACjG,gBAAgB,EAAE,KAAK,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC,CAAC;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,
|
|
1
|
+
{"version":3,"file":"status-view.d.ts","sourceRoot":"","sources":["../../src/sources/status-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGlF,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,eAAe,EAGrB,MAAM,WAAW,CAAC;AAEnB,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;AACxD,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAItE,CAAC;AAEF,2FAA2F;AAC3F,MAAM,WAAW,uBAAuB;IACtC,8FAA8F;IAC9F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrC,UAAU,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QAAC,KAAK,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;IACjG,gBAAgB,EAAE,KAAK,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC,CAAC;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,wFAAwF;IACxF,MAAM,EAAE,OAAO,CAAC;IAChB,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,EAAE,mBAAmB,EAAE,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;CACvC;AAED,wFAAwF;AACxF,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,uBAAuB,GAC/B,qBAAqB,CA+JvB"}
|
|
@@ -28,12 +28,10 @@ export function deriveSourceStatusView(status, context) {
|
|
|
28
28
|
const declarations = [...declared.values()].filter((source) => !params.sourceId || source.id === params.sourceId);
|
|
29
29
|
const hasRevisions = Number.isInteger(status.declarationRevision) && Number.isInteger(status.pinRevision);
|
|
30
30
|
const draft = context.selections !== undefined && context.target === undefined;
|
|
31
|
-
|
|
31
|
+
const view = structuredClone({
|
|
32
32
|
configured: status.configured,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
? 'Source authority is not configured. Retained inputs are read-only.'
|
|
36
|
-
: undefined),
|
|
33
|
+
hidden: false,
|
|
34
|
+
line: '',
|
|
37
35
|
declarationRevision: status.declarationRevision,
|
|
38
36
|
pinRevision: status.pinRevision,
|
|
39
37
|
target: context.target,
|
|
@@ -56,7 +54,12 @@ export function deriveSourceStatusView(status, context) {
|
|
|
56
54
|
const selectionErrors = selection
|
|
57
55
|
? validateSourceSelection(selection, status.declarations)
|
|
58
56
|
: [];
|
|
59
|
-
|
|
57
|
+
// An empty branch input is not a selection yet.
|
|
58
|
+
const draftRef = draft && selection
|
|
59
|
+
? selection.selection === 'main'
|
|
60
|
+
? 'main'
|
|
61
|
+
: selection.ref || undefined
|
|
62
|
+
: undefined;
|
|
60
63
|
const draftResolution = draftRef
|
|
61
64
|
? status.resolutions.find((resolution) => resolution.sourceId === declaration.id &&
|
|
62
65
|
resolution.ref === draftRef &&
|
|
@@ -94,17 +97,28 @@ export function deriveSourceStatusView(status, context) {
|
|
|
94
97
|
selectionErrors,
|
|
95
98
|
canPin: selection?.selection === 'branch' && selectionErrors.length === 0,
|
|
96
99
|
};
|
|
97
|
-
const
|
|
100
|
+
const locked = status.runSource?.state === 'locked';
|
|
101
|
+
const recorded = locked ? row.recordedLocks[0]?.entry : undefined;
|
|
102
|
+
const visiblePin = locked ? recorded?.pin : row.effective?.pin;
|
|
103
|
+
const ref = recorded?.effectiveRef ?? row.effective?.effectiveRef ?? declaration.ref ?? 'main';
|
|
98
104
|
const pinSummary = visiblePin
|
|
99
105
|
? `; ${visiblePin.selection === 'branch' ? 'pinned' : 'main override'} ${visiblePin.scope}, base main ${visiblePin.baseMainCommit}`
|
|
100
106
|
: '';
|
|
101
107
|
const summary = draftRef !== undefined
|
|
102
108
|
? `${declaration.id} run selection ${draftRef} ${draftResolution?.commit ?? 'unresolved'} ${draftResolution?.status ?? 'unknown'}, reported main base ${mainResolution?.commit ?? 'unresolved'}`
|
|
103
|
-
:
|
|
104
|
-
? `${declaration.id} run input ${
|
|
105
|
-
: `${declaration.id} reported ${
|
|
109
|
+
: recorded
|
|
110
|
+
? `${declaration.id} run input ${recorded.effectiveRef} ${recorded.commit}${pinSummary}`
|
|
111
|
+
: `${declaration.id} reported ${ref} ${row.resolution?.commit ?? 'unresolved'} ${row.resolution?.status ?? 'unknown'}${pinSummary}`;
|
|
106
112
|
return {
|
|
107
113
|
...row,
|
|
114
|
+
// A draft names the run selection being prepared, not the farm's current ref.
|
|
115
|
+
line: draftRef !== undefined
|
|
116
|
+
? `${declaration.id} ${draftRef} (run selection)`
|
|
117
|
+
: !visiblePin
|
|
118
|
+
? `${declaration.id} ${ref}`
|
|
119
|
+
: visiblePin.selection === 'branch'
|
|
120
|
+
? `${declaration.id} ${ref} (${visiblePin.scope} pin)`
|
|
121
|
+
: `${declaration.id} main (${visiblePin.scope} override)`,
|
|
108
122
|
summary,
|
|
109
123
|
details: [
|
|
110
124
|
...(draftRef !== undefined
|
|
@@ -118,6 +132,9 @@ export function deriveSourceStatusView(status, context) {
|
|
|
118
132
|
}),
|
|
119
133
|
errors: status.errors,
|
|
120
134
|
});
|
|
135
|
+
view.hidden = view.rows.length === 0 && !status.pins?.length;
|
|
136
|
+
view.line = view.rows.map((row) => row.line).join(' · ');
|
|
137
|
+
return view;
|
|
121
138
|
}
|
|
122
139
|
/** All renderers describe the same reported locks, pin audit and receipt facts. */
|
|
123
140
|
function sourceRowFacts(row) {
|