@farmslot/protocol 0.40.0 → 0.42.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 +29 -0
- package/dist/contracts/acceptance.d.ts +5 -0
- package/dist/contracts/acceptance.d.ts.map +1 -1
- package/dist/contracts/acceptance.js.map +1 -1
- package/dist/contracts/config.d.ts.map +1 -1
- package/dist/contracts/config.js +6 -1
- package/dist/contracts/config.js.map +1 -1
- package/dist/contracts/dispatch.d.ts +1 -0
- package/dist/contracts/dispatch.d.ts.map +1 -1
- package/dist/contracts/execution-templates.d.ts +9 -0
- package/dist/contracts/execution-templates.d.ts.map +1 -1
- package/dist/contracts/execution-templates.js.map +1 -1
- package/dist/contracts/family.d.ts +6 -0
- package/dist/contracts/family.d.ts.map +1 -1
- package/dist/contracts/family.js.map +1 -1
- package/dist/contracts/run-gate-readiness.d.ts +19 -0
- package/dist/contracts/run-gate-readiness.d.ts.map +1 -1
- package/dist/contracts/run-gate-readiness.js.map +1 -1
- package/dist/contracts/runs.d.ts +39 -2
- package/dist/contracts/runs.d.ts.map +1 -1
- package/dist/contracts/runs.js +8 -0
- package/dist/contracts/runs.js.map +1 -1
- package/dist/contracts/work-graph.d.ts +6 -0
- package/dist/contracts/work-graph.d.ts.map +1 -1
- package/dist/contracts/worker-terminal.d.ts +4 -0
- package/dist/contracts/worker-terminal.d.ts.map +1 -1
- package/dist/contracts/worker-terminal.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/node/pack-portability.d.ts.map +1 -1
- package/dist/node/pack-portability.js +16 -1
- package/dist/node/pack-portability.js.map +1 -1
- package/dist/recipe/claim-overrides.d.ts +32 -0
- package/dist/recipe/claim-overrides.d.ts.map +1 -0
- package/dist/recipe/claim-overrides.js +67 -0
- package/dist/recipe/claim-overrides.js.map +1 -0
- package/dist/recipe/document.d.ts +2 -0
- package/dist/recipe/document.d.ts.map +1 -1
- package/dist/recipe/document.js +39 -0
- package/dist/recipe/document.js.map +1 -1
- package/dist/recipe/evidence.d.ts.map +1 -1
- package/dist/recipe/evidence.js +1 -0
- package/dist/recipe/evidence.js.map +1 -1
- package/dist/recipe/hud-intent.d.ts +5 -0
- package/dist/recipe/hud-intent.d.ts.map +1 -1
- package/dist/recipe/hud-intent.js +39 -0
- package/dist/recipe/hud-intent.js.map +1 -1
- package/dist/recipe/index.d.ts +6 -2
- package/dist/recipe/index.d.ts.map +1 -1
- package/dist/recipe/index.js +5 -2
- package/dist/recipe/index.js.map +1 -1
- package/dist/recipe/publication-manifest.d.ts +30 -0
- package/dist/recipe/publication-manifest.d.ts.map +1 -0
- package/dist/recipe/publication-manifest.js +2 -0
- package/dist/recipe/publication-manifest.js.map +1 -0
- package/dist/recipe/run-contract.d.ts +8 -0
- package/dist/recipe/run-contract.d.ts.map +1 -0
- package/dist/recipe/run-contract.js +10 -0
- package/dist/recipe/run-contract.js.map +1 -0
- package/dist/recipe/run-pointer.d.ts +9 -0
- package/dist/recipe/run-pointer.d.ts.map +1 -0
- package/dist/recipe/run-pointer.js +20 -0
- package/dist/recipe/run-pointer.js.map +1 -0
- package/dist/recipes/step-io.d.ts +2 -0
- package/dist/recipes/step-io.d.ts.map +1 -1
- package/dist/recipes/step-io.js +5 -0
- package/dist/recipes/step-io.js.map +1 -1
- package/dist/roadmap/delivery-view.d.ts +12 -0
- package/dist/roadmap/delivery-view.d.ts.map +1 -0
- package/dist/roadmap/delivery-view.js +15 -0
- package/dist/roadmap/delivery-view.js.map +1 -0
- package/dist/rpc/dispatch.d.ts +3 -0
- package/dist/rpc/dispatch.d.ts.map +1 -1
- package/dist/rpc/index.d.ts +1 -0
- package/dist/rpc/index.d.ts.map +1 -1
- package/dist/rpc/index.js +1 -0
- package/dist/rpc/index.js.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 +40 -0
- package/dist/rpc/run.d.ts.map +1 -1
- package/dist/rpc/run.js +1 -0
- package/dist/rpc/run.js.map +1 -1
- package/dist/rpc/sources.d.ts +50 -0
- package/dist/rpc/sources.d.ts.map +1 -0
- package/dist/rpc/sources.js +2 -0
- package/dist/rpc/sources.js.map +1 -0
- package/dist/rpc/work-graph.d.ts +8 -0
- package/dist/rpc/work-graph.d.ts.map +1 -1
- package/dist/rpc/work-graph.js +1 -0
- package/dist/rpc/work-graph.js.map +1 -1
- package/dist/runs/decision-resolution.d.ts +9 -1
- package/dist/runs/decision-resolution.d.ts.map +1 -1
- package/dist/runs/decision-resolution.js +24 -0
- package/dist/runs/decision-resolution.js.map +1 -1
- package/dist/runs/family-iteration-ledger.d.ts +2 -0
- package/dist/runs/family-iteration-ledger.d.ts.map +1 -1
- package/dist/runs/family-iteration-ledger.js +15 -3
- package/dist/runs/family-iteration-ledger.js.map +1 -1
- package/dist/runs/portable-bundle.d.ts.map +1 -1
- package/dist/runs/portable-bundle.js +2 -0
- package/dist/runs/portable-bundle.js.map +1 -1
- package/dist/runs/publish-approval.d.ts +8 -0
- package/dist/runs/publish-approval.d.ts.map +1 -1
- package/dist/runs/publish-approval.js +32 -0
- package/dist/runs/publish-approval.js.map +1 -1
- package/dist/runs/review-chain.d.ts +9 -0
- package/dist/runs/review-chain.d.ts.map +1 -1
- package/dist/runs/review-chain.js +24 -0
- package/dist/runs/review-chain.js.map +1 -1
- package/dist/runs/review-retries.d.ts +4 -1
- package/dist/runs/review-retries.d.ts.map +1 -1
- package/dist/runs/review-retries.js +16 -0
- package/dist/runs/review-retries.js.map +1 -1
- package/dist/runs/run-mode.d.ts +2 -0
- package/dist/runs/run-mode.d.ts.map +1 -1
- package/dist/runs/run-mode.js +17 -0
- package/dist/runs/run-mode.js.map +1 -1
- package/dist/runs/run-title.d.ts +18 -0
- package/dist/runs/run-title.d.ts.map +1 -0
- package/dist/runs/run-title.js +64 -0
- package/dist/runs/run-title.js.map +1 -0
- package/dist/sources/client.d.ts +46 -0
- package/dist/sources/client.d.ts.map +1 -0
- package/dist/sources/client.js +83 -0
- package/dist/sources/client.js.map +1 -0
- package/dist/sources/contracts.d.ts +138 -0
- package/dist/sources/contracts.d.ts.map +1 -0
- package/dist/sources/contracts.js +2 -0
- package/dist/sources/contracts.js.map +1 -0
- package/dist/sources/controller.d.ts +40 -0
- package/dist/sources/controller.d.ts.map +1 -0
- package/dist/sources/controller.js +205 -0
- package/dist/sources/controller.js.map +1 -0
- package/dist/sources/pins.d.ts +25 -0
- package/dist/sources/pins.d.ts.map +1 -0
- package/dist/sources/pins.js +65 -0
- package/dist/sources/pins.js.map +1 -0
- package/dist/sources/status-view.d.ts +52 -0
- package/dist/sources/status-view.d.ts.map +1 -0
- package/dist/sources/status-view.js +133 -0
- package/dist/sources/status-view.js.map +1 -0
- package/dist/sources/validation.d.ts +9 -0
- package/dist/sources/validation.d.ts.map +1 -0
- package/dist/sources/validation.js +79 -0
- package/dist/sources/validation.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { SourceDeclaration, SourceLock, SourcePin } from './contracts.js';
|
|
2
|
+
export interface SourceSelection {
|
|
3
|
+
sourceId: string;
|
|
4
|
+
selection: 'branch' | 'main';
|
|
5
|
+
ref?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface SourcePinTarget {
|
|
8
|
+
scope: SourcePin['scope'];
|
|
9
|
+
targetId: string;
|
|
10
|
+
}
|
|
11
|
+
export interface SourceEffectiveSelection {
|
|
12
|
+
sourceId: string;
|
|
13
|
+
declaredRef: string;
|
|
14
|
+
effectiveRef: string;
|
|
15
|
+
scope: SourcePin['scope'];
|
|
16
|
+
pin?: SourcePin;
|
|
17
|
+
shadowedPins: SourcePin[];
|
|
18
|
+
}
|
|
19
|
+
/** Branch syntax is portable; the gateway must also verify it exists upstream. */
|
|
20
|
+
export declare function isSourceBranchRef(ref: string): boolean;
|
|
21
|
+
export declare function validateSourceSelection(value: unknown, declarations?: readonly Pick<SourceDeclaration, 'id'>[]): string[];
|
|
22
|
+
export declare function validateSourceSelections(value: unknown, declarations?: readonly Pick<SourceDeclaration, 'id'>[]): string[];
|
|
23
|
+
/** One precedence calculation serves authority locks and all client projections. */
|
|
24
|
+
export declare function selectEffectiveSource(source: SourceDeclaration, pins: readonly SourcePin[], context?: Pick<SourceLock['context'], 'runId' | 'nodeId'>): SourceEffectiveSelection;
|
|
25
|
+
//# sourceMappingURL=pins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pins.d.ts","sourceRoot":"","sources":["../../src/sources/pins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE/E,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1B,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,YAAY,EAAE,SAAS,EAAE,CAAC;CAC3B;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAYtD;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,EACd,YAAY,CAAC,EAAE,SAAS,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAAE,GACtD,MAAM,EAAE,CAwBV;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,YAAY,CAAC,EAAE,SAAS,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAAE,GACtD,MAAM,EAAE,CAMV;AAED,oFAAoF;AACpF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,SAAS,SAAS,EAAE,EAC1B,OAAO,GAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAM,GAC5D,wBAAwB,CAqB1B"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** Branch syntax is portable; the gateway must also verify it exists upstream. */
|
|
2
|
+
export function isSourceBranchRef(ref) {
|
|
3
|
+
const branch = ref.replace(/^refs\/heads\//, '');
|
|
4
|
+
return (/^[a-zA-Z0-9][a-zA-Z0-9._/-]*$/.test(branch) &&
|
|
5
|
+
!/^[0-9a-f]{40}$|^[0-9a-f]{64}$/.test(branch) &&
|
|
6
|
+
!branch.includes('..') &&
|
|
7
|
+
!branch.includes('//') &&
|
|
8
|
+
!branch.endsWith('/') &&
|
|
9
|
+
!branch.endsWith('.') &&
|
|
10
|
+
!branch.split('/').some((part) => part.startsWith('.') || part.endsWith('.lock')) &&
|
|
11
|
+
!ref.startsWith('refs/tags/'));
|
|
12
|
+
}
|
|
13
|
+
export function validateSourceSelection(value, declarations) {
|
|
14
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
15
|
+
return ['Select a declared source and a pushed branch or main.'];
|
|
16
|
+
const selected = value;
|
|
17
|
+
const errors = [];
|
|
18
|
+
if (typeof selected.sourceId !== 'string' ||
|
|
19
|
+
!/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(selected.sourceId))
|
|
20
|
+
errors.push('Select a valid source ID.');
|
|
21
|
+
if (declarations && !declarations.some((source) => source.id === selected.sourceId))
|
|
22
|
+
errors.push('The source is not declared in this farm.');
|
|
23
|
+
if (selected.selection !== 'branch' && selected.selection !== 'main')
|
|
24
|
+
errors.push('Selection must be a pushed branch or main.');
|
|
25
|
+
if (selected.selection === 'branch' &&
|
|
26
|
+
(typeof selected.ref !== 'string' || !isSourceBranchRef(selected.ref)))
|
|
27
|
+
errors.push('Select a pushed branch, without local paths, tags or commit-only refs.');
|
|
28
|
+
if (selected.selection === 'main' && selected.ref !== undefined && selected.ref !== 'main')
|
|
29
|
+
errors.push('Returning to main cannot select another ref.');
|
|
30
|
+
if (Object.keys(selected).some((key) => !['sourceId', 'selection', 'ref'].includes(key)))
|
|
31
|
+
errors.push('Source selections contain unsupported fields.');
|
|
32
|
+
return errors;
|
|
33
|
+
}
|
|
34
|
+
export function validateSourceSelections(value, declarations) {
|
|
35
|
+
if (!Array.isArray(value))
|
|
36
|
+
return ['Source selections must be an array.'];
|
|
37
|
+
const errors = value.flatMap((selection) => validateSourceSelection(selection, declarations));
|
|
38
|
+
const ids = value.map((selection) => selection?.sourceId);
|
|
39
|
+
if (new Set(ids).size !== ids.length)
|
|
40
|
+
errors.push('Select each declared source once.');
|
|
41
|
+
return errors;
|
|
42
|
+
}
|
|
43
|
+
/** One precedence calculation serves authority locks and all client projections. */
|
|
44
|
+
export function selectEffectiveSource(source, pins, context = {}) {
|
|
45
|
+
const rank = (pin) => pin.scope === 'run' && pin.targetId === context.runId
|
|
46
|
+
? 3
|
|
47
|
+
: pin.scope === 'node' && pin.targetId === context.nodeId
|
|
48
|
+
? 2
|
|
49
|
+
: pin.scope === 'farm'
|
|
50
|
+
? 1
|
|
51
|
+
: 0;
|
|
52
|
+
const applicable = pins
|
|
53
|
+
.filter((pin) => pin.sourceId === source.id && rank(pin) > 0)
|
|
54
|
+
.sort((a, b) => rank(b) - rank(a));
|
|
55
|
+
const pin = applicable[0];
|
|
56
|
+
return {
|
|
57
|
+
sourceId: source.id,
|
|
58
|
+
declaredRef: source.ref ?? 'main',
|
|
59
|
+
effectiveRef: pin?.ref ?? source.ref ?? 'main',
|
|
60
|
+
scope: pin?.scope ?? 'farm',
|
|
61
|
+
...(pin ? { pin: structuredClone(pin) } : {}),
|
|
62
|
+
shadowedPins: structuredClone(applicable.slice(1)),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=pins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pins.js","sourceRoot":"","sources":["../../src/sources/pins.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { SourcesStatusParams, SourcesStatusResult } from '../rpc/sources.js';
|
|
2
|
+
import type { SourceDeclaration, SourceLock, SourceLockEntry, SourceResolution } from './contracts.js';
|
|
3
|
+
import { type SourceEffectiveSelection, type SourcePinTarget, type SourceSelection } from './pins.js';
|
|
4
|
+
export type SourceViewAction = 'sync' | 'pin' | 'unpin';
|
|
5
|
+
export declare const SOURCE_VIEW_ACTION_LABELS: Record<SourceViewAction, string>;
|
|
6
|
+
/** Callers select presentation and actions; the gateway remains the mutation authority. */
|
|
7
|
+
export interface SourceStatusViewContext {
|
|
8
|
+
/** Opaque authenticated transport identity supplied by existing host connection authority. */
|
|
9
|
+
connectionKey?: string;
|
|
10
|
+
params?: SourcesStatusParams;
|
|
11
|
+
target?: SourcePinTarget;
|
|
12
|
+
actions: readonly SourceViewAction[];
|
|
13
|
+
selections?: readonly SourceSelection[];
|
|
14
|
+
}
|
|
15
|
+
export interface SourceStatusRowView {
|
|
16
|
+
summary: string;
|
|
17
|
+
details: string[];
|
|
18
|
+
declaration: SourceDeclaration;
|
|
19
|
+
effective?: SourceEffectiveSelection;
|
|
20
|
+
resolution?: SourceResolution;
|
|
21
|
+
recordedLocks: Array<{
|
|
22
|
+
digest: string;
|
|
23
|
+
context: SourceLock['context'];
|
|
24
|
+
entry: SourceLockEntry;
|
|
25
|
+
}>;
|
|
26
|
+
materializations: Array<{
|
|
27
|
+
nodeId: string;
|
|
28
|
+
lockDigest: string;
|
|
29
|
+
commit: string;
|
|
30
|
+
verifiedAt?: string;
|
|
31
|
+
drift: string[];
|
|
32
|
+
}>;
|
|
33
|
+
selection?: SourceSelection;
|
|
34
|
+
selectionErrors: string[];
|
|
35
|
+
canPin: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface SourceStatusViewModel {
|
|
38
|
+
configured: boolean;
|
|
39
|
+
declarationRevision?: number;
|
|
40
|
+
pinRevision?: number;
|
|
41
|
+
target?: SourcePinTarget;
|
|
42
|
+
actions: SourceViewAction[];
|
|
43
|
+
editable: boolean;
|
|
44
|
+
draft: boolean;
|
|
45
|
+
runSource: SourcesStatusResult['runSource'];
|
|
46
|
+
rows: SourceStatusRowView[];
|
|
47
|
+
selectionErrors: string[];
|
|
48
|
+
errors: SourcesStatusResult['errors'];
|
|
49
|
+
}
|
|
50
|
+
/** Project reported facts only. Retained generations are never inferred to be drift. */
|
|
51
|
+
export declare function deriveSourceStatusView(status: SourcesStatusResult, context: SourceStatusViewContext): SourceStatusViewModel;
|
|
52
|
+
//# sourceMappingURL=status-view.d.ts.map
|
|
@@ -0,0 +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,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,CAyIvB"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { sourceStatusParamsForTarget } from './client.js';
|
|
2
|
+
import { validateSourceSelection, validateSourceSelections, } from './pins.js';
|
|
3
|
+
export const SOURCE_VIEW_ACTION_LABELS = {
|
|
4
|
+
sync: 'Sync',
|
|
5
|
+
pin: 'Pin branch',
|
|
6
|
+
unpin: 'Return to main',
|
|
7
|
+
};
|
|
8
|
+
/** Project reported facts only. Retained generations are never inferred to be drift. */
|
|
9
|
+
export function deriveSourceStatusView(status, context) {
|
|
10
|
+
const params = context.params ?? sourceStatusParamsForTarget(undefined, context.target);
|
|
11
|
+
const canSelect = context.target?.scope !== 'run' ||
|
|
12
|
+
(status.runSource?.runId === context.target.targetId &&
|
|
13
|
+
status.runSource.canSelectSources === true);
|
|
14
|
+
const declared = new Map(status.declarations.map((source) => [source.id, source]));
|
|
15
|
+
if (params.runId)
|
|
16
|
+
for (const lock of status.locks) {
|
|
17
|
+
if (lock.context.runId !== params.runId)
|
|
18
|
+
continue;
|
|
19
|
+
for (const entry of lock.entries)
|
|
20
|
+
if (!declared.has(entry.sourceId))
|
|
21
|
+
declared.set(entry.sourceId, {
|
|
22
|
+
id: entry.sourceId,
|
|
23
|
+
kind: entry.kind,
|
|
24
|
+
repo: entry.repo,
|
|
25
|
+
ref: entry.declaredRef,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
const declarations = [...declared.values()].filter((source) => !params.sourceId || source.id === params.sourceId);
|
|
29
|
+
const hasRevisions = Number.isInteger(status.declarationRevision) && Number.isInteger(status.pinRevision);
|
|
30
|
+
const draft = context.selections !== undefined && context.target === undefined;
|
|
31
|
+
return structuredClone({
|
|
32
|
+
configured: status.configured,
|
|
33
|
+
declarationRevision: status.declarationRevision,
|
|
34
|
+
pinRevision: status.pinRevision,
|
|
35
|
+
target: context.target,
|
|
36
|
+
actions: context.actions.filter((action) => status.configured &&
|
|
37
|
+
canSelect &&
|
|
38
|
+
!(action === 'sync' && context.target?.scope === 'run') &&
|
|
39
|
+
(action === 'sync'
|
|
40
|
+
? Number.isInteger(status.declarationRevision)
|
|
41
|
+
: hasRevisions && Boolean(context.target))),
|
|
42
|
+
editable: status.configured &&
|
|
43
|
+
hasRevisions &&
|
|
44
|
+
canSelect &&
|
|
45
|
+
(context.selections !== undefined || context.actions.includes('pin')),
|
|
46
|
+
draft,
|
|
47
|
+
runSource: status.runSource,
|
|
48
|
+
selectionErrors: validateSourceSelections(context.selections ?? [], status.declarations),
|
|
49
|
+
rows: declarations.map((declaration) => {
|
|
50
|
+
const effective = status.effectiveSelections?.find((selected) => selected.sourceId === declaration.id);
|
|
51
|
+
const selection = context.selections?.find((selected) => selected.sourceId === declaration.id);
|
|
52
|
+
const selectionErrors = selection
|
|
53
|
+
? validateSourceSelection(selection, status.declarations)
|
|
54
|
+
: [];
|
|
55
|
+
const draftRef = draft && selection ? (selection.selection === 'main' ? 'main' : selection.ref) : undefined;
|
|
56
|
+
const draftResolution = draftRef
|
|
57
|
+
? status.resolutions.find((resolution) => resolution.sourceId === declaration.id &&
|
|
58
|
+
resolution.ref === draftRef &&
|
|
59
|
+
resolution.declarationRevision === status.declarationRevision)
|
|
60
|
+
: undefined;
|
|
61
|
+
const mainResolution = status.resolutions.find((resolution) => resolution.sourceId === declaration.id &&
|
|
62
|
+
resolution.ref === 'main' &&
|
|
63
|
+
resolution.declarationRevision === status.declarationRevision);
|
|
64
|
+
const row = {
|
|
65
|
+
declaration,
|
|
66
|
+
effective,
|
|
67
|
+
resolution: effective
|
|
68
|
+
? status.resolutions.find((resolution) => resolution.sourceId === declaration.id &&
|
|
69
|
+
resolution.ref === effective.effectiveRef &&
|
|
70
|
+
resolution.declarationRevision === status.declarationRevision)
|
|
71
|
+
: undefined,
|
|
72
|
+
recordedLocks: status.locks
|
|
73
|
+
.filter((lock) => !params.runId || lock.context.runId === params.runId)
|
|
74
|
+
.filter((lock) => !params.nodeId || lock.context.nodeId === params.nodeId)
|
|
75
|
+
.flatMap((lock) => lock.entries
|
|
76
|
+
.filter((entry) => entry.sourceId === declaration.id)
|
|
77
|
+
.map((entry) => ({ digest: lock.digest, context: lock.context, entry }))),
|
|
78
|
+
materializations: status.nodes
|
|
79
|
+
.filter((node) => !params.nodeId || node.nodeId === params.nodeId)
|
|
80
|
+
.flatMap((node) => node.materializations.flatMap((materialization) => materialization.sources
|
|
81
|
+
.filter((source) => source.sourceId === declaration.id)
|
|
82
|
+
.map((source) => ({
|
|
83
|
+
nodeId: node.nodeId,
|
|
84
|
+
lockDigest: materialization.lockDigest,
|
|
85
|
+
commit: source.commit,
|
|
86
|
+
verifiedAt: materialization.verifiedAt,
|
|
87
|
+
drift: materialization.drift,
|
|
88
|
+
})))),
|
|
89
|
+
selection,
|
|
90
|
+
selectionErrors,
|
|
91
|
+
canPin: selection?.selection === 'branch' && selectionErrors.length === 0,
|
|
92
|
+
};
|
|
93
|
+
const visiblePin = status.runSource?.state === 'locked' ? row.recordedLocks[0]?.entry.pin : row.effective?.pin;
|
|
94
|
+
const pinSummary = visiblePin
|
|
95
|
+
? `; ${visiblePin.selection === 'branch' ? 'pinned' : 'main override'} ${visiblePin.scope}, base main ${visiblePin.baseMainCommit}`
|
|
96
|
+
: '';
|
|
97
|
+
const summary = draftRef !== undefined
|
|
98
|
+
? `${declaration.id} run selection ${draftRef} ${draftResolution?.commit ?? 'unresolved'} ${draftResolution?.status ?? 'unknown'}, reported main base ${mainResolution?.commit ?? 'unresolved'}`
|
|
99
|
+
: status.runSource?.state === 'locked' && row.recordedLocks[0]
|
|
100
|
+
? `${declaration.id} run input ${row.recordedLocks[0].entry.effectiveRef} ${row.recordedLocks[0].entry.commit}${pinSummary}`
|
|
101
|
+
: `${declaration.id} reported ${row.effective?.effectiveRef ?? declaration.ref ?? 'main'} ${row.resolution?.commit ?? 'unresolved'} ${row.resolution?.status ?? 'unknown'}${pinSummary}`;
|
|
102
|
+
return {
|
|
103
|
+
...row,
|
|
104
|
+
summary,
|
|
105
|
+
details: [
|
|
106
|
+
...(draftRef !== undefined
|
|
107
|
+
? [
|
|
108
|
+
`Draft main base ${mainResolution?.commit ?? 'unresolved'}; creation resolves and captures the selected branch and main again.`,
|
|
109
|
+
]
|
|
110
|
+
: []),
|
|
111
|
+
...sourceRowFacts(row),
|
|
112
|
+
],
|
|
113
|
+
};
|
|
114
|
+
}),
|
|
115
|
+
errors: status.errors,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/** All renderers describe the same reported locks, pin audit and receipt facts. */
|
|
119
|
+
function sourceRowFacts(row) {
|
|
120
|
+
const lines = [];
|
|
121
|
+
if (row.resolution?.resolvedAt)
|
|
122
|
+
lines.push(`Ref resolved at ${row.resolution.resolvedAt}`);
|
|
123
|
+
if (row.effective?.pin)
|
|
124
|
+
lines.push(`Reported pin ${row.effective.pin.scope} ${row.effective.pin.targetId} ${row.effective.pin.selection}, base main ${row.effective.pin.baseMainCommit}, by ${row.effective.pin.actor} at ${row.effective.pin.createdAt}`);
|
|
125
|
+
for (const pin of row.effective?.shadowedPins ?? [])
|
|
126
|
+
lines.push(`Shadowed ${pin.scope} ${pin.targetId} ${pin.ref}, base main ${pin.baseMainCommit}`);
|
|
127
|
+
for (const recorded of row.recordedLocks)
|
|
128
|
+
lines.push(`Recorded lock ${recorded.context.runId ?? recorded.context.nodeId ?? 'farm'} ${recorded.entry.effectiveRef} ${recorded.entry.commit}, scope ${recorded.entry.scope}${recorded.entry.pin ? `, base main ${recorded.entry.pin.baseMainCommit}, by ${recorded.entry.pin.actor} at ${recorded.entry.pin.createdAt}` : ''}, ${recorded.digest}`);
|
|
129
|
+
for (const materialization of row.materializations)
|
|
130
|
+
lines.push(`Node receipt ${materialization.nodeId} ${materialization.commit} ${materialization.lockDigest}: ${materialization.drift.length ? materialization.drift.join('; ') : materialization.verifiedAt ? `verified ${materialization.verifiedAt}` : 'unverified'}`);
|
|
131
|
+
return lines;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=status-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-view.js","sourceRoot":"","sources":["../../src/sources/status-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SourceConfiguration, SourceEntryRef } from './contracts.js';
|
|
2
|
+
export declare function assertSourceEntry(value: unknown): asserts value is SourceEntryRef;
|
|
3
|
+
export declare function isContainedSourceEntry(value: string): boolean;
|
|
4
|
+
/** Credential-free Git repository identity; authentication remains Git's responsibility. */
|
|
5
|
+
export declare function canonicalSourceRepo(value: string): string;
|
|
6
|
+
export declare function assertSourceConfiguration(value: unknown): asserts value is SourceConfiguration;
|
|
7
|
+
/** Canonical ordering is shared by locks, integrity receipts and mutation comparisons. */
|
|
8
|
+
export declare function canonicalSourceJson(value: unknown): string;
|
|
9
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/sources/validation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE1E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,cAAc,CAUjF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAO7D;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAezD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAuC9F;AAED,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAS1D"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { isRecord } from '../recipe/common.js';
|
|
2
|
+
export function assertSourceEntry(value) {
|
|
3
|
+
if (!isRecord(value) ||
|
|
4
|
+
typeof value.sourceId !== 'string' ||
|
|
5
|
+
!/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(String(value.sourceId)) ||
|
|
6
|
+
typeof value.entry !== 'string' ||
|
|
7
|
+
!isContainedSourceEntry(value.entry) ||
|
|
8
|
+
Object.keys(value).some((key) => !['sourceId', 'entry'].includes(key)))
|
|
9
|
+
throw new Error('Source binding requires a sourceId and contained relative entry');
|
|
10
|
+
}
|
|
11
|
+
export function isContainedSourceEntry(value) {
|
|
12
|
+
return (value === '.' ||
|
|
13
|
+
(/^[a-zA-Z0-9_.@/-]+$/.test(value) &&
|
|
14
|
+
!value.startsWith('/') &&
|
|
15
|
+
!value.split('/').some((part) => !part || part === '.' || part === '..')));
|
|
16
|
+
}
|
|
17
|
+
/** Credential-free Git repository identity; authentication remains Git's responsibility. */
|
|
18
|
+
export function canonicalSourceRepo(value) {
|
|
19
|
+
const scp = /^git@([^/:]+):([^\s]+)$/.exec(value);
|
|
20
|
+
const url = new URL(scp ? `ssh://git@${scp[1]}/${scp[2]}` : value);
|
|
21
|
+
if (!['https:', 'ssh:'].includes(url.protocol) ||
|
|
22
|
+
url.password ||
|
|
23
|
+
url.search ||
|
|
24
|
+
url.hash ||
|
|
25
|
+
(url.username && !(url.protocol === 'ssh:' && url.username === 'git')) ||
|
|
26
|
+
!url.hostname ||
|
|
27
|
+
!/^\/[a-zA-Z0-9_.-]+(?:\/[a-zA-Z0-9_.-]+)+\/?$/.test(url.pathname))
|
|
28
|
+
throw new Error('Source repository must be a credential-free HTTPS or Git SSH identity');
|
|
29
|
+
url.pathname = url.pathname.replace(/\/$/, '').replace(/\.git$/, '');
|
|
30
|
+
return url.toString().replace(/\/$/, '');
|
|
31
|
+
}
|
|
32
|
+
export function assertSourceConfiguration(value) {
|
|
33
|
+
if (!isRecord(value) ||
|
|
34
|
+
value.schemaVersion !== 1 ||
|
|
35
|
+
!Number.isSafeInteger(value.revision) ||
|
|
36
|
+
Number(value.revision) < 1 ||
|
|
37
|
+
!Number.isSafeInteger(value.pollIntervalMs) ||
|
|
38
|
+
Number(value.pollIntervalMs) < 1_000 ||
|
|
39
|
+
Number(value.pollIntervalMs) > 300_000 ||
|
|
40
|
+
!Array.isArray(value.sources) ||
|
|
41
|
+
!isRecord(value.packs) ||
|
|
42
|
+
Object.keys(value).some((key) => !['schemaVersion', 'revision', 'pollIntervalMs', 'sources', 'packs'].includes(key)))
|
|
43
|
+
throw new Error('Invalid source configuration or unsupported schema');
|
|
44
|
+
const ids = new Set();
|
|
45
|
+
for (const source of value.sources) {
|
|
46
|
+
if (!isRecord(source) ||
|
|
47
|
+
typeof source.id !== 'string' ||
|
|
48
|
+
!/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(source.id) ||
|
|
49
|
+
ids.has(source.id) ||
|
|
50
|
+
!['pack', 'recipe-library', 'helper'].includes(String(source.kind)) ||
|
|
51
|
+
typeof source.repo !== 'string' ||
|
|
52
|
+
(source.ref !== undefined &&
|
|
53
|
+
(typeof source.ref !== 'string' || !source.ref || source.ref.startsWith('-'))) ||
|
|
54
|
+
Object.keys(source).some((key) => !['id', 'kind', 'repo', 'ref'].includes(key)))
|
|
55
|
+
throw new Error('Invalid or duplicate source declaration');
|
|
56
|
+
canonicalSourceRepo(source.repo);
|
|
57
|
+
ids.add(source.id);
|
|
58
|
+
}
|
|
59
|
+
for (const [project, binding] of Object.entries(value.packs)) {
|
|
60
|
+
if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(project))
|
|
61
|
+
throw new Error('Invalid pack name');
|
|
62
|
+
assertSourceEntry(binding);
|
|
63
|
+
if (!value.sources.some((source) => source.id === binding.sourceId && source.kind === 'pack'))
|
|
64
|
+
throw new Error(`Pack ${project} references an undeclared pack source`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** Canonical ordering is shared by locks, integrity receipts and mutation comparisons. */
|
|
68
|
+
export function canonicalSourceJson(value) {
|
|
69
|
+
if (Array.isArray(value))
|
|
70
|
+
return `[${value.map(canonicalSourceJson).join(',')}]`;
|
|
71
|
+
if (isRecord(value))
|
|
72
|
+
return `{${Object.keys(value)
|
|
73
|
+
.filter((key) => value[key] !== undefined)
|
|
74
|
+
.sort()
|
|
75
|
+
.map((key) => `${JSON.stringify(key)}:${canonicalSourceJson(value[key])}`)
|
|
76
|
+
.join(',')}}`;
|
|
77
|
+
return JSON.stringify(value);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/sources/validation.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const PROTOCOL_VERSION = "0.
|
|
1
|
+
export declare const PROTOCOL_VERSION = "0.42.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
// fleet can be upgraded deliberately; optional method/event fields remain
|
|
4
4
|
// backward-compatible unless a caller requires a new node capability.
|
|
5
5
|
// Format: semver-ish, increment when methods/events/frame format changes.
|
|
6
|
-
export const PROTOCOL_VERSION = '0.
|
|
6
|
+
export const PROTOCOL_VERSION = '0.42.0';
|
|
7
7
|
//# sourceMappingURL=version.js.map
|