@elaraai/e3-cli 0.0.2-beta.8 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/LICENSE.md +4 -0
  2. package/README.md +169 -46
  3. package/dist/src/cli.js +197 -73
  4. package/dist/src/cli.js.map +1 -1
  5. package/dist/src/commands/auth.d.ts +23 -0
  6. package/dist/src/commands/auth.d.ts.map +1 -0
  7. package/dist/src/commands/auth.js +200 -0
  8. package/dist/src/commands/auth.js.map +1 -0
  9. package/dist/src/commands/complete.d.ts +14 -0
  10. package/dist/src/commands/complete.d.ts.map +1 -0
  11. package/dist/src/commands/complete.js +166 -0
  12. package/dist/src/commands/complete.js.map +1 -0
  13. package/dist/src/commands/complete.spec.d.ts +6 -0
  14. package/dist/src/commands/complete.spec.d.ts.map +1 -0
  15. package/dist/src/commands/complete.spec.js +63 -0
  16. package/dist/src/commands/complete.spec.js.map +1 -0
  17. package/dist/src/commands/completion-install.d.ts +47 -0
  18. package/dist/src/commands/completion-install.d.ts.map +1 -0
  19. package/dist/src/commands/completion-install.js +141 -0
  20. package/dist/src/commands/completion-install.js.map +1 -0
  21. package/dist/src/commands/completion-install.spec.d.ts +6 -0
  22. package/dist/src/commands/completion-install.spec.d.ts.map +1 -0
  23. package/dist/src/commands/completion-install.spec.js +136 -0
  24. package/dist/src/commands/completion-install.spec.js.map +1 -0
  25. package/dist/src/commands/completion.d.ts +12 -0
  26. package/dist/src/commands/completion.d.ts.map +1 -0
  27. package/dist/src/commands/completion.js +75 -0
  28. package/dist/src/commands/completion.js.map +1 -0
  29. package/dist/src/commands/completion.spec.d.ts +6 -0
  30. package/dist/src/commands/completion.spec.d.ts.map +1 -0
  31. package/dist/src/commands/completion.spec.js +48 -0
  32. package/dist/src/commands/completion.spec.js.map +1 -0
  33. package/dist/src/commands/convert.impl.spec.d.ts +6 -0
  34. package/dist/src/commands/convert.impl.spec.d.ts.map +1 -0
  35. package/dist/src/commands/convert.impl.spec.js +245 -0
  36. package/dist/src/commands/convert.impl.spec.js.map +1 -0
  37. package/dist/src/commands/dataset-status.d.ts +9 -0
  38. package/dist/src/commands/dataset-status.d.ts.map +1 -0
  39. package/dist/src/commands/dataset-status.js +77 -0
  40. package/dist/src/commands/dataset-status.js.map +1 -0
  41. package/dist/src/commands/find.d.ts +17 -0
  42. package/dist/src/commands/find.d.ts.map +1 -0
  43. package/dist/src/commands/find.js +59 -0
  44. package/dist/src/commands/find.js.map +1 -0
  45. package/dist/src/commands/find.spec.d.ts +6 -0
  46. package/dist/src/commands/find.spec.d.ts.map +1 -0
  47. package/dist/src/commands/find.spec.js +43 -0
  48. package/dist/src/commands/find.spec.js.map +1 -0
  49. package/dist/src/commands/get.d.ts +3 -0
  50. package/dist/src/commands/get.d.ts.map +1 -1
  51. package/dist/src/commands/get.js +43 -20
  52. package/dist/src/commands/get.js.map +1 -1
  53. package/dist/src/commands/get.spec.d.ts +6 -0
  54. package/dist/src/commands/get.spec.d.ts.map +1 -0
  55. package/dist/src/commands/get.spec.js +28 -0
  56. package/dist/src/commands/get.spec.js.map +1 -0
  57. package/dist/src/commands/list.d.ts +6 -2
  58. package/dist/src/commands/list.d.ts.map +1 -1
  59. package/dist/src/commands/list.js +189 -30
  60. package/dist/src/commands/list.js.map +1 -1
  61. package/dist/src/commands/logs.d.ts.map +1 -1
  62. package/dist/src/commands/logs.js +96 -70
  63. package/dist/src/commands/logs.js.map +1 -1
  64. package/dist/src/commands/package.d.ts.map +1 -1
  65. package/dist/src/commands/package.js +78 -18
  66. package/dist/src/commands/package.js.map +1 -1
  67. package/dist/src/commands/repo.d.ts +44 -0
  68. package/dist/src/commands/repo.d.ts.map +1 -0
  69. package/dist/src/commands/repo.js +278 -0
  70. package/dist/src/commands/repo.js.map +1 -0
  71. package/dist/src/commands/run.d.ts +12 -0
  72. package/dist/src/commands/run.d.ts.map +1 -1
  73. package/dist/src/commands/run.js +21 -13
  74. package/dist/src/commands/run.js.map +1 -1
  75. package/dist/src/commands/run.spec.d.ts +6 -0
  76. package/dist/src/commands/run.spec.d.ts.map +1 -0
  77. package/dist/src/commands/run.spec.js +39 -0
  78. package/dist/src/commands/run.spec.js.map +1 -0
  79. package/dist/src/commands/set.d.ts +1 -0
  80. package/dist/src/commands/set.d.ts.map +1 -1
  81. package/dist/src/commands/set.js +33 -32
  82. package/dist/src/commands/set.js.map +1 -1
  83. package/dist/src/commands/start.d.ts.map +1 -1
  84. package/dist/src/commands/start.js +270 -52
  85. package/dist/src/commands/start.js.map +1 -1
  86. package/dist/src/commands/watch.d.ts +5 -2
  87. package/dist/src/commands/watch.d.ts.map +1 -1
  88. package/dist/src/commands/watch.js +32 -26
  89. package/dist/src/commands/watch.js.map +1 -1
  90. package/dist/src/commands/workspace.d.ts +12 -1
  91. package/dist/src/commands/workspace.d.ts.map +1 -1
  92. package/dist/src/commands/workspace.js +332 -38
  93. package/dist/src/commands/workspace.js.map +1 -1
  94. package/dist/src/credentials.d.ts +123 -0
  95. package/dist/src/credentials.d.ts.map +1 -0
  96. package/dist/src/credentials.js +213 -0
  97. package/dist/src/credentials.js.map +1 -0
  98. package/dist/src/format.d.ts +18 -0
  99. package/dist/src/format.d.ts.map +1 -0
  100. package/dist/src/format.js +43 -0
  101. package/dist/src/format.js.map +1 -0
  102. package/dist/src/path-resolver.d.ts +86 -0
  103. package/dist/src/path-resolver.d.ts.map +1 -0
  104. package/dist/src/path-resolver.js +241 -0
  105. package/dist/src/path-resolver.js.map +1 -0
  106. package/dist/src/path-resolver.spec.d.ts +6 -0
  107. package/dist/src/path-resolver.spec.d.ts.map +1 -0
  108. package/dist/src/path-resolver.spec.js +247 -0
  109. package/dist/src/path-resolver.spec.js.map +1 -0
  110. package/dist/src/utils.d.ts +76 -1
  111. package/dist/src/utils.d.ts.map +1 -1
  112. package/dist/src/utils.js +104 -1
  113. package/dist/src/utils.js.map +1 -1
  114. package/dist/src/utils.spec.d.ts +6 -0
  115. package/dist/src/utils.spec.d.ts.map +1 -0
  116. package/dist/src/utils.spec.js +199 -0
  117. package/dist/src/utils.spec.js.map +1 -0
  118. package/package.json +22 -18
  119. package/scripts/postinstall.cjs +26 -0
  120. package/dist/src/commands/gc.d.ts +0 -12
  121. package/dist/src/commands/gc.d.ts.map +0 -1
  122. package/dist/src/commands/gc.js +0 -44
  123. package/dist/src/commands/gc.js.map +0 -1
  124. package/dist/src/commands/init.d.ts +0 -9
  125. package/dist/src/commands/init.d.ts.map +0 -1
  126. package/dist/src/commands/init.js +0 -33
  127. package/dist/src/commands/init.js.map +0 -1
  128. package/dist/src/commands/status.d.ts +0 -9
  129. package/dist/src/commands/status.d.ts.map +0 -1
  130. package/dist/src/commands/status.js +0 -157
  131. package/dist/src/commands/status.js.map +0 -1
  132. package/dist/src/commands/tree.d.ts +0 -14
  133. package/dist/src/commands/tree.d.ts.map +0 -1
  134. package/dist/src/commands/tree.js +0 -77
  135. package/dist/src/commands/tree.js.map +0 -1
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ /**
6
+ * Tests for CLI utility functions.
7
+ *
8
+ * formatError is the single point where all CLI error messages are produced.
9
+ * It must handle every error shape the API client and core library can throw,
10
+ * and always produce a clear, actionable message — never a bare "Error".
11
+ */
12
+ import { describe, it } from 'node:test';
13
+ import assert from 'node:assert/strict';
14
+ import { ApiError } from '@elaraai/e3-api-client';
15
+ import { formatError, defaultRepoArg, shortHash, HASH_DISPLAY_WIDTH } from './utils.js';
16
+ describe('formatError', () => {
17
+ // ---------------------------------------------------------------------------
18
+ // ApiError — code humanization
19
+ // ---------------------------------------------------------------------------
20
+ describe('ApiError code humanization', () => {
21
+ it('humanizes a single-word code', () => {
22
+ const err = new ApiError('unauthorized');
23
+ assert.strictEqual(formatError(err), 'Unauthorized');
24
+ });
25
+ it('humanizes a multi-word snake_case code', () => {
26
+ const err = new ApiError('execution_not_found');
27
+ assert.strictEqual(formatError(err), 'Execution not found');
28
+ });
29
+ it('humanizes the internal_server_error code', () => {
30
+ const err = new ApiError('internal_server_error');
31
+ assert.strictEqual(formatError(err), 'Internal server error');
32
+ });
33
+ it('humanizes an http status fallback code', () => {
34
+ const err = new ApiError('http_502');
35
+ assert.strictEqual(formatError(err), 'Http 502');
36
+ });
37
+ });
38
+ // ---------------------------------------------------------------------------
39
+ // ApiError — details inclusion
40
+ // ---------------------------------------------------------------------------
41
+ describe('ApiError with details', () => {
42
+ it('appends string details after the humanized code', () => {
43
+ const err = new ApiError('package_invalid', 'zip archive is corrupt');
44
+ assert.strictEqual(formatError(err), 'Package invalid: zip archive is corrupt');
45
+ });
46
+ it('appends object details as JSON', () => {
47
+ const err = new ApiError('package_not_found', { packageName: 'acme', version: '1.0.0' });
48
+ const result = formatError(err);
49
+ assert.match(result, /^Package not found: /);
50
+ assert.ok(result.includes('"packageName":"acme"'));
51
+ assert.ok(result.includes('"version":"1.0.0"'));
52
+ });
53
+ it('appends structured error details from BEAST2 error variants', () => {
54
+ // Simulates the { message: '...' } shape from InternalErrorType
55
+ const err = new ApiError('internal', { message: 'unexpected null in tree' });
56
+ const result = formatError(err);
57
+ assert.strictEqual(result, 'Internal: {"message":"unexpected null in tree"}');
58
+ });
59
+ it('omits details section when details is undefined', () => {
60
+ const err = new ApiError('bad_request', undefined);
61
+ assert.strictEqual(formatError(err), 'Bad request');
62
+ });
63
+ it('omits details section when details is null', () => {
64
+ const err = new ApiError('dataflow_aborted', null);
65
+ assert.strictEqual(formatError(err), 'Dataflow aborted');
66
+ });
67
+ it('includes empty string details', () => {
68
+ // Empty string is falsy but not null/undefined — should still show the colon
69
+ const err = new ApiError('bad_request', '');
70
+ assert.strictEqual(formatError(err), 'Bad request: ');
71
+ });
72
+ });
73
+ // ---------------------------------------------------------------------------
74
+ // Standard Error
75
+ // ---------------------------------------------------------------------------
76
+ describe('standard Error', () => {
77
+ it('returns the error message', () => {
78
+ const err = new Error('ENOENT: no such file or directory');
79
+ assert.strictEqual(formatError(err), 'ENOENT: no such file or directory');
80
+ });
81
+ it('handles TypeError', () => {
82
+ const err = new TypeError('fetch failed');
83
+ assert.strictEqual(formatError(err), 'fetch failed');
84
+ });
85
+ it('handles Error subclasses', () => {
86
+ class CustomError extends Error {
87
+ constructor() { super('custom problem'); this.name = 'CustomError'; }
88
+ }
89
+ assert.strictEqual(formatError(new CustomError()), 'custom problem');
90
+ });
91
+ });
92
+ // ---------------------------------------------------------------------------
93
+ // Non-Error values
94
+ // ---------------------------------------------------------------------------
95
+ // ---------------------------------------------------------------------------
96
+ // defaultRepoArg — positional > E3_REPO > "."
97
+ // ---------------------------------------------------------------------------
98
+ describe('defaultRepoArg', () => {
99
+ it('returns the positional argument when provided', () => {
100
+ const prev = process.env.E3_REPO;
101
+ try {
102
+ process.env.E3_REPO = '/from/env';
103
+ assert.strictEqual(defaultRepoArg('./explicit'), './explicit');
104
+ }
105
+ finally {
106
+ if (prev === undefined)
107
+ delete process.env.E3_REPO;
108
+ else
109
+ process.env.E3_REPO = prev;
110
+ }
111
+ });
112
+ it('falls back to E3_REPO when positional is undefined', () => {
113
+ const prev = process.env.E3_REPO;
114
+ try {
115
+ process.env.E3_REPO = '/from/env';
116
+ assert.strictEqual(defaultRepoArg(undefined), '/from/env');
117
+ }
118
+ finally {
119
+ if (prev === undefined)
120
+ delete process.env.E3_REPO;
121
+ else
122
+ process.env.E3_REPO = prev;
123
+ }
124
+ });
125
+ it('falls back to E3_REPO when positional is the empty string', () => {
126
+ const prev = process.env.E3_REPO;
127
+ try {
128
+ process.env.E3_REPO = '/from/env';
129
+ assert.strictEqual(defaultRepoArg(''), '/from/env');
130
+ }
131
+ finally {
132
+ if (prev === undefined)
133
+ delete process.env.E3_REPO;
134
+ else
135
+ process.env.E3_REPO = prev;
136
+ }
137
+ });
138
+ it('defaults to "." when neither positional nor E3_REPO are set', () => {
139
+ const prev = process.env.E3_REPO;
140
+ try {
141
+ delete process.env.E3_REPO;
142
+ assert.strictEqual(defaultRepoArg(undefined), '.');
143
+ }
144
+ finally {
145
+ if (prev !== undefined)
146
+ process.env.E3_REPO = prev;
147
+ }
148
+ });
149
+ it('observes the order: positional > env > default', () => {
150
+ const prev = process.env.E3_REPO;
151
+ try {
152
+ delete process.env.E3_REPO;
153
+ assert.strictEqual(defaultRepoArg('explicit'), 'explicit');
154
+ process.env.E3_REPO = '/env';
155
+ assert.strictEqual(defaultRepoArg('explicit'), 'explicit');
156
+ assert.strictEqual(defaultRepoArg(undefined), '/env');
157
+ delete process.env.E3_REPO;
158
+ assert.strictEqual(defaultRepoArg(undefined), '.');
159
+ }
160
+ finally {
161
+ if (prev === undefined)
162
+ delete process.env.E3_REPO;
163
+ else
164
+ process.env.E3_REPO = prev;
165
+ }
166
+ });
167
+ });
168
+ // ---------------------------------------------------------------------------
169
+ // shortHash
170
+ // ---------------------------------------------------------------------------
171
+ describe('shortHash', () => {
172
+ it('truncates to HASH_DISPLAY_WIDTH chars with an ellipsis', () => {
173
+ const hash = 'a'.repeat(64);
174
+ assert.strictEqual(shortHash(hash), `${'a'.repeat(HASH_DISPLAY_WIDTH)}...`);
175
+ });
176
+ it('does not truncate shorter strings, still appends ellipsis', () => {
177
+ // documented behaviour: always appends `...`; callers control input
178
+ assert.strictEqual(shortHash('abc'), 'abc...');
179
+ });
180
+ });
181
+ describe('non-Error values', () => {
182
+ it('converts a string to itself', () => {
183
+ assert.strictEqual(formatError('something went wrong'), 'something went wrong');
184
+ });
185
+ it('converts a number to string', () => {
186
+ assert.strictEqual(formatError(42), '42');
187
+ });
188
+ it('converts undefined to string', () => {
189
+ assert.strictEqual(formatError(undefined), 'undefined');
190
+ });
191
+ it('converts null to string', () => {
192
+ assert.strictEqual(formatError(null), 'null');
193
+ });
194
+ it('converts an object to string', () => {
195
+ assert.strictEqual(formatError({ code: 'oops' }), '[object Object]');
196
+ });
197
+ });
198
+ });
199
+ //# sourceMappingURL=utils.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../../src/utils.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elaraai/e3-cli",
3
- "version": "0.0.2-beta.8",
3
+ "version": "1.0.0",
4
4
  "type": "module",
