@elaraai/e3-core 0.0.2-beta.4 → 0.0.2-beta.40

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.
Files changed (208) hide show
  1. package/README.md +25 -22
  2. package/dist/src/dataflow/api-compat.d.ts +90 -0
  3. package/dist/src/dataflow/api-compat.d.ts.map +1 -0
  4. package/dist/src/dataflow/api-compat.js +139 -0
  5. package/dist/src/dataflow/api-compat.js.map +1 -0
  6. package/dist/src/dataflow/index.d.ts +18 -0
  7. package/dist/src/dataflow/index.d.ts.map +1 -0
  8. package/dist/src/dataflow/index.js +23 -0
  9. package/dist/src/dataflow/index.js.map +1 -0
  10. package/dist/src/dataflow/orchestrator/LocalOrchestrator.d.ts +76 -0
  11. package/dist/src/dataflow/orchestrator/LocalOrchestrator.d.ts.map +1 -0
  12. package/dist/src/dataflow/orchestrator/LocalOrchestrator.js +695 -0
  13. package/dist/src/dataflow/orchestrator/LocalOrchestrator.js.map +1 -0
  14. package/dist/src/dataflow/orchestrator/index.d.ts +12 -0
  15. package/dist/src/dataflow/orchestrator/index.d.ts.map +1 -0
  16. package/dist/src/dataflow/orchestrator/index.js +12 -0
  17. package/dist/src/dataflow/orchestrator/index.js.map +1 -0
  18. package/dist/src/dataflow/orchestrator/interfaces.d.ts +163 -0
  19. package/dist/src/dataflow/orchestrator/interfaces.d.ts.map +1 -0
  20. package/dist/src/dataflow/orchestrator/interfaces.js +52 -0
  21. package/dist/src/dataflow/orchestrator/interfaces.js.map +1 -0
  22. package/dist/src/dataflow/state-store/FileStateStore.d.ts +67 -0
  23. package/dist/src/dataflow/state-store/FileStateStore.d.ts.map +1 -0
  24. package/dist/src/dataflow/state-store/FileStateStore.js +300 -0
  25. package/dist/src/dataflow/state-store/FileStateStore.js.map +1 -0
  26. package/dist/src/dataflow/state-store/InMemoryStateStore.d.ts +42 -0
  27. package/dist/src/dataflow/state-store/InMemoryStateStore.d.ts.map +1 -0
  28. package/dist/src/dataflow/state-store/InMemoryStateStore.js +229 -0
  29. package/dist/src/dataflow/state-store/InMemoryStateStore.js.map +1 -0
  30. package/dist/src/dataflow/state-store/index.d.ts +13 -0
  31. package/dist/src/dataflow/state-store/index.d.ts.map +1 -0
  32. package/dist/src/dataflow/state-store/index.js +13 -0
  33. package/dist/src/dataflow/state-store/index.js.map +1 -0
  34. package/dist/src/dataflow/state-store/interfaces.d.ts +159 -0
  35. package/dist/src/dataflow/state-store/interfaces.d.ts.map +1 -0
  36. package/dist/src/dataflow/state-store/interfaces.js +6 -0
  37. package/dist/src/dataflow/state-store/interfaces.js.map +1 -0
  38. package/dist/src/dataflow/steps.d.ts +222 -0
  39. package/dist/src/dataflow/steps.d.ts.map +1 -0
  40. package/dist/src/dataflow/steps.js +707 -0
  41. package/dist/src/dataflow/steps.js.map +1 -0
  42. package/dist/src/dataflow/types.d.ts +127 -0
  43. package/dist/src/dataflow/types.d.ts.map +1 -0
  44. package/dist/src/dataflow/types.js +7 -0
  45. package/dist/src/dataflow/types.js.map +1 -0
  46. package/dist/src/dataflow.d.ts +113 -38
  47. package/dist/src/dataflow.d.ts.map +1 -1
  48. package/dist/src/dataflow.js +269 -416
  49. package/dist/src/dataflow.js.map +1 -1
  50. package/dist/src/dataset-refs.d.ts +124 -0
  51. package/dist/src/dataset-refs.d.ts.map +1 -0
  52. package/dist/src/dataset-refs.js +319 -0
  53. package/dist/src/dataset-refs.js.map +1 -0
  54. package/dist/src/errors.d.ts +39 -9
  55. package/dist/src/errors.d.ts.map +1 -1
  56. package/dist/src/errors.js +51 -8
  57. package/dist/src/errors.js.map +1 -1
  58. package/dist/src/execution/LocalTaskRunner.d.ts +73 -0
  59. package/dist/src/execution/LocalTaskRunner.d.ts.map +1 -0
  60. package/dist/src/execution/LocalTaskRunner.js +399 -0
  61. package/dist/src/execution/LocalTaskRunner.js.map +1 -0
  62. package/dist/src/execution/MockTaskRunner.d.ts +49 -0
  63. package/dist/src/execution/MockTaskRunner.d.ts.map +1 -0
  64. package/dist/src/execution/MockTaskRunner.js +54 -0
  65. package/dist/src/execution/MockTaskRunner.js.map +1 -0
  66. package/dist/src/execution/index.d.ts +16 -0
  67. package/dist/src/execution/index.d.ts.map +1 -0
  68. package/dist/src/execution/index.js +8 -0
  69. package/dist/src/execution/index.js.map +1 -0
  70. package/dist/src/execution/interfaces.d.ts +246 -0
  71. package/dist/src/execution/interfaces.d.ts.map +1 -0
  72. package/dist/src/execution/interfaces.js +6 -0
  73. package/dist/src/execution/interfaces.js.map +1 -0
  74. package/dist/src/execution/processHelpers.d.ts +20 -0
  75. package/dist/src/execution/processHelpers.d.ts.map +1 -0
  76. package/dist/src/execution/processHelpers.js +62 -0
  77. package/dist/src/execution/processHelpers.js.map +1 -0
  78. package/dist/src/executions.d.ts +71 -104
  79. package/dist/src/executions.d.ts.map +1 -1
  80. package/dist/src/executions.js +110 -476
  81. package/dist/src/executions.js.map +1 -1
  82. package/dist/src/index.d.ts +19 -9
  83. package/dist/src/index.d.ts.map +1 -1
  84. package/dist/src/index.js +48 -18
  85. package/dist/src/index.js.map +1 -1
  86. package/dist/src/objects.d.ts +8 -51
  87. package/dist/src/objects.d.ts.map +1 -1
  88. package/dist/src/objects.js +13 -230
  89. package/dist/src/objects.js.map +1 -1
  90. package/dist/src/packages.d.ts +22 -14
  91. package/dist/src/packages.d.ts.map +1 -1
  92. package/dist/src/packages.js +134 -88
  93. package/dist/src/packages.js.map +1 -1
  94. package/dist/src/storage/in-memory/InMemoryRepoStore.d.ts +35 -0
  95. package/dist/src/storage/in-memory/InMemoryRepoStore.d.ts.map +1 -0
  96. package/dist/src/storage/in-memory/InMemoryRepoStore.js +107 -0
  97. package/dist/src/storage/in-memory/InMemoryRepoStore.js.map +1 -0
  98. package/dist/src/storage/in-memory/InMemoryStorage.d.ts +139 -0
  99. package/dist/src/storage/in-memory/InMemoryStorage.d.ts.map +1 -0
  100. package/dist/src/storage/in-memory/InMemoryStorage.js +439 -0
  101. package/dist/src/storage/in-memory/InMemoryStorage.js.map +1 -0
  102. package/dist/src/storage/in-memory/index.d.ts +12 -0
  103. package/dist/src/storage/in-memory/index.d.ts.map +1 -0
  104. package/dist/src/storage/in-memory/index.js +12 -0
  105. package/dist/src/storage/in-memory/index.js.map +1 -0
  106. package/dist/src/storage/index.d.ts +18 -0
  107. package/dist/src/storage/index.d.ts.map +1 -0
  108. package/dist/src/storage/index.js +10 -0
  109. package/dist/src/storage/index.js.map +1 -0
  110. package/dist/src/storage/interfaces.d.ts +581 -0
  111. package/dist/src/storage/interfaces.d.ts.map +1 -0
  112. package/dist/src/storage/interfaces.js +6 -0
  113. package/dist/src/storage/interfaces.js.map +1 -0
  114. package/dist/src/storage/local/LocalBackend.d.ts +56 -0
  115. package/dist/src/storage/local/LocalBackend.d.ts.map +1 -0
  116. package/dist/src/storage/local/LocalBackend.js +145 -0
  117. package/dist/src/storage/local/LocalBackend.js.map +1 -0
  118. package/dist/src/storage/local/LocalDatasetRefStore.d.ts +22 -0
  119. package/dist/src/storage/local/LocalDatasetRefStore.d.ts.map +1 -0
  120. package/dist/src/storage/local/LocalDatasetRefStore.js +118 -0
  121. package/dist/src/storage/local/LocalDatasetRefStore.js.map +1 -0
  122. package/dist/src/storage/local/LocalLockService.d.ts +111 -0
  123. package/dist/src/storage/local/LocalLockService.d.ts.map +1 -0
  124. package/dist/src/storage/local/LocalLockService.js +355 -0
  125. package/dist/src/storage/local/LocalLockService.js.map +1 -0
  126. package/dist/src/storage/local/LocalLogStore.d.ts +23 -0
  127. package/dist/src/storage/local/LocalLogStore.d.ts.map +1 -0
  128. package/dist/src/storage/local/LocalLogStore.js +66 -0
  129. package/dist/src/storage/local/LocalLogStore.js.map +1 -0
  130. package/dist/src/storage/local/LocalObjectStore.d.ts +55 -0
  131. package/dist/src/storage/local/LocalObjectStore.d.ts.map +1 -0
  132. package/dist/src/storage/local/LocalObjectStore.js +300 -0
  133. package/dist/src/storage/local/LocalObjectStore.js.map +1 -0
  134. package/dist/src/storage/local/LocalRefStore.d.ts +50 -0
  135. package/dist/src/storage/local/LocalRefStore.d.ts.map +1 -0
  136. package/dist/src/storage/local/LocalRefStore.js +337 -0
  137. package/dist/src/storage/local/LocalRefStore.js.map +1 -0
  138. package/dist/src/storage/local/LocalRepoStore.d.ts +55 -0
  139. package/dist/src/storage/local/LocalRepoStore.d.ts.map +1 -0
  140. package/dist/src/storage/local/LocalRepoStore.js +365 -0
  141. package/dist/src/storage/local/LocalRepoStore.js.map +1 -0
  142. package/dist/src/storage/local/gc.d.ts +92 -0
  143. package/dist/src/storage/local/gc.d.ts.map +1 -0
  144. package/dist/src/storage/local/gc.js +377 -0
  145. package/dist/src/storage/local/gc.js.map +1 -0
  146. package/dist/src/storage/local/index.d.ts +18 -0
  147. package/dist/src/storage/local/index.d.ts.map +1 -0
  148. package/dist/src/storage/local/index.js +18 -0
  149. package/dist/src/storage/local/index.js.map +1 -0
  150. package/dist/src/storage/local/localHelpers.d.ts +25 -0
  151. package/dist/src/storage/local/localHelpers.d.ts.map +1 -0
  152. package/dist/src/storage/local/localHelpers.js +69 -0
  153. package/dist/src/storage/local/localHelpers.js.map +1 -0
  154. package/dist/src/{repository.d.ts → storage/local/repository.d.ts} +8 -4
  155. package/dist/src/storage/local/repository.d.ts.map +1 -0
  156. package/dist/src/{repository.js → storage/local/repository.js} +31 -29
  157. package/dist/src/storage/local/repository.js.map +1 -0
  158. package/dist/src/tasks.d.ts +16 -10
  159. package/dist/src/tasks.d.ts.map +1 -1
  160. package/dist/src/tasks.js +35 -41
  161. package/dist/src/tasks.js.map +1 -1
  162. package/dist/src/test-helpers.d.ts +5 -4
  163. package/dist/src/test-helpers.d.ts.map +1 -1
  164. package/dist/src/test-helpers.js +9 -21
  165. package/dist/src/test-helpers.js.map +1 -1
  166. package/dist/src/transfer/InMemoryTransferBackend.d.ts +66 -0
  167. package/dist/src/transfer/InMemoryTransferBackend.d.ts.map +1 -0
  168. package/dist/src/transfer/InMemoryTransferBackend.js +166 -0
  169. package/dist/src/transfer/InMemoryTransferBackend.js.map +1 -0
  170. package/dist/src/transfer/index.d.ts +8 -0
  171. package/dist/src/transfer/index.d.ts.map +1 -0
  172. package/dist/src/transfer/index.js +9 -0
  173. package/dist/src/transfer/index.js.map +1 -0
  174. package/dist/src/transfer/interfaces.d.ts +103 -0
  175. package/dist/src/transfer/interfaces.d.ts.map +1 -0
  176. package/dist/src/transfer/interfaces.js +6 -0
  177. package/dist/src/transfer/interfaces.js.map +1 -0
  178. package/dist/src/transfer/types.d.ts +79 -0
  179. package/dist/src/transfer/types.d.ts.map +1 -0
  180. package/dist/src/transfer/types.js +58 -0
  181. package/dist/src/transfer/types.js.map +1 -0
  182. package/dist/src/trees.d.ts +147 -59
  183. package/dist/src/trees.d.ts.map +1 -1
  184. package/dist/src/trees.js +372 -419
  185. package/dist/src/trees.js.map +1 -1
  186. package/dist/src/uuid.d.ts +26 -0
  187. package/dist/src/uuid.d.ts.map +1 -0
  188. package/dist/src/uuid.js +80 -0
  189. package/dist/src/uuid.js.map +1 -0
  190. package/dist/src/workspaceStatus.d.ts +6 -4
  191. package/dist/src/workspaceStatus.d.ts.map +1 -1
  192. package/dist/src/workspaceStatus.js +43 -49
  193. package/dist/src/workspaceStatus.js.map +1 -1
  194. package/dist/src/workspaces.d.ts +35 -47
  195. package/dist/src/workspaces.d.ts.map +1 -1
  196. package/dist/src/workspaces.js +194 -156
  197. package/dist/src/workspaces.js.map +1 -1
  198. package/package.json +4 -4
  199. package/dist/src/gc.d.ts +0 -54
  200. package/dist/src/gc.d.ts.map +0 -1
  201. package/dist/src/gc.js +0 -233
  202. package/dist/src/gc.js.map +0 -1
  203. package/dist/src/repository.d.ts.map +0 -1
  204. package/dist/src/repository.js.map +0 -1
  205. package/dist/src/workspaceLock.d.ts +0 -67
  206. package/dist/src/workspaceLock.d.ts.map +0 -1
  207. package/dist/src/workspaceLock.js +0 -217
  208. package/dist/src/workspaceLock.js.map +0 -1
