@elaraai/e3-core 1.0.13 → 1.0.15
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/src/dataflow/steps.spec.js +1 -0
- package/dist/src/dataflow/steps.spec.js.map +1 -1
- package/dist/src/dataflow-orchestration.spec.js +67 -3
- package/dist/src/dataflow-orchestration.spec.js.map +1 -1
- package/dist/src/dataflow.spec.js +1 -0
- package/dist/src/dataflow.spec.js.map +1 -1
- package/dist/src/dataset-refs.d.ts.map +1 -1
- package/dist/src/dataset-refs.js +7 -1
- package/dist/src/dataset-refs.js.map +1 -1
- package/dist/src/errors.d.ts +15 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +22 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/execution/processExec.d.ts.map +1 -1
- package/dist/src/execution/processExec.js +14 -10
- package/dist/src/execution/processExec.js.map +1 -1
- package/dist/src/gc.spec.js +45 -2
- package/dist/src/gc.spec.js.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/records.d.ts +136 -0
- package/dist/src/records.d.ts.map +1 -0
- package/dist/src/records.js +250 -0
- package/dist/src/records.js.map +1 -0
- package/dist/src/records.spec.d.ts +6 -0
- package/dist/src/records.spec.d.ts.map +1 -0
- package/dist/src/records.spec.js +299 -0
- package/dist/src/records.spec.js.map +1 -0
- package/dist/src/storage/in-memory/InMemoryStorage.d.ts +9 -0
- package/dist/src/storage/in-memory/InMemoryStorage.d.ts.map +1 -1
- package/dist/src/storage/in-memory/InMemoryStorage.js +26 -4
- package/dist/src/storage/in-memory/InMemoryStorage.js.map +1 -1
- package/dist/src/storage/interfaces.d.ts +64 -10
- package/dist/src/storage/interfaces.d.ts.map +1 -1
- package/dist/src/storage/local/LocalDatasetRefStore.d.ts +21 -0
- package/dist/src/storage/local/LocalDatasetRefStore.d.ts.map +1 -1
- package/dist/src/storage/local/LocalDatasetRefStore.js +100 -14
- package/dist/src/storage/local/LocalDatasetRefStore.js.map +1 -1
- package/dist/src/storage/local/LocalDatasetRefStore.spec.d.ts +6 -0
- package/dist/src/storage/local/LocalDatasetRefStore.spec.d.ts.map +1 -0
- package/dist/src/storage/local/LocalDatasetRefStore.spec.js +118 -0
- package/dist/src/storage/local/LocalDatasetRefStore.spec.js.map +1 -0
- package/dist/src/storage/local/LocalRepoStore.d.ts.map +1 -1
- package/dist/src/storage/local/LocalRepoStore.js +9 -0
- package/dist/src/storage/local/LocalRepoStore.js.map +1 -1
- package/dist/src/storage/local/gc.d.ts.map +1 -1
- package/dist/src/storage/local/gc.js +66 -0
- package/dist/src/storage/local/gc.js.map +1 -1
- package/dist/src/trees.d.ts.map +1 -1
- package/dist/src/trees.js +29 -5
- package/dist/src/trees.js.map +1 -1
- package/dist/src/workspaces.d.ts.map +1 -1
- package/dist/src/workspaces.js +116 -5
- package/dist/src/workspaces.js.map +1 -1
- package/package.json +4 -4
package/dist/src/index.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export { objectWrite, objectWriteStream, objectRead, objectExists, } from './sto
|
|
|
18
18
|
export { objectPath, objectAbbrev } from './storage/local/localHelpers.js';
|
|
19
19
|
export { packageImport, packageExport, packageRemove, packageList, packageGetLatestVersion, packageResolve, packageRead, type PackageImportResult, type PackageImportOptions, type PackageExportResult, } from './packages.js';
|
|
20
20
|
export { workspaceList, workspaceCreate, workspaceRemove, workspaceGetState, workspaceGetPackage, workspaceDeploy, workspaceExport, type WorkspaceExportResult, type WorkspaceRemoveOptions, type WorkspaceDeployOptions, } from './workspaces.js';
|
|
21
|
+
export { recordMutate, recordHistory, recordDescribe, recordCompact, type MutationOutcome, type RecordMutateOptions, type RecordMutateLimits, type RecordHistoryEntry, type RecordSignature, } from './records.js';
|
|
21
22
|
export { treeRead, treeWrite, datasetRead, datasetWrite, type TreeObject, } from './trees.js';
|
|
22
23
|
export { packageListTree, workspaceListTree, workspaceGetDataset, workspaceGetDatasetHash, workspaceGetDatasetStatus, workspaceSetDataset, workspaceSetDatasetByHash, workspaceGetTree, type DatasetStatusResult, type WorkspaceSetDatasetOptions, type WorkspaceGetTreeOptions, type TreeNode, type TreeBranchNode, type TreeLeafNode, } from './trees.js';
|
|
23
24
|
export { packageListTasks, packageGetTask, workspaceListTasks, workspaceGetTask, workspaceGetTaskHash, } from './tasks.js';
|
|
@@ -30,6 +31,6 @@ export { type DataflowExecutionState, type DataflowExecutionStatus, type TaskSta
|
|
|
30
31
|
export { acquireWorkspaceLock, getWorkspaceLockState, getWorkspaceLockHolder, lockStateToHolderInfo, isLockHolderAlive, workspaceLockPath, type WorkspaceLockHandle, type AcquireLockOptions, } from './storage/local/LocalLockService.js';
|
|
31
32
|
export { workspaceStatus, type DatasetStatus, type TaskStatus, type DatasetStatusInfo, type TaskStatusInfo, type WorkspaceStatusResult, } from './workspaceStatus.js';
|
|
32
33
|
export { checkVersionConsistency, mergeVersionVectors, inputVersionVector, keypathToRefPath, refPathToKeypath, snapshotInputVersions, detectInputChanges, computeRootHash, writeRefsFromTree, writeRefsFromPackage, } from './dataset-refs.js';
|
|
33
|
-
export { E3Error, RepoNotFoundError, RepoAlreadyExistsError, RepoStatusConflictError, WorkspaceNotFoundError, WorkspaceNotDeployedError, WorkspaceExistsError, WorkspaceLockError, type LockHolderInfo, PackageNotFoundError, PackageInvalidError, PackageExistsError, DatasetNotFoundError, TaskNotFoundError, ObjectNotFoundError, ObjectCorruptError, ExecutionCorruptError, ExecutionNotFoundError, DataflowError, DataflowAbortedError, PermissionDeniedError, isNotFoundError, isPermissionError, isExistsError, wrapError, } from './errors.js';
|
|
34
|
+
export { E3Error, RepoNotFoundError, RepoAlreadyExistsError, RepoStatusConflictError, WorkspaceNotFoundError, WorkspaceNotDeployedError, WorkspaceExistsError, WorkspaceLockError, type LockHolderInfo, PackageNotFoundError, PackageInvalidError, PackageExistsError, DatasetNotFoundError, DatasetRefConflictError, TaskNotFoundError, ObjectNotFoundError, ObjectCorruptError, ExecutionCorruptError, ExecutionNotFoundError, DataflowError, DataflowAbortedError, PermissionDeniedError, isNotFoundError, isPermissionError, isExistsError, wrapError, } from './errors.js';
|
|
34
35
|
export * from './transfer/index.js';
|
|
35
36
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.js
CHANGED
|
@@ -36,6 +36,8 @@ export { objectPath, objectAbbrev } from './storage/local/localHelpers.js';
|
|
|
36
36
|
export { packageImport, packageExport, packageRemove, packageList, packageGetLatestVersion, packageResolve, packageRead, } from './packages.js';
|
|
37
37
|
// Workspace operations
|
|
38
38
|
export { workspaceList, workspaceCreate, workspaceRemove, workspaceGetState, workspaceGetPackage, workspaceDeploy, workspaceExport, } from './workspaces.js';
|
|
39
|
+
// Record mutations and history (the write half of the CQRS pair)
|
|
40
|
+
export { recordMutate, recordHistory, recordDescribe, recordCompact, } from './records.js';
|
|
39
41
|
// Tree and dataset operations (low-level, by hash)
|
|
40
42
|
export { treeRead, treeWrite, datasetRead, datasetWrite, } from './trees.js';
|
|
41
43
|
// Tree and dataset operations (high-level, by path)
|
|
@@ -84,7 +86,7 @@ WorkspaceNotFoundError, WorkspaceNotDeployedError, WorkspaceExistsError, Workspa
|
|
|
84
86
|
// Package
|
|
85
87
|
PackageNotFoundError, PackageInvalidError, PackageExistsError,
|
|
86
88
|
// Dataset
|
|
87
|
-
DatasetNotFoundError,
|
|
89
|
+
DatasetNotFoundError, DatasetRefConflictError,
|
|
88
90
|
// Task
|
|
89
91
|
TaskNotFoundError,
|
|
90
92
|
// Object
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Record mutation execution — the write half of the function machinery.
|
|
7
|
+
*
|
|
8
|
+
* A mutation is a pure East reducer `(State, ...Args) => State` run via the
|
|
9
|
+
* graph-free {@link runDetached} kernel in a compare-and-swap retry loop:
|
|
10
|
+
* read state → reduce → write new state + commit objects → conditional ref
|
|
11
|
+
* write; retry on conflict. A crash at any point leaves only unreferenced
|
|
12
|
+
* objects (GC reclaims them) — never a torn record. The reducer's purity is
|
|
13
|
+
* what makes re-running against fresher state safe.
|
|
14
|
+
*/
|
|
15
|
+
import { type EastTypeValue } from '@elaraai/east';
|
|
16
|
+
import { type RecordCommit } from '@elaraai/e3-types';
|
|
17
|
+
import type { StorageBackend, LockHandle } from './storage/interfaces.js';
|
|
18
|
+
import type { TaskRunner } from './execution/interfaces.js';
|
|
19
|
+
/** Mutations persist their (potentially large) new state, so the result cap is
|
|
20
|
+
* far higher than the 1 MB inline-result default for function calls. */
|
|
21
|
+
export interface RecordMutateLimits {
|
|
22
|
+
timeoutMs: number;
|
|
23
|
+
maxResultBytes: number;
|
|
24
|
+
maxLogBytes: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The outcome of a mutation attempt. Only `committed` writes anything durable;
|
|
28
|
+
* every other outcome leaves the repo byte-identical (bar unreferenced objects
|
|
29
|
+
* GC reclaims).
|
|
30
|
+
*/
|
|
31
|
+
export type MutationOutcome =
|
|
32
|
+
/** New state + commit written, record ref swung to the new commit. */
|
|
33
|
+
{
|
|
34
|
+
kind: 'committed';
|
|
35
|
+
commitHash: string;
|
|
36
|
+
stateHash: string;
|
|
37
|
+
}
|
|
38
|
+
/** Lookup/arity error — nothing ran. */
|
|
39
|
+
| {
|
|
40
|
+
kind: 'invalid';
|
|
41
|
+
message: string;
|
|
42
|
+
}
|
|
43
|
+
/** The reducer process exited non-zero (incl. a reducer `$.error`). */
|
|
44
|
+
| {
|
|
45
|
+
kind: 'failed';
|
|
46
|
+
exitCode: number;
|
|
47
|
+
stderr: string;
|
|
48
|
+
}
|
|
49
|
+
/** The reducer exceeded its time budget. */
|
|
50
|
+
| {
|
|
51
|
+
kind: 'timed_out';
|
|
52
|
+
ms: number;
|
|
53
|
+
stderr: string;
|
|
54
|
+
}
|
|
55
|
+
/** The new state exceeded the result-size cap. */
|
|
56
|
+
| {
|
|
57
|
+
kind: 'too_large';
|
|
58
|
+
bytes: number;
|
|
59
|
+
limit: number;
|
|
60
|
+
stderr: string;
|
|
61
|
+
}
|
|
62
|
+
/** The compare-and-swap lost the race `attempts` times. */
|
|
63
|
+
| {
|
|
64
|
+
kind: 'conflict';
|
|
65
|
+
attempts: number;
|
|
66
|
+
};
|
|
67
|
+
export interface RecordMutateOptions {
|
|
68
|
+
/** Caller identity recorded on the commit (auth principal / `cli:<user>`). */
|
|
69
|
+
actor: string;
|
|
70
|
+
/** Execution limits; sensible record defaults applied when omitted. */
|
|
71
|
+
limits?: RecordMutateLimits;
|
|
72
|
+
/** Wall-clock budget for CAS retries (default 30s); on expiry returns conflict. */
|
|
73
|
+
maxRetryMs?: number;
|
|
74
|
+
/** Optional hard cap on CAS attempts (mainly for tests forcing a conflict). */
|
|
75
|
+
maxAttempts?: number;
|
|
76
|
+
/** Cancellation — aborts the in-flight reducer execution (how is the runner's
|
|
77
|
+
* concern: a local runner kills the process group, a remote one cancels the
|
|
78
|
+
* invocation). */
|
|
79
|
+
signal?: AbortSignal;
|
|
80
|
+
/** Externally-held shared workspace lock; acquired internally when omitted. */
|
|
81
|
+
lock?: LockHandle;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Apply a named mutation to a record under optimistic concurrency.
|
|
85
|
+
*
|
|
86
|
+
* Resolves the mutation, then loops: read the current state + revision, run the
|
|
87
|
+
* reducer against it, write the new state and a commit object, and conditionally
|
|
88
|
+
* swing the record ref. On a concurrent commit the conditional write conflicts
|
|
89
|
+
* and the loop retries against fresher state. Two mutations on the same record
|
|
90
|
+
* serialize; mutations on different records never contend.
|
|
91
|
+
*/
|
|
92
|
+
export declare function recordMutate(storage: StorageBackend, runner: TaskRunner, repo: string, ws: string, recordName: string, mutationName: string, args: Uint8Array[], opts: RecordMutateOptions): Promise<MutationOutcome>;
|
|
93
|
+
/** A record's mutation surface: each mutation's name and EXTRA arg types. */
|
|
94
|
+
export interface RecordSignature {
|
|
95
|
+
name: string;
|
|
96
|
+
mutations: Array<{
|
|
97
|
+
name: string;
|
|
98
|
+
argTypes: EastTypeValue[];
|
|
99
|
+
}>;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Describe a record's mutations (name + extra arg types), so dynamic callers
|
|
103
|
+
* can encode arguments. Returns null if the workspace has no such record.
|
|
104
|
+
*/
|
|
105
|
+
export declare function recordDescribe(storage: StorageBackend, repo: string, ws: string, recordName: string): Promise<RecordSignature | null>;
|
|
106
|
+
/**
|
|
107
|
+
* Compact a record's history: write a fresh `$compact` root commit
|
|
108
|
+
* (`parent: none`) over the current state and swing the ref to it. The prior
|
|
109
|
+
* commit chain becomes unreachable and is reclaimed by GC; the state itself is
|
|
110
|
+
* unchanged. Returns `committed` / `invalid` / `conflict` like a mutation.
|
|
111
|
+
*/
|
|
112
|
+
export declare function recordCompact(storage: StorageBackend, repo: string, ws: string, recordName: string, opts: {
|
|
113
|
+
actor: string;
|
|
114
|
+
maxRetryMs?: number;
|
|
115
|
+
maxAttempts?: number;
|
|
116
|
+
lock?: LockHandle;
|
|
117
|
+
}): Promise<MutationOutcome>;
|
|
118
|
+
/** A commit in a record's history, with its content hash. */
|
|
119
|
+
export interface RecordHistoryEntry {
|
|
120
|
+
hash: string;
|
|
121
|
+
commit: RecordCommit;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Walk a record's commit chain newest-first.
|
|
125
|
+
*
|
|
126
|
+
* @param opts.limit - Maximum commits to return (default: the whole chain)
|
|
127
|
+
* @param opts.from - Commit hash to start the walk at (a cursor for paging,
|
|
128
|
+
* trusted to be a hash this endpoint previously returned for this record);
|
|
129
|
+
* defaults to the record's head commit. A missing/undecodable cursor (or a
|
|
130
|
+
* corrupt link mid-walk) terminates the walk rather than throwing.
|
|
131
|
+
*/
|
|
132
|
+
export declare function recordHistory(storage: StorageBackend, repo: string, ws: string, recordName: string, opts?: {
|
|
133
|
+
limit?: number;
|
|
134
|
+
from?: string;
|
|
135
|
+
}): Promise<RecordHistoryEntry[]>;
|
|
136
|
+
//# sourceMappingURL=records.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../../src/records.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;GASG;AAEH,OAAO,EAA8E,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC/H,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAS5D;yEACyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAcD;;;;GAIG;AACH,MAAM,MAAM,eAAe;AACzB,sEAAsE;AACpE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AAC9D,wCAAwC;GACtC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACtC,uEAAuE;GACrE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACtD,4CAA4C;GAC1C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACnD,kDAAkD;GAChD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACrE,2DAA2D;GACzD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,WAAW,mBAAmB;IAClC,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;uBAEmB;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AA2ED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,UAAU,EAAE,EAClB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,eAAe,CAAC,CAiE1B;AAED,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CASjC;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,GACpF,OAAO,CAAC,eAAe,CAAC,CAqC1B;AAED,6DAA6D;AAC7D,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3C,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAyB/B"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Record mutation execution — the write half of the function machinery.
|
|
7
|
+
*
|
|
8
|
+
* A mutation is a pure East reducer `(State, ...Args) => State` run via the
|
|
9
|
+
* graph-free {@link runDetached} kernel in a compare-and-swap retry loop:
|
|
10
|
+
* read state → reduce → write new state + commit objects → conditional ref
|
|
11
|
+
* write; retry on conflict. A crash at any point leaves only unreferenced
|
|
12
|
+
* objects (GC reclaims them) — never a torn record. The reducer's purity is
|
|
13
|
+
* what makes re-running against fresher state safe.
|
|
14
|
+
*/
|
|
15
|
+
import { variant, some, none, ArrayType, BlobType, encodeBeast2For, decodeBeast2For } from '@elaraai/east';
|
|
16
|
+
import { RecordObjectType, MutationObjectType, RecordCommitType, decodePackageObject, } from '@elaraai/e3-types';
|
|
17
|
+
import { workspaceGetPackage } from './workspaces.js';
|
|
18
|
+
import { refPathToKeypath } from './dataset-refs.js';
|
|
19
|
+
import { DatasetRefConflictError, WorkspaceLockError } from './errors.js';
|
|
20
|
+
const encodeCommit = encodeBeast2For(RecordCommitType);
|
|
21
|
+
const decodeCommit = decodeBeast2For(RecordCommitType);
|
|
22
|
+
const decodeRecordObject = decodeBeast2For(RecordObjectType);
|
|
23
|
+
const decodeMutationObject = decodeBeast2For(MutationObjectType);
|
|
24
|
+
const encodeArgsTuple = encodeBeast2For(ArrayType(BlobType));
|
|
25
|
+
const DEFAULT_LIMITS = {
|
|
26
|
+
timeoutMs: 60_000,
|
|
27
|
+
maxResultBytes: 64 * 1024 * 1024,
|
|
28
|
+
maxLogBytes: 64 * 1024,
|
|
29
|
+
};
|
|
30
|
+
/** Wall-clock budget for the compare-and-swap retry loop. Because each conflict
|
|
31
|
+
* means another writer committed (real progress), a hot record converges; the
|
|
32
|
+
* loop is deadline-bounded rather than capped at a fixed attempt count (which a
|
|
33
|
+
* thundering herd would exhaust, dropping a write). */
|
|
34
|
+
const DEFAULT_MAX_RETRY_MS = 30_000;
|
|
35
|
+
/**
|
|
36
|
+
* Run a record operation under a shared workspace lock (acquired internally
|
|
37
|
+
* unless the caller already holds one), so mutations coexist with dataflow but
|
|
38
|
+
* are fenced out by an exclusive deploy/remove — the §8 concurrency contract.
|
|
39
|
+
*/
|
|
40
|
+
async function withSharedWorkspaceLock(storage, repo, ws, externalLock, fn) {
|
|
41
|
+
let lock = externalLock ?? null;
|
|
42
|
+
if (!lock) {
|
|
43
|
+
lock = await storage.locks.acquire(repo, ws, variant('dataset_write', null), { mode: 'shared' });
|
|
44
|
+
if (!lock) {
|
|
45
|
+
const state = await storage.locks.getState(repo, ws);
|
|
46
|
+
throw new WorkspaceLockError(ws, state ? { acquiredAt: state.acquiredAt.toISOString(), operation: state.operation.type } : undefined);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
return await fn();
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
if (!externalLock)
|
|
54
|
+
await lock.release();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** Jittered exponential backoff (ms) before a compare-and-swap retry, so hot
|
|
58
|
+
* records don't lock-step their (expensive) reducer re-runs under contention. */
|
|
59
|
+
function casBackoffMs(attempt) {
|
|
60
|
+
return Math.min(2 ** attempt, 64) * (0.5 + Math.random());
|
|
61
|
+
}
|
|
62
|
+
/** Resolve a record name in a workspace's deployed package to its ref path and
|
|
63
|
+
* mutation table. Returns null if the workspace has no such record. */
|
|
64
|
+
async function resolveRecord(storage, repo, ws, recordName) {
|
|
65
|
+
const { hash } = await workspaceGetPackage(storage, repo, ws);
|
|
66
|
+
const pkg = decodePackageObject(await storage.objects.read(repo, hash));
|
|
67
|
+
const recHash = pkg.records.get(recordName);
|
|
68
|
+
if (!recHash)
|
|
69
|
+
return null;
|
|
70
|
+
const recObj = decodeRecordObject(await storage.objects.read(repo, recHash));
|
|
71
|
+
return {
|
|
72
|
+
refPath: recObj.path,
|
|
73
|
+
selfKeypath: refPathToKeypath(recObj.path),
|
|
74
|
+
mutations: recObj.mutations,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/** Map a non-success reducer run to its mutation outcome (nothing written).
|
|
78
|
+
* The reducer's captured stderr is forwarded on every failure so a human
|
|
79
|
+
* debugging a hand-written reducer sees its diagnostics. */
|
|
80
|
+
function failureOutcome(result) {
|
|
81
|
+
switch (result.kind) {
|
|
82
|
+
case 'failed':
|
|
83
|
+
return { kind: 'failed', exitCode: result.exitCode, stderr: result.stderr };
|
|
84
|
+
case 'timed_out':
|
|
85
|
+
return { kind: 'timed_out', ms: result.ms, stderr: result.stderr };
|
|
86
|
+
case 'too_large':
|
|
87
|
+
return { kind: 'too_large', bytes: result.bytes, limit: result.limit, stderr: result.stderr };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Apply a named mutation to a record under optimistic concurrency.
|
|
92
|
+
*
|
|
93
|
+
* Resolves the mutation, then loops: read the current state + revision, run the
|
|
94
|
+
* reducer against it, write the new state and a commit object, and conditionally
|
|
95
|
+
* swing the record ref. On a concurrent commit the conditional write conflicts
|
|
96
|
+
* and the loop retries against fresher state. Two mutations on the same record
|
|
97
|
+
* serialize; mutations on different records never contend.
|
|
98
|
+
*/
|
|
99
|
+
export async function recordMutate(storage, runner, repo, ws, recordName, mutationName, args, opts) {
|
|
100
|
+
return withSharedWorkspaceLock(storage, repo, ws, opts.lock, async () => {
|
|
101
|
+
const resolved = await resolveRecord(storage, repo, ws, recordName);
|
|
102
|
+
if (!resolved)
|
|
103
|
+
return { kind: 'invalid', message: `record '${recordName}' not found` };
|
|
104
|
+
const mutHash = resolved.mutations.get(mutationName);
|
|
105
|
+
if (!mutHash)
|
|
106
|
+
return { kind: 'invalid', message: `mutation '${mutationName}' not found on record '${recordName}'` };
|
|
107
|
+
const mutObj = decodeMutationObject(await storage.objects.read(repo, mutHash));
|
|
108
|
+
if (args.length !== mutObj.argTypes.length) {
|
|
109
|
+
return { kind: 'invalid', message: `mutation '${mutationName}' expects ${mutObj.argTypes.length} argument(s), got ${args.length}` };
|
|
110
|
+
}
|
|
111
|
+
const bodyIr = await storage.objects.read(repo, mutObj.bodyIr);
|
|
112
|
+
const limits = opts.limits ?? DEFAULT_LIMITS;
|
|
113
|
+
const deadline = Date.now() + (opts.maxRetryMs ?? DEFAULT_MAX_RETRY_MS);
|
|
114
|
+
for (let attempt = 1;; attempt++) {
|
|
115
|
+
if (opts.signal?.aborted)
|
|
116
|
+
return { kind: 'failed', exitCode: -1, stderr: 'aborted' };
|
|
117
|
+
const existing = await storage.datasets.readVersioned(repo, ws, resolved.refPath);
|
|
118
|
+
if (!existing || existing.ref.type !== 'value') {
|
|
119
|
+
return { kind: 'invalid', message: `record '${recordName}' has no state` };
|
|
120
|
+
}
|
|
121
|
+
const stateBytes = await storage.objects.read(repo, existing.ref.value.hash);
|
|
122
|
+
const result = await runner.runDetached({ bodyIr, args: [stateBytes, ...args], runner: mutObj.runner, limits }, { signal: opts.signal });
|
|
123
|
+
if (result.kind !== 'success')
|
|
124
|
+
return failureOutcome(result);
|
|
125
|
+
// Objects written before the conditional ref swing are invisible until the
|
|
126
|
+
// ref references them; a conflict simply orphans them for GC.
|
|
127
|
+
const newStateHash = await storage.objects.write(repo, result.value);
|
|
128
|
+
const argsHash = args.length > 0
|
|
129
|
+
? await storage.objects.write(repo, encodeArgsTuple(args))
|
|
130
|
+
: undefined;
|
|
131
|
+
const prevCommit = existing.ref.value.versions.get(resolved.selfKeypath);
|
|
132
|
+
const commit = {
|
|
133
|
+
parent: prevCommit !== undefined ? some(prevCommit) : none,
|
|
134
|
+
state: newStateHash,
|
|
135
|
+
mutation: mutationName,
|
|
136
|
+
args: argsHash !== undefined ? some(argsHash) : none,
|
|
137
|
+
actor: opts.actor,
|
|
138
|
+
at: new Date(),
|
|
139
|
+
};
|
|
140
|
+
const commitHash = await storage.objects.write(repo, encodeCommit(commit));
|
|
141
|
+
try {
|
|
142
|
+
await storage.datasets.writeIf(repo, ws, resolved.refPath, variant('value', { hash: newStateHash, versions: new Map([[resolved.selfKeypath, commitHash]]) }), existing.revision);
|
|
143
|
+
return { kind: 'committed', commitHash, stateHash: newStateHash };
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
if (!(err instanceof DatasetRefConflictError))
|
|
147
|
+
throw err;
|
|
148
|
+
if ((opts.maxAttempts !== undefined && attempt >= opts.maxAttempts) || Date.now() >= deadline) {
|
|
149
|
+
return { kind: 'conflict', attempts: attempt };
|
|
150
|
+
}
|
|
151
|
+
await new Promise((resolve) => setTimeout(resolve, casBackoffMs(attempt)));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Describe a record's mutations (name + extra arg types), so dynamic callers
|
|
158
|
+
* can encode arguments. Returns null if the workspace has no such record.
|
|
159
|
+
*/
|
|
160
|
+
export async function recordDescribe(storage, repo, ws, recordName) {
|
|
161
|
+
const resolved = await resolveRecord(storage, repo, ws, recordName);
|
|
162
|
+
if (!resolved)
|
|
163
|
+
return null;
|
|
164
|
+
const mutations = [];
|
|
165
|
+
for (const [name, mutHash] of resolved.mutations) {
|
|
166
|
+
const mutObj = decodeMutationObject(await storage.objects.read(repo, mutHash));
|
|
167
|
+
mutations.push({ name, argTypes: mutObj.argTypes });
|
|
168
|
+
}
|
|
169
|
+
return { name: recordName, mutations };
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Compact a record's history: write a fresh `$compact` root commit
|
|
173
|
+
* (`parent: none`) over the current state and swing the ref to it. The prior
|
|
174
|
+
* commit chain becomes unreachable and is reclaimed by GC; the state itself is
|
|
175
|
+
* unchanged. Returns `committed` / `invalid` / `conflict` like a mutation.
|
|
176
|
+
*/
|
|
177
|
+
export async function recordCompact(storage, repo, ws, recordName, opts) {
|
|
178
|
+
return withSharedWorkspaceLock(storage, repo, ws, opts.lock, async () => {
|
|
179
|
+
const resolved = await resolveRecord(storage, repo, ws, recordName);
|
|
180
|
+
if (!resolved)
|
|
181
|
+
return { kind: 'invalid', message: `record '${recordName}' not found` };
|
|
182
|
+
const deadline = Date.now() + (opts.maxRetryMs ?? DEFAULT_MAX_RETRY_MS);
|
|
183
|
+
for (let attempt = 1;; attempt++) {
|
|
184
|
+
const existing = await storage.datasets.readVersioned(repo, ws, resolved.refPath);
|
|
185
|
+
if (!existing || existing.ref.type !== 'value') {
|
|
186
|
+
return { kind: 'invalid', message: `record '${recordName}' has no state` };
|
|
187
|
+
}
|
|
188
|
+
const stateHash = existing.ref.value.hash;
|
|
189
|
+
const commit = {
|
|
190
|
+
parent: none,
|
|
191
|
+
state: stateHash,
|
|
192
|
+
mutation: '$compact',
|
|
193
|
+
args: none,
|
|
194
|
+
actor: opts.actor,
|
|
195
|
+
at: new Date(),
|
|
196
|
+
};
|
|
197
|
+
const commitHash = await storage.objects.write(repo, encodeCommit(commit));
|
|
198
|
+
try {
|
|
199
|
+
await storage.datasets.writeIf(repo, ws, resolved.refPath, variant('value', { hash: stateHash, versions: new Map([[resolved.selfKeypath, commitHash]]) }), existing.revision);
|
|
200
|
+
return { kind: 'committed', commitHash, stateHash };
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
if (!(err instanceof DatasetRefConflictError))
|
|
204
|
+
throw err;
|
|
205
|
+
if ((opts.maxAttempts !== undefined && attempt >= opts.maxAttempts) || Date.now() >= deadline) {
|
|
206
|
+
return { kind: 'conflict', attempts: attempt };
|
|
207
|
+
}
|
|
208
|
+
await new Promise((resolve) => setTimeout(resolve, casBackoffMs(attempt)));
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Walk a record's commit chain newest-first.
|
|
215
|
+
*
|
|
216
|
+
* @param opts.limit - Maximum commits to return (default: the whole chain)
|
|
217
|
+
* @param opts.from - Commit hash to start the walk at (a cursor for paging,
|
|
218
|
+
* trusted to be a hash this endpoint previously returned for this record);
|
|
219
|
+
* defaults to the record's head commit. A missing/undecodable cursor (or a
|
|
220
|
+
* corrupt link mid-walk) terminates the walk rather than throwing.
|
|
221
|
+
*/
|
|
222
|
+
export async function recordHistory(storage, repo, ws, recordName, opts = {}) {
|
|
223
|
+
const resolved = await resolveRecord(storage, repo, ws, recordName);
|
|
224
|
+
if (!resolved)
|
|
225
|
+
return [];
|
|
226
|
+
const ref = await storage.datasets.read(repo, ws, resolved.refPath);
|
|
227
|
+
if (!ref || ref.type !== 'value')
|
|
228
|
+
return [];
|
|
229
|
+
const entries = [];
|
|
230
|
+
const seen = new Set();
|
|
231
|
+
let next = opts.from ?? ref.value.versions.get(resolved.selfKeypath);
|
|
232
|
+
const limit = opts.limit ?? Infinity;
|
|
233
|
+
while (next !== undefined && entries.length < limit) {
|
|
234
|
+
// Bound the walk by distinct objects so a corrupted/cyclic parent can't hang.
|
|
235
|
+
if (seen.has(next))
|
|
236
|
+
break;
|
|
237
|
+
seen.add(next);
|
|
238
|
+
let commit;
|
|
239
|
+
try {
|
|
240
|
+
commit = decodeCommit(await storage.objects.read(repo, next));
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
break; // missing object or non-commit cursor — end the walk gracefully
|
|
244
|
+
}
|
|
245
|
+
entries.push({ hash: next, commit });
|
|
246
|
+
next = commit.parent.type === 'some' ? commit.parent.value : undefined;
|
|
247
|
+
}
|
|
248
|
+
return entries;
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=records.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"records.js","sourceRoot":"","sources":["../../src/records.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"records.spec.d.ts","sourceRoot":"","sources":["../../src/records.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|