5
5
  "description": "East Execution Engine CLI - Command-line tool for managing e3 repositories and tasks",
6
6
  "main": "dist/src/index.js",
@@ -11,43 +11,47 @@
11
11
  "files": [
12
12
  "dist/src",
13
13
  "!dist/src/**/*.spec.*",
14
+ "scripts/postinstall.cjs",
14
15
  "README.md",
15
16
  "LICENSE"
16
17
  ],
17
- "scripts": {
18
- "build": "tsc --build",
19
- "test": "npm run build && node --enable-source-maps --test 'dist/src/**/*.spec.js'",
20
- "lint": "eslint .",
21
- "lint:fix": "eslint . --fix",
22
- "dev": "npm run build && node --enable-source-maps dist/src/cli.js"
23
- },
24
18
  "keywords": [
25
19
  "east",
26
20
  "e3",
27
21
  "cli",
28
22
  "execution-engine"
29
23
  ],
30
- "license": "SEE LICENSE IN LICENSE",
24
+ "license": "BUSL-1.1",
31
25
  "repository": {
32
26
  "type": "git",
33
- "url": "https://github.com/elaraai/e3",
34
- "directory": "packages/e3-cli"
27
+ "url": "git+https://github.com/elaraai/east-workspace.git",
28
+ "directory": "libs/e3/packages/e3-cli"
35
29
  },
