@elaraai/e3-cli 0.0.1-alpha.2
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/LICENSE.md +50 -0
- package/README.md +121 -0
- package/dist/src/cli-test-helpers.d.ts +17 -0
- package/dist/src/cli-test-helpers.d.ts.map +1 -0
- package/dist/src/cli-test-helpers.js +48 -0
- package/dist/src/cli-test-helpers.js.map +1 -0
- package/dist/src/cli.d.ts +7 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +144 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/convert.d.ts +11 -0
- package/dist/src/commands/convert.d.ts.map +1 -0
- package/dist/src/commands/convert.impl.d.ts +31 -0
- package/dist/src/commands/convert.impl.d.ts.map +1 -0
- package/dist/src/commands/convert.impl.js +197 -0
- package/dist/src/commands/convert.impl.js.map +1 -0
- package/dist/src/commands/convert.js +11 -0
- package/dist/src/commands/convert.js.map +1 -0
- package/dist/src/commands/gc.d.ts +12 -0
- package/dist/src/commands/gc.d.ts.map +1 -0
- package/dist/src/commands/gc.js +44 -0
- package/dist/src/commands/gc.js.map +1 -0
- package/dist/src/commands/get.d.ts +11 -0
- package/dist/src/commands/get.d.ts.map +1 -0
- package/dist/src/commands/get.js +60 -0
- package/dist/src/commands/get.js.map +1 -0
- package/dist/src/commands/init.d.ts +9 -0
- package/dist/src/commands/init.d.ts.map +1 -0
- package/dist/src/commands/init.js +33 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/list.d.ts +9 -0
- package/dist/src/commands/list.d.ts.map +1 -0
- package/dist/src/commands/list.js +54 -0
- package/dist/src/commands/list.js.map +1 -0
- package/dist/src/commands/logs.d.ts +11 -0
- package/dist/src/commands/logs.d.ts.map +1 -0
- package/dist/src/commands/logs.js +179 -0
- package/dist/src/commands/logs.js.map +1 -0
- package/dist/src/commands/package.d.ts +23 -0
- package/dist/src/commands/package.d.ts.map +1 -0
- package/dist/src/commands/package.js +78 -0
- package/dist/src/commands/package.js.map +1 -0
- package/dist/src/commands/run.d.ts +12 -0
- package/dist/src/commands/run.d.ts.map +1 -0
- package/dist/src/commands/run.js +99 -0
- package/dist/src/commands/run.js.map +1 -0
- package/dist/src/commands/set.d.ts +11 -0
- package/dist/src/commands/set.d.ts.map +1 -0
- package/dist/src/commands/set.js +129 -0
- package/dist/src/commands/set.js.map +1 -0
- package/dist/src/commands/start.d.ts +13 -0
- package/dist/src/commands/start.d.ts.map +1 -0
- package/dist/src/commands/start.js +111 -0
- package/dist/src/commands/start.js.map +1 -0
- package/dist/src/commands/status.d.ts +9 -0
- package/dist/src/commands/status.d.ts.map +1 -0
- package/dist/src/commands/status.js +157 -0
- package/dist/src/commands/status.js.map +1 -0
- package/dist/src/commands/workspace.d.ts +30 -0
- package/dist/src/commands/workspace.d.ts.map +1 -0
- package/dist/src/commands/workspace.js +106 -0
- package/dist/src/commands/workspace.js.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/utils.d.ts +28 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +45 -0
- package/dist/src/utils.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* e3 run command - Ad-hoc task execution
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* e3 run . acme-forecast/train ./sales.beast2 -o ./model.beast2
|
|
10
|
+
* e3 run . my-pkg@1.0.0/process ./input1.beast2 ./input2.beast2 -o ./output.beast2
|
|
11
|
+
* e3 run . my-pkg/task ./data.beast2 -o ./out.beast2 --force
|
|
12
|
+
*/
|
|
13
|
+
import { readFile, writeFile } from 'fs/promises';
|
|
14
|
+
import { packageRead, objectWrite, objectRead, taskExecute, } from '@elaraai/e3-core';
|
|
15
|
+
import { decodeBeast2 } from '@elaraai/east';
|
|
16
|
+
import { resolveRepo, parsePackageSpec, formatError, exitError } from '../utils.js';
|
|
17
|
+
/**
|
|
18
|
+
* Parse task specifier: pkg/task or pkg@version/task
|
|
19
|
+
*/
|
|
20
|
+
function parseTaskSpec(spec) {
|
|
21
|
+
const slashIndex = spec.indexOf('/');
|
|
22
|
+
if (slashIndex === -1) {
|
|
23
|
+
throw new Error(`Invalid task specifier: ${spec}. Expected format: pkg/task or pkg@version/task`);
|
|
24
|
+
}
|
|
25
|
+
const pkgPart = spec.slice(0, slashIndex);
|
|
26
|
+
const task = spec.slice(slashIndex + 1);
|
|
27
|
+
if (!task) {
|
|
28
|
+
throw new Error(`Invalid task specifier: ${spec}. Task name cannot be empty.`);
|
|
29
|
+
}
|
|
30
|
+
const { name, version } = parsePackageSpec(pkgPart);
|
|
31
|
+
return { name, version, task };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Run a task ad-hoc with file inputs and output.
|
|
35
|
+
*/
|
|
36
|
+
export async function runCommand(repoArg, taskSpec, inputs, options) {
|
|
37
|
+
try {
|
|
38
|
+
const repoPath = resolveRepo(repoArg);
|
|
39
|
+
// Parse task specifier
|
|
40
|
+
const { name, version, task } = parseTaskSpec(taskSpec);
|
|
41
|
+
// Validate output is provided
|
|
42
|
+
if (!options.output) {
|
|
43
|
+
exitError('Output file is required. Use -o <path> to specify output.');
|
|
44
|
+
}
|
|
45
|
+
// Get package and find task hash
|
|
46
|
+
const pkg = await packageRead(repoPath, name, version);
|
|
47
|
+
const taskHash = pkg.tasks.get(task);
|
|
48
|
+
if (!taskHash) {
|
|
49
|
+
const available = Array.from(pkg.tasks.keys()).join(', ');
|
|
50
|
+
exitError(`Task '${task}' not found in ${name}@${version}. Available: ${available || '(none)'}`);
|
|
51
|
+
}
|
|
52
|
+
console.log(`Running ${name}@${version}/${task}`);
|
|
53
|
+
// Read input files and store as objects
|
|
54
|
+
const inputHashes = [];
|
|
55
|
+
for (const inputPath of inputs) {
|
|
56
|
+
const data = await readFile(inputPath);
|
|
57
|
+
// Verify it's valid beast2 (will throw if not)
|
|
58
|
+
try {
|
|
59
|
+
decodeBeast2(data);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
exitError(`Invalid beast2 file: ${inputPath}`);
|
|
63
|
+
}
|
|
64
|
+
const hash = await objectWrite(repoPath, data);
|
|
65
|
+
inputHashes.push(hash);
|
|
66
|
+
console.log(` Input: ${inputPath} -> ${hash.slice(0, 8)}...`);
|
|
67
|
+
}
|
|
68
|
+
// Execute the task
|
|
69
|
+
const startTime = Date.now();
|
|
70
|
+
const result = await taskExecute(repoPath, taskHash, inputHashes, {
|
|
71
|
+
force: options.force,
|
|
72
|
+
});
|
|
73
|
+
const elapsed = Date.now() - startTime;
|
|
74
|
+
if (result.cached) {
|
|
75
|
+
console.log(`Cached (${elapsed}ms)`);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.log(`Done (${elapsed}ms)`);
|
|
79
|
+
}
|
|
80
|
+
// Handle result
|
|
81
|
+
if (result.state === 'success' && result.outputHash) {
|
|
82
|
+
// Read output object and write to file
|
|
83
|
+
const outputData = await objectRead(repoPath, result.outputHash);
|
|
84
|
+
await writeFile(options.output, outputData);
|
|
85
|
+
console.log(`Output: ${options.output}`);
|
|
86
|
+
}
|
|
87
|
+
else if (result.state === 'failed') {
|
|
88
|
+
console.error(`Task failed with exit code: ${result.exitCode}`);
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
else if (result.state === 'error') {
|
|
92
|
+
exitError(result.error ?? 'Unknown error');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
exitError(formatError(err));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Set dataset value from a file.
|
|
7
|
+
*/
|
|
8
|
+
export declare function setCommand(repoArg: string, pathSpec: string, filePath: string, options?: {
|
|
9
|
+
type?: string;
|
|
10
|
+
}): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../src/commands/set.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA8CH;;GAEG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9B,OAAO,CAAC,IAAI,CAAC,CA8Ff"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* e3 set command - Set dataset value from file
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* e3 set . ws.path.to.dataset ./data.beast2
|
|
10
|
+
* e3 set . ws.path.to.dataset ./data.east
|
|
11
|
+
* e3 set . ws.path.to.dataset ./data.json --type ".Integer"
|
|
12
|
+
* e3 set . ws.path.to.dataset ./data.csv --type ".Array .Struct [{name: \"name\", type: .String}, {name: \"value\", type: .Integer}]"
|
|
13
|
+
*/
|
|
14
|
+
import { readFile } from 'fs/promises';
|
|
15
|
+
import { extname } from 'path';
|
|
16
|
+
import { WorkspaceLockError, workspaceSetDataset } from '@elaraai/e3-core';
|
|
17
|
+
import { decodeBeast2, parseFor, fromJSONFor, decodeCsvFor, EastTypeType, parseInferred, toEastTypeValue, } from '@elaraai/east';
|
|
18
|
+
import { resolveRepo, parseDatasetPath, formatError, exitError } from '../utils.js';
|
|
19
|
+
/**
|
|
20
|
+
* Parse a type specification in .east format.
|
|
21
|
+
* Types are represented as EastTypeValue variants.
|
|
22
|
+
*
|
|
23
|
+
* Examples:
|
|
24
|
+
* ".Integer" -> variant("Integer", null)
|
|
25
|
+
* ".Array .Integer" -> variant("Array", variant("Integer", null))
|
|
26
|
+
* ".Struct [{name: \"x\", type: .Integer}]" -> variant("Struct", [{name: "x", type: variant("Integer", null)}])
|
|
27
|
+
*/
|
|
28
|
+
function parseTypeSpec(typeSpec) {
|
|
29
|
+
const parser = parseFor(EastTypeType);
|
|
30
|
+
const result = parser(typeSpec);
|
|
31
|
+
if (!result.success) {
|
|
32
|
+
throw new Error(`Invalid type specification: ${result.error}`);
|
|
33
|
+
}
|
|
34
|
+
return result.value;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Set dataset value from a file.
|
|
38
|
+
*/
|
|
39
|
+
export async function setCommand(repoArg, pathSpec, filePath, options = {}) {
|
|
40
|
+
try {
|
|
41
|
+
const repoPath = resolveRepo(repoArg);
|
|
42
|
+
const { ws, path } = parseDatasetPath(pathSpec);
|
|
43
|
+
if (path.length === 0) {
|
|
44
|
+
exitError('Path must include at least one field (e.g., ws.field)');
|
|
45
|
+
}
|
|
46
|
+
// Parse type specification if provided
|
|
47
|
+
let providedType;
|
|
48
|
+
if (options.type) {
|
|
49
|
+
providedType = parseTypeSpec(options.type);
|
|
50
|
+
}
|
|
51
|
+
// Read and decode the file based on extension
|
|
52
|
+
const fileContent = await readFile(filePath);
|
|
53
|
+
const ext = extname(filePath).toLowerCase();
|
|
54
|
+
let value;
|
|
55
|
+
let type;
|
|
56
|
+
switch (ext) {
|
|
57
|
+
case '.beast2': {
|
|
58
|
+
// Beast2 is self-describing, type spec is optional (for override)
|
|
59
|
+
const decoded = decodeBeast2(fileContent);
|
|
60
|
+
value = decoded.value;
|
|
61
|
+
type = providedType ?? decoded.type;
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
case '.east': {
|
|
65
|
+
const content = fileContent.toString('utf-8');
|
|
66
|
+
if (providedType) {
|
|
67
|
+
// Parse with provided type for stricter validation
|
|
68
|
+
const parser = parseFor(providedType);
|
|
69
|
+
const result = parser(content);
|
|
70
|
+
if (!result.success) {
|
|
71
|
+
exitError(`Failed to parse .east file: ${result.error}`);
|
|
72
|
+
}
|
|
73
|
+
value = result.value;
|
|
74
|
+
type = providedType;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// Use parseInferred for type inference from .east syntax
|
|
78
|
+
const [parsedType, parsedValue] = parseInferred(content);
|
|
79
|
+
// parseInferred returns EastType, but we need EastTypeValue
|
|
80
|
+
// Use toEastTypeValue to convert
|
|
81
|
+
value = parsedValue;
|
|
82
|
+
type = toEastTypeValue(parsedType);
|
|
83
|
+
}
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
case '.json': {
|
|
87
|
+
if (!providedType) {
|
|
88
|
+
exitError('JSON files require --type flag. Example: --type ".Integer"');
|
|
89
|
+
}
|
|
90
|
+
const content = fileContent.toString('utf-8');
|
|
91
|
+
const jsonValue = JSON.parse(content);
|
|
92
|
+
const fromJSON = fromJSONFor(providedType);
|
|
93
|
+
value = fromJSON(jsonValue);
|
|
94
|
+
type = providedType;
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
case '.csv': {
|
|
98
|
+
if (!providedType) {
|
|
99
|
+
exitError('CSV files require --type flag. Example: --type ".Array .Struct [{name: \\"name\\", type: .String}]"');
|
|
100
|
+
}
|
|
101
|
+
// CSV expects .Array .Struct [...] - check the variant type
|
|
102
|
+
if (providedType.type !== 'Array') {
|
|
103
|
+
exitError('CSV files require an Array type. Example: --type ".Array .Struct [...]"');
|
|
104
|
+
}
|
|
105
|
+
const elementType = providedType.value;
|
|
106
|
+
if (elementType.type !== 'Struct') {
|
|
107
|
+
exitError('CSV files require Array of Struct type. Example: --type ".Array .Struct [{name: \\"x\\", type: .Integer}]"');
|
|
108
|
+
}
|
|
109
|
+
const decoder = decodeCsvFor(elementType);
|
|
110
|
+
value = decoder(fileContent);
|
|
111
|
+
type = providedType;
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
default:
|
|
115
|
+
exitError(`Unknown file extension: ${ext}. Supported: .beast2, .east, .json, .csv`);
|
|
116
|
+
}
|
|
117
|
+
await workspaceSetDataset(repoPath, ws, path, value, type);
|
|
118
|
+
console.log(`Set ${pathSpec} from ${filePath}`);
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
if (err instanceof WorkspaceLockError) {
|
|
122
|
+
console.log('');
|
|
123
|
+
console.log(`Workspace is locked by another process with PID: ${err.holder?.pid ?? 'unknown'}`);
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
exitError(formatError(err));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../../src/commands/set.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,YAAY,EAGZ,aAAa,EACb,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEpF;;;;;;;;GAQG;AACH,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,MAAM,CAAC,KAAsB,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,QAAgB,EAChB,QAAgB,EAChB,UAA6B,EAAE;IAE/B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,SAAS,CAAC,uDAAuD,CAAC,CAAC;QACrE,CAAC;QAED,uCAAuC;QACvC,IAAI,YAAuC,CAAC;QAC5C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,8CAA8C;QAC9C,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAE5C,IAAI,KAAc,CAAC;QACnB,IAAI,IAAmB,CAAC;QAExB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,kEAAkE;gBAClE,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;gBAC1C,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBACtB,IAAI,GAAG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;gBACpC,MAAM;YACR,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC9C,IAAI,YAAY,EAAE,CAAC;oBACjB,mDAAmD;oBACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;oBACtC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACpB,SAAS,CAAC,+BAA+B,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC3D,CAAC;oBACD,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;oBACrB,IAAI,GAAG,YAAY,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,yDAAyD;oBACzD,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;oBACzD,4DAA4D;oBAC5D,iCAAiC;oBACjC,KAAK,GAAG,WAAW,CAAC;oBACpB,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;gBACrC,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,SAAS,CAAC,4DAA4D,CAAC,CAAC;gBAC1E,CAAC;gBACD,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACtC,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;gBAC3C,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC5B,IAAI,GAAG,YAAY,CAAC;gBACpB,MAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,SAAS,CAAC,qGAAqG,CAAC,CAAC;gBACnH,CAAC;gBACD,4DAA4D;gBAC5D,IAAI,YAAY,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAClC,SAAS,CAAC,yEAAyE,CAAC,CAAC;gBACvF,CAAC;gBACD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAsB,CAAC;gBACxD,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAClC,SAAS,CAAC,4GAA4G,CAAC,CAAC;gBAC1H,CAAC;gBACD,MAAM,OAAO,GAAG,YAAY,CAAC,WAA8B,CAAC,CAAC;gBAC7D,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;gBAC7B,IAAI,GAAG,YAAY,CAAC;gBACpB,MAAM;YACR,CAAC;YACD;gBACE,SAAS,CAAC,2BAA2B,GAAG,0CAA0C,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,mBAAmB,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAE3D,OAAO,CAAC,GAAG,CAAC,OAAO,QAAQ,SAAS,QAAQ,EAAE,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,oDAAoD,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC,CAAC;YAChG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Execute tasks in a workspace.
|
|
7
|
+
*/
|
|
8
|
+
export declare function startCommand(repoArg: string, ws: string, options: {
|
|
9
|
+
filter?: string;
|
|
10
|
+
concurrency?: string;
|
|
11
|
+
force?: boolean;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/commands/start.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAClE,OAAO,CAAC,IAAI,CAAC,CAkFf"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* e3 start command - Execute tasks in a workspace
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* e3 start . my-workspace
|
|
10
|
+
* e3 start . my-workspace --concurrency 2
|
|
11
|
+
* e3 start . my-workspace --force
|
|
12
|
+
*/
|
|
13
|
+
import { dataflowExecute, DataflowAbortedError, WorkspaceLockError } from '@elaraai/e3-core';
|
|
14
|
+
import { resolveRepo, formatError, exitError } from '../utils.js';
|
|
15
|
+
/**
|
|
16
|
+
* Execute tasks in a workspace.
|
|
17
|
+
*/
|
|
18
|
+
export async function startCommand(repoArg, ws, options) {
|
|
19
|
+
// Set up abort controller for signal handling
|
|
20
|
+
const controller = new AbortController();
|
|
21
|
+
// Handle SIGINT (Ctrl+C) and SIGTERM gracefully
|
|
22
|
+
const signalHandler = (signal) => {
|
|
23
|
+
console.log('');
|
|
24
|
+
console.log(`Received ${signal}, aborting...`);
|
|
25
|
+
controller.abort();
|
|
26
|
+
};
|
|
27
|
+
process.on('SIGINT', () => signalHandler('SIGINT'));
|
|
28
|
+
process.on('SIGTERM', () => signalHandler('SIGTERM'));
|
|
29
|
+
try {
|
|
30
|
+
const repoPath = resolveRepo(repoArg);
|
|
31
|
+
const concurrency = options.concurrency ? parseInt(options.concurrency, 10) : 4;
|
|
32
|
+
console.log(`Starting tasks in workspace: ${ws}`);
|
|
33
|
+
if (options.filter) {
|
|
34
|
+
console.log(`Filter: ${options.filter}`);
|
|
35
|
+
}
|
|
36
|
+
console.log(`Concurrency: ${concurrency}`);
|
|
37
|
+
if (options.force) {
|
|
38
|
+
console.log('Force: re-executing all tasks');
|
|
39
|
+
}
|
|
40
|
+
console.log('');
|
|
41
|
+
const result = await dataflowExecute(repoPath, ws, {
|
|
42
|
+
concurrency,
|
|
43
|
+
force: options.force,
|
|
44
|
+
filter: options.filter,
|
|
45
|
+
signal: controller.signal,
|
|
46
|
+
onTaskStart: (name) => {
|
|
47
|
+
console.log(` [START] ${name}`);
|
|
48
|
+
},
|
|
49
|
+
onTaskComplete: (taskResult) => {
|
|
50
|
+
const status = formatTaskStatus(taskResult);
|
|
51
|
+
const cached = taskResult.cached ? ' (cached)' : '';
|
|
52
|
+
const duration = taskResult.duration > 0 ? ` [${taskResult.duration}ms]` : '';
|
|
53
|
+
console.log(` [${status}] ${taskResult.name}${cached}${duration}`);
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
console.log('');
|
|
57
|
+
console.log('Summary:');
|
|
58
|
+
console.log(` Executed: ${result.executed}`);
|
|
59
|
+
console.log(` Cached: ${result.cached}`);
|
|
60
|
+
console.log(` Failed: ${result.failed}`);
|
|
61
|
+
console.log(` Skipped: ${result.skipped}`);
|
|
62
|
+
console.log(` Duration: ${result.duration}ms`);
|
|
63
|
+
if (!result.success) {
|
|
64
|
+
console.log('');
|
|
65
|
+
console.log('Failed tasks:');
|
|
66
|
+
for (const task of result.tasks) {
|
|
67
|
+
if (task.state === 'failed') {
|
|
68
|
+
const exitInfo = task.exitCode != null ? `exit code ${task.exitCode}` : 'spawn failed';
|
|
69
|
+
const errorInfo = task.error ? ` - ${task.error}` : '';
|
|
70
|
+
console.log(` ${task.name}: ${exitInfo}${errorInfo}`);
|
|
71
|
+
}
|
|
72
|
+
else if (task.state === 'error') {
|
|
73
|
+
console.log(` ${task.name}: ${task.error}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
if (err instanceof DataflowAbortedError) {
|
|
81
|
+
console.log('');
|
|
82
|
+
console.log('Aborted.');
|
|
83
|
+
if (err.partialResults && err.partialResults.length > 0) {
|
|
84
|
+
const completed = err.partialResults.filter(r => r.state === 'success').length;
|
|
85
|
+
console.log(` Completed before abort: ${completed}`);
|
|
86
|
+
}
|
|
87
|
+
process.exit(130); // Standard exit code for SIGINT (128 + 2)
|
|
88
|
+
}
|
|
89
|
+
else if (err instanceof WorkspaceLockError) {
|
|
90
|
+
console.log('');
|
|
91
|
+
console.log(`Workspace is locked by another process with PID: ${err.holder?.pid ?? 'unknown'}`);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
exitError(formatError(err));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function formatTaskStatus(result) {
|
|
98
|
+
switch (result.state) {
|
|
99
|
+
case 'success':
|
|
100
|
+
return 'DONE';
|
|
101
|
+
case 'failed':
|
|
102
|
+
return 'FAIL';
|
|
103
|
+
case 'error':
|
|
104
|
+
return 'ERR';
|
|
105
|
+
case 'skipped':
|
|
106
|
+
return 'SKIP';
|
|
107
|
+
default:
|
|
108
|
+
return '???';
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Show repository or workspace status.
|
|
7
|
+
*/
|
|
8
|
+
export declare function statusCommand(repoArg: string, workspace?: string): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYtF"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* e3 status command - Show repository or workspace status
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* e3 status . # Show repository status
|
|
10
|
+
* e3 status . production # Show detailed workspace status
|
|
11
|
+
*/
|
|
12
|
+
import { packageList, workspaceList, workspaceGetState, workspaceStatus, } from '@elaraai/e3-core';
|
|
13
|
+
import { resolveRepo, formatError, exitError } from '../utils.js';
|
|
14
|
+
/**
|
|
15
|
+
* Show repository or workspace status.
|
|
16
|
+
*/
|
|
17
|
+
export async function statusCommand(repoArg, workspace) {
|
|
18
|
+
try {
|
|
19
|
+
const repoPath = resolveRepo(repoArg);
|
|
20
|
+
if (workspace) {
|
|
21
|
+
await showWorkspaceStatus(repoPath, workspace);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
await showRepoStatus(repoPath);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
exitError(formatError(err));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Show repository-level status.
|
|
33
|
+
*/
|
|
34
|
+
async function showRepoStatus(repoPath) {
|
|
35
|
+
console.log(`Repository: ${repoPath}`);
|
|
36
|
+
console.log('');
|
|
37
|
+
// List packages
|
|
38
|
+
const packages = await packageList(repoPath);
|
|
39
|
+
console.log('Packages:');
|
|
40
|
+
if (packages.length === 0) {
|
|
41
|
+
console.log(' (none)');
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
for (const pkg of packages) {
|
|
45
|
+
console.log(` ${pkg.name}@${pkg.version}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
console.log('');
|
|
49
|
+
// List workspaces with status
|
|
50
|
+
const workspaces = await workspaceList(repoPath);
|
|
51
|
+
console.log('Workspaces:');
|
|
52
|
+
if (workspaces.length === 0) {
|
|
53
|
+
console.log(' (none)');
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
for (const ws of workspaces) {
|
|
57
|
+
const state = await workspaceGetState(repoPath, ws);
|
|
58
|
+
if (state) {
|
|
59
|
+
console.log(` ${ws}`);
|
|
60
|
+
console.log(` Package: ${state.packageName}@${state.packageVersion}`);
|
|
61
|
+
console.log(` Deployed: ${state.deployedAt.toISOString()}`);
|
|
62
|
+
console.log(` Updated: ${state.rootUpdatedAt.toISOString()}`);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
console.log(` ${ws} (not deployed)`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Show detailed workspace status.
|
|
72
|
+
*/
|
|
73
|
+
async function showWorkspaceStatus(repoPath, ws) {
|
|
74
|
+
const status = await workspaceStatus(repoPath, ws);
|
|
75
|
+
console.log(`Workspace: ${status.workspace}`);
|
|
76
|
+
console.log('');
|
|
77
|
+
// Lock status
|
|
78
|
+
if (status.lock) {
|
|
79
|
+
console.log('Lock:');
|
|
80
|
+
console.log(` Held by PID ${status.lock.pid}`);
|
|
81
|
+
console.log(` Since: ${status.lock.acquiredAt}`);
|
|
82
|
+
if (status.lock.command) {
|
|
83
|
+
console.log(` Command: ${status.lock.command}`);
|
|
84
|
+
}
|
|
85
|
+
console.log('');
|
|
86
|
+
}
|
|
87
|
+
// Summary
|
|
88
|
+
console.log('Summary:');
|
|
89
|
+
console.log(` Datasets: ${status.summary.datasets.upToDate} up-to-date, ${status.summary.datasets.stale} stale, ${status.summary.datasets.unset} unset`);
|
|
90
|
+
// Build task summary line - only include non-zero counts
|
|
91
|
+
const taskParts = [];
|
|
92
|
+
if (status.summary.tasks.upToDate > 0)
|
|
93
|
+
taskParts.push(`${status.summary.tasks.upToDate} up-to-date`);
|
|
94
|
+
if (status.summary.tasks.ready > 0)
|
|
95
|
+
taskParts.push(`${status.summary.tasks.ready} ready`);
|
|
96
|
+
if (status.summary.tasks.waiting > 0)
|
|
97
|
+
taskParts.push(`${status.summary.tasks.waiting} waiting`);
|
|
98
|
+
if (status.summary.tasks.inProgress > 0)
|
|
99
|
+
taskParts.push(`${status.summary.tasks.inProgress} in-progress`);
|
|
100
|
+
if (status.summary.tasks.failed > 0)
|
|
101
|
+
taskParts.push(`${status.summary.tasks.failed} failed`);
|
|
102
|
+
if (status.summary.tasks.error > 0)
|
|
103
|
+
taskParts.push(`${status.summary.tasks.error} error`);
|
|
104
|
+
if (status.summary.tasks.staleRunning > 0)
|
|
105
|
+
taskParts.push(`${status.summary.tasks.staleRunning} stale-running`);
|
|
106
|
+
console.log(` Tasks: ${taskParts.join(', ') || 'none'}`);
|
|
107
|
+
console.log('');
|
|
108
|
+
// Tasks section
|
|
109
|
+
if (status.tasks.length > 0) {
|
|
110
|
+
console.log('Tasks:');
|
|
111
|
+
for (const task of status.tasks) {
|
|
112
|
+
const statusStr = formatTaskStatus(task.status);
|
|
113
|
+
console.log(` ${task.name}: ${statusStr}`);
|
|
114
|
+
if (task.dependsOn.length > 0) {
|
|
115
|
+
console.log(` depends on: ${task.dependsOn.join(', ')}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
console.log('');
|
|
119
|
+
}
|
|
120
|
+
// Datasets section (only show non-up-to-date ones for brevity)
|
|
121
|
+
const nonUpToDate = status.datasets.filter(d => d.status.type !== 'up-to-date');
|
|
122
|
+
if (nonUpToDate.length > 0) {
|
|
123
|
+
console.log('Datasets needing attention:');
|
|
124
|
+
for (const dataset of nonUpToDate) {
|
|
125
|
+
const statusStr = dataset.status.type === 'unset' ? 'unset' : 'stale';
|
|
126
|
+
const producer = dataset.producedBy ? ` (from ${dataset.producedBy})` : ' (input)';
|
|
127
|
+
console.log(` ${dataset.path}: ${statusStr}${producer}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else if (status.datasets.length > 0) {
|
|
131
|
+
console.log('All datasets up-to-date');
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Format task status for display.
|
|
136
|
+
*/
|
|
137
|
+
function formatTaskStatus(status) {
|
|
138
|
+
switch (status.type) {
|
|
139
|
+
case 'up-to-date':
|
|
140
|
+
return status.cached ? 'up-to-date (cached)' : 'up-to-date';
|
|
141
|
+
case 'ready':
|
|
142
|
+
return 'ready to run';
|
|
143
|
+
case 'waiting':
|
|
144
|
+
return `waiting (${status.reason})`;
|
|
145
|
+
case 'in-progress':
|
|
146
|
+
return status.pid ? `in-progress (PID ${status.pid})` : 'in-progress';
|
|
147
|
+
case 'failed':
|
|
148
|
+
return `FAILED (exit code ${status.exitCode})`;
|
|
149
|
+
case 'error':
|
|
150
|
+
return `ERROR: ${status.message}`;
|
|
151
|
+
case 'stale-running':
|
|
152
|
+
return `stale-running (PID ${status.pid} no longer exists)`;
|
|
153
|
+
default:
|
|
154
|
+
return 'unknown';
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
export declare const workspaceCommand: {
|
|
6
|
+
/**
|
|
7
|
+
* Create an empty workspace.
|
|
8
|
+
*/
|
|
9
|
+
create(repoArg: string, name: string): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Deploy a package to a workspace.
|
|
12
|
+
*/
|
|
13
|
+
deploy(repoArg: string, ws: string, pkgSpec: string): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Export workspace as a package.
|
|
16
|
+
*/
|
|
17
|
+
export(repoArg: string, ws: string, zipPath: string, options: {
|
|
18
|
+
name?: string;
|
|
19
|
+
version?: string;
|
|
20
|
+
}): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* List workspaces.
|
|
23
|
+
*/
|
|
24
|
+
list(repoArg: string): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Remove a workspace.
|
|
27
|
+
*/
|
|
28
|
+
remove(repoArg: string, ws: string): Promise<void>;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../src/commands/workspace.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH,eAAO,MAAM,gBAAgB;IAC3B;;OAEG;oBACmB,MAAM,QAAQ,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1D;;OAEG;oBACmB,MAAM,MAAM,MAAM,WAAW,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBzE;;OAEG;oBAEQ,MAAM,MACX,MAAM,WACD,MAAM,WACN;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3C,OAAO,CAAC,IAAI,CAAC;IAchB;;OAEG;kBACiB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB1C;;OAEG;oBACmB,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBzD,CAAC"}
|