@@ -12,38 +12,34 @@
12
12
  *
13
13
  * State is stored in workspaces/<name>.beast2 as a single atomic file.
14
14
  * No state file means the workspace does not exist.
15
+ *
16
+ * Per-dataset refs are stored in workspaces/<ws>/data/<path>.ref files.
15
17
  */
16
- import * as fs from 'fs/promises';
17
18
  import { createWriteStream } from 'fs';
18
- import * as path from 'path';
19
+ import * as fs from 'fs/promises';
19
20
  import yazl from 'yazl';
20
- import { decodeBeast2For, encodeBeast2For } from '@elaraai/east';
21
- import { PackageObjectType, WorkspaceStateType } from '@elaraai/e3-types';
22
- import { objectRead, objectWrite } from './objects.js';
21
+ import { decodeBeast2For, encodeBeast2For, variant } from '@elaraai/east';
22
+ import { PackageObjectType, WorkspaceStateType, TaskObjectType, DataflowRunType, DatasetRefType } from '@elaraai/e3-types';
23
23
  import { packageResolve, packageRead } from './packages.js';
24
- import { WorkspaceNotFoundError, WorkspaceNotDeployedError, WorkspaceExistsError, isNotFoundError, } from './errors.js';
25
- import { acquireWorkspaceLock } from './workspaceLock.js';
24
+ import { writeRefsFromPackage } from './dataset-refs.js';
25
+ import { WorkspaceNotFoundError, WorkspaceNotDeployedError, WorkspaceExistsError, WorkspaceLockError, } from './errors.js';
26
26
  /**
27
- * Get the path to a workspace's state file.
27
+ * List workspace names.
28
+ *
29
+ * @param storage - Storage backend
30
+ * @param repo - Repository identifier
31
+ * @returns Array of workspace names
28
32
  */