36
30
  "dependencies": {
37
- "@elaraai/e3": "*",
38
- "@elaraai/e3-core": "^0.0.2-beta.8",
39
- "@elaraai/e3-types": "^0.0.2-beta.8",
40
31
  "commander": "^12.0.0",
41
- "esbuild": "^0.24.0"
32
+ "esbuild": "^0.27.2",
33
+ "@elaraai/e3": "1.0.0",
34
+ "@elaraai/e3-api-client": "1.0.0",
35
+ "@elaraai/e3-types": "1.0.0",
36
+ "@elaraai/e3-core": "1.0.0"
42
37
  },
43
38
  "peerDependencies": {
44
- "@elaraai/east": "^0.0.1-beta.22"
39
+ "@elaraai/east": "1.0.0"
45
40
  },
46
41
  "devDependencies": {
47
42
  "@types/node": "^22.0.0",
48
43
  "@typescript-eslint/eslint-plugin": "^8.47.0",
49
44
  "@typescript-eslint/parser": "^8.47.0",
50
45
  "eslint": "^9.0.0",
51
- "eslint-plugin-headers": "^1.3.3"
46
+ "eslint-plugin-headers": "^1.3.3",
47
+ "typescript": "~5.9.2"
48
+ },
49
+ "scripts": {
50
+ "build": "tsc",
51
+ "test": "npm run build && node --enable-source-maps --test-reporter=spec --test 'dist/src/**/*.spec.js'",
52
+ "lint": "eslint .",
53
+ "lint:fix": "eslint . --fix",
54
+ "dev": "pnpm run build && node --enable-source-maps dist/src/cli.js",
55
+ "postinstall": "node scripts/postinstall.cjs"
52
56
  }
