@fnndsc/chell 4.3.2 → 4.4.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/dist/builtins/debug.d.ts +3 -1
- package/dist/builtins/debug.js +14 -22
- package/dist/builtins/debug.js.map +1 -1
- package/dist/builtins/fs/cat.d.ts +8 -8
- package/dist/builtins/fs/cat.js +37 -20
- package/dist/builtins/fs/cat.js.map +1 -1
- package/dist/builtins/fs/cd.d.ts +3 -2
- package/dist/builtins/fs/cd.js +48 -33
- package/dist/builtins/fs/cd.js.map +1 -1
- package/dist/builtins/fs/cp.d.ts +4 -1
- package/dist/builtins/fs/cp.js +23 -10
- package/dist/builtins/fs/cp.js.map +1 -1
- package/dist/builtins/fs/download.js +5 -1
- package/dist/builtins/fs/download.js.map +1 -1
- package/dist/builtins/fs/edit.d.ts +2 -2
- package/dist/builtins/fs/edit.js +37 -19
- package/dist/builtins/fs/edit.js.map +1 -1
- package/dist/builtins/fs/mkdir.d.ts +4 -1
- package/dist/builtins/fs/mkdir.js +20 -6
- package/dist/builtins/fs/mkdir.js.map +1 -1
- package/dist/builtins/fs/mv.d.ts +4 -1
- package/dist/builtins/fs/mv.js +23 -10
- package/dist/builtins/fs/mv.js.map +1 -1
- package/dist/builtins/fs/pull.d.ts +2 -2
- package/dist/builtins/fs/pull.js +57 -29
- package/dist/builtins/fs/pull.js.map +1 -1
- package/dist/builtins/fs/pwd.d.ts +6 -3
- package/dist/builtins/fs/pwd.js +8 -10
- package/dist/builtins/fs/pwd.js.map +1 -1
- package/dist/builtins/fs/rm.d.ts +7 -1
- package/dist/builtins/fs/rm.js +61 -12
- package/dist/builtins/fs/rm.js.map +1 -1
- package/dist/builtins/fs/touch.d.ts +4 -1
- package/dist/builtins/fs/touch.js +24 -12
- package/dist/builtins/fs/touch.js.map +1 -1
- package/dist/builtins/fs/upload.js +4 -1
- package/dist/builtins/fs/upload.js.map +1 -1
- package/dist/builtins/index.d.ts +1 -0
- package/dist/builtins/index.js +1 -0
- package/dist/builtins/index.js.map +1 -1
- package/dist/builtins/sys/physicalmode.d.ts +3 -1
- package/dist/builtins/sys/physicalmode.js +13 -20
- package/dist/builtins/sys/physicalmode.js.map +1 -1
- package/dist/builtins/sys/timing.d.ts +3 -1
- package/dist/builtins/sys/timing.js +13 -20
- package/dist/builtins/sys/timing.js.map +1 -1
- package/dist/builtins/sys/version.d.ts +15 -0
- package/dist/builtins/sys/version.js +23 -0
- package/dist/builtins/sys/version.js.map +1 -0
- package/dist/builtins/sys/whoami.d.ts +9 -4
- package/dist/builtins/sys/whoami.js +20 -13
- package/dist/builtins/sys/whoami.js.map +1 -1
- package/dist/calypso.d.ts +13 -0
- package/dist/calypso.js +44 -0
- package/dist/calypso.js.map +1 -0
- package/dist/chell.d.ts +2 -1
- package/dist/chell.js +2 -1
- package/dist/chell.js.map +1 -1
- package/dist/core/boot.d.ts +3 -1
- package/dist/core/boot.js +50 -100
- package/dist/core/boot.js.map +1 -1
- package/dist/core/cli.d.ts +3 -1
- package/dist/core/cli.js +11 -1
- package/dist/core/cli.js.map +1 -1
- package/dist/core/cliSurface.d.ts +26 -0
- package/dist/core/cliSurface.js +152 -0
- package/dist/core/cliSurface.js.map +1 -0
- package/dist/core/dispatch.d.ts +63 -10
- package/dist/core/dispatch.js +326 -234
- package/dist/core/dispatch.js.map +1 -1
- package/dist/core/engine.d.ts +91 -0
- package/dist/core/engine.js +222 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/progress.d.ts +25 -0
- package/dist/core/progress.js +10 -0
- package/dist/core/progress.js.map +1 -0
- package/dist/core/progressRenderer.d.ts +42 -0
- package/dist/core/progressRenderer.js +176 -0
- package/dist/core/progressRenderer.js.map +1 -0
- package/dist/core/prompt/session.d.ts +20 -0
- package/dist/core/prompt/session.js +43 -0
- package/dist/core/prompt/session.js.map +1 -0
- package/dist/core/question.d.ts +11 -18
- package/dist/core/question.js +14 -57
- package/dist/core/question.js.map +1 -1
- package/dist/core/repl.d.ts +25 -5
- package/dist/core/repl.js +56 -45
- package/dist/core/repl.js.map +1 -1
- package/dist/core/sink.d.ts +201 -0
- package/dist/core/sink.js +300 -0
- package/dist/core/sink.js.map +1 -0
- package/dist/core/surface.d.ts +172 -0
- package/dist/core/surface.js +105 -0
- package/dist/core/surface.js.map +1 -0
- package/dist/core/version.d.ts +20 -0
- package/dist/core/version.js +82 -0
- package/dist/core/version.js.map +1 -0
- package/dist/core/warnings.d.ts +14 -0
- package/dist/core/warnings.js +25 -0
- package/dist/core/warnings.js.map +1 -0
- package/dist/daemon/launch.d.ts +9 -0
- package/dist/daemon/launch.js +82 -0
- package/dist/daemon/launch.js.map +1 -0
- package/dist/index.js +2 -12
- package/dist/index.js.map +1 -1
- package/dist/lib/spinner.js +5 -4
- package/dist/lib/spinner.js.map +1 -1
- package/dist/lib/vfs/vfs.js +7 -3
- package/dist/lib/vfs/vfs.js.map +1 -1
- package/dist/remote/client.d.ts +6 -0
- package/dist/remote/client.js +71 -0
- package/dist/remote/client.js.map +1 -0
- package/dist/remote/discovery.d.ts +23 -0
- package/dist/remote/discovery.js +55 -0
- package/dist/remote/discovery.js.map +1 -0
- package/dist/remote/remoteEngine.d.ts +125 -0
- package/dist/remote/remoteEngine.js +283 -0
- package/dist/remote/remoteEngine.js.map +1 -0
- package/package.json +7 -5
package/dist/builtins/debug.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { CommandEnvelope } from '@fnndsc/cumin';
|
|
1
2
|
/**
|
|
2
3
|
* Toggles or displays debug mode status.
|
|
3
4
|
*
|
|
4
5
|
* @param args - Command line arguments: 'on', 'off', or empty to display status.
|
|
6
|
+
* @returns An envelope describing the (possibly updated) debug state.
|
|
5
7
|
*/
|
|
6
|
-
export declare function builtin_debug(args: string[]): Promise<
|
|
8
|
+
export declare function builtin_debug(args: string[]): Promise<CommandEnvelope>;
|
package/dist/builtins/debug.js
CHANGED
|
@@ -1,47 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file Debug Command
|
|
3
3
|
*
|
|
4
|
-
* Toggles debug mode for the application,
|
|
4
|
+
* Toggles debug mode for the application, reported as a command envelope.
|
|
5
5
|
*/
|
|
6
6
|
import chalk from 'chalk';
|
|
7
|
+
import { envelope_ok, envelope_error } from '@fnndsc/cumin';
|
|
7
8
|
import { session } from '../session/index.js';
|
|
8
9
|
/**
|
|
9
10
|
* Toggles or displays debug mode status.
|
|
10
11
|
*
|
|
11
12
|
* @param args - Command line arguments: 'on', 'off', or empty to display status.
|
|
13
|
+
* @returns An envelope describing the (possibly updated) debug state.
|
|
12
14
|
*/
|
|
13
15
|
export async function builtin_debug(args) {
|
|
14
16
|
const subcommand = args[0];
|
|
15
17
|
const config = session.connection.config;
|
|
16
18
|
if (!config) {
|
|
17
|
-
|
|
18
|
-
return;
|
|
19
|
+
return envelope_error('', [{ type: 'error', message: 'Error: Connection configuration not initialized.' }], `${chalk.red('Error: Connection configuration not initialized.')}\n`);
|
|
19
20
|
}
|
|
20
21
|
if (!subcommand) {
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
console.log(chalk.gray(' Verbose error logging is disabled.'));
|
|
28
|
-
}
|
|
29
|
-
console.log(chalk.gray('\nUsage: debug [on|off]'));
|
|
30
|
-
return;
|
|
22
|
+
const enabled = config.debug;
|
|
23
|
+
const status = enabled ? 'enabled' : 'disabled';
|
|
24
|
+
const detail = enabled
|
|
25
|
+
? chalk.gray(' Verbose error logging is enabled.')
|
|
26
|
+
: chalk.gray(' Verbose error logging is disabled.');
|
|
27
|
+
return envelope_ok(`Debug mode: ${chalk.yellow(status)}\n${detail}\n${chalk.gray('\nUsage: debug [on|off]')}\n`, { kind: 'sys.debug', data: { enabled } });
|
|
31
28
|
}
|
|
32
29
|
if (subcommand === 'on') {
|
|
33
30
|
config.debug = true;
|
|
34
|
-
|
|
35
|
-
console.log(chalk.gray(' Verbose error logging activated.'));
|
|
31
|
+
return envelope_ok(`${chalk.yellow('[!] Debug mode enabled')}\n${chalk.gray(' Verbose error logging activated.')}\n`, { kind: 'sys.debug', data: { enabled: true } });
|
|
36
32
|
}
|
|
37
|
-
|
|
33
|
+
if (subcommand === 'off') {
|
|
38
34
|
config.debug = false;
|
|
39
|
-
|
|
40
|
-
console.log(chalk.gray(' Verbose error logging deactivated.'));
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
console.log(chalk.red(`Unknown argument: ${subcommand}`));
|
|
44
|
-
console.log(chalk.gray('Usage: debug [on|off]'));
|
|
35
|
+
return envelope_ok(`${chalk.green('[+] Debug mode disabled')}\n${chalk.gray(' Verbose error logging deactivated.')}\n`, { kind: 'sys.debug', data: { enabled: false } });
|
|
45
36
|
}
|
|
37
|
+
return envelope_error(`${chalk.red(`Unknown argument: ${subcommand}`)}\n${chalk.gray('Usage: debug [on|off]')}\n`);
|
|
46
38
|
}
|
|
47
39
|
//# sourceMappingURL=debug.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/builtins/debug.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/builtins/debug.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAmB,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE7E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc;IAChD,MAAM,UAAU,GAAuB,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAiC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;IAEvE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,cAAc,CACnB,EAAE,EACF,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,kDAAkD,EAAE,CAAC,EAChF,GAAG,KAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC,IAAI,CACrE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,OAAO,GAAY,MAAM,CAAC,KAAK,CAAC;QACtC,MAAM,MAAM,GAAW,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;QACxD,MAAM,MAAM,GAAW,OAAO;YAC5B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC;YACnD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACvD,OAAO,WAAW,CAChB,eAAe,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAC5F,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CACzC,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,OAAO,WAAW,CAChB,GAAG,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,IAAI,EACpG,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAC/C,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,OAAO,WAAW,CAChB,GAAG,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,IAAI,EACtG,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAChD,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CACnB,GAAG,KAAK,CAAC,GAAG,CAAC,qBAAqB,UAAU,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAC5F,CAAC;AACJ,CAAC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
+
import type { CommandEnvelope } from '@fnndsc/cumin';
|
|
1
2
|
/**
|
|
2
3
|
* Displays the content of one or more files.
|
|
3
4
|
*
|
|
4
5
|
* Supports multiple files and concatenates their output. Binary mode is applied
|
|
5
6
|
* consistently to all files if any file is detected as binary or --binary is specified.
|
|
7
|
+
* Text content and errors are buffered into the envelope; binary content streams
|
|
8
|
+
* to the terminal directly with backpressure (raw bytes are not envelope text),
|
|
9
|
+
* and the binary auto-detection notice is emitted live on the err channel so it
|
|
10
|
+
* precedes the bytes it describes.
|
|
6
11
|
*
|
|
7
12
|
* @param args - Command line arguments (file paths and optional --binary flag).
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* ```typescript
|
|
11
|
-
* await builtin_cat(['file1.txt', 'file2.txt']);
|
|
12
|
-
* await builtin_cat(['--binary', 'image.dcm']);
|
|
13
|
-
* await builtin_cat(['*.json']); // After wildcard expansion
|
|
14
|
-
* ```
|
|
13
|
+
* @returns An envelope whose rendered text carries the (highlighted) file
|
|
14
|
+
* contents and whose model lists per-file outcomes.
|
|
15
15
|
*/
|
|
16
|
-
export declare function builtin_cat(args: string[]): Promise<
|
|
16
|
+
export declare function builtin_cat(args: string[]): Promise<CommandEnvelope>;
|
package/dist/builtins/fs/cat.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file Builtin cat command.
|
|
3
|
-
* Displays file contents.
|
|
3
|
+
* Displays file contents, reported as a command envelope.
|
|
4
4
|
*/
|
|
5
5
|
import chalk from 'chalk';
|
|
6
6
|
import { path_resolve, error_stripDebugPrefix } from '../utils.js';
|
|
7
7
|
import { files_cat as chefs_cat_cmd, files_catBinary as chefs_catBinary_cmd } from '@fnndsc/chili/commands/fs/cat.js';
|
|
8
8
|
import { cat_render } from '@fnndsc/chili/views/fs.js';
|
|
9
|
-
import { errorStack } from '@fnndsc/cumin';
|
|
9
|
+
import { errorStack, envelope_ok, envelope_error } from '@fnndsc/cumin';
|
|
10
|
+
import { sink_get } from '../../core/sink.js';
|
|
10
11
|
import * as path from 'path';
|
|
11
12
|
/** File extensions that receive syntax highlighting. */
|
|
12
13
|
const HIGHLIGHT_EXTENSIONS = new Set(['.json', '.yaml', '.yml']);
|
|
@@ -183,15 +184,14 @@ async function buffer_writeToStdout(buffer) {
|
|
|
183
184
|
*
|
|
184
185
|
* Supports multiple files and concatenates their output. Binary mode is applied
|
|
185
186
|
* consistently to all files if any file is detected as binary or --binary is specified.
|
|
187
|
+
* Text content and errors are buffered into the envelope; binary content streams
|
|
188
|
+
* to the terminal directly with backpressure (raw bytes are not envelope text),
|
|
189
|
+
* and the binary auto-detection notice is emitted live on the err channel so it
|
|
190
|
+
* precedes the bytes it describes.
|
|
186
191
|
*
|
|
187
192
|
* @param args - Command line arguments (file paths and optional --binary flag).
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
* ```typescript
|
|
191
|
-
* await builtin_cat(['file1.txt', 'file2.txt']);
|
|
192
|
-
* await builtin_cat(['--binary', 'image.dcm']);
|
|
193
|
-
* await builtin_cat(['*.json']); // After wildcard expansion
|
|
194
|
-
* ```
|
|
193
|
+
* @returns An envelope whose rendered text carries the (highlighted) file
|
|
194
|
+
* contents and whose model lists per-file outcomes.
|
|
195
195
|
*/
|
|
196
196
|
export async function builtin_cat(args) {
|
|
197
197
|
let binaryMode = false;
|
|
@@ -205,45 +205,62 @@ export async function builtin_cat(args) {
|
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
207
|
if (filePaths.length === 0) {
|
|
208
|
-
|
|
209
|
-
return;
|
|
208
|
+
return envelope_error('', undefined, `${chalk.red('Usage: cat [--binary] <file> [file...]')}\n`);
|
|
210
209
|
}
|
|
210
|
+
let rendered = '';
|
|
211
|
+
let renderedErr = '';
|
|
212
|
+
const outcomes = [];
|
|
213
|
+
let anyFailed = false;
|
|
211
214
|
for (let i = 0; i < filePaths.length; i++) {
|
|
212
215
|
const pathArg = filePaths[i];
|
|
213
216
|
const target = await path_resolve(pathArg);
|
|
214
217
|
// Auto-detect binary files
|
|
215
218
|
const isBinaryFile = extension_isBinary(target);
|
|
216
|
-
// Inform user about auto-detection only if in interactive mode (stdout is TTY)
|
|
217
|
-
//
|
|
218
|
-
// Only show on first file to avoid spam
|
|
219
|
+
// Inform user about auto-detection only if in interactive mode (stdout is TTY).
|
|
220
|
+
// Emitted live (not buffered) so the notice precedes the raw bytes it announces.
|
|
221
|
+
// Only show on first file to avoid spam.
|
|
219
222
|
if (i === 0 && isBinaryFile && !binaryMode && process.stdout.isTTY) {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
+
sink_get().err_write(`${chalk.cyan(`Info: ${pathArg} detected as binary file (${path.extname(target)}), using binary mode.`)}\n`);
|
|
224
|
+
sink_get().err_write(`${chalk.cyan('Tip: Use "cat --binary <file>" to explicitly request binary mode.')}\n`);
|
|
225
|
+
sink_get().err_write('\n');
|
|
223
226
|
}
|
|
224
227
|
// Use binary mode if requested OR if file is detected as binary
|
|
225
228
|
if (binaryMode || isBinaryFile) {
|
|
226
229
|
const result = await chefs_catBinary_cmd(target);
|
|
227
230
|
if (!result.ok) {
|
|
228
231
|
const error = errorStack.stack_pop();
|
|
229
|
-
|
|
232
|
+
renderedErr += `${chalk.red(`cat: ${pathArg}: ${error ? error_stripDebugPrefix(error.message) : 'Unknown error'}`)}\n`;
|
|
233
|
+
outcomes.push({ path: pathArg, ok: false, binary: true });
|
|
234
|
+
anyFailed = true;
|
|
230
235
|
process.exitCode = 1;
|
|
231
236
|
continue;
|
|
232
237
|
}
|
|
233
238
|
// Output raw buffer to stdout with backpressure handling
|
|
234
239
|
await buffer_writeToStdout(result.value);
|
|
240
|
+
outcomes.push({ path: pathArg, ok: true, binary: true, bytes: result.value.length });
|
|
235
241
|
}
|
|
236
242
|
else {
|
|
237
243
|
const result = await chefs_cat_cmd(target);
|
|
238
244
|
if (!result.ok) {
|
|
239
245
|
const error = errorStack.stack_pop();
|
|
240
|
-
|
|
246
|
+
renderedErr += `${chalk.red(`cat: ${pathArg}: ${error ? error_stripDebugPrefix(error.message) : 'Unknown error'}`)}\n`;
|
|
247
|
+
outcomes.push({ path: pathArg, ok: false, binary: false });
|
|
248
|
+
anyFailed = true;
|
|
241
249
|
process.exitCode = 1;
|
|
242
250
|
continue;
|
|
243
251
|
}
|
|
244
252
|
const highlighted = content_highlight(result.value, target);
|
|
245
|
-
|
|
253
|
+
rendered += `${cat_render(highlighted, pathArg)}\n`;
|
|
254
|
+
outcomes.push({ path: pathArg, ok: true, binary: false });
|
|
246
255
|
}
|
|
247
256
|
}
|
|
257
|
+
const model = { kind: 'fs.cat', data: outcomes };
|
|
258
|
+
if (anyFailed) {
|
|
259
|
+
const envelope = envelope_error(rendered, undefined, renderedErr || undefined);
|
|
260
|
+
envelope.model = model;
|
|
261
|
+
return envelope;
|
|
262
|
+
}
|
|
263
|
+
const envelope = envelope_ok(rendered, model);
|
|
264
|
+
return envelope;
|
|
248
265
|
}
|
|
249
266
|
//# sourceMappingURL=cat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cat.js","sourceRoot":"","sources":["../../../src/builtins/fs/cat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,eAAe,IAAI,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACtH,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"cat.js","sourceRoot":"","sources":["../../../src/builtins/fs/cat.ts"],"names":[],"mappings":"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"}
|
package/dist/builtins/fs/cd.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CommandEnvelope } from '@fnndsc/cumin';
|
|
1
2
|
/**
|
|
2
3
|
* Interface representing a FileBrowserFolder from ChRIS API.
|
|
3
4
|
*/
|
|
@@ -35,7 +36,7 @@ export declare function folder_verifyPathMatch(folder: FileBrowserFolder | null
|
|
|
35
36
|
* Validates the existence of the target path before setting it.
|
|
36
37
|
*
|
|
37
38
|
* @param args - An array containing the target path as the first element.
|
|
38
|
-
* @returns
|
|
39
|
+
* @returns An envelope carrying the new working directory on success.
|
|
39
40
|
*/
|
|
40
|
-
export declare function builtin_cd(args: string[]): Promise<
|
|
41
|
+
export declare function builtin_cd(args: string[]): Promise<CommandEnvelope>;
|
|
41
42
|
export {};
|
package/dist/builtins/fs/cd.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file Builtin cd command.
|
|
3
|
-
* Changes the current working directory.
|
|
3
|
+
* Changes the current working directory, reported as a command envelope.
|
|
4
4
|
*/
|
|
5
5
|
import chalk from 'chalk';
|
|
6
6
|
import { session } from '../../session/index.js';
|
|
7
7
|
import { path_resolve, path_resolveLinks, error_stripDebugPrefix } from '../utils.js';
|
|
8
|
+
import { envelope_ok, envelope_error } from '@fnndsc/cumin';
|
|
8
9
|
/**
|
|
9
10
|
* Structural VFS container paths that exist by definition and need no API
|
|
10
11
|
* validation when `cd`-ing into them.
|
|
@@ -46,17 +47,28 @@ export function folder_verifyPathMatch(folder, validationPath) {
|
|
|
46
47
|
const cleanValidation = validationPath.replace(/^\/+|\/+$/g, '');
|
|
47
48
|
return cleanFolder === cleanValidation;
|
|
48
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Builds the success envelope for a completed directory change.
|
|
52
|
+
*
|
|
53
|
+
* @param newCwd - The working directory that is now current.
|
|
54
|
+
* @param rendered - Any stdout text (debug traces) produced along the way.
|
|
55
|
+
* @returns An ok envelope carrying the fs.cwd model.
|
|
56
|
+
*/
|
|
57
|
+
function cdSuccess_envelope(newCwd, rendered) {
|
|
58
|
+
return envelope_ok(rendered, { kind: 'fs.cwd', data: { path: newCwd } });
|
|
59
|
+
}
|
|
49
60
|
/**
|
|
50
61
|
* Handles `cd` into a virtual (VFS) path: structural containers are accepted
|
|
51
62
|
* directly, deeper VFS paths are validated and their listing cached.
|
|
52
63
|
*
|
|
53
64
|
* @param cleanPath - The normalized virtual path.
|
|
54
65
|
* @param pathArg - The original user-supplied path (for error messages).
|
|
66
|
+
* @returns The command envelope for the attempt.
|
|
55
67
|
*/
|
|
56
68
|
async function cdVirtual_handle(cleanPath, pathArg) {
|
|
57
69
|
if (vfsPath_isStructural(cleanPath)) {
|
|
58
70
|
await session.setCWD(cleanPath);
|
|
59
|
-
return;
|
|
71
|
+
return cdSuccess_envelope(cleanPath, '');
|
|
60
72
|
}
|
|
61
73
|
// For deeper VFS paths (e.g. /net/pacs/queries/<id>), validate and cache the
|
|
62
74
|
// result so a subsequent `ls` doesn't need to re-fetch.
|
|
@@ -66,12 +78,12 @@ async function cdVirtual_handle(cleanPath, pathArg) {
|
|
|
66
78
|
const { errorStack } = await import('@fnndsc/cumin');
|
|
67
79
|
const lastError = errorStack.stack_pop();
|
|
68
80
|
const detail = lastError ? error_stripDebugPrefix(lastError.message) : 'No such file or directory';
|
|
69
|
-
|
|
70
|
-
return;
|
|
81
|
+
return envelope_error('', undefined, `${chalk.red(`cd: ${pathArg}: ${detail}`)}\n`);
|
|
71
82
|
}
|
|
72
83
|
const { listCache_get } = await import('@fnndsc/cumin');
|
|
73
84
|
listCache_get().cache_set(cleanPath, listResult.value);
|
|
74
85
|
await session.setCWD(cleanPath);
|
|
86
|
+
return cdSuccess_envelope(cleanPath, '');
|
|
75
87
|
}
|
|
76
88
|
/**
|
|
77
89
|
* Handles `cd` into a real (API-backed) ChRIS folder: resolves the validation
|
|
@@ -80,13 +92,15 @@ async function cdVirtual_handle(cleanPath, pathArg) {
|
|
|
80
92
|
*
|
|
81
93
|
* @param logicalPath - The resolved logical path.
|
|
82
94
|
* @param pathArg - The original user-supplied path (for error messages).
|
|
95
|
+
* @returns The command envelope for the attempt.
|
|
83
96
|
*/
|
|
84
97
|
async function cdReal_handle(logicalPath, pathArg) {
|
|
85
98
|
const client = await session.connection.client_get();
|
|
86
99
|
if (!client) {
|
|
87
|
-
|
|
88
|
-
return;
|
|
100
|
+
return envelope_error('', undefined, `${chalk.red('Not connected to ChRIS.')}\n`);
|
|
89
101
|
}
|
|
102
|
+
const debugEnabled = session.connection.config?.debug === true;
|
|
103
|
+
let rendered = '';
|
|
90
104
|
let validationPath;
|
|
91
105
|
if (session.physicalMode_get()) {
|
|
92
106
|
validationPath = await path_resolveLinks(logicalPath);
|
|
@@ -95,49 +109,51 @@ async function cdReal_handle(logicalPath, pathArg) {
|
|
|
95
109
|
const { logical_toPhysical } = await import('@fnndsc/chili/utils');
|
|
96
110
|
const physicalResult = await logical_toPhysical(logicalPath);
|
|
97
111
|
if (!physicalResult.ok) {
|
|
98
|
-
|
|
99
|
-
if (
|
|
100
|
-
|
|
112
|
+
let renderedErr = `${chalk.red(`cd: ${pathArg}: No such file or directory`)}\n`;
|
|
113
|
+
if (debugEnabled) {
|
|
114
|
+
renderedErr += `${chalk.gray(` Logical path: ${logicalPath}`)}\n`;
|
|
101
115
|
}
|
|
102
|
-
return;
|
|
116
|
+
return envelope_error('', undefined, renderedErr);
|
|
103
117
|
}
|
|
104
118
|
validationPath = physicalResult.value;
|
|
105
119
|
}
|
|
106
|
-
if (
|
|
107
|
-
|
|
120
|
+
if (debugEnabled) {
|
|
121
|
+
rendered += `${chalk.gray(`cd: ${pathArg} → logical: ${logicalPath} → validation: ${validationPath}`)}\n`;
|
|
108
122
|
}
|
|
109
123
|
const cwdPath = session.physicalMode_get() ? validationPath : logicalPath;
|
|
110
124
|
const currentCwd = await session.getCWD();
|
|
111
125
|
if (currentCwd === cwdPath) {
|
|
112
|
-
if (
|
|
113
|
-
|
|
126
|
+
if (debugEnabled) {
|
|
127
|
+
rendered += `${chalk.gray(` Already in target directory, skipping validation`)}\n`;
|
|
114
128
|
}
|
|
115
|
-
return;
|
|
129
|
+
return cdSuccess_envelope(cwdPath, rendered);
|
|
116
130
|
}
|
|
117
131
|
try {
|
|
118
132
|
const folder = (await client.getFileBrowserFolderByPath(validationPath));
|
|
119
133
|
if (folder_verifyPathMatch(folder, validationPath)) {
|
|
120
134
|
await session.setCWD(cwdPath);
|
|
135
|
+
return cdSuccess_envelope(cwdPath, rendered);
|
|
121
136
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
if (
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
console.error(chalk.gray(` API returned mismatched folder path: ${folderPath} (expected: ${validationPath})`));
|
|
131
|
-
}
|
|
137
|
+
let renderedErr = `${chalk.red(`cd: ${pathArg}: No such file or directory`)}\n`;
|
|
138
|
+
if (debugEnabled) {
|
|
139
|
+
if (!folder) {
|
|
140
|
+
renderedErr += `${chalk.gray(` API returned null for path: ${validationPath}`)}\n`;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
const folderPath = folder.data?.path || folder.path;
|
|
144
|
+
renderedErr += `${chalk.gray(` API returned mismatched folder path: ${folderPath} (expected: ${validationPath})`)}\n`;
|
|
132
145
|
}
|
|
133
146
|
}
|
|
147
|
+
const envelope = envelope_error(rendered, undefined, renderedErr);
|
|
148
|
+
return envelope;
|
|
134
149
|
}
|
|
135
150
|
catch (apiError) {
|
|
136
|
-
|
|
137
|
-
if (
|
|
151
|
+
let renderedErr = `${chalk.red(`cd: ${pathArg}: No such file or directory`)}\n`;
|
|
152
|
+
if (debugEnabled) {
|
|
138
153
|
const msg = apiError instanceof Error ? apiError.message : String(apiError);
|
|
139
|
-
|
|
154
|
+
renderedErr += `${chalk.gray(` API error: ${msg}`)}\n`;
|
|
140
155
|
}
|
|
156
|
+
return envelope_error(rendered, undefined, renderedErr);
|
|
141
157
|
}
|
|
142
158
|
}
|
|
143
159
|
/**
|
|
@@ -145,7 +161,7 @@ async function cdReal_handle(logicalPath, pathArg) {
|
|
|
145
161
|
* Validates the existence of the target path before setting it.
|
|
146
162
|
*
|
|
147
163
|
* @param args - An array containing the target path as the first element.
|
|
148
|
-
* @returns
|
|
164
|
+
* @returns An envelope carrying the new working directory on success.
|
|
149
165
|
*/
|
|
150
166
|
export async function builtin_cd(args) {
|
|
151
167
|
const pathArg = args.length > 0 ? args.join(' ') : undefined;
|
|
@@ -165,14 +181,13 @@ export async function builtin_cd(args) {
|
|
|
165
181
|
isParentOfVfs ||
|
|
166
182
|
vfsDispatcher.provider_get(cleanPath).prefix !== '';
|
|
167
183
|
if (isVirtual) {
|
|
168
|
-
|
|
169
|
-
return;
|
|
184
|
+
return cdVirtual_handle(cleanPath, pathArg);
|
|
170
185
|
}
|
|
171
|
-
|
|
186
|
+
return cdReal_handle(logicalPath, pathArg);
|
|
172
187
|
}
|
|
173
188
|
catch (error) {
|
|
174
189
|
const msg = error instanceof Error ? error.message : String(error);
|
|
175
|
-
|
|
190
|
+
return envelope_error('', undefined, `${chalk.red(`Failed to cd: ${msg}`)}\n`);
|
|
176
191
|
}
|
|
177
192
|
}
|
|
178
193
|
//# sourceMappingURL=cd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cd.js","sourceRoot":"","sources":["../../../src/builtins/fs/cd.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cd.js","sourceRoot":"","sources":["../../../src/builtins/fs/cd.ts"],"names":[],"mappings":"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"}
|
package/dist/builtins/fs/cp.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import { CommandEnvelope } from '@fnndsc/cumin';
|
|
1
2
|
/**
|
|
2
3
|
* Copies a file or directory.
|
|
3
4
|
* Supports multiple sources when destination is a directory.
|
|
4
5
|
*
|
|
5
6
|
* @param args - [flags, src1, src2, ..., dest]
|
|
7
|
+
* @returns An envelope whose rendered text reports progress and results and
|
|
8
|
+
* whose model carries per-source outcomes.
|
|
6
9
|
*/
|
|
7
|
-
export declare function builtin_cp(args: string[]): Promise<
|
|
10
|
+
export declare function builtin_cp(args: string[]): Promise<CommandEnvelope>;
|
package/dist/builtins/fs/cp.js
CHANGED
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file Builtin cp command.
|
|
3
|
-
* Copies files or directories.
|
|
3
|
+
* Copies files or directories, reported as a command envelope.
|
|
4
4
|
*/
|
|
5
5
|
import chalk from 'chalk';
|
|
6
6
|
import path from 'path';
|
|
7
|
+
import { listCache_get, envelope_ok, envelope_error } from '@fnndsc/cumin';
|
|
7
8
|
import { commandArgs_process, path_resolve } from '../utils.js';
|
|
8
9
|
import { files_cp as chefs_cp_cmd } from '@fnndsc/chili/commands/fs/cp.js';
|
|
9
10
|
import { cp_render } from '@fnndsc/chili/views/fs.js';
|
|
10
|
-
import { listCache_get } from '@fnndsc/cumin';
|
|
11
11
|
/**
|
|
12
12
|
* Copies a file or directory.
|
|
13
13
|
* Supports multiple sources when destination is a directory.
|
|
14
14
|
*
|
|
15
15
|
* @param args - [flags, src1, src2, ..., dest]
|
|
16
|
+
* @returns An envelope whose rendered text reports progress and results and
|
|
17
|
+
* whose model carries per-source outcomes.
|
|
16
18
|
*/
|
|
17
19
|
export async function builtin_cp(args) {
|
|
18
20
|
const parsed = commandArgs_process(args);
|
|
19
21
|
const pathArgs = parsed._;
|
|
20
22
|
if (pathArgs.length < 2) {
|
|
21
|
-
|
|
22
|
-
return;
|
|
23
|
+
return envelope_error(`${chalk.red('Usage: cp [-r] <source...> <dest>')}\n`);
|
|
23
24
|
}
|
|
24
25
|
const recursive = !!parsed['r'] || !!parsed['recursive'];
|
|
25
26
|
// Last arg is destination, all others are sources
|
|
@@ -29,20 +30,24 @@ export async function builtin_cp(args) {
|
|
|
29
30
|
const listCache = listCache_get();
|
|
30
31
|
let successCount = 0;
|
|
31
32
|
let failCount = 0;
|
|
33
|
+
let rendered = '';
|
|
34
|
+
let renderedErr = '';
|
|
35
|
+
const outcomes = [];
|
|
32
36
|
for (const src of sources) {
|
|
33
37
|
try {
|
|
34
38
|
const srcPath = await path_resolve(src);
|
|
35
39
|
// For multiple sources, show which file we're copying
|
|
36
40
|
if (sources.length > 1) {
|
|
37
|
-
|
|
41
|
+
rendered += `${chalk.gray(`Copying ${srcPath}...`)}\n`;
|
|
38
42
|
}
|
|
39
43
|
else {
|
|
40
|
-
|
|
44
|
+
rendered += `Copying ${srcPath} to ${destPath}...\n`;
|
|
41
45
|
}
|
|
42
46
|
const success = await chefs_cp_cmd(srcPath, destPath, { recursive });
|
|
43
47
|
if (sources.length === 1) {
|
|
44
|
-
|
|
48
|
+
rendered += `${cp_render(srcPath, destPath, success)}\n`;
|
|
45
49
|
}
|
|
50
|
+
outcomes.push({ source: srcPath, copied: success });
|
|
46
51
|
if (success) {
|
|
47
52
|
successCount++;
|
|
48
53
|
}
|
|
@@ -52,7 +57,8 @@ export async function builtin_cp(args) {
|
|
|
52
57
|
}
|
|
53
58
|
catch (e) {
|
|
54
59
|
const msg = e instanceof Error ? e.message : String(e);
|
|
55
|
-
|
|
60
|
+
renderedErr += `${chalk.red(`cp: ${src}: ${msg}`)}\n`;
|
|
61
|
+
outcomes.push({ source: src, copied: false });
|
|
56
62
|
failCount++;
|
|
57
63
|
}
|
|
58
64
|
}
|
|
@@ -63,11 +69,18 @@ export async function builtin_cp(args) {
|
|
|
63
69
|
// Summary for multiple files
|
|
64
70
|
if (sources.length > 1) {
|
|
65
71
|
if (failCount === 0) {
|
|
66
|
-
|
|
72
|
+
rendered += `${chalk.green(`✓ Copied ${successCount} file(s) to ${destPath}`)}\n`;
|
|
67
73
|
}
|
|
68
74
|
else {
|
|
69
|
-
|
|
75
|
+
rendered += `${chalk.yellow(`⚠ Copied ${successCount} file(s), ${failCount} failed`)}\n`;
|
|
70
76
|
}
|
|
71
77
|
}
|
|
78
|
+
const modelData = { dest: destPath, outcomes, copied: successCount, failed: failCount };
|
|
79
|
+
if (failCount > 0) {
|
|
80
|
+
const envelope = envelope_error(rendered, undefined, renderedErr || undefined);
|
|
81
|
+
envelope.model = { kind: 'fs.cp', data: modelData };
|
|
82
|
+
return envelope;
|
|
83
|
+
}
|
|
84
|
+
return envelope_ok(rendered, { kind: 'fs.cp', data: modelData });
|
|
72
85
|
}
|
|
73
86
|
//# sourceMappingURL=cp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cp.js","sourceRoot":"","sources":["../../../src/builtins/fs/cp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cp.js","sourceRoot":"","sources":["../../../src/builtins/fs/cp.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import chalk from 'chalk';
|
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import { path_resolve } from '../utils.js';
|
|
8
8
|
import { files_downloadWithProgress as chefs_download_cmd, bytes_format } from '@fnndsc/chili/commands/fs/download.js';
|
|
9
|
+
import { sink_get } from '../../core/sink.js';
|
|
9
10
|
/**
|
|
10
11
|
* Downloads a remote ChRIS file or directory to the local filesystem.
|
|
11
12
|
*
|
|
@@ -23,7 +24,10 @@ export async function builtin_download(args) {
|
|
|
23
24
|
const targetRemote = await path_resolve(remotePathArg);
|
|
24
25
|
const targetLocal = path.resolve(localPathArg);
|
|
25
26
|
try {
|
|
26
|
-
const summary = await chefs_download_cmd(targetRemote, targetLocal, {
|
|
27
|
+
const summary = await chefs_download_cmd(targetRemote, targetLocal, {
|
|
28
|
+
force,
|
|
29
|
+
onProgress: event => sink_get().progress_write(event),
|
|
30
|
+
});
|
|
27
31
|
console.log('');
|
|
28
32
|
if (summary.failedCount === 0) {
|
|
29
33
|
console.log(chalk.green(`✓ Successfully downloaded ${summary.transferredCount} file(s)`));
|