29
- function statePath(repoPath, name) {
30
- return path.join(repoPath, 'workspaces', `${name}.beast2`);
33
+ export async function workspaceList(storage, repo) {
34
+ return storage.refs.workspaceList(repo);
31
35
  }
32
36
  /**
33
- * Atomically write workspace state.
37
+ * Write workspace state via storage backend.
34
38
  */
35
- async function writeState(repoPath, name, state) {
36
- const wsDir = path.join(repoPath, 'workspaces');
37
- const stateFile = statePath(repoPath, name);
38
- // Ensure workspaces directory exists
39
- await fs.mkdir(wsDir, { recursive: true });
39
+ async function writeState(storage, repo, name, state) {
40
40
  const encoder = encodeBeast2For(WorkspaceStateType);
41
41
  const data = encoder(state);
42
- // Write atomically: write to temp file, then rename
43
- const randomSuffix = Math.random().toString(36).slice(2, 10);
44
- const tempPath = path.join(wsDir, `.${name}.${Date.now()}.${randomSuffix}.tmp`);
45
- await fs.writeFile(tempPath, data);
46
- await fs.rename(tempPath, stateFile);
42
+ await storage.refs.workspaceWrite(repo, name, data);
47
43
  }
48
44
  /**
49
45
  * Read workspace state.
@@ -51,31 +47,25 @@ async function writeState(repoPath, name, state) {
51
47
  * Returns { exists: true, deployed: false } if workspace exists but not deployed.
52
48
  * Returns { exists: true, deployed: true, state } if workspace is deployed.
53
49
  */
54
- async function readState(repoPath, name) {
55
- const stateFile = statePath(repoPath, name);
56
- try {
57
- const data = await fs.readFile(stateFile);
58
- // Empty file means workspace exists but is not deployed
59
- if (data.length === 0) {
60
- return { exists: true, deployed: false };
61
- }
62
- const decoder = decodeBeast2For(WorkspaceStateType);
63
- return { exists: true, deployed: true, state: decoder(data) };
50
+ async function readState(storage, repo, name) {
51
+ const data = await storage.refs.workspaceRead(repo, name);
52
+ if (data === null) {
53
+ return { exists: false };
64
54
  }
65
- catch (err) {
66
- if (isNotFoundError(err)) {
67
- return { exists: false };
68
- }
69
- throw err;
55
+ // Empty file means workspace exists but is not deployed
56
+ if (data.length === 0) {
57
+ return { exists: true, deployed: false };
70
58
  }
59
+ const decoder = decodeBeast2For(WorkspaceStateType);
60
+ return { exists: true, deployed: true, state: decoder(Buffer.from(data)) };
71
61
  }
72
62
  /**
73
63
  * Read workspace state, throwing if workspace doesn't exist or is not deployed.
74
64
  * @throws {WorkspaceNotFoundError} If workspace doesn't exist
75
65
  * @throws {WorkspaceNotDeployedError} If workspace exists but has no package deployed
76
66
  */
77
- async function readStateOrThrow(repoPath, name) {
78
- const result = await readState(repoPath, name);
67
+ async function readStateOrThrow(storage, repo, name) {
68
+ const result = await readState(storage, repo, name);
79
69
  if (!result.exists) {
80
70
  throw new WorkspaceNotFoundError(name);
81
71
  }
@@ -90,30 +80,19 @@ async function readStateOrThrow(repoPath, name) {
90
80
  * Creates an undeployed workspace (state file with null package info).
91
81
  * Use workspaceDeploy to deploy a package.
92
82
  *
93
- * @param repoPath - Path to .e3 repository
83
+ * @param storage - Storage backend
84
+ * @param repo - Repository identifier
94
85
  * @param name - Workspace name
95
86
  * @throws {WorkspaceExistsError} If workspace already exists
96
87
  */
97
- export async function workspaceCreate(repoPath, name) {
98
- const stateFile = statePath(repoPath, name);
88
+ export async function workspaceCreate(storage, repo, name) {
99
89
  // Check if workspace already exists
100
- try {
101
- await fs.access(stateFile);
90
+ const existing = await storage.refs.workspaceRead(repo, name);
91
+ if (existing !== null) {
102
92
  throw new WorkspaceExistsError(name);
103
93
  }
104
- catch (err) {
105
- if (err instanceof WorkspaceExistsError)
106
- throw err;
107
- if (!isNotFoundError(err)) {
108
- throw err;
109
- }
110
- }
111
- // Create workspaces directory if needed
112
- const wsDir = path.join(repoPath, 'workspaces');
113
- await fs.mkdir(wsDir, { recursive: true });
114
- // Create empty file to mark workspace as existing but not deployed
115
- // We use an empty file rather than a state file since there's no valid state yet
116
- await fs.writeFile(stateFile, '');
94
+ // Create empty state to mark workspace as existing but not deployed
95
+ await storage.refs.workspaceWrite(repo, name, new Uint8Array(0));
117
96
  }
118
97
  /**
119
98
  * Remove a workspace.
@@ -123,27 +102,36 @@ export async function workspaceCreate(repoPath, name) {
123
102
  * Acquires a workspace lock to prevent removing a workspace while a dataflow
124
103
  * is running. Throws WorkspaceLockError if the workspace is currently locked.
125
104
  *
126
- * @param repoPath - Path to .e3 repository
105
+ * @param storage - Storage backend
106
+ * @param repo - Repository identifier
127
107
  * @param name - Workspace name
128
108
  * @param options - Optional settings including external lock
129
109
  * @throws {WorkspaceNotFoundError} If workspace doesn't exist
130
110
  * @throws {WorkspaceLockError} If workspace is locked by another process
131
111
  */
132
- export async function workspaceRemove(repoPath, name, options = {}) {
112
+ export async function workspaceRemove(storage, repo, name, options = {}) {
133
113
  // Acquire lock if not provided externally
134
114
  const externalLock = options.lock;
135
- const lock = externalLock ?? await acquireWorkspaceLock(repoPath, name);
136
- try {
137
- const stateFile = statePath(repoPath, name);
138
- try {
139
- await fs.unlink(stateFile);
115
+ let lock = externalLock ?? null;
116
+ if (!lock) {
117
+ lock = await storage.locks.acquire(repo, name, variant('removal', null));
118
+ if (!lock) {
119
+ const state = await storage.locks.getState(repo, name);
120
+ throw new WorkspaceLockError(name, state ? {
121
+ acquiredAt: state.acquiredAt.toISOString(),
122
+ operation: state.operation.type,
123
+ } : undefined);
140
124
  }
141
- catch (err) {
142
- if (isNotFoundError(err)) {
143
- throw new WorkspaceNotFoundError(name);
144
- }
145
- throw err;
125
+ }
126
+ try {
127
+ // Check if workspace exists
128
+ const existing = await storage.refs.workspaceRead(repo, name);
129
+ if (existing === null) {
130
+ throw new WorkspaceNotFoundError(name);
146
131
  }
132
+ // Remove all dataset refs for this workspace
133
+ await storage.datasets.removeAll(repo, name);
134
+ await storage.refs.workspaceRemove(repo, name);
147
135
  }
148
136
  finally {
149
137
  // Only release the lock if we acquired it internally
@@ -152,37 +140,16 @@ export async function workspaceRemove(repoPath, name, options = {}) {
152
140
  }
153
141
  }
154
142
  }
155
- /**
156
- * List workspace names.
157
- *
158
- * @param repoPath - Path to .e3 repository
159
- * @returns Array of workspace names
160
- */
161
- export async function workspaceList(repoPath) {
162
- const workspacesDir = path.join(repoPath, 'workspaces');
163
- const names = [];
164
- try {
165
- const entries = await fs.readdir(workspacesDir);
166
- for (const entry of entries) {
167
- if (entry.endsWith('.beast2')) {
168
- names.push(entry.slice(0, -7)); // Remove .beast2 extension
169
- }
170
- }
171
- }
172
- catch {
173
- // workspaces directory doesn't exist
174
- }
175
- return names;
176
- }
177
143
  /**
178
144
  * Get the full state for a workspace.
179
145
  *
180
- * @param repoPath - Path to .e3 repository
146
+ * @param storage - Storage backend
147
+ * @param repo - Repository identifier
181
148
  * @param name - Workspace name
182
149
  * @returns Workspace state, or null if workspace doesn't exist or is not deployed
183
150
  */
184
- export async function workspaceGetState(repoPath, name) {
185
- const result = await readState(repoPath, name);
151
+ export async function workspaceGetState(storage, repo, name) {
152
+ const result = await readState(storage, repo, name);
186
153
  if (!result.exists || !result.deployed) {
187
154
  return null;
188
155
  }
@@ -191,86 +158,71 @@ export async function workspaceGetState(repoPath, name) {
191
158
  /**
192
159
  * Get the deployed package for a workspace.
193
160
  *
194
- * @param repoPath - Path to .e3 repository
161
+ * @param storage - Storage backend
162
+ * @param repo - Repository identifier
195
163
  * @param name - Workspace name
196
164
  * @returns Package name, version, and hash
197
165
  * @throws {WorkspaceNotFoundError} If workspace doesn't exist
198
166
  * @throws {WorkspaceNotDeployedError} If workspace exists but has no package deployed
199
167
  */
200
- export async function workspaceGetPackage(repoPath, name) {
201
- const state = await readStateOrThrow(repoPath, name);
168
+ export async function workspaceGetPackage(storage, repo, name) {
169
+ const state = await readStateOrThrow(storage, repo, name);
202
170
  return {
203
171
  name: state.packageName,
204
172
  version: state.packageVersion,
205
173
  hash: state.packageHash,
206
174
  };
207
175
  }
208
- /**
209
- * Get the root tree hash for a workspace.
210
- *
211
- * @param repoPath - Path to .e3 repository
212
- * @param name - Workspace name
213
- * @returns Root tree object hash
214
- * @throws {WorkspaceNotFoundError} If workspace doesn't exist
215
- * @throws {WorkspaceNotDeployedError} If workspace exists but has no package deployed
216
- */
217
- export async function workspaceGetRoot(repoPath, name) {
218
- const state = await readStateOrThrow(repoPath, name);
219
- return state.rootHash;
220
- }
221
- /**
222
- * Atomically update the root tree hash for a workspace.
223
- *
224
- * @param repoPath - Path to .e3 repository
225
- * @param name - Workspace name
226
- * @param hash - New root tree object hash
227
- * @throws {WorkspaceNotFoundError} If workspace doesn't exist
228
- * @throws {WorkspaceNotDeployedError} If workspace exists but has no package deployed
229
- */
230
- export async function workspaceSetRoot(repoPath, name, hash) {
231
- const state = await readStateOrThrow(repoPath, name);
232
- const newState = {
233
- ...state,
234
- rootHash: hash,
235
- rootUpdatedAt: new Date(),
236
- };
237
- await writeState(repoPath, name, newState);
238
- }
239
176
  /**
240
177
  * Deploy a package to a workspace.
241
178
  *
242
179
  * Creates the workspace if it doesn't exist. Writes state file atomically
243
- * containing deployment info and root hash.
180
+ * containing deployment info. Initializes per-dataset ref files from the
181
+ * package's data/ directory.
244
182
  *
245
183
  * Acquires a workspace lock to prevent conflicts with running dataflows
246
184
  * or concurrent deploys. Throws WorkspaceLockError if the workspace is
247
185
  * currently locked by another process.
248
186
  *
249
- * @param repoPath - Path to .e3 repository
187
+ * @param storage - Storage backend
188
+ * @param repo - Repository identifier
250
189
  * @param name - Workspace name
251
190
  * @param pkgName - Package name
252
191
  * @param pkgVersion - Package version
253
192
  * @param options - Optional settings including external lock
254
193
  * @throws {WorkspaceLockError} If workspace is locked by another process
255
194
  */
256
- export async function workspaceDeploy(repoPath, name, pkgName, pkgVersion, options = {}) {
195
+ export async function workspaceDeploy(storage, repo, name, pkgName, pkgVersion, options = {}) {
257
196
  // Acquire lock if not provided externally
258
197
  const externalLock = options.lock;
259
- const lock = externalLock ?? await acquireWorkspaceLock(repoPath, name);
198
+ let lock = externalLock ?? null;
199
+ if (!lock) {
200
+ lock = await storage.locks.acquire(repo, name, variant('deployment', null));
201
+ if (!lock) {
202
+ const state = await storage.locks.getState(repo, name);
203
+ throw new WorkspaceLockError(name, state ? {
204
+ acquiredAt: state.acquiredAt.toISOString(),
205
+ operation: state.operation.type,
206
+ } : undefined);
207
+ }
208
+ }
260
209
  try {
261
210
  // Resolve package hash and read package object
262
- const packageHash = await packageResolve(repoPath, pkgName, pkgVersion);
263
- const pkg = await packageRead(repoPath, pkgName, pkgVersion);
211
+ const packageHash = await packageResolve(storage, repo, pkgName, pkgVersion);
212
+ const pkg = await packageRead(storage, repo, pkgName, pkgVersion);
213
+ // Remove any existing dataset refs
214
+ await storage.datasets.removeAll(repo, name);
215
+ // Initialize per-dataset ref files from the package
216
+ await writeRefsFromPackage(storage, repo, name, pkg.data.structure, pkg.data.refs);
264
217
  const now = new Date();
265
218
  const state = {
266
219
  packageName: pkgName,
267
220
  packageVersion: pkgVersion,
268
221
  packageHash,
269
222
  deployedAt: now,
270
- rootHash: pkg.data.value,
271
- rootUpdatedAt: now,
223
+ currentRunId: variant('none', null),
272
224
  };
273
- await writeState(repoPath, name, state);
225
+ await writeState(storage, repo, name, state);
274
226
  }
275
227
  finally {
276
228
  // Only release the lock if we acquired it internally
@@ -288,42 +240,53 @@ const DETERMINISTIC_MTIME = new Date(0);
288
240
  *
289
241
  * 1. Read workspace state
290
242
  * 2. Read deployed package structure using stored packageHash
291
- * 3. Create new PackageObject with data.value set to current rootHash
292
- * 4. Collect all referenced objects
293
- * 5. Write to .zip
243
+ * 3. Create new PackageObject with current structure
244
+ * 4. Collect all referenced objects from dataset refs
245
+ * 5. Write per-dataset refs and objects to .zip
294
246
  *
295
- * @param repoPath - Path to .e3 repository
247
+ * @param storage - Storage backend
248
+ * @param repo - Repository identifier
296
249
  * @param name - Workspace name
297
250
  * @param zipPath - Path to write the .zip file
298
251
  * @param outputName - Package name (default: deployed package name)
299
- * @param version - Package version (default: <pkgVersion>-<rootHash[0..8]>)
252
+ * @param version - Package version (default: <pkgVersion>-<short hash>)
300
253
  * @returns Export result with package info
301
254
  * @throws {WorkspaceNotFoundError} If workspace doesn't exist
302
255
  * @throws {WorkspaceNotDeployedError} If workspace exists but has no package deployed
303
256
  */
304
- export async function workspaceExport(repoPath, name, zipPath, outputName, version) {
257
+ export async function workspaceExport(storage, repo, name, zipPath, outputName, version) {
305
258
  const partialPath = `${zipPath}.partial`;
306
259
  // Get workspace state
307
- const state = await readStateOrThrow(repoPath, name);
260
+ const state = await readStateOrThrow(storage, repo, name);
308
261
  // Read the deployed package object using the stored hash
309
- const deployedPkgData = await objectRead(repoPath, state.packageHash);
262
+ const deployedPkgData = await storage.objects.read(repo, state.packageHash);
310
263
  const decoder = decodeBeast2For(PackageObjectType);
311
264
  const deployedPkgObject = decoder(Buffer.from(deployedPkgData));
312
265
  // Determine output name and version
313
266
  const finalName = outputName ?? state.packageName;
314
- const finalVersion = version ?? `${state.packageVersion}-${state.rootHash.slice(0, 8)}`;
315
- // Create new PackageObject with updated root
267
+ // For version, use a short identifier from the workspace name + timestamp
268
+ const finalVersion = version ?? `${state.packageVersion}-${Date.now().toString(36)}`;
269
+ // Read all workspace refs for the package
270
+ const refList = await storage.datasets.list(repo, name);
271
+ const workspaceRefs = new Map();
272
+ for (const refPath of refList) {
273
+ const ref = await storage.datasets.read(repo, name, refPath);
274
+ if (ref) {
275
+ workspaceRefs.set(refPath, ref);
276
+ }
277
+ }
278
+ // Create new PackageObject with inline refs
316
279
  const newPkgObject = {
317
280
  tasks: deployedPkgObject.tasks,
318
281
  data: {
319
282
  structure: deployedPkgObject.data.structure,
320
- value: state.rootHash,
283
+ refs: workspaceRefs,
321
284
  },
322
285
  };
323
286
  // Encode and store the new package object
324
287
  const encoder = encodeBeast2For(PackageObjectType);
325
288
  const pkgData = encoder(newPkgObject);
326
- const packageHash = await objectWrite(repoPath, pkgData);
289
+ const packageHash = await storage.objects.write(repo, pkgData);
327
290
  // Create zip file
328
291
  const zipfile = new yazl.ZipFile();
329
292
  // Track which objects we've added to avoid duplicates
@@ -333,11 +296,11 @@ export async function workspaceExport(repoPath, name, zipPath, outputName, versi
333
296
  if (addedObjects.has(hash))
334
297
  return;
335
298
  addedObjects.add(hash);
336
- const data = await objectRead(repoPath, hash);
299
+ const data = await storage.objects.read(repo, hash);
337
300
  const objPath = `objects/${hash.slice(0, 2)}/${hash.slice(2)}.beast2`;
338
301
  zipfile.addBuffer(Buffer.from(data), objPath, { mtime: DETERMINISTIC_MTIME });
339
302
  };
340
- // Helper to collect children from a tree object (same as packages.ts)
303
+ // Helper to collect children from a beast2 object via hash scanning
341
304
  const collectTreeChildren = async (treeData) => {
342
305
  const dataStr = Buffer.from(treeData).toString('latin1');
343
306
  const hashPattern = /[a-f0-9]{64}/g;
@@ -348,7 +311,7 @@ export async function workspaceExport(repoPath, name, zipPath, outputName, versi
348
311
  continue;
349
312
  try {
350
313
  await addObject(potentialHash);
351
- const childData = await objectRead(repoPath, potentialHash);
314
+ const childData = await storage.objects.read(repo, potentialHash);
352
315
  await collectTreeChildren(childData);
353
316
  }
354
317
  catch {
@@ -358,17 +321,92 @@ export async function workspaceExport(repoPath, name, zipPath, outputName, versi
358
321
  };
359
322
  // Add the package object
360
323
  await addObject(packageHash);
361
- // Collect all task objects
324
+ // Collect all task objects and their commandIr references
325
+ const taskDecoder = decodeBeast2For(TaskObjectType);
362
326
  for (const taskHash of newPkgObject.tasks.values()) {
363
327
  await addObject(taskHash);
328
+ const taskData = await storage.objects.read(repo, taskHash);
329
+ const taskObject = taskDecoder(Buffer.from(taskData));
330
+ await addObject(taskObject.commandIr);
331
+ const irData = await storage.objects.read(repo, taskObject.commandIr);
332
+ await collectTreeChildren(irData);
333
+ }
334
+ // Write ref files to zip and collect value objects
335
+ const refEncoder = encodeBeast2For(DatasetRefType);
336
+ for (const [refPath, ref] of workspaceRefs) {
337
+ // Write the DatasetRef to data/ dir in zip
338
+ const refData = refEncoder(ref);
339
+ zipfile.addBuffer(Buffer.from(refData), `data/${refPath}.ref`, { mtime: DETERMINISTIC_MTIME });
340
+ // Add the value object if present
341
+ if (ref.type === 'value') {
342
+ await addObject(ref.value.hash);
343
+ }
364
344
  }
365
- // Collect the root tree and all its children
366
- await addObject(state.rootHash);
367
- const rootTreeData = await objectRead(repoPath, state.rootHash);
368
- await collectTreeChildren(rootTreeData);
369
345
  // Write the package ref
370
346
  const refPath = `packages/${finalName}/${finalVersion}`;
371
347
  zipfile.addBuffer(Buffer.from(packageHash + '\n'), refPath, { mtime: DETERMINISTIC_MTIME });
348
+ // Include executions and logs if currentRunId exists
349
+ if (state.currentRunId.type === 'some') {
350
+ const currentRunId = state.currentRunId.value;
351
+ const dataflowRun = await storage.refs.dataflowRunGet(repo, name, currentRunId);
352
+ if (dataflowRun) {
353
+ // Write the dataflow run record
354
+ const runEncoder = encodeBeast2For(DataflowRunType);
355
+ const dataflowPath = `dataflows/${name}/${currentRunId}.beast2`;
356
+ zipfile.addBuffer(Buffer.from(runEncoder(dataflowRun)), dataflowPath, { mtime: DETERMINISTIC_MTIME });
357
+ // Include execution files for each task
358
+ for (const [taskName, execRecord] of dataflowRun.taskExecutions) {
359
+ const taskHash = newPkgObject.tasks.get(taskName);
360
+ if (!taskHash)
361
+ continue;
362
+ // Get the task to find its inputs
363
+ const taskData = await storage.objects.read(repo, taskHash);
364
+ const task = taskDecoder(Buffer.from(taskData));
365
+ // Compute inputsHash from workspace refs
366
+ const inputHashes = [];
367
+ for (const inputPath of task.inputs) {
368
+ try {
369
+ const { workspaceGetDatasetHash } = await import('./trees.js');
370
+ const { hash } = await workspaceGetDatasetHash(storage, repo, name, inputPath);
371
+ if (hash)
372
+ inputHashes.push(hash);
373
+ }
374
+ catch {
375
+ // Skip if input not available
376
+ }
377
+ }
378
+ if (inputHashes.length !== task.inputs.length)
379
+ continue;
380
+ const { inputsHash } = await import('./executions.js');
381
+ const inHash = inputsHash(inputHashes);
382
+ // Read and add execution status
383
+ const execStatus = await storage.refs.executionGet(repo, taskHash, inHash, execRecord.executionId);
384
+ if (execStatus) {
385
+ const statusEncoder = await import('@elaraai/e3-types').then(m => encodeBeast2For(m.ExecutionStatusType));
386
+ const statusPath = `executions/${taskHash}/${inHash}/${execRecord.executionId}/status.beast2`;
387
+ zipfile.addBuffer(Buffer.from(statusEncoder(execStatus)), statusPath, { mtime: DETERMINISTIC_MTIME });
388
+ // Add output file if success
389
+ if (execStatus.type === 'success') {
390
+ const outputPath = `executions/${taskHash}/${inHash}/${execRecord.executionId}/output`;
391
+ zipfile.addBuffer(Buffer.from(execStatus.value.outputHash + '\n'), outputPath, { mtime: DETERMINISTIC_MTIME });
392
+ }
393
+ }
394
+ // Read and add logs (stdout/stderr)
395
+ for (const stream of ['stdout', 'stderr']) {
396
+ try {
397
+ const logChunk = await storage.logs.read(repo, taskHash, inHash, execRecord.executionId, stream, { limit: 100 * 1024 * 1024 });
398
+ if (logChunk.data && logChunk.data.length > 0) {
399
+ const logPath = `executions/${taskHash}/${inHash}/${execRecord.executionId}/${stream}.txt`;
400
+ zipfile.addBuffer(Buffer.from(logChunk.data), logPath, { mtime: DETERMINISTIC_MTIME });
401
+ }
402
+ }
403
+ catch {
404
+ // Skip if log not available
405
+ }
406
+ }
407
+ }
408
+ }
409
+ }
372
410
  // Finalize and write zip to disk
373
411
  await new Promise((resolve, reject) => {
374
412
  const writeStream = createWriteStream(partialPath);
@@ -1 +1 @@
1
- {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/workspaces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/workspaces.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elaraai/e3-core",
3
- "version": "0.0.2-beta.4",
3
+ "version": "0.0.2-beta.40",
4
4
  "type": "module",
5
5
  "description": "East Execution Engine Core - Programmatic API for e3 repository operations",
6
6
  "main": "dist/src/index.js",
@@ -40,13 +40,13 @@
40
40
  "directory": "packages/e3-core"
41
41
  },
42
42
  "dependencies": {
43
- "@elaraai/e3": "^0.0.2-beta.4",
44
- "@elaraai/e3-types": "^0.0.2-beta.4",
43
+ "@elaraai/e3": "beta",
44
+ "@elaraai/e3-types": "beta",
45
45
  "yauzl": "^3.2.0",
46
46
  "yazl": "^2.5.1"
47
47
  },
48
48
  "peerDependencies": {
49
- "@elaraai/east": "^0.0.1-beta.16"
49
+ "@elaraai/east": "beta"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@types/node": "^22.0.0",
package/dist/src/gc.d.ts DELETED
@@ -1,54 +0,0 @@
1
- /**
2
- * Copyright (c) 2025 Elara AI Pty Ltd
3
- * Licensed under BSL 1.1. See LICENSE for details.
4
- */
5
- /**
6
- * Options for garbage collection
7
- */
8
- export interface GcOptions {
9
- /**
10
- * Minimum age in milliseconds for files to be considered for deletion.
11
- * Files younger than this are skipped to avoid race conditions with concurrent writes.
12
- * Default: 60000 (1 minute)
13
- */
14
- minAge?: number;
15
- /**
16
- * If true, only report what would be deleted without actually deleting.
17
- * Default: false
18
- */
19
- dryRun?: boolean;
20
- }
21
- /**
22
- * Result of garbage collection
23
- */
24
- export interface GcResult {
25
- /**
26
- * Number of objects deleted
27
- */
28
- deletedObjects: number;
29
- /**
30
- * Number of orphaned staging files deleted
31
- */
32
- deletedPartials: number;
33
- /**
34
- * Number of objects retained
35
- */
36
- retainedObjects: number;
37
- /**
38
- * Number of files skipped due to being too young
39
- */
40
- skippedYoung: number;
41
- /**
42
- * Total bytes freed
43
- */
44
- bytesFreed: number;
45
- }
46
- /**
47
- * Run garbage collection on an e3 repository.
48
- *
49
- * @param repoPath - Path to .e3 repository
50
- * @param options - GC options
51
- * @returns GC result with statistics
52
- */
53
- export declare function repoGc(repoPath: string, options?: GcOptions): Promise<GcResult>;
54
- //# sourceMappingURL=gc.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gc.d.ts","sourceRoot":"","sources":["../../src/gc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,SAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAkBnB"}