53
- }
57
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+
6
+ /**
7
+ * Postinstall hint for `npm install -g @elaraai/e3-cli`.
8
+ *
9
+ * Does NOT mutate the user's dotfiles. Just prints a one-liner pointing at
10
+ * `e3 completion install` so they can opt in if they want tab completion.
11
+ *
12
+ * Silent in CI, on local (non-global) installs, and when E3_NO_HINT is set.
13
+ */
14
+
15
+ 'use strict';
16
+
17
+ if (process.env.CI) return;
18
+ if (process.env.E3_NO_HINT) return;
19
+ if (process.env.npm_config_global !== 'true') return;
20
+
21
+ process.stdout.write(
22
+ '\n' +
23
+ 'e3 installed.\n' +
24
+ 'To enable tab completion: e3 completion install\n' +
25
+ '\n',
26
+ );
@@ -1,12 +0,0 @@
1
- /**
2
- * Copyright (c) 2025 Elara AI Pty Ltd
3
- * Licensed under BSL 1.1. See LICENSE for details.
4
- */
5
- /**
6
- * Run garbage collection.
7
- */
8
- export declare function gcCommand(repoArg: string, options: {
9
- dryRun?: boolean;
10
- minAge?: string;
11
- }): Promise<void>;
12
- //# sourceMappingURL=gc.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gc.d.ts","sourceRoot":"","sources":["../../../src/commands/gc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH;;GAEG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
@@ -1,44 +0,0 @@
1
- /**
2
- * Copyright (c) 2025 Elara AI Pty Ltd
3
- * Licensed under BSL 1.1. See LICENSE for details.
4
- */
5
- /**
6
- * e3 gc command - Garbage collection
7
- *
8
- * Usage:
9
- * e3 gc .
10
- * e3 gc . --dry-run
11
- */
12
- import { repoGc } from '@elaraai/e3-core';
13
- import { resolveRepo, formatError, exitError } from '../utils.js';
14
- /**
15
- * Run garbage collection.
16
- */
17
- export async function gcCommand(repoArg, options) {
18
- try {
19
- const repoPath = resolveRepo(repoArg);
20
- const minAge = options.minAge ? parseInt(options.minAge, 10) : 60000;
21
- if (options.dryRun) {
22
- console.log('Dry run - no files will be deleted');
23
- }
24
- console.log(`Minimum age: ${minAge}ms`);
25
- console.log('');
26
- const result = await repoGc(repoPath, {
27
- dryRun: options.dryRun,
28
- minAge,
29
- });
30
- console.log('Garbage collection complete:');
31
- console.log(` Objects retained: ${result.retainedObjects}`);
32
- console.log(` Objects deleted: ${result.deletedObjects}`);
33
- console.log(` Partials deleted: ${result.deletedPartials}`);
34
- console.log(` Skipped (young): ${result.skippedYoung}`);
35
- if (result.bytesFreed > 0) {
36
- const mb = (result.bytesFreed / 1024 / 1024).toFixed(2);
37
- console.log(` Space reclaimed: ${mb} MB`);
38
- }
39
- }
40
- catch (err) {
41
- exitError(formatError(err));
42
- }
43
- }
44
- //# sourceMappingURL=gc.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gc.js","sourceRoot":"","sources":["../../../src/commands/gc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAElE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAe,EACf,OAA8C;IAE9C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAErE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,IAAI,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE;YACpC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM;SACP,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAE1D,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Copyright (c) 2025 Elara AI Pty Ltd
3
- * Licensed under BSL 1.1. See LICENSE for details.
4
- */
5
- /**
6
- * Initialize a new e3 repository.
7
- */
8
- export declare function initCommand(repoArg: string): void;
9
- //# sourceMappingURL=init.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAoBjD"}
@@ -1,33 +0,0 @@
1
- /**
2
- * Copyright (c) 2025 Elara AI Pty Ltd
3
- * Licensed under BSL 1.1. See LICENSE for details.
4
- */
5
- /**
6
- * e3 init command - Initialize a new e3 repository
7
- */
8
- import { resolve } from 'path';
9
- import { repoInit } from '@elaraai/e3-core';
10
- import { formatError, exitError } from '../utils.js';
11
- /**
12
- * Initialize a new e3 repository.
13
- */
14
- export function initCommand(repoArg) {
15
- const absolutePath = resolve(repoArg);
16
- const result = repoInit(absolutePath);
17
- if (!result.success) {
18
- if (result.alreadyExists) {
19
- exitError(`e3 repository already exists at ${result.e3Dir}`);
20
- }
21
- else {
22
- exitError(`Failed to create repository: ${formatError(result.error)}`);
23
- }
24
- }
25
- console.log(`Initialized e3 repository at ${result.e3Dir}`);
26
- console.log('');
27
- console.log('Created:');
28
- console.log(' objects/ Content-addressable storage');
29
- console.log(' packages/ Package references');
30
- console.log(' workspaces/ Workspace state');
31
- console.log(' executions/ Task execution cache');
32
- }
33
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAErD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IAEtC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,SAAS,CAAC,mCAAmC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,gCAAgC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gCAAgC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;AACtD,CAAC"}
@@ -1,9 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,157 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Copyright (c) 2025 Elara AI Pty Ltd
3
- * Licensed under BSL 1.1. See LICENSE for details.
4
- */
5
- interface TreeOptions {
6
- depth?: string;
7
- types?: boolean;
8
- }
9
- /**
10
- * Show full tree structure of a workspace.
11
- */
12
- export declare function treeCommand(repoArg: string, pathSpec: string, options: TreeOptions): Promise<void>;
13
- export {};
14
- //# sourceMappingURL=tree.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/commands/tree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAoCD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA6Bf"}