@elaraai/e3-cli 0.0.2-beta.4 → 0.0.2-beta.41
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/README.md +33 -9
- package/dist/src/cli.js +50 -15
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/auth.d.ts +21 -0
- package/dist/src/commands/auth.d.ts.map +1 -0
- package/dist/src/commands/auth.js +196 -0
- package/dist/src/commands/auth.js.map +1 -0
- package/dist/src/commands/dataset-status.d.ts +9 -0
- package/dist/src/commands/dataset-status.d.ts.map +1 -0
- package/dist/src/commands/dataset-status.js +77 -0
- package/dist/src/commands/dataset-status.js.map +1 -0
- package/dist/src/commands/get.d.ts.map +1 -1
- package/dist/src/commands/get.js +32 -14
- package/dist/src/commands/get.js.map +1 -1
- package/dist/src/commands/list.d.ts +6 -1
- package/dist/src/commands/list.d.ts.map +1 -1
- package/dist/src/commands/list.js +259 -17
- package/dist/src/commands/list.js.map +1 -1
- package/dist/src/commands/logs.d.ts.map +1 -1
- package/dist/src/commands/logs.js +105 -69
- package/dist/src/commands/logs.js.map +1 -1
- package/dist/src/commands/package.d.ts.map +1 -1
- package/dist/src/commands/package.js +55 -18
- package/dist/src/commands/package.js.map +1 -1
- package/dist/src/commands/repo.d.ts +35 -0
- package/dist/src/commands/repo.d.ts.map +1 -0
- package/dist/src/commands/repo.js +242 -0
- package/dist/src/commands/repo.js.map +1 -0
- package/dist/src/commands/run.d.ts.map +1 -1
- package/dist/src/commands/run.js +4 -3
- package/dist/src/commands/run.js.map +1 -1
- package/dist/src/commands/set.d.ts.map +1 -1
- package/dist/src/commands/set.js +16 -10
- package/dist/src/commands/set.js.map +1 -1
- package/dist/src/commands/start.d.ts.map +1 -1
- package/dist/src/commands/start.js +188 -52
- package/dist/src/commands/start.js.map +1 -1
- package/dist/src/commands/watch.d.ts.map +1 -1
- package/dist/src/commands/watch.js +26 -16
- package/dist/src/commands/watch.js.map +1 -1
- package/dist/src/commands/workspace.d.ts +8 -0
- package/dist/src/commands/workspace.d.ts.map +1 -1
- package/dist/src/commands/workspace.js +325 -37
- package/dist/src/commands/workspace.js.map +1 -1
- package/dist/src/credentials.d.ts +123 -0
- package/dist/src/credentials.d.ts.map +1 -0
- package/dist/src/credentials.js +213 -0
- package/dist/src/credentials.js.map +1 -0
- package/dist/src/format.d.ts +15 -0
- package/dist/src/format.d.ts.map +1 -0
- package/dist/src/format.js +29 -0
- package/dist/src/format.js.map +1 -0
- package/dist/src/utils.d.ts +60 -1
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +80 -1
- package/dist/src/utils.js.map +1 -1
- package/package.json +7 -6
- package/dist/src/commands/gc.d.ts +0 -12
- package/dist/src/commands/gc.d.ts.map +0 -1
- package/dist/src/commands/gc.js +0 -44
- package/dist/src/commands/gc.js.map +0 -1
- package/dist/src/commands/init.d.ts +0 -9
- package/dist/src/commands/init.d.ts.map +0 -1
- package/dist/src/commands/init.js +0 -33
- package/dist/src/commands/init.js.map +0 -1
- package/dist/src/commands/status.d.ts +0 -9
- package/dist/src/commands/status.d.ts.map +0 -1
- package/dist/src/commands/status.js +0 -157
- package/dist/src/commands/status.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/get.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/get.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,13 @@
|
|
|
2
2
|
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
3
|
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
4
|
*/
|
|
5
|
+
interface ListOptions {
|
|
6
|
+
recursive?: boolean;
|
|
7
|
+
long?: boolean;
|
|
8
|
+
}
|
|
5
9
|
/**
|
|
6
10
|
* List workspaces or tree contents at a path.
|
|
7
11
|
*/
|
|
8
|
-
export declare function listCommand(repoArg: string, pathSpec
|
|
12
|
+
export declare function listCommand(repoArg: string, pathSpec: string | undefined, options: ListOptions): Promise<void>;
|
|
13
|
+
export {};
|
|
9
14
|
//# sourceMappingURL=list.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqCH,UAAU,WAAW;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAiJD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkKpH"}
|
|
@@ -8,37 +8,279 @@
|
|
|
8
8
|
* Usage:
|
|
9
9
|
* e3 list . # List all workspaces
|
|
10
10
|
* e3 list . ws # List root tree of workspace
|
|
11
|
-
* e3 list . ws
|
|
11
|
+
* e3 list . ws -r # All descendant dataset paths
|
|
12
|
+
* e3 list . ws -l # Immediate children with type/status/size
|
|
13
|
+
* e3 list . ws -r -l # All descendants with type/status/size
|
|
12
14
|
*/
|
|
13
|
-
import { workspaceList, workspaceListTree, workspaceGetState, } from '@elaraai/e3-core';
|
|
14
|
-
import {
|
|
15
|
+
import { workspaceList, workspaceListTree, workspaceGetState, workspaceGetTree, LocalStorage, } from '@elaraai/e3-core';
|
|
16
|
+
import { workspaceList as workspaceListRemote, datasetList as datasetListRemote, datasetListAt as datasetListAtRemote, datasetListRecursive as datasetListRecursiveRemote, datasetListRecursivePaths as datasetListRecursivePathsRemote, datasetListWithStatus as datasetListWithStatusRemote, } from '@elaraai/e3-api-client';
|
|
17
|
+
import { printFor, EastTypeType } from '@elaraai/east';
|
|
18
|
+
import { parseRepoLocation, parseDatasetPath, formatError, exitError } from '../utils.js';
|
|
19
|
+
import { formatSize } from '../format.js';
|
|
20
|
+
const printTypeValue = printFor(EastTypeType);
|
|
21
|
+
/** Flatten tree nodes to collect leaf paths. */
|
|
22
|
+
function collectPaths(nodes, prefix, result) {
|
|
23
|
+
for (const node of nodes) {
|
|
24
|
+
const path = prefix ? `${prefix}.${node.name}` : `.${node.name}`;
|
|
25
|
+
if (node.kind === 'dataset') {
|
|
26
|
+
result.push(path);
|
|
27
|
+
}
|
|
28
|
+
else if (node.kind === 'tree') {
|
|
29
|
+
collectPaths(node.children, path, result);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** Derive status string from a tree leaf node. */
|
|
34
|
+
function leafStatus(node) {
|
|
35
|
+
if (node.refType === undefined)
|
|
36
|
+
return '-';
|
|
37
|
+
if (node.refType === 'unassigned')
|
|
38
|
+
return 'unset';
|
|
39
|
+
if (node.refType === 'null')
|
|
40
|
+
return 'null';
|
|
41
|
+
return 'set';
|
|
42
|
+
}
|
|
43
|
+
/** Derive size string from a tree leaf node. */
|
|
44
|
+
function leafSize(node) {
|
|
45
|
+
if (node.refType === 'unassigned')
|
|
46
|
+
return '-';
|
|
47
|
+
if (node.refType === 'null')
|
|
48
|
+
return '0 B';
|
|
49
|
+
if (node.size !== undefined)
|
|
50
|
+
return formatSize(node.size);
|
|
51
|
+
return '-';
|
|
52
|
+
}
|
|
53
|
+
/** Format type from a tree leaf node. */
|
|
54
|
+
function leafType(node) {
|
|
55
|
+
if (!node.datasetType)
|
|
56
|
+
return '-';
|
|
57
|
+
try {
|
|
58
|
+
return printTypeValue(node.datasetType);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return '?';
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** Flatten tree to table rows (recursive), including tree entries. */
|
|
65
|
+
function collectRows(nodes, prefix, result) {
|
|
66
|
+
for (const node of nodes) {
|
|
67
|
+
const path = prefix ? `${prefix}.${node.name}` : `.${node.name}`;
|
|
68
|
+
if (node.kind === 'dataset') {
|
|
69
|
+
result.push({
|
|
70
|
+
name: path,
|
|
71
|
+
type: leafType(node),
|
|
72
|
+
status: leafStatus(node),
|
|
73
|
+
size: leafSize(node),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
else if (node.kind === 'tree') {
|
|
77
|
+
result.push({ name: path, type: '(tree)', status: '-', size: '-' });
|
|
78
|
+
collectRows(node.children, path, result);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** Collect immediate children as rows (both datasets and trees). */
|
|
83
|
+
function collectImmediateRows(nodes, prefix, result) {
|
|
84
|
+
for (const node of nodes) {
|
|
85
|
+
if (node.kind === 'dataset') {
|
|
86
|
+
result.push({
|
|
87
|
+
name: node.name,
|
|
88
|
+
type: leafType(node),
|
|
89
|
+
status: leafStatus(node),
|
|
90
|
+
size: leafSize(node),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
else if (node.kind === 'tree') {
|
|
94
|
+
result.push({ name: node.name, type: '(tree)', status: '-', size: '-' });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/** Convert a ListEntry variant to a table row. */
|
|
99
|
+
function entryToRow(entry, usePath) {
|
|
100
|
+
if (entry.type === 'tree') {
|
|
101
|
+
const name = usePath ? entry.value.path : entry.value.path.split('.').pop();
|
|
102
|
+
return { name, type: '(tree)', status: '-', size: '-' };
|
|
103
|
+
}
|
|
104
|
+
// entry.type === 'dataset'
|
|
105
|
+
const item = entry.value;
|
|
106
|
+
let typeStr;
|
|
107
|
+
try {
|
|
108
|
+
typeStr = printTypeValue(item.type);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
typeStr = '?';
|
|
112
|
+
}
|
|
113
|
+
let status;
|
|
114
|
+
let size;
|
|
115
|
+
if (item.hash.type === 'none' && item.size.type === 'none') {
|
|
116
|
+
status = 'unset';
|
|
117
|
+
size = '-';
|
|
118
|
+
}
|
|
119
|
+
else if (item.size.type === 'some' && item.size.value === 0n) {
|
|
120
|
+
status = 'null';
|
|
121
|
+
size = '0 B';
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
status = 'set';
|
|
125
|
+
size = item.size.type === 'some' ? formatSize(Number(item.size.value)) : '-';
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
name: usePath ? item.path : item.path.split('.').pop(),
|
|
129
|
+
type: typeStr,
|
|
130
|
+
status,
|
|
131
|
+
size,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/** Print rows as a padded table. */
|
|
135
|
+
function printTable(rows, nameHeader) {
|
|
136
|
+
if (rows.length === 0) {
|
|
137
|
+
console.log('(empty)');
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
// Calculate column widths
|
|
141
|
+
const nameWidth = Math.max(nameHeader.length, ...rows.map(r => r.name.length));
|
|
142
|
+
const typeWidth = Math.max(4, ...rows.map(r => r.type.length));
|
|
143
|
+
const statusWidth = Math.max(6, ...rows.map(r => r.status.length));
|
|
144
|
+
const sizeWidth = Math.max(4, ...rows.map(r => r.size.length));
|
|
145
|
+
// Print header
|
|
146
|
+
console.log(`${nameHeader.padEnd(nameWidth)} ${('TYPE').padEnd(typeWidth)} ${('STATUS').padEnd(statusWidth)} ${('SIZE').padEnd(sizeWidth)}`);
|
|
147
|
+
// Print rows
|
|
148
|
+
for (const row of rows) {
|
|
149
|
+
console.log(`${row.name.padEnd(nameWidth)} ${row.type.padEnd(typeWidth)} ${row.status.padEnd(statusWidth)} ${row.size.padEnd(sizeWidth)}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
15
152
|
/**
|
|
16
153
|
* List workspaces or tree contents at a path.
|
|
17
154
|
*/
|
|
18
|
-
export async function listCommand(repoArg, pathSpec) {
|
|
155
|
+
export async function listCommand(repoArg, pathSpec, options) {
|
|
19
156
|
try {
|
|
20
|
-
const
|
|
157
|
+
const location = await parseRepoLocation(repoArg);
|
|
158
|
+
const recursive = options.recursive ?? false;
|
|
159
|
+
const long = options.long ?? false;
|
|
21
160
|
// If no path, list workspaces
|
|
22
161
|
if (!pathSpec) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
162
|
+
if (location.type === 'local') {
|
|
163
|
+
const storage = new LocalStorage();
|
|
164
|
+
const workspaces = await workspaceList(storage, location.path);
|
|
165
|
+
if (workspaces.length === 0) {
|
|
166
|
+
console.log('No workspaces');
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
for (const ws of workspaces) {
|
|
170
|
+
const state = await workspaceGetState(storage, location.path, ws);
|
|
171
|
+
if (state) {
|
|
172
|
+
console.log(`${ws} (${state.packageName}@${state.packageVersion})`);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
console.log(`${ws} (not deployed)`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
27
178
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
179
|
+
else {
|
|
180
|
+
// Remote: list workspaces
|
|
181
|
+
const workspaces = await workspaceListRemote(location.baseUrl, location.repo, { token: location.token });
|
|
182
|
+
if (workspaces.length === 0) {
|
|
183
|
+
console.log('No workspaces');
|
|
184
|
+
return;
|
|
32
185
|
}
|
|
33
|
-
|
|
34
|
-
|
|
186
|
+
for (const ws of workspaces) {
|
|
187
|
+
if (ws.deployed && ws.packageName.type === 'some' && ws.packageVersion.type === 'some') {
|
|
188
|
+
console.log(`${ws.name} (${ws.packageName.value}@${ws.packageVersion.value})`);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
console.log(`${ws.name} (not deployed)`);
|
|
192
|
+
}
|
|
35
193
|
}
|
|
36
194
|
}
|
|
37
195
|
return;
|
|
38
196
|
}
|
|
39
|
-
// Parse path
|
|
197
|
+
// Parse path
|
|
40
198
|
const { ws, path } = parseDatasetPath(pathSpec);
|
|
41
|
-
|
|
199
|
+
// -r -l: recursive with details
|
|
200
|
+
if (recursive && long) {
|
|
201
|
+
if (location.type === 'local') {
|
|
202
|
+
const storage = new LocalStorage();
|
|
203
|
+
const nodes = await workspaceGetTree(storage, location.path, ws, path, {
|
|
204
|
+
includeTypes: true,
|
|
205
|
+
includeStatus: true,
|
|
206
|
+
});
|
|
207
|
+
const rows = [];
|
|
208
|
+
const prefix = path.length > 0 ? '.' + path.map(s => s.value).join('.') : '';
|
|
209
|
+
collectRows(nodes, prefix, rows);
|
|
210
|
+
printTable(rows, 'PATH');
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
const items = await datasetListRecursiveRemote(location.baseUrl, location.repo, ws, path, { token: location.token });
|
|
214
|
+
const rows = items.map(item => entryToRow(item, true));
|
|
215
|
+
printTable(rows, 'PATH');
|
|
216
|
+
}
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
// -r: recursive paths only
|
|
220
|
+
if (recursive) {
|
|
221
|
+
if (location.type === 'local') {
|
|
222
|
+
const storage = new LocalStorage();
|
|
223
|
+
const nodes = await workspaceGetTree(storage, location.path, ws, path, {
|
|
224
|
+
includeTypes: false,
|
|
225
|
+
includeStatus: false,
|
|
226
|
+
});
|
|
227
|
+
const paths = [];
|
|
228
|
+
const prefix = path.length > 0 ? '.' + path.map(s => s.value).join('.') : '';
|
|
229
|
+
collectPaths(nodes, prefix, paths);
|
|
230
|
+
if (paths.length === 0) {
|
|
231
|
+
console.log('(empty)');
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
for (const p of paths) {
|
|
235
|
+
console.log(p);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
const paths = await datasetListRecursivePathsRemote(location.baseUrl, location.repo, ws, path, { token: location.token });
|
|
240
|
+
if (paths.length === 0) {
|
|
241
|
+
console.log('(empty)');
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
for (const p of paths) {
|
|
245
|
+
console.log(p);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
// -l: immediate children with details
|
|
251
|
+
if (long) {
|
|
252
|
+
if (location.type === 'local') {
|
|
253
|
+
const storage = new LocalStorage();
|
|
254
|
+
const nodes = await workspaceGetTree(storage, location.path, ws, path, {
|
|
255
|
+
maxDepth: 0,
|
|
256
|
+
includeTypes: true,
|
|
257
|
+
includeStatus: true,
|
|
258
|
+
});
|
|
259
|
+
const rows = [];
|
|
260
|
+
collectImmediateRows(nodes, '', rows);
|
|
261
|
+
printTable(rows, 'NAME');
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
const items = await datasetListWithStatusRemote(location.baseUrl, location.repo, ws, path, { token: location.token });
|
|
265
|
+
const rows = items.map(item => entryToRow(item, false));
|
|
266
|
+
printTable(rows, 'NAME');
|
|
267
|
+
}
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
// Default: list field names (unchanged)
|
|
271
|
+
let fields;
|
|
272
|
+
if (location.type === 'local') {
|
|
273
|
+
const storage = new LocalStorage();
|
|
274
|
+
fields = await workspaceListTree(storage, location.path, ws, path);
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
if (path.length === 0) {
|
|
278
|
+
fields = await datasetListRemote(location.baseUrl, location.repo, ws, { token: location.token });
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
fields = await datasetListAtRemote(location.baseUrl, location.repo, ws, path, { token: location.token });
|
|
282
|
+
}
|
|
283
|
+
}
|
|
42
284
|
if (fields.length === 0) {
|
|
43
285
|
console.log('(empty)');
|
|
44
286
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;GAOG;AAEH,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEpF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe,EAAE,QAAiB;IAClE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAEtC,8BAA8B;QAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YAEjD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;YAED,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACpD,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;gBACvE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QAED,oCAAoC;QACpC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAE3D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/commands/logs.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/commands/logs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0NH;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC,IAAI,CAAC,CAqEf"}
|
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
* e3 logs . ws.taskName # Show logs for task's latest execution
|
|
11
11
|
* e3 logs . ws.taskName --follow # Follow log output
|
|
12
12
|
*/
|
|
13
|
-
import { workspaceListTasks, workspaceGetTaskHash, executionListForTask, executionReadLog,
|
|
14
|
-
import {
|
|
13
|
+
import { workspaceListTasks, workspaceGetTaskHash, executionListForTask, executionReadLog, executionGetLatest, executionFindCurrent, isProcessAlive, LocalStorage, } from '@elaraai/e3-core';
|
|
14
|
+
import { taskList as taskListRemote, taskExecutionList as taskExecutionListRemote, taskLogs as taskLogsRemote, ApiError, } from '@elaraai/e3-api-client';
|
|
15
|
+
import { parseRepoLocation, formatError, exitError } from '../utils.js';
|
|
15
16
|
/**
|
|
16
17
|
* Format a hash for display (abbreviated).
|
|
17
18
|
*/
|
|
@@ -34,8 +35,8 @@ function parseTaskPath(pathSpec) {
|
|
|
34
35
|
/**
|
|
35
36
|
* List tasks in a workspace with their execution status.
|
|
36
37
|
*/
|
|
37
|
-
async function listWorkspaceTasks(repoPath, ws) {
|
|
38
|
-
const tasks = await workspaceListTasks(repoPath, ws);
|
|
38
|
+
async function listWorkspaceTasks(storage, repoPath, ws) {
|
|
39
|
+
const tasks = await workspaceListTasks(storage, repoPath, ws);
|
|
39
40
|
if (tasks.length === 0) {
|
|
40
41
|
console.log(`No tasks in workspace: ${ws}`);
|
|
41
42
|
return;
|
|
@@ -43,16 +44,26 @@ async function listWorkspaceTasks(repoPath, ws) {
|
|
|
43
44
|
console.log(`Tasks in workspace: ${ws}`);
|
|
44
45
|
console.log('');
|
|
45
46
|
for (const taskName of tasks) {
|
|
46
|
-
const taskHash = await workspaceGetTaskHash(repoPath, ws, taskName);
|
|
47
|
-
const executions = await executionListForTask(repoPath, taskHash);
|
|
47
|
+
const taskHash = await workspaceGetTaskHash(storage, repoPath, ws, taskName);
|
|
48
|
+
const executions = await executionListForTask(storage, repoPath, taskHash);
|
|
48
49
|
if (executions.length === 0) {
|
|
49
50
|
console.log(` ${taskName} (no executions)`);
|
|
50
51
|
}
|
|
51
52
|
else {
|
|
52
53
|
// Get status of the most recent execution
|
|
53
54
|
const latestInHash = executions[0];
|
|
54
|
-
const status = await
|
|
55
|
-
|
|
55
|
+
const status = await executionGetLatest(storage, repoPath, taskHash, latestInHash);
|
|
56
|
+
let state = status?.type ?? 'unknown';
|
|
57
|
+
// Check if running process is actually alive
|
|
58
|
+
if (status?.type === 'running') {
|
|
59
|
+
const pid = Number(status.value.pid);
|
|
60
|
+
const pidStartTime = Number(status.value.pidStartTime);
|
|
61
|
+
const bootId = status.value.bootId;
|
|
62
|
+
const alive = await isProcessAlive(pid, pidStartTime, bootId);
|
|
63
|
+
if (!alive) {
|
|
64
|
+
state = 'stale-running';
|
|
65
|
+
}
|
|
66
|
+
}
|
|
56
67
|
console.log(` ${taskName} [${state}] (${executions.length} execution(s))`);
|
|
57
68
|
}
|
|
58
69
|
}
|
|
@@ -60,41 +71,9 @@ async function listWorkspaceTasks(repoPath, ws) {
|
|
|
60
71
|
console.log(`Use "e3 logs . ${ws}.<taskName>" to view logs.`);
|
|
61
72
|
}
|
|
62
73
|
/**
|
|
63
|
-
*
|
|
64
|
-
* This matches the execution that corresponds to the current input values.
|
|
65
|
-
*/
|
|
66
|
-
async function findCurrentExecution(repoPath, ws, taskName) {
|
|
67
|
-
const taskHash = await workspaceGetTaskHash(repoPath, ws, taskName);
|
|
68
|
-
const task = await workspaceGetTask(repoPath, ws, taskName);
|
|
69
|
-
// Get the current input hashes from the workspace
|
|
70
|
-
const currentInputHashes = [];
|
|
71
|
-
for (const inputPath of task.inputs) {
|
|
72
|
-
const { refType, hash } = await workspaceGetDatasetHash(repoPath, ws, inputPath);
|
|
73
|
-
if (refType !== 'value' || hash === null) {
|
|
74
|
-
// Input not assigned - can't find matching execution
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
|
-
currentInputHashes.push(hash);
|
|
78
|
-
}
|
|
79
|
-
const inHash = inputsHash(currentInputHashes);
|
|
80
|
-
// Check if this execution exists
|
|
81
|
-
const executions = await executionListForTask(repoPath, taskHash);
|
|
82
|
-
if (executions.includes(inHash)) {
|
|
83
|
-
return { taskHash, inHash };
|
|
84
|
-
}
|
|
85
|
-
// Fall back to the most recent execution if current inputs don't match
|
|
86
|
-
if (executions.length > 0) {
|
|
87
|
-
return { taskHash, inHash: executions[0] };
|
|
88
|
-
}
|
|
89
|
-
return null;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Show logs for a specific execution.
|
|
74
|
+
* Display logs and optionally follow for new output.
|
|
93
75
|
*/
|
|
94
|
-
async function
|
|
95
|
-
// Read stdout and stderr
|
|
96
|
-
const stdout = await executionReadLog(repoPath, taskHash, inHash, 'stdout');
|
|
97
|
-
const stderr = await executionReadLog(repoPath, taskHash, inHash, 'stderr');
|
|
76
|
+
async function displayLogs(stdout, stderr, follow, poll) {
|
|
98
77
|
if (stdout.totalSize === 0 && stderr.totalSize === 0) {
|
|
99
78
|
console.log('No log output.');
|
|
100
79
|
return;
|
|
@@ -111,19 +90,14 @@ async function showLogs(repoPath, taskHash, inHash, follow) {
|
|
|
111
90
|
console.log(stderr.data);
|
|
112
91
|
}
|
|
113
92
|
if (follow) {
|
|
114
|
-
// Follow mode: poll for new content
|
|
115
93
|
let stdoutOffset = stdout.offset + stdout.size;
|
|
116
94
|
let stderrOffset = stderr.offset + stderr.size;
|
|
117
95
|
console.log('');
|
|
118
96
|
console.log('[Following... press Ctrl+C to stop]');
|
|
119
97
|
const pollInterval = 500; // ms
|
|
120
|
-
const
|
|
121
|
-
const newStdout = await
|
|
122
|
-
|
|
123
|
-
});
|
|
124
|
-
const newStderr = await executionReadLog(repoPath, taskHash, inHash, 'stderr', {
|
|
125
|
-
offset: stderrOffset,
|
|
126
|
-
});
|
|
98
|
+
const tick = async () => {
|
|
99
|
+
const newStdout = await poll('stdout', stdoutOffset);
|
|
100
|
+
const newStderr = await poll('stderr', stderrOffset);
|
|
127
101
|
if (newStdout.size > 0) {
|
|
128
102
|
process.stdout.write(newStdout.data);
|
|
129
103
|
stdoutOffset += newStdout.size;
|
|
@@ -133,44 +107,106 @@ async function showLogs(repoPath, taskHash, inHash, follow) {
|
|
|
133
107
|
stderrOffset += newStderr.size;
|
|
134
108
|
}
|
|
135
109
|
};
|
|
136
|
-
|
|
137
|
-
const intervalId = setInterval(() => void poll(), pollInterval);
|
|
110
|
+
const intervalId = setInterval(() => void tick(), pollInterval);
|
|
138
111
|
process.on('SIGINT', () => {
|
|
139
112
|
clearInterval(intervalId);
|
|
140
113
|
console.log('\n[Stopped]');
|
|
141
114
|
process.exit(0);
|
|
142
115
|
});
|
|
143
|
-
// Keep the process alive
|
|
144
|
-
await new Promise(() => {
|
|
145
|
-
// Never resolves - will be interrupted by Ctrl+C
|
|
146
|
-
});
|
|
116
|
+
// Keep the process alive — interrupted by Ctrl+C
|
|
117
|
+
await new Promise(() => { });
|
|
147
118
|
}
|
|
148
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* List tasks in a workspace (remote).
|
|
122
|
+
*/
|
|
123
|
+
async function listWorkspaceTasksRemote(baseUrl, repo, ws, token) {
|
|
124
|
+
const tasks = await taskListRemote(baseUrl, repo, ws, { token });
|
|
125
|
+
if (tasks.length === 0) {
|
|
126
|
+
console.log(`No tasks in workspace: ${ws}`);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
console.log(`Tasks in workspace: ${ws}`);
|
|
130
|
+
console.log('');
|
|
131
|
+
for (const task of tasks) {
|
|
132
|
+
const executions = await taskExecutionListRemote(baseUrl, repo, ws, task.name, { token });
|
|
133
|
+
if (executions.length === 0) {
|
|
134
|
+
console.log(` ${task.name} (no executions)`);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
// Get status of the most recent execution
|
|
138
|
+
const latest = executions[0];
|
|
139
|
+
const state = latest.status.type;
|
|
140
|
+
console.log(` ${task.name} [${state}] (${executions.length} execution(s))`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
console.log('');
|
|
144
|
+
console.log(`Use "e3 logs <repo> ${ws}.<taskName>" to view logs.`);
|
|
145
|
+
}
|
|
146
|
+
/** Convert a remote LogChunk (bigint fields) to LogData. */
|
|
147
|
+
function toLogData(chunk) {
|
|
148
|
+
return {
|
|
149
|
+
data: chunk.data,
|
|
150
|
+
offset: Number(chunk.offset),
|
|
151
|
+
size: Number(chunk.size),
|
|
152
|
+
totalSize: Number(chunk.totalSize),
|
|
153
|
+
complete: chunk.complete,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
149
156
|
/**
|
|
150
157
|
* View execution logs for workspace tasks.
|
|
151
158
|
*/
|
|
152
159
|
export async function logsCommand(repoArg, pathSpec, options = {}) {
|
|
153
160
|
try {
|
|
154
|
-
const
|
|
161
|
+
const location = await parseRepoLocation(repoArg);
|
|
155
162
|
if (!pathSpec) {
|
|
156
163
|
exitError('Usage: e3 logs <repo> <ws> or e3 logs <repo> <ws.taskName>');
|
|
157
164
|
}
|
|
158
165
|
// Parse the path: ws or ws.taskName
|
|
159
166
|
const { ws, taskName } = parseTaskPath(pathSpec);
|
|
160
|
-
if (
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
167
|
+
if (location.type === 'local') {
|
|
168
|
+
const storage = new LocalStorage();
|
|
169
|
+
if (!taskName) {
|
|
170
|
+
// No task specified - list tasks in workspace
|
|
171
|
+
await listWorkspaceTasks(storage, location.path, ws);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
// Find the execution for this task
|
|
175
|
+
const execution = await executionFindCurrent(storage, location.path, ws, taskName);
|
|
176
|
+
if (!execution) {
|
|
177
|
+
exitError(`No executions found for task: ${ws}.${taskName}`);
|
|
178
|
+
}
|
|
179
|
+
const { taskHash, inputsHash, executionId } = execution;
|
|
180
|
+
console.log(`Task: ${ws}.${taskName}`);
|
|
181
|
+
console.log(`Execution: ${abbrev(taskHash)}/${abbrev(inputsHash)}/${abbrev(executionId)}`);
|
|
182
|
+
console.log('');
|
|
183
|
+
const stdout = await executionReadLog(storage, location.path, taskHash, inputsHash, executionId, 'stdout');
|
|
184
|
+
const stderr = await executionReadLog(storage, location.path, taskHash, inputsHash, executionId, 'stderr');
|
|
185
|
+
await displayLogs(stdout, stderr, options.follow ?? false, (stream, offset) => executionReadLog(storage, location.path, taskHash, inputsHash, executionId, stream, { offset }));
|
|
164
186
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
187
|
+
else {
|
|
188
|
+
// Remote
|
|
189
|
+
if (!taskName) {
|
|
190
|
+
// No task specified - list tasks in workspace
|
|
191
|
+
await listWorkspaceTasksRemote(location.baseUrl, location.repo, ws, location.token);
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
console.log(`Task: ${ws}.${taskName}`);
|
|
195
|
+
console.log('');
|
|
196
|
+
const { baseUrl, repo, token } = location;
|
|
197
|
+
let stdout, stderr;
|
|
198
|
+
try {
|
|
199
|
+
stdout = toLogData(await taskLogsRemote(baseUrl, repo, ws, taskName, { stream: 'stdout' }, { token }));
|
|
200
|
+
stderr = toLogData(await taskLogsRemote(baseUrl, repo, ws, taskName, { stream: 'stderr' }, { token }));
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
if (err instanceof ApiError && err.code === 'execution_not_found') {
|
|
204
|
+
exitError(`No executions found for task: ${ws}.${taskName}`);
|
|
205
|
+
}
|
|
206
|
+
throw err;
|
|
207
|
+
}
|
|
208
|
+
await displayLogs(stdout, stderr, options.follow ?? false, async (stream, offset) => toLogData(await taskLogsRemote(baseUrl, repo, ws, taskName, { stream, offset }, { token })));
|
|
169
209
|
}
|
|
170
|
-
console.log(`Task: ${ws}.${taskName}`);
|
|
171
|
-
console.log(`Execution: ${abbrev(execution.taskHash)}/${abbrev(execution.inHash)}`);
|
|
172
|
-
console.log('');
|
|
173
|
-
await showLogs(repoPath, execution.taskHash, execution.inHash, options.follow ?? false);
|
|
174
210
|
}
|
|
175
211
|
catch (err) {
|
|
176
212
|
exitError(formatError(err));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/commands/logs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;GAOG;AAEH,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/commands/logs.ts"],"names":[],"mappings":"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"}
|