@elaraai/e3-cli 0.0.2-beta.9 → 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.
- package/LICENSE.md +4 -0
- package/README.md +169 -46
- package/dist/src/cli.js +197 -73
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/auth.d.ts +23 -0
- package/dist/src/commands/auth.d.ts.map +1 -0
- package/dist/src/commands/auth.js +200 -0
- package/dist/src/commands/auth.js.map +1 -0
- package/dist/src/commands/complete.d.ts +14 -0
- package/dist/src/commands/complete.d.ts.map +1 -0
- package/dist/src/commands/complete.js +166 -0
- package/dist/src/commands/complete.js.map +1 -0
- package/dist/src/commands/complete.spec.d.ts +6 -0
- package/dist/src/commands/complete.spec.d.ts.map +1 -0
- package/dist/src/commands/complete.spec.js +63 -0
- package/dist/src/commands/complete.spec.js.map +1 -0
- package/dist/src/commands/completion-install.d.ts +47 -0
- package/dist/src/commands/completion-install.d.ts.map +1 -0
- package/dist/src/commands/completion-install.js +141 -0
- package/dist/src/commands/completion-install.js.map +1 -0
- package/dist/src/commands/completion-install.spec.d.ts +6 -0
- package/dist/src/commands/completion-install.spec.d.ts.map +1 -0
- package/dist/src/commands/completion-install.spec.js +136 -0
- package/dist/src/commands/completion-install.spec.js.map +1 -0
- package/dist/src/commands/completion.d.ts +12 -0
- package/dist/src/commands/completion.d.ts.map +1 -0
- package/dist/src/commands/completion.js +75 -0
- package/dist/src/commands/completion.js.map +1 -0
- package/dist/src/commands/completion.spec.d.ts +6 -0
- package/dist/src/commands/completion.spec.d.ts.map +1 -0
- package/dist/src/commands/completion.spec.js +48 -0
- package/dist/src/commands/completion.spec.js.map +1 -0
- package/dist/src/commands/convert.impl.spec.d.ts +6 -0
- package/dist/src/commands/convert.impl.spec.d.ts.map +1 -0
- package/dist/src/commands/convert.impl.spec.js +245 -0
- package/dist/src/commands/convert.impl.spec.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/find.d.ts +17 -0
- package/dist/src/commands/find.d.ts.map +1 -0
- package/dist/src/commands/find.js +59 -0
- package/dist/src/commands/find.js.map +1 -0
- package/dist/src/commands/find.spec.d.ts +6 -0
- package/dist/src/commands/find.spec.d.ts.map +1 -0
- package/dist/src/commands/find.spec.js +43 -0
- package/dist/src/commands/find.spec.js.map +1 -0
- package/dist/src/commands/get.d.ts +3 -0
- package/dist/src/commands/get.d.ts.map +1 -1
- package/dist/src/commands/get.js +43 -20
- package/dist/src/commands/get.js.map +1 -1
- package/dist/src/commands/get.spec.d.ts +6 -0
- package/dist/src/commands/get.spec.d.ts.map +1 -0
- package/dist/src/commands/get.spec.js +28 -0
- package/dist/src/commands/get.spec.js.map +1 -0
- package/dist/src/commands/list.d.ts +6 -2
- package/dist/src/commands/list.d.ts.map +1 -1
- package/dist/src/commands/list.js +189 -30
- 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 +96 -70
- 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 +78 -18
- package/dist/src/commands/package.js.map +1 -1
- package/dist/src/commands/repo.d.ts +44 -0
- package/dist/src/commands/repo.d.ts.map +1 -0
- package/dist/src/commands/repo.js +278 -0
- package/dist/src/commands/repo.js.map +1 -0
- package/dist/src/commands/run.d.ts +12 -0
- package/dist/src/commands/run.d.ts.map +1 -1
- package/dist/src/commands/run.js +21 -13
- package/dist/src/commands/run.js.map +1 -1
- package/dist/src/commands/run.spec.d.ts +6 -0
- package/dist/src/commands/run.spec.d.ts.map +1 -0
- package/dist/src/commands/run.spec.js +39 -0
- package/dist/src/commands/run.spec.js.map +1 -0
- package/dist/src/commands/set.d.ts +1 -0
- package/dist/src/commands/set.d.ts.map +1 -1
- package/dist/src/commands/set.js +33 -32
- 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 +270 -52
- package/dist/src/commands/start.js.map +1 -1
- package/dist/src/commands/watch.d.ts +5 -2
- package/dist/src/commands/watch.d.ts.map +1 -1
- package/dist/src/commands/watch.js +32 -26
- package/dist/src/commands/watch.js.map +1 -1
- package/dist/src/commands/workspace.d.ts +12 -1
- package/dist/src/commands/workspace.d.ts.map +1 -1
- package/dist/src/commands/workspace.js +332 -38
- 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 +18 -0
- package/dist/src/format.d.ts.map +1 -0
- package/dist/src/format.js +43 -0
- package/dist/src/format.js.map +1 -0
- package/dist/src/path-resolver.d.ts +86 -0
- package/dist/src/path-resolver.d.ts.map +1 -0
- package/dist/src/path-resolver.js +241 -0
- package/dist/src/path-resolver.js.map +1 -0
- package/dist/src/path-resolver.spec.d.ts +6 -0
- package/dist/src/path-resolver.spec.d.ts.map +1 -0
- package/dist/src/path-resolver.spec.js +247 -0
- package/dist/src/path-resolver.spec.js.map +1 -0
- package/dist/src/utils.d.ts +76 -1
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +104 -1
- package/dist/src/utils.js.map +1 -1
- package/dist/src/utils.spec.d.ts +6 -0
- package/dist/src/utils.spec.d.ts.map +1 -0
- package/dist/src/utils.spec.js +199 -0
- package/dist/src/utils.spec.js.map +1 -0
- package/package.json +22 -18
- package/scripts/postinstall.cjs +26 -0
- 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
- package/dist/src/commands/tree.d.ts +0 -14
- package/dist/src/commands/tree.d.ts.map +0 -1
- package/dist/src/commands/tree.js +0 -77
- package/dist/src/commands/tree.js.map +0 -1
|
@@ -9,8 +9,15 @@ export declare const workspaceCommand: {
|
|
|
9
9
|
create(repoArg: string, name: string): Promise<void>;
|
|
10
10
|
/**
|
|
11
11
|
* Deploy a package to a workspace.
|
|
12
|
+
*
|
|
13
|
+
* Two modes:
|
|
14
|
+
* - With `pkgSpec`: deploy an already-imported package by name[@version].
|
|
15
|
+
* - With `--from-zip <path>`: import the zip first, create the workspace if
|
|
16
|
+
* missing, then deploy. Replaces the legacy `workspace import` command.
|
|
12
17
|
*/
|
|
13
|
-
deploy(repoArg: string, ws: string, pkgSpec: string
|
|
18
|
+
deploy(repoArg: string, ws: string, pkgSpec: string | undefined, options?: {
|
|
19
|
+
fromZip?: string;
|
|
20
|
+
}): Promise<void>;
|
|
14
21
|
/**
|
|
15
22
|
* Export workspace as a package.
|
|
16
23
|
*/
|
|
@@ -26,5 +33,9 @@ export declare const workspaceCommand: {
|
|
|
26
33
|
* Remove a workspace.
|
|
27
34
|
*/
|
|
28
35
|
remove(repoArg: string, ws: string): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Show detailed workspace status.
|
|
38
|
+
*/
|
|
39
|
+
status(repoArg: string, ws: string): Promise<void>;
|
|
29
40
|
};
|
|
30
41
|
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../src/commands/workspace.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../src/commands/workspace.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiCH,eAAO,MAAM,gBAAgB;IAC3B;;OAEG;oBACmB,MAAM,QAAQ,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB1D;;;;;;;OAOG;oBAEQ,MAAM,MACX,MAAM,WACD,MAAM,GAAG,SAAS,YAClB;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC,IAAI,CAAC;IAiChB;;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;IAoChB;;OAEG;kBACiB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8C1C;;OAEG;oBACmB,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBxD;;OAEG;oBACmB,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkHzD,CAAC"}
|
|
@@ -5,16 +5,25 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* e3 workspace commands - Workspace management
|
|
7
7
|
*/
|
|
8
|
-
import { workspaceCreate, workspaceDeploy, workspaceExport, workspaceList, workspaceRemove, workspaceGetState,
|
|
9
|
-
import {
|
|
8
|
+
import { workspaceCreate, workspaceDeploy, workspaceExport, workspaceList, workspaceRemove, workspaceGetState, workspaceStatus, packageImport, LocalStorage, WorkspaceExistsError, } from '@elaraai/e3-core';
|
|
9
|
+
import { workspaceCreate as workspaceCreateRemote, workspaceDeploy as workspaceDeployRemote, workspaceExport as workspaceExportRemote, workspaceList as workspaceListRemote, workspaceRemove as workspaceRemoveRemote, workspaceStatus as workspaceStatusRemote, packageImport as packageImportRemote, ApiError, } from '@elaraai/e3-api-client';
|
|
10
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
11
|
+
import { parseRepoLocation, parsePackageSpec, formatError, exitError } from '../utils.js';
|
|
12
|
+
import { writeExportProgress, clearProgress } from '../format.js';
|
|
10
13
|
export const workspaceCommand = {
|
|
11
14
|
/**
|
|
12
15
|
* Create an empty workspace.
|
|
13
16
|
*/
|
|
14
17
|
async create(repoArg, name) {
|
|
15
18
|
try {
|
|
16
|
-
const
|
|
17
|
-
|
|
19
|
+
const location = await parseRepoLocation(repoArg);
|
|
20
|
+
if (location.type === 'local') {
|
|
21
|
+
const storage = new LocalStorage();
|
|
22
|
+
await workspaceCreate(storage, location.path, name);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
await workspaceCreateRemote(location.baseUrl, location.repo, name, { token: location.token });
|
|
26
|
+
}
|
|
18
27
|
console.log(`Created workspace: ${name}`);
|
|
19
28
|
console.log('Deploy a package with: e3 workspace deploy <repo> <ws> <pkg>[@<ver>]');
|
|
20
29
|
}
|
|
@@ -24,20 +33,38 @@ export const workspaceCommand = {
|
|
|
24
33
|
},
|
|
25
34
|
/**
|
|
26
35
|
* Deploy a package to a workspace.
|
|
36
|
+
*
|
|
37
|
+
* Two modes:
|
|
38
|
+
* - With `pkgSpec`: deploy an already-imported package by name[@version].
|
|
39
|
+
* - With `--from-zip <path>`: import the zip first, create the workspace if
|
|
40
|
+
* missing, then deploy. Replaces the legacy `workspace import` command.
|
|
27
41
|
*/
|
|
28
|
-
async deploy(repoArg, ws, pkgSpec) {
|
|
42
|
+
async deploy(repoArg, ws, pkgSpec, options = {}) {
|
|
29
43
|
try {
|
|
30
|
-
|
|
44
|
+
if (!pkgSpec && !options.fromZip) {
|
|
45
|
+
exitError('Provide a package spec (e.g. hello@1.0.0) or --from-zip <path>');
|
|
46
|
+
}
|
|
47
|
+
if (pkgSpec && options.fromZip) {
|
|
48
|
+
exitError('Provide either a package spec or --from-zip, not both');
|
|
49
|
+
}
|
|
50
|
+
const location = await parseRepoLocation(repoArg);
|
|
51
|
+
// --from-zip mode: import then deploy
|
|
52
|
+
if (options.fromZip) {
|
|
53
|
+
await deployFromZip(location, ws, options.fromZip);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
31
56
|
const { name, version } = parsePackageSpec(pkgSpec);
|
|
32
|
-
|
|
33
|
-
|
|
57
|
+
if (location.type === 'local') {
|
|
58
|
+
const storage = new LocalStorage();
|
|
59
|
+
await workspaceDeploy(storage, location.path, ws, name, version);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const packageRef = version === 'latest' ? name : `${name}@${version}`;
|
|
63
|
+
await workspaceDeployRemote(location.baseUrl, location.repo, ws, packageRef, { token: location.token });
|
|
64
|
+
}
|
|
65
|
+
console.log(`Deployed ${pkgSpec} to workspace: ${ws}`);
|
|
34
66
|
}
|
|
35
67
|
catch (err) {
|
|
36
|
-
if (err instanceof WorkspaceLockError) {
|
|
37
|
-
console.log('');
|
|
38
|
-
console.log(`Workspace is locked by another process with PID: ${err.holder?.pid ?? 'unknown'}`);
|
|
39
|
-
process.exit(1);
|
|
40
|
-
}
|
|
41
68
|
exitError(formatError(err));
|
|
42
69
|
}
|
|
43
70
|
},
|
|
@@ -46,12 +73,28 @@ export const workspaceCommand = {
|
|
|
46
73
|
*/
|
|
47
74
|
async export(repoArg, ws, zipPath, options) {
|
|
48
75
|
try {
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
76
|
+
const location = await parseRepoLocation(repoArg);
|
|
77
|
+
if (location.type === 'local') {
|
|
78
|
+
const storage = new LocalStorage();
|
|
79
|
+
const result = await workspaceExport(storage, location.path, ws, zipPath, options.name, options.version);
|
|
80
|
+
console.log(`Exported workspace ${ws} as ${result.name}@${result.version}`);
|
|
81
|
+
console.log(` Output: ${zipPath}`);
|
|
82
|
+
console.log(` Package hash: ${result.packageHash.slice(0, 12)}...`);
|
|
83
|
+
console.log(` Objects: ${result.objectCount}`);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
// Remote export - async transfer protocol with progress
|
|
87
|
+
const zipBytes = await workspaceExportRemote(location.baseUrl, location.repo, ws, { token: location.token }, {
|
|
88
|
+
name: options.name,
|
|
89
|
+
version: options.version,
|
|
90
|
+
onProgress: writeExportProgress,
|
|
91
|
+
});
|
|
92
|
+
clearProgress();
|
|
93
|
+
writeFileSync(zipPath, zipBytes);
|
|
94
|
+
console.log(`Exported workspace ${ws}`);
|
|
95
|
+
console.log(` Output: ${zipPath}`);
|
|
96
|
+
console.log(` Size: ${zipBytes.length} bytes`);
|
|
97
|
+
}
|
|
55
98
|
}
|
|
56
99
|
catch (err) {
|
|
57
100
|
exitError(formatError(err));
|
|
@@ -62,20 +105,41 @@ export const workspaceCommand = {
|
|
|
62
105
|
*/
|
|
63
106
|
async list(repoArg) {
|
|
64
107
|
try {
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
108
|
+
const location = await parseRepoLocation(repoArg);
|
|
109
|
+
if (location.type === 'local') {
|
|
110
|
+
const storage = new LocalStorage();
|
|
111
|
+
const workspaces = await workspaceList(storage, location.path);
|
|
112
|
+
if (workspaces.length === 0) {
|
|
113
|
+
console.log('No workspaces');
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
console.log('Workspaces:');
|
|
117
|
+
for (const ws of workspaces) {
|
|
118
|
+
const state = await workspaceGetState(storage, location.path, ws);
|
|
119
|
+
if (state) {
|
|
120
|
+
console.log(` ${ws} (${state.packageName}@${state.packageVersion})`);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
console.log(` ${ws} (not deployed)`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
70
126
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const
|
|
74
|
-
if (
|
|
75
|
-
console.log(
|
|
127
|
+
else {
|
|
128
|
+
// Remote - workspaceListRemote returns WorkspaceInfo[] with package info
|
|
129
|
+
const workspaces = await workspaceListRemote(location.baseUrl, location.repo, { token: location.token });
|
|
130
|
+
if (workspaces.length === 0) {
|
|
131
|
+
console.log('No workspaces');
|
|
132
|
+
return;
|
|
76
133
|
}
|
|
77
|
-
|
|
78
|
-
|
|
134
|
+
console.log('Workspaces:');
|
|
135
|
+
for (const info of workspaces) {
|
|
136
|
+
if (info.deployed && info.packageName.type === 'some') {
|
|
137
|
+
const pkgVersion = info.packageVersion.type === 'some' ? info.packageVersion.value : 'unknown';
|
|
138
|
+
console.log(` ${info.name} (${info.packageName.value}@${pkgVersion})`);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
console.log(` ${info.name} (not deployed)`);
|
|
142
|
+
}
|
|
79
143
|
}
|
|
80
144
|
}
|
|
81
145
|
}
|
|
@@ -88,19 +152,249 @@ export const workspaceCommand = {
|
|
|
88
152
|
*/
|
|
89
153
|
async remove(repoArg, ws) {
|
|
90
154
|
try {
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
155
|
+
const location = await parseRepoLocation(repoArg);
|
|
156
|
+
if (location.type === 'local') {
|
|
157
|
+
const storage = new LocalStorage();
|
|
158
|
+
await workspaceRemove(storage, location.path, ws);
|
|
159
|
+
console.log(`Removed workspace: ${ws}`);
|
|
160
|
+
console.log('Run `e3 repo gc` to reclaim disk space');
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
await workspaceRemoveRemote(location.baseUrl, location.repo, ws, { token: location.token });
|
|
164
|
+
console.log(`Removed workspace: ${ws}`);
|
|
165
|
+
}
|
|
95
166
|
}
|
|
96
167
|
catch (err) {
|
|
97
|
-
|
|
168
|
+
exitError(formatError(err));
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
/**
|
|
172
|
+
* Show detailed workspace status.
|
|
173
|
+
*/
|
|
174
|
+
async status(repoArg, ws) {
|
|
175
|
+
try {
|
|
176
|
+
const location = await parseRepoLocation(repoArg);
|
|
177
|
+
let status;
|
|
178
|
+
if (location.type === 'local') {
|
|
179
|
+
const storage = new LocalStorage();
|
|
180
|
+
status = await workspaceStatus(storage, location.path, ws);
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
const remoteStatus = await workspaceStatusRemote(location.baseUrl, location.repo, ws, { token: location.token });
|
|
184
|
+
// Convert remote status to local format
|
|
185
|
+
status = {
|
|
186
|
+
workspace: remoteStatus.workspace,
|
|
187
|
+
lock: remoteStatus.lock.type === 'some' ? {
|
|
188
|
+
pid: Number(remoteStatus.lock.value.pid),
|
|
189
|
+
acquiredAt: remoteStatus.lock.value.acquiredAt,
|
|
190
|
+
operation: remoteStatus.lock.value.command.type === 'some' ? remoteStatus.lock.value.command.value : undefined,
|
|
191
|
+
} : null,
|
|
192
|
+
datasets: remoteStatus.datasets.map(d => ({
|
|
193
|
+
path: d.path,
|
|
194
|
+
status: d.status,
|
|
195
|
+
hash: d.hash.type === 'some' ? d.hash.value : null,
|
|
196
|
+
isTaskOutput: d.isTaskOutput,
|
|
197
|
+
producedBy: d.producedBy.type === 'some' ? d.producedBy.value : null,
|
|
198
|
+
})),
|
|
199
|
+
tasks: remoteStatus.tasks.map(t => ({
|
|
200
|
+
name: t.name,
|
|
201
|
+
hash: t.hash,
|
|
202
|
+
status: convertTaskStatus(t.status),
|
|
203
|
+
inputs: t.inputs,
|
|
204
|
+
output: t.output,
|
|
205
|
+
dependsOn: t.dependsOn,
|
|
206
|
+
})),
|
|
207
|
+
summary: {
|
|
208
|
+
datasets: {
|
|
209
|
+
total: Number(remoteStatus.summary.datasets.total),
|
|
210
|
+
unset: Number(remoteStatus.summary.datasets.unset),
|
|
211
|
+
stale: Number(remoteStatus.summary.datasets.stale),
|
|
212
|
+
upToDate: Number(remoteStatus.summary.datasets.upToDate),
|
|
213
|
+
},
|
|
214
|
+
tasks: {
|
|
215
|
+
total: Number(remoteStatus.summary.tasks.total),
|
|
216
|
+
upToDate: Number(remoteStatus.summary.tasks.upToDate),
|
|
217
|
+
ready: Number(remoteStatus.summary.tasks.ready),
|
|
218
|
+
waiting: Number(remoteStatus.summary.tasks.waiting),
|
|
219
|
+
inProgress: Number(remoteStatus.summary.tasks.inProgress),
|
|
220
|
+
failed: Number(remoteStatus.summary.tasks.failed),
|
|
221
|
+
error: Number(remoteStatus.summary.tasks.error),
|
|
222
|
+
staleRunning: Number(remoteStatus.summary.tasks.staleRunning),
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
console.log(`Workspace: ${status.workspace}`);
|
|
228
|
+
console.log('');
|
|
229
|
+
// Lock status
|
|
230
|
+
if (status.lock) {
|
|
231
|
+
console.log('Lock:');
|
|
232
|
+
console.log(` Held by PID ${status.lock.pid}`);
|
|
233
|
+
console.log(` Since: ${status.lock.acquiredAt}`);
|
|
234
|
+
if (status.lock.operation) {
|
|
235
|
+
console.log(` Operation: ${status.lock.operation}`);
|
|
236
|
+
}
|
|
237
|
+
console.log('');
|
|
238
|
+
}
|
|
239
|
+
// Summary
|
|
240
|
+
console.log('Summary:');
|
|
241
|
+
console.log(` Datasets: ${status.summary.datasets.upToDate} up-to-date, ${status.summary.datasets.stale} stale, ${status.summary.datasets.unset} unset`);
|
|
242
|
+
// Build task summary line - only include non-zero counts
|
|
243
|
+
const taskParts = [];
|
|
244
|
+
if (status.summary.tasks.upToDate > 0)
|
|
245
|
+
taskParts.push(`${status.summary.tasks.upToDate} up-to-date`);
|
|
246
|
+
if (status.summary.tasks.ready > 0)
|
|
247
|
+
taskParts.push(`${status.summary.tasks.ready} ready`);
|
|
248
|
+
if (status.summary.tasks.waiting > 0)
|
|
249
|
+
taskParts.push(`${status.summary.tasks.waiting} waiting`);
|
|
250
|
+
if (status.summary.tasks.inProgress > 0)
|
|
251
|
+
taskParts.push(`${status.summary.tasks.inProgress} in-progress`);
|
|
252
|
+
if (status.summary.tasks.failed > 0)
|
|
253
|
+
taskParts.push(`${status.summary.tasks.failed} failed`);
|
|
254
|
+
if (status.summary.tasks.error > 0)
|
|
255
|
+
taskParts.push(`${status.summary.tasks.error} error`);
|
|
256
|
+
if (status.summary.tasks.staleRunning > 0)
|
|
257
|
+
taskParts.push(`${status.summary.tasks.staleRunning} stale-running`);
|
|
258
|
+
console.log(` Tasks: ${taskParts.join(', ') || 'none'}`);
|
|
259
|
+
console.log('');
|
|
260
|
+
// Tasks section
|
|
261
|
+
if (status.tasks.length > 0) {
|
|
262
|
+
console.log('Tasks:');
|
|
263
|
+
for (const task of status.tasks) {
|
|
264
|
+
const statusStr = formatTaskStatus(task.status);
|
|
265
|
+
console.log(` ${task.name}: ${statusStr}`);
|
|
266
|
+
if (task.dependsOn.length > 0) {
|
|
267
|
+
console.log(` depends on: ${task.dependsOn.join(', ')}`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
98
270
|
console.log('');
|
|
99
|
-
console.log(`Workspace is locked by another process with PID: ${err.holder?.pid ?? 'unknown'}`);
|
|
100
|
-
process.exit(1);
|
|
101
271
|
}
|
|
272
|
+
// Datasets section (only show non-up-to-date ones for brevity)
|
|
273
|
+
const nonUpToDate = status.datasets.filter(d => d.status.type !== 'up-to-date');
|
|
274
|
+
if (nonUpToDate.length > 0) {
|
|
275
|
+
console.log('Datasets needing attention:');
|
|
276
|
+
for (const dataset of nonUpToDate) {
|
|
277
|
+
const statusStr = dataset.status.type === 'unset' ? 'unset' : 'stale';
|
|
278
|
+
const producer = dataset.producedBy ? ` (from ${dataset.producedBy})` : ' (input)';
|
|
279
|
+
console.log(` ${dataset.path}: ${statusStr}${producer}`);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
else if (status.datasets.length > 0) {
|
|
283
|
+
console.log('All datasets up-to-date');
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
catch (err) {
|
|
102
287
|
exitError(formatError(err));
|
|
103
288
|
}
|
|
104
289
|
},
|
|
105
290
|
};
|
|
291
|
+
/**
|
|
292
|
+
* Import a zip, ensure the workspace exists, and deploy.
|
|
293
|
+
*
|
|
294
|
+
* Used by `workspace deploy --from-zip`.
|
|
295
|
+
*/
|
|
296
|
+
async function deployFromZip(location, ws, zipPath) {
|
|
297
|
+
let name;
|
|
298
|
+
let version;
|
|
299
|
+
let packageHash;
|
|
300
|
+
let objectCount;
|
|
301
|
+
if (location.type === 'local') {
|
|
302
|
+
const storage = new LocalStorage();
|
|
303
|
+
const result = await packageImport(storage, location.path, zipPath);
|
|
304
|
+
name = result.name;
|
|
305
|
+
version = result.version;
|
|
306
|
+
packageHash = result.packageHash;
|
|
307
|
+
objectCount = result.objectCount;
|
|
308
|
+
try {
|
|
309
|
+
await workspaceCreate(storage, location.path, ws);
|
|
310
|
+
}
|
|
311
|
+
catch (err) {
|
|
312
|
+
if (!(err instanceof WorkspaceExistsError))
|
|
313
|
+
throw err;
|
|
314
|
+
}
|
|
315
|
+
await workspaceDeploy(storage, location.path, ws, name, version);
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
const zipBytes = readFileSync(zipPath);
|
|
319
|
+
const result = await packageImportRemote(location.baseUrl, location.repo, new Uint8Array(zipBytes), { token: location.token });
|
|
320
|
+
name = result.name;
|
|
321
|
+
version = result.version;
|
|
322
|
+
packageHash = result.packageHash;
|
|
323
|
+
objectCount = Number(result.objectCount);
|
|
324
|
+
try {
|
|
325
|
+
await workspaceCreateRemote(location.baseUrl, location.repo, ws, { token: location.token });
|
|
326
|
+
}
|
|
327
|
+
catch (err) {
|
|
328
|
+
if (!(err instanceof ApiError && err.code === 'workspace_exists'))
|
|
329
|
+
throw err;
|
|
330
|
+
}
|
|
331
|
+
await workspaceDeployRemote(location.baseUrl, location.repo, ws, `${name}@${version}`, { token: location.token });
|
|
332
|
+
}
|
|
333
|
+
console.log(`Imported ${name}@${version}`);
|
|
334
|
+
console.log(` Package hash: ${packageHash.slice(0, 12)}...`);
|
|
335
|
+
console.log(` Objects: ${objectCount}`);
|
|
336
|
+
console.log(`Deployed to workspace: ${ws}`);
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Convert remote task status to local format.
|
|
340
|
+
*/
|
|
341
|
+
function convertTaskStatus(status) {
|
|
342
|
+
switch (status.type) {
|
|
343
|
+
case 'up-to-date':
|
|
344
|
+
return { type: 'up-to-date', cached: Boolean(status.cached) };
|
|
345
|
+
case 'ready':
|
|
346
|
+
return { type: 'ready' };
|
|
347
|
+
case 'waiting':
|
|
348
|
+
return { type: 'waiting', reason: String(status.reason ?? '') };
|
|
349
|
+
case 'in-progress':
|
|
350
|
+
return {
|
|
351
|
+
type: 'in-progress',
|
|
352
|
+
pid: status.pid?.type === 'some' ? Number(status.pid.value) : undefined,
|
|
353
|
+
startedAt: status.startedAt?.type === 'some' ? status.startedAt.value : undefined,
|
|
354
|
+
};
|
|
355
|
+
case 'failed':
|
|
356
|
+
return {
|
|
357
|
+
type: 'failed',
|
|
358
|
+
exitCode: Number(status.exitCode ?? 0),
|
|
359
|
+
completedAt: status.completedAt?.type === 'some' ? status.completedAt.value : undefined,
|
|
360
|
+
};
|
|
361
|
+
case 'error':
|
|
362
|
+
return {
|
|
363
|
+
type: 'error',
|
|
364
|
+
message: String(status.message ?? ''),
|
|
365
|
+
completedAt: status.completedAt?.type === 'some' ? status.completedAt.value : undefined,
|
|
366
|
+
};
|
|
367
|
+
case 'stale-running':
|
|
368
|
+
return {
|
|
369
|
+
type: 'stale-running',
|
|
370
|
+
pid: status.pid?.type === 'some' ? Number(status.pid.value) : undefined,
|
|
371
|
+
startedAt: status.startedAt?.type === 'some' ? status.startedAt.value : undefined,
|
|
372
|
+
};
|
|
373
|
+
default:
|
|
374
|
+
return { type: 'ready' };
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Format task status for display.
|
|
379
|
+
*/
|
|
380
|
+
function formatTaskStatus(status) {
|
|
381
|
+
switch (status.type) {
|
|
382
|
+
case 'up-to-date':
|
|
383
|
+
return status.cached ? 'up-to-date (cached)' : 'up-to-date';
|
|
384
|
+
case 'ready':
|
|
385
|
+
return 'ready to run';
|
|
386
|
+
case 'waiting':
|
|
387
|
+
return `waiting (${status.reason})`;
|
|
388
|
+
case 'in-progress':
|
|
389
|
+
return status.pid ? `in-progress (PID ${status.pid})` : 'in-progress';
|
|
390
|
+
case 'failed':
|
|
391
|
+
return `FAILED (exit code ${status.exitCode})`;
|
|
392
|
+
case 'error':
|
|
393
|
+
return `ERROR: ${status.message}`;
|
|
394
|
+
case 'stale-running':
|
|
395
|
+
return `stale-running (PID ${status.pid} no longer exists)`;
|
|
396
|
+
default:
|
|
397
|
+
return 'unknown';
|
|
398
|
+
}
|
|
399
|
+
}
|
|
106
400
|
//# sourceMappingURL=workspace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/commands/workspace.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/commands/workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Single credential entry for a server.
|
|
7
|
+
*/
|
|
8
|
+
export interface CredentialEntry {
|
|
9
|
+
/** JWT access token */
|
|
10
|
+
accessToken: string;
|
|
11
|
+
/** JWT refresh token */
|
|
12
|
+
refreshToken: string;
|
|
13
|
+
/** Access token expiration (ISO 8601) */
|
|
14
|
+
expiresAt: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Credentials file structure.
|
|
18
|
+
*/
|
|
19
|
+
export interface CredentialsFile {
|
|
20
|
+
/** File format version */
|
|
21
|
+
version: 1;
|
|
22
|
+
/** Credentials keyed by server URL (normalized, no trailing slash) */
|
|
23
|
+
credentials: Record<string, CredentialEntry>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* OIDC Discovery document.
|
|
27
|
+
*/
|
|
28
|
+
export interface OidcDiscovery {
|
|
29
|
+
issuer: string;
|
|
30
|
+
device_authorization_endpoint: string;
|
|
31
|
+
token_endpoint: string;
|
|
32
|
+
jwks_uri: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Device authorization response.
|
|
36
|
+
*/
|
|
37
|
+
export interface DeviceAuthResponse {
|
|
38
|
+
device_code: string;
|
|
39
|
+
user_code: string;
|
|
40
|
+
verification_uri: string;
|
|
41
|
+
verification_uri_complete: string;
|
|
42
|
+
expires_in: number;
|
|
43
|
+
interval: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Token response from OAuth2 token endpoint.
|
|
47
|
+
*/
|
|
48
|
+
export interface TokenResponse {
|
|
49
|
+
access_token: string;
|
|
50
|
+
refresh_token: string;
|
|
51
|
+
token_type: string;
|
|
52
|
+
expires_in: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Token error response.
|
|
56
|
+
*/
|
|
57
|
+
export interface TokenErrorResponse {
|
|
58
|
+
error: string;
|
|
59
|
+
error_description?: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Normalize server URL (remove trailing slash).
|
|
63
|
+
*/
|
|
64
|
+
export declare function normalizeServerUrl(url: string): string;
|
|
65
|
+
/**
|
|
66
|
+
* Load credentials file.
|
|
67
|
+
*/
|
|
68
|
+
export declare function loadCredentials(): CredentialsFile;
|
|
69
|
+
/**
|
|
70
|
+
* Save credentials file.
|
|
71
|
+
*/
|
|
72
|
+
export declare function saveCredentials(file: CredentialsFile): void;
|
|
73
|
+
/**
|
|
74
|
+
* Get credential for a server.
|
|
75
|
+
*/
|
|
76
|
+
export declare function getCredential(serverUrl: string): CredentialEntry | null;
|
|
77
|
+
/**
|
|
78
|
+
* Set credential for a server.
|
|
79
|
+
*/
|
|
80
|
+
export declare function setCredential(serverUrl: string, entry: CredentialEntry): void;
|
|
81
|
+
/**
|
|
82
|
+
* Remove credential for a server.
|
|
83
|
+
*/
|
|
84
|
+
export declare function removeCredential(serverUrl: string): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* List all saved credentials.
|
|
87
|
+
*/
|
|
88
|
+
export declare function listCredentials(): Array<{
|
|
89
|
+
server: string;
|
|
90
|
+
expiresAt: string;
|
|
91
|
+
}>;
|
|
92
|
+
/**
|
|
93
|
+
* Check if a token expiration time has passed.
|
|
94
|
+
*/
|
|
95
|
+
export declare function isExpired(expiresAt: string): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Fetch OIDC discovery document.
|
|
98
|
+
*/
|
|
99
|
+
export declare function fetchDiscovery(serverUrl: string): Promise<OidcDiscovery>;
|
|
100
|
+
/**
|
|
101
|
+
* Start device authorization flow.
|
|
102
|
+
*/
|
|
103
|
+
export declare function startDeviceAuth(discovery: OidcDiscovery): Promise<DeviceAuthResponse>;
|
|
104
|
+
/**
|
|
105
|
+
* Poll for device code approval.
|
|
106
|
+
*/
|
|
107
|
+
export declare function pollForTokens(discovery: OidcDiscovery, deviceCode: string, interval: number, expiresIn: number): Promise<TokenResponse>;
|
|
108
|
+
/**
|
|
109
|
+
* Refresh an access token using a refresh token.
|
|
110
|
+
*/
|
|
111
|
+
export declare function refreshAccessToken(serverUrl: string, refreshToken: string): Promise<TokenResponse>;
|
|
112
|
+
/**
|
|
113
|
+
* Get a valid access token for a server.
|
|
114
|
+
*
|
|
115
|
+
* If the current token is expired, attempts to refresh it.
|
|
116
|
+
* Throws if not logged in or refresh fails.
|
|
117
|
+
*/
|
|
118
|
+
export declare function getValidToken(serverUrl: string): Promise<string>;
|
|
119
|
+
/**
|
|
120
|
+
* Decode JWT payload without verification (for display purposes only).
|
|
121
|
+
*/
|
|
122
|
+
export declare function decodeJwtPayload(token: string): Record<string, unknown>;
|
|
123
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/credentials.ts"],"names":[],"mappings":"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"}
|