@fnndsc/chell 4.3.2 → 5.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/dist/builtins/sys/prompt.js +2 -2
- package/dist/builtins/sys/prompt.js.map +1 -1
- package/dist/chell.d.ts +2 -1
- package/dist/chell.js +2 -1
- package/dist/chell.js.map +1 -1
- package/dist/config/settings.d.ts +4 -2
- package/dist/config/settings.js +7 -2
- package/dist/config/settings.js.map +1 -1
- package/dist/core/boot.d.ts +3 -1
- package/dist/core/boot.js +93 -154
- 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/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 +45 -0
- package/dist/core/prompt/session.js +48 -0
- package/dist/core/prompt/session.js.map +1 -0
- package/dist/core/repl.d.ts +25 -5
- package/dist/core/repl.js +58 -45
- package/dist/core/repl.js.map +1 -1
- package/dist/core/surfaceDispatch.d.ts +21 -0
- package/dist/core/surfaceDispatch.js +33 -0
- package/dist/core/surfaceDispatch.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/index.js +2 -12
- package/dist/index.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/remoteEngine.d.ts +125 -0
- package/dist/remote/remoteEngine.js +286 -0
- package/dist/remote/remoteEngine.js.map +1 -0
- package/package.json +5 -3
- package/dist/builtins/debug.d.ts +0 -6
- package/dist/builtins/debug.js +0 -47
- package/dist/builtins/debug.js.map +0 -1
- package/dist/builtins/executable.d.ts +0 -22
- package/dist/builtins/executable.js +0 -115
- package/dist/builtins/executable.js.map +0 -1
- package/dist/builtins/fs/cat.d.ts +0 -16
- package/dist/builtins/fs/cat.js +0 -249
- package/dist/builtins/fs/cat.js.map +0 -1
- package/dist/builtins/fs/cd.d.ts +0 -41
- package/dist/builtins/fs/cd.js +0 -178
- package/dist/builtins/fs/cd.js.map +0 -1
- package/dist/builtins/fs/cp.d.ts +0 -7
- package/dist/builtins/fs/cp.js +0 -73
- package/dist/builtins/fs/cp.js.map +0 -1
- package/dist/builtins/fs/download.d.ts +0 -6
- package/dist/builtins/fs/download.js +0 -41
- package/dist/builtins/fs/download.js.map +0 -1
- package/dist/builtins/fs/du.d.ts +0 -58
- package/dist/builtins/fs/du.js +0 -210
- package/dist/builtins/fs/du.js.map +0 -1
- package/dist/builtins/fs/edit.d.ts +0 -7
- package/dist/builtins/fs/edit.js +0 -86
- package/dist/builtins/fs/edit.js.map +0 -1
- package/dist/builtins/fs/ls.d.ts +0 -8
- package/dist/builtins/fs/ls.js +0 -68
- package/dist/builtins/fs/ls.js.map +0 -1
- package/dist/builtins/fs/mkdir.d.ts +0 -6
- package/dist/builtins/fs/mkdir.js +0 -38
- package/dist/builtins/fs/mkdir.js.map +0 -1
- package/dist/builtins/fs/mv.d.ts +0 -7
- package/dist/builtins/fs/mv.js +0 -75
- package/dist/builtins/fs/mv.js.map +0 -1
- package/dist/builtins/fs/pull.args.d.ts +0 -22
- package/dist/builtins/fs/pull.args.js +0 -30
- package/dist/builtins/fs/pull.args.js.map +0 -1
- package/dist/builtins/fs/pull.d.ts +0 -26
- package/dist/builtins/fs/pull.js +0 -417
- package/dist/builtins/fs/pull.js.map +0 -1
- package/dist/builtins/fs/pwd.d.ts +0 -7
- package/dist/builtins/fs/pwd.js +0 -75
- package/dist/builtins/fs/pwd.js.map +0 -1
- package/dist/builtins/fs/rm.d.ts +0 -31
- package/dist/builtins/fs/rm.js +0 -148
- package/dist/builtins/fs/rm.js.map +0 -1
- package/dist/builtins/fs/touch.d.ts +0 -6
- package/dist/builtins/fs/touch.js +0 -64
- package/dist/builtins/fs/touch.js.map +0 -1
- package/dist/builtins/fs/tree.d.ts +0 -15
- package/dist/builtins/fs/tree.js +0 -84
- package/dist/builtins/fs/tree.js.map +0 -1
- package/dist/builtins/fs/upload.d.ts +0 -6
- package/dist/builtins/fs/upload.js +0 -45
- package/dist/builtins/fs/upload.js.map +0 -1
- package/dist/builtins/help.d.ts +0 -74
- package/dist/builtins/help.js +0 -1217
- package/dist/builtins/help.js.map +0 -1
- package/dist/builtins/index.d.ts +0 -45
- package/dist/builtins/index.js +0 -45
- package/dist/builtins/index.js.map +0 -1
- package/dist/builtins/net/connect.d.ts +0 -7
- package/dist/builtins/net/connect.js +0 -42
- package/dist/builtins/net/connect.js.map +0 -1
- package/dist/builtins/net/cubepath.d.ts +0 -18
- package/dist/builtins/net/cubepath.js +0 -102
- package/dist/builtins/net/cubepath.js.map +0 -1
- package/dist/builtins/net/logout.d.ts +0 -6
- package/dist/builtins/net/logout.js +0 -24
- package/dist/builtins/net/logout.js.map +0 -1
- package/dist/builtins/net/pacs.d.ts +0 -24
- package/dist/builtins/net/pacs.js +0 -121
- package/dist/builtins/net/pacs.js.map +0 -1
- package/dist/builtins/net/pacsUtils.d.ts +0 -85
- package/dist/builtins/net/pacsUtils.js +0 -184
- package/dist/builtins/net/pacsUtils.js.map +0 -1
- package/dist/builtins/net/query.d.ts +0 -60
- package/dist/builtins/net/query.js +0 -324
- package/dist/builtins/net/query.js.map +0 -1
- package/dist/builtins/parametersofplugin.d.ts +0 -13
- package/dist/builtins/parametersofplugin.js +0 -43
- package/dist/builtins/parametersofplugin.js.map +0 -1
- package/dist/builtins/pluginExecute.d.ts +0 -27
- package/dist/builtins/pluginExecute.js +0 -165
- package/dist/builtins/pluginExecute.js.map +0 -1
- package/dist/builtins/proc.d.ts +0 -6
- package/dist/builtins/proc.helpers.d.ts +0 -68
- package/dist/builtins/proc.helpers.js +0 -102
- package/dist/builtins/proc.helpers.js.map +0 -1
- package/dist/builtins/proc.js +0 -289
- package/dist/builtins/proc.js.map +0 -1
- package/dist/builtins/res/compute.d.ts +0 -6
- package/dist/builtins/res/compute.js +0 -55
- package/dist/builtins/res/compute.js.map +0 -1
- package/dist/builtins/res/feed.d.ts +0 -6
- package/dist/builtins/res/feed.js +0 -244
- package/dist/builtins/res/feed.js.map +0 -1
- package/dist/builtins/res/feed.notes.d.ts +0 -28
- package/dist/builtins/res/feed.notes.js +0 -24
- package/dist/builtins/res/feed.notes.js.map +0 -1
- package/dist/builtins/res/files.d.ts +0 -18
- package/dist/builtins/res/files.js +0 -85
- package/dist/builtins/res/files.js.map +0 -1
- package/dist/builtins/res/group.d.ts +0 -6
- package/dist/builtins/res/group.js +0 -54
- package/dist/builtins/res/group.js.map +0 -1
- package/dist/builtins/res/pipeline.args.d.ts +0 -22
- package/dist/builtins/res/pipeline.args.js +0 -28
- package/dist/builtins/res/pipeline.args.js.map +0 -1
- package/dist/builtins/res/pipeline.d.ts +0 -20
- package/dist/builtins/res/pipeline.js +0 -252
- package/dist/builtins/res/pipeline.js.map +0 -1
- package/dist/builtins/res/plugin.d.ts +0 -13
- package/dist/builtins/res/plugin.js +0 -140
- package/dist/builtins/res/plugin.js.map +0 -1
- package/dist/builtins/res/plugininstance.d.ts +0 -6
- package/dist/builtins/res/plugininstance.js +0 -53
- package/dist/builtins/res/plugininstance.js.map +0 -1
- package/dist/builtins/res/pluginmeta.d.ts +0 -6
- package/dist/builtins/res/pluginmeta.js +0 -53
- package/dist/builtins/res/pluginmeta.js.map +0 -1
- package/dist/builtins/res/tag.d.ts +0 -6
- package/dist/builtins/res/tag.js +0 -53
- package/dist/builtins/res/tag.js.map +0 -1
- package/dist/builtins/res/workflow.d.ts +0 -6
- package/dist/builtins/res/workflow.js +0 -53
- package/dist/builtins/res/workflow.js.map +0 -1
- package/dist/builtins/store.d.ts +0 -6
- package/dist/builtins/store.js +0 -108
- package/dist/builtins/store.js.map +0 -1
- package/dist/builtins/sys/context.d.ts +0 -6
- package/dist/builtins/sys/context.js +0 -50
- package/dist/builtins/sys/context.js.map +0 -1
- package/dist/builtins/sys/physicalmode.d.ts +0 -6
- package/dist/builtins/sys/physicalmode.js +0 -41
- package/dist/builtins/sys/physicalmode.js.map +0 -1
- package/dist/builtins/sys/timing.d.ts +0 -6
- package/dist/builtins/sys/timing.js +0 -41
- package/dist/builtins/sys/timing.js.map +0 -1
- package/dist/builtins/sys/whoami.d.ts +0 -12
- package/dist/builtins/sys/whoami.js +0 -37
- package/dist/builtins/sys/whoami.js.map +0 -1
- package/dist/builtins/utils.d.ts +0 -55
- package/dist/builtins/utils.js +0 -145
- package/dist/builtins/utils.js.map +0 -1
- package/dist/builtins/wildcard.d.ts +0 -26
- package/dist/builtins/wildcard.js +0 -120
- package/dist/builtins/wildcard.js.map +0 -1
- package/dist/command-keys.d.ts +0 -8
- package/dist/command-keys.js +0 -32
- package/dist/command-keys.js.map +0 -1
- package/dist/core/dispatch.d.ts +0 -48
- package/dist/core/dispatch.js +0 -544
- package/dist/core/dispatch.js.map +0 -1
- package/dist/core/preprocess.d.ts +0 -46
- package/dist/core/preprocess.js +0 -146
- package/dist/core/preprocess.js.map +0 -1
- package/dist/core/question.d.ts +0 -34
- package/dist/core/question.js +0 -76
- package/dist/core/question.js.map +0 -1
- package/dist/lib/completer/index.d.ts +0 -15
- package/dist/lib/completer/index.js +0 -212
- package/dist/lib/completer/index.js.map +0 -1
- package/dist/lib/completer/pathComplete.helpers.d.ts +0 -22
- package/dist/lib/completer/pathComplete.helpers.js +0 -49
- package/dist/lib/completer/pathComplete.helpers.js.map +0 -1
- package/dist/lib/parser.d.ts +0 -13
- package/dist/lib/parser.js +0 -52
- package/dist/lib/parser.js.map +0 -1
- package/dist/lib/pipe.d.ts +0 -11
- package/dist/lib/pipe.js +0 -90
- package/dist/lib/pipe.js.map +0 -1
- package/dist/lib/prefetch.d.ts +0 -25
- package/dist/lib/prefetch.js +0 -64
- package/dist/lib/prefetch.js.map +0 -1
- package/dist/lib/semicolonParser.d.ts +0 -22
- package/dist/lib/semicolonParser.js +0 -53
- package/dist/lib/semicolonParser.js.map +0 -1
- package/dist/lib/spinner.d.ts +0 -23
- package/dist/lib/spinner.js +0 -70
- package/dist/lib/spinner.js.map +0 -1
- package/dist/lib/vfs/providers/static.d.ts +0 -65
- package/dist/lib/vfs/providers/static.js +0 -164
- package/dist/lib/vfs/providers/static.js.map +0 -1
- package/dist/lib/vfs/providers/static_content.d.ts +0 -27
- package/dist/lib/vfs/providers/static_content.js +0 -180
- package/dist/lib/vfs/providers/static_content.js.map +0 -1
- package/dist/lib/vfs/vfs.d.ts +0 -59
- package/dist/lib/vfs/vfs.js +0 -198
- package/dist/lib/vfs/vfs.js.map +0 -1
- package/dist/session/index.d.ts +0 -76
- package/dist/session/index.js +0 -120
- package/dist/session/index.js.map +0 -1
package/dist/core/cli.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Parsed chell CLI configuration.
|
|
3
3
|
*/
|
|
4
4
|
export interface ChellCLIConfig {
|
|
5
|
-
mode: 'interactive' | 'connect' | 'help' | 'version' | 'execute' | 'script';
|
|
5
|
+
mode: 'interactive' | 'connect' | 'help' | 'version' | 'execute' | 'script' | 'daemon' | 'remote';
|
|
6
6
|
physicalFS?: boolean;
|
|
7
7
|
prefetchPlugins?: boolean;
|
|
8
8
|
prefetchFeeds?: boolean;
|
|
@@ -36,6 +36,8 @@ export interface CliActionOptions {
|
|
|
36
36
|
prefetchJobs?: boolean;
|
|
37
37
|
asciiBoot?: boolean;
|
|
38
38
|
logo?: boolean;
|
|
39
|
+
daemon?: boolean;
|
|
40
|
+
remote?: boolean;
|
|
39
41
|
}
|
|
40
42
|
/**
|
|
41
43
|
* Builds a {@link ChellCLIConfig} from the parsed target/options, determining
|
package/dist/core/cli.js
CHANGED
|
@@ -36,7 +36,15 @@ export function cliConfig_fromArgs(target, options, fileExists) {
|
|
|
36
36
|
connectConfig = { user, password, url };
|
|
37
37
|
}
|
|
38
38
|
let config;
|
|
39
|
-
if (options.
|
|
39
|
+
if (options.remote) {
|
|
40
|
+
// A remote surface attaches to a daemon; it needs no local engine,
|
|
41
|
+
// connection, or CUBE credentials.
|
|
42
|
+
config = { mode: 'remote' };
|
|
43
|
+
}
|
|
44
|
+
else if (options.daemon) {
|
|
45
|
+
config = { mode: 'daemon', physicalFS: options.physicalFS, connectConfig };
|
|
46
|
+
}
|
|
47
|
+
else if (options.file) {
|
|
40
48
|
config = { mode: 'script', scriptFile: options.file, stopOnError: options.e || false, physicalFS: options.physicalFS, connectConfig };
|
|
41
49
|
}
|
|
42
50
|
else if (options.command) {
|
|
@@ -151,6 +159,8 @@ ${chalk.bold.cyan('DESCRIPTION')}
|
|
|
151
159
|
.option('--no-prefetch-jobs', 'Skip /proc/jobs job cache prefetch at startup')
|
|
152
160
|
.option('--ascii-boot', 'Force ASCII-only boot UI (no box-drawing characters)')
|
|
153
161
|
.option('--no-logo', 'Hide the ChRIS logo on startup (interactive mode)')
|
|
162
|
+
.option('--daemon', 'Run as a CALYPSO session daemon, hosting the engine over WebSocket')
|
|
163
|
+
.option('--remote', 'Attach to a running CALYPSO daemon as a remote surface')
|
|
154
164
|
.addHelpText('after', `
|
|
155
165
|
${chalk.bold.cyan('INTERACTIVE COMMANDS')}
|
|
156
166
|
${chalk.bold.green('connect')} Connect to a ChRIS CUBE
|
package/dist/core/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/core/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,OAAO,EAAa,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/core/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file The CLI host's surface: interaction backed by readline and the local
|
|
3
|
+
* terminal.
|
|
4
|
+
*
|
|
5
|
+
* This is the concrete {@link Surface} the command-line host installs. It
|
|
6
|
+
* declares the full local capability set (hidden input, local editing, and a
|
|
7
|
+
* tty when stdout is one) and backs prompting with readline. Two flavors of
|
|
8
|
+
* prompt exist so the single-readline discipline is preserved: when the REPL
|
|
9
|
+
* is running it passes its own persistent interface, and hidden input is read
|
|
10
|
+
* by suppressing that interface's echo rather than opening a second one on the
|
|
11
|
+
* same stdin; outside the REPL (execute and script modes) a one-shot interface
|
|
12
|
+
* is created per prompt, matching the shell's historical fallback exactly.
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import * as readline from 'readline';
|
|
17
|
+
import type { Surface } from '@fnndsc/brasa';
|
|
18
|
+
/**
|
|
19
|
+
* Creates the CLI host's surface.
|
|
20
|
+
*
|
|
21
|
+
* @param rl - The REPL's persistent readline interface, when running
|
|
22
|
+
* interactively. Omitted in execute and script modes, where each prompt
|
|
23
|
+
* uses a one-shot interface.
|
|
24
|
+
* @returns A surface backed by the local terminal.
|
|
25
|
+
*/
|
|
26
|
+
export declare function cliSurface_create(rl?: readline.Interface): Surface;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file The CLI host's surface: interaction backed by readline and the local
|
|
3
|
+
* terminal.
|
|
4
|
+
*
|
|
5
|
+
* This is the concrete {@link Surface} the command-line host installs. It
|
|
6
|
+
* declares the full local capability set (hidden input, local editing, and a
|
|
7
|
+
* tty when stdout is one) and backs prompting with readline. Two flavors of
|
|
8
|
+
* prompt exist so the single-readline discipline is preserved: when the REPL
|
|
9
|
+
* is running it passes its own persistent interface, and hidden input is read
|
|
10
|
+
* by suppressing that interface's echo rather than opening a second one on the
|
|
11
|
+
* same stdin; outside the REPL (execute and script modes) a one-shot interface
|
|
12
|
+
* is created per prompt, matching the shell's historical fallback exactly.
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import * as readline from 'readline';
|
|
17
|
+
import { Writable } from 'stream';
|
|
18
|
+
import { spawnSync } from 'child_process';
|
|
19
|
+
import { writeFileSync, readFileSync, unlinkSync, existsSync } from 'fs';
|
|
20
|
+
import { tmpdir } from 'os';
|
|
21
|
+
import { join } from 'path';
|
|
22
|
+
import { segment_pipeThrough } from '@fnndsc/brasa';
|
|
23
|
+
/**
|
|
24
|
+
* Prompts on a persistent readline interface (the REPL's), suppressing echo
|
|
25
|
+
* for hidden input by intercepting the interface's own output hook. This
|
|
26
|
+
* keeps a single readline interface on stdin — no raw mode, no second
|
|
27
|
+
* interface, no keystrokes leaking back to the command loop.
|
|
28
|
+
*
|
|
29
|
+
* @param rl - The REPL's readline interface.
|
|
30
|
+
* @param request - The prompt message and whether to hide input.
|
|
31
|
+
* @returns The entered line, trimmed.
|
|
32
|
+
*/
|
|
33
|
+
function persistentPrompt_ask(rl, request) {
|
|
34
|
+
if (!request.hidden) {
|
|
35
|
+
return new Promise((resolve) => {
|
|
36
|
+
rl.question(request.message, (answer) => resolve(answer.trim()));
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
const rlInternal = rl;
|
|
40
|
+
const originalWrite = rlInternal._writeToOutput.bind(rl);
|
|
41
|
+
rlInternal._writeToOutput = (_str) => { };
|
|
42
|
+
process.stdout.write(request.message);
|
|
43
|
+
return new Promise((resolve) => {
|
|
44
|
+
rl.question('', (answer) => {
|
|
45
|
+
rlInternal._writeToOutput = originalWrite;
|
|
46
|
+
process.stdout.write('\n');
|
|
47
|
+
resolve(answer.trim());
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Prompts on a one-shot readline interface created for this call, used
|
|
53
|
+
* outside the REPL (execute and script modes). Hidden input is read through
|
|
54
|
+
* a muted output stream so the entry is not echoed.
|
|
55
|
+
*
|
|
56
|
+
* @param request - The prompt message and whether to hide input.
|
|
57
|
+
* @returns The entered line, trimmed.
|
|
58
|
+
*/
|
|
59
|
+
function oneShotPrompt_ask(request) {
|
|
60
|
+
if (!request.hidden) {
|
|
61
|
+
return new Promise((resolve) => {
|
|
62
|
+
const rl = readline.createInterface({
|
|
63
|
+
input: process.stdin,
|
|
64
|
+
output: process.stdout,
|
|
65
|
+
});
|
|
66
|
+
rl.question(request.message, (answer) => {
|
|
67
|
+
rl.close();
|
|
68
|
+
resolve(answer.trim());
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return new Promise((resolve) => {
|
|
73
|
+
const muted = new Writable({
|
|
74
|
+
write(_chunk, _encoding, callback) {
|
|
75
|
+
callback();
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
const rl = readline.createInterface({
|
|
79
|
+
input: process.stdin,
|
|
80
|
+
output: muted,
|
|
81
|
+
terminal: true,
|
|
82
|
+
});
|
|
83
|
+
process.stdout.write(request.message);
|
|
84
|
+
rl.question('', (answer) => {
|
|
85
|
+
process.stdout.write('\n');
|
|
86
|
+
rl.close();
|
|
87
|
+
resolve(answer.trim());
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Opens content in the local `$EDITOR` and returns the edited result. Writes
|
|
93
|
+
* the content to a temp file, launches the editor against it, reads it back,
|
|
94
|
+
* and removes the temp file — the whole editor lifecycle is the surface's
|
|
95
|
+
* business, so builtins never touch a process or a terminal.
|
|
96
|
+
*
|
|
97
|
+
* @param request - The content to edit and an optional extension.
|
|
98
|
+
* @returns The edited content and whether it changed.
|
|
99
|
+
* @throws {Error} When the editor fails to launch.
|
|
100
|
+
*/
|
|
101
|
+
function localEdit_run(request) {
|
|
102
|
+
const ext = request.extension && request.extension.length > 0 ? request.extension : '.txt';
|
|
103
|
+
const tmpPath = join(tmpdir(), `chell-edit-${Date.now()}${ext}`);
|
|
104
|
+
try {
|
|
105
|
+
writeFileSync(tmpPath, request.content, 'utf8');
|
|
106
|
+
const editor = process.env.EDITOR || process.env.VISUAL || 'vi';
|
|
107
|
+
const spawn = spawnSync(editor, [tmpPath], { stdio: 'inherit' });
|
|
108
|
+
if (spawn.error) {
|
|
109
|
+
throw new Error(`failed to launch '${editor}': ${spawn.error.message}`);
|
|
110
|
+
}
|
|
111
|
+
const edited = readFileSync(tmpPath, 'utf8');
|
|
112
|
+
return Promise.resolve({ content: edited, changed: edited !== request.content });
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
if (existsSync(tmpPath)) {
|
|
116
|
+
try {
|
|
117
|
+
unlinkSync(tmpPath);
|
|
118
|
+
}
|
|
119
|
+
catch { /* ignore */ }
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Creates the CLI host's surface.
|
|
125
|
+
*
|
|
126
|
+
* @param rl - The REPL's persistent readline interface, when running
|
|
127
|
+
* interactively. Omitted in execute and script modes, where each prompt
|
|
128
|
+
* uses a one-shot interface.
|
|
129
|
+
* @returns A surface backed by the local terminal.
|
|
130
|
+
*/
|
|
131
|
+
export function cliSurface_create(rl) {
|
|
132
|
+
const capabilities = {
|
|
133
|
+
hiddenInput: true,
|
|
134
|
+
localEdit: true,
|
|
135
|
+
tty: !!process.stdout.isTTY,
|
|
136
|
+
pipeSegments: true,
|
|
137
|
+
};
|
|
138
|
+
return {
|
|
139
|
+
capabilities,
|
|
140
|
+
prompt(request) {
|
|
141
|
+
return rl ? persistentPrompt_ask(rl, request) : oneShotPrompt_ask(request);
|
|
142
|
+
},
|
|
143
|
+
pipeSegment(command, input) {
|
|
144
|
+
// The local CLI runs pipe segments in-process, exactly as before.
|
|
145
|
+
return segment_pipeThrough(command, input);
|
|
146
|
+
},
|
|
147
|
+
localEdit(request) {
|
|
148
|
+
return localEdit_run(request);
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=cliSurface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliSurface.js","sourceRoot":"","sources":["../../src/core/cliSurface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,SAAS,EAAyB,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAOpD;;;;;;;;;GASG;AACH,SAAS,oBAAoB,CAAC,EAAsB,EAAE,OAAsB;IAC1E,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAiC,EAAE,EAAE;YACvD,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAyB,EAAqC,CAAC;IAC/E,MAAM,aAAa,GAA0B,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChF,UAAU,CAAC,cAAc,GAAG,CAAC,IAAY,EAAQ,EAAE,GAAuB,CAAC,CAAC;IAE5E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAiC,EAAE,EAAE;QACvD,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAc,EAAE,EAAE;YACjC,UAAU,CAAC,cAAc,GAAG,aAAa,CAAC;YAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,OAAsB;IAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAiC,EAAE,EAAE;YACvD,MAAM,EAAE,GAAuB,QAAQ,CAAC,eAAe,CAAC;gBACtD,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;YACH,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,MAAc,EAAE,EAAE;gBAC9C,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAiC,EAAE,EAAE;QACvD,MAAM,KAAK,GAAa,IAAI,QAAQ,CAAC;YACnC,KAAK,CAAC,MAAe,EAAE,SAAkB,EAAE,QAAoB;gBAC7D,QAAQ,EAAE,CAAC;YACb,CAAC;SACF,CAAC,CAAC;QACH,MAAM,EAAE,GAAuB,QAAQ,CAAC,eAAe,CAAC;YACtD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAc,EAAE,EAAE;YACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,aAAa,CAAC,OAAyB;IAC9C,MAAM,GAAG,GAAW,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IACnG,MAAM,OAAO,GAAW,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAW,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC;QACxE,MAAM,KAAK,GAA6B,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3F,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,MAAM,GAAW,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACrD,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC;YAAS,CAAC;QACT,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC;gBAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAuB;IACvD,MAAM,YAAY,GAAwB;QACxC,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI;QACf,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAC3B,YAAY,EAAE,IAAI;KACnB,CAAC;IAEF,OAAO;QACL,YAAY;QACZ,MAAM,CAAC,OAAsB;YAC3B,OAAO,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC7E,CAAC;QACD,WAAW,CAAC,OAAe,EAAE,KAAa;YACxC,kEAAkE;YAClE,OAAO,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;QACD,SAAS,CAAC,OAAyB;YACjC,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ProgressEvent, ProgressRenderer } from '@fnndsc/brasa';
|
|
2
|
+
type ProgressBar = {
|
|
3
|
+
update(value: number, payload?: Record<string, string>): void;
|
|
4
|
+
setTotal(total: number): void;
|
|
5
|
+
stop?(): void;
|
|
6
|
+
};
|
|
7
|
+
type SingleBarCtor = new (options: Record<string, unknown>, preset: unknown) => ProgressBar & {
|
|
8
|
+
start(total: number, startValue: number, payload?: Record<string, string>): void;
|
|
9
|
+
};
|
|
10
|
+
type MultiBarInstance = {
|
|
11
|
+
create(total: number, startValue: number, payload?: Record<string, string>): ProgressBar;
|
|
12
|
+
remove(bar: ProgressBar): void;
|
|
13
|
+
stop(): void;
|
|
14
|
+
};
|
|
15
|
+
type MultiBarCtor = new (options: Record<string, unknown>, preset: unknown) => MultiBarInstance;
|
|
16
|
+
export interface ProgressBarFactory {
|
|
17
|
+
SingleBar: SingleBarCtor;
|
|
18
|
+
MultiBar: MultiBarCtor;
|
|
19
|
+
preset: unknown;
|
|
20
|
+
}
|
|
21
|
+
export interface ProgressRendererOptions {
|
|
22
|
+
stream?: NodeJS.WriteStream;
|
|
23
|
+
isTTY?: boolean;
|
|
24
|
+
factory?: ProgressBarFactory;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Renders semantic progress to a terminal.
|
|
28
|
+
*/
|
|
29
|
+
export declare class TerminalProgressRenderer implements ProgressRenderer {
|
|
30
|
+
private readonly stream;
|
|
31
|
+
private readonly isTTY;
|
|
32
|
+
private readonly factory;
|
|
33
|
+
private readonly transferBars;
|
|
34
|
+
private readonly pullBars;
|
|
35
|
+
private pullMultiBar;
|
|
36
|
+
constructor(options?: ProgressRendererOptions);
|
|
37
|
+
write(event: ProgressEvent): void;
|
|
38
|
+
clear(): void;
|
|
39
|
+
private transfer_write;
|
|
40
|
+
private pull_write;
|
|
41
|
+
}
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Terminal renderer for semantic progress events.
|
|
3
|
+
*
|
|
4
|
+
* Producers emit facts. This renderer is the terminal-only adapter that turns
|
|
5
|
+
* those facts into bars when attached to a TTY, or into low-noise status lines
|
|
6
|
+
* when output is not interactive.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import cliProgress from 'cli-progress';
|
|
11
|
+
const TERMINAL_STATUSES = new Set([
|
|
12
|
+
'done',
|
|
13
|
+
'unconfirmed',
|
|
14
|
+
'stalled',
|
|
15
|
+
'timeout',
|
|
16
|
+
'error',
|
|
17
|
+
]);
|
|
18
|
+
function defaultFactory_get() {
|
|
19
|
+
return {
|
|
20
|
+
SingleBar: cliProgress.SingleBar,
|
|
21
|
+
MultiBar: cliProgress.MultiBar,
|
|
22
|
+
preset: cliProgress.Presets.shades_classic,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function event_total(event) {
|
|
26
|
+
const current = event.current ?? 0;
|
|
27
|
+
return Math.max(event.total ?? current, current, 1);
|
|
28
|
+
}
|
|
29
|
+
function event_current(event) {
|
|
30
|
+
return Math.min(event.current ?? 0, event_total(event));
|
|
31
|
+
}
|
|
32
|
+
function event_label(event) {
|
|
33
|
+
const base = event.label ?? event.operation;
|
|
34
|
+
const statusLabel = status_label(event.status);
|
|
35
|
+
return statusLabel ? `${base} ${statusLabel}` : base;
|
|
36
|
+
}
|
|
37
|
+
function status_label(status) {
|
|
38
|
+
if (status === 'done')
|
|
39
|
+
return '[DONE]';
|
|
40
|
+
if (status === 'unconfirmed')
|
|
41
|
+
return '[UNCONFIRMED]';
|
|
42
|
+
if (status === 'stalled')
|
|
43
|
+
return '[STALLED]';
|
|
44
|
+
if (status === 'timeout')
|
|
45
|
+
return '[TIMEOUT]';
|
|
46
|
+
if (status === 'error')
|
|
47
|
+
return '[ERROR]';
|
|
48
|
+
return '';
|
|
49
|
+
}
|
|
50
|
+
function fallback_shouldPrint(event) {
|
|
51
|
+
if (event.phase === 'complete' || event.phase === 'failed')
|
|
52
|
+
return true;
|
|
53
|
+
return event.status !== undefined && TERMINAL_STATUSES.has(event.status);
|
|
54
|
+
}
|
|
55
|
+
function fallback_line(event) {
|
|
56
|
+
const parts = [event.operation];
|
|
57
|
+
if (event.label)
|
|
58
|
+
parts.push(event.label);
|
|
59
|
+
if (event.status)
|
|
60
|
+
parts.push(event.status);
|
|
61
|
+
if (event.current !== undefined && event.total !== undefined) {
|
|
62
|
+
parts.push(`${event.current}/${event.total}`);
|
|
63
|
+
}
|
|
64
|
+
else if (event.current !== undefined) {
|
|
65
|
+
parts.push(`${event.current}`);
|
|
66
|
+
}
|
|
67
|
+
if (event.unit)
|
|
68
|
+
parts.push(event.unit);
|
|
69
|
+
return `${parts.join(' ')}\n`;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Renders semantic progress to a terminal.
|
|
73
|
+
*/
|
|
74
|
+
export class TerminalProgressRenderer {
|
|
75
|
+
stream;
|
|
76
|
+
isTTY;
|
|
77
|
+
factory;
|
|
78
|
+
transferBars = new Map();
|
|
79
|
+
pullBars = new Map();
|
|
80
|
+
pullMultiBar = null;
|
|
81
|
+
constructor(options = {}) {
|
|
82
|
+
this.stream = options.stream ?? process.stdout;
|
|
83
|
+
this.isTTY = options.isTTY ?? !!this.stream.isTTY;
|
|
84
|
+
this.factory = options.factory ?? defaultFactory_get();
|
|
85
|
+
}
|
|
86
|
+
write(event) {
|
|
87
|
+
if (!this.isTTY) {
|
|
88
|
+
if (fallback_shouldPrint(event)) {
|
|
89
|
+
this.stream.write(fallback_line(event));
|
|
90
|
+
}
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (event.operation === 'pull') {
|
|
94
|
+
if (event.itemId) {
|
|
95
|
+
this.pull_write(event);
|
|
96
|
+
}
|
|
97
|
+
else if (event.phase === 'complete' || event.phase === 'failed') {
|
|
98
|
+
this.pullMultiBar?.stop();
|
|
99
|
+
this.pullMultiBar = null;
|
|
100
|
+
this.pullBars.clear();
|
|
101
|
+
}
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
this.transfer_write(event);
|
|
105
|
+
}
|
|
106
|
+
clear() {
|
|
107
|
+
for (const state of this.transferBars.values()) {
|
|
108
|
+
state.bar.stop?.();
|
|
109
|
+
}
|
|
110
|
+
this.transferBars.clear();
|
|
111
|
+
this.pullMultiBar?.stop();
|
|
112
|
+
this.pullMultiBar = null;
|
|
113
|
+
this.pullBars.clear();
|
|
114
|
+
}
|
|
115
|
+
transfer_write(event) {
|
|
116
|
+
if (event.phase === 'complete' || event.phase === 'failed') {
|
|
117
|
+
const existing = this.transferBars.get(event.operation);
|
|
118
|
+
if (existing) {
|
|
119
|
+
existing.bar.update(event_current(event), { label: event_label(event), unit: event.unit ?? '' });
|
|
120
|
+
existing.bar.stop?.();
|
|
121
|
+
this.transferBars.delete(event.operation);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
this.stream.write(fallback_line(event));
|
|
125
|
+
}
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const total = event_total(event);
|
|
129
|
+
let state = this.transferBars.get(event.operation);
|
|
130
|
+
if (!state) {
|
|
131
|
+
const bar = new this.factory.SingleBar({
|
|
132
|
+
format: ' {label} [{bar}] {value}/{total} {unit}',
|
|
133
|
+
hideCursor: true,
|
|
134
|
+
clearOnComplete: false,
|
|
135
|
+
stopOnComplete: false,
|
|
136
|
+
}, this.factory.preset);
|
|
137
|
+
bar.start(total, event_current(event), { label: event_label(event), unit: event.unit ?? '' });
|
|
138
|
+
state = { bar, total };
|
|
139
|
+
this.transferBars.set(event.operation, state);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (total !== state.total) {
|
|
143
|
+
state.bar.setTotal(total);
|
|
144
|
+
state.total = total;
|
|
145
|
+
}
|
|
146
|
+
state.bar.update(event_current(event), { label: event_label(event), unit: event.unit ?? '' });
|
|
147
|
+
}
|
|
148
|
+
pull_write(event) {
|
|
149
|
+
if (!this.pullMultiBar) {
|
|
150
|
+
this.pullMultiBar = new this.factory.MultiBar({
|
|
151
|
+
format: ' {label} [{bar}] {value}/{total} {unit}',
|
|
152
|
+
hideCursor: true,
|
|
153
|
+
clearOnComplete: false,
|
|
154
|
+
stopOnComplete: false,
|
|
155
|
+
}, this.factory.preset);
|
|
156
|
+
}
|
|
157
|
+
const key = event.itemId;
|
|
158
|
+
const total = event_total(event);
|
|
159
|
+
let state = this.pullBars.get(key);
|
|
160
|
+
if (!state) {
|
|
161
|
+
const bar = this.pullMultiBar.create(total, event_current(event), {
|
|
162
|
+
label: event_label(event),
|
|
163
|
+
unit: event.unit ?? '',
|
|
164
|
+
});
|
|
165
|
+
state = { bar, total };
|
|
166
|
+
this.pullBars.set(key, state);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (total !== state.total) {
|
|
170
|
+
state.bar.setTotal(total);
|
|
171
|
+
state.total = total;
|
|
172
|
+
}
|
|
173
|
+
state.bar.update(event_current(event), { label: event_label(event), unit: event.unit ?? '' });
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=progressRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progressRenderer.js","sourceRoot":"","sources":["../../src/core/progressRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Rendering the current session's themed prompt string.
|
|
3
|
+
*
|
|
4
|
+
* The prompt reflects live session context — user, CUBE, working directory,
|
|
5
|
+
* PACS, physical-mode, warm-up progress — which only the process holding that
|
|
6
|
+
* context can render. Both the local REPL and the daemon (which pushes the
|
|
7
|
+
* prompt to remote surfaces) render it here, so the same theme produces the
|
|
8
|
+
* same string on every surface.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { type SessionPromptContext } from '@fnndsc/brasa';
|
|
13
|
+
/**
|
|
14
|
+
* Inputs the caller knows that the session state does not.
|
|
15
|
+
*
|
|
16
|
+
* @property lastExitCode - The previous command's exit code (default 0).
|
|
17
|
+
* @property lastCommandDurationMs - The previous command's duration (default 0).
|
|
18
|
+
* @property terminalWidth - The rendering width (default the local stdout
|
|
19
|
+
* columns, or 80).
|
|
20
|
+
*/
|
|
21
|
+
export interface SessionPromptOptions {
|
|
22
|
+
lastExitCode?: number;
|
|
23
|
+
lastCommandDurationMs?: number;
|
|
24
|
+
terminalWidth?: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Renders a themed prompt string from an engine prompt context.
|
|
28
|
+
*
|
|
29
|
+
* Combines the engine-known facts with this surface's own rendering inputs
|
|
30
|
+
* (theme, enabled segments, terminal width) and renders. Used both for the
|
|
31
|
+
* local session and for a context pushed by a remote daemon, so every surface
|
|
32
|
+
* themes the prompt its own way from the same facts.
|
|
33
|
+
*
|
|
34
|
+
* @param context - The engine-known prompt facts.
|
|
35
|
+
* @param terminalWidth - The rendering width (default local stdout columns, or 80).
|
|
36
|
+
* @returns The rendered prompt string.
|
|
37
|
+
*/
|
|
38
|
+
export declare function promptFromContext_render(context: SessionPromptContext, terminalWidth?: number): string;
|
|
39
|
+
/**
|
|
40
|
+
* Renders the themed prompt string for the current local session context.
|
|
41
|
+
*
|
|
42
|
+
* @param options - The last-command and width inputs.
|
|
43
|
+
* @returns The rendered prompt string.
|
|
44
|
+
*/
|
|
45
|
+
export declare function sessionPrompt_render(options?: SessionPromptOptions): Promise<string>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Rendering the current session's themed prompt string.
|
|
3
|
+
*
|
|
4
|
+
* The prompt reflects live session context — user, CUBE, working directory,
|
|
5
|
+
* PACS, physical-mode, warm-up progress — which only the process holding that
|
|
6
|
+
* context can render. Both the local REPL and the daemon (which pushes the
|
|
7
|
+
* prompt to remote surfaces) render it here, so the same theme produces the
|
|
8
|
+
* same string on every surface.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { sessionPromptContext_build } from '@fnndsc/brasa';
|
|
13
|
+
import { settings } from '../../config/settings.js';
|
|
14
|
+
import { prompt_render } from './index.js';
|
|
15
|
+
/**
|
|
16
|
+
* Renders a themed prompt string from an engine prompt context.
|
|
17
|
+
*
|
|
18
|
+
* Combines the engine-known facts with this surface's own rendering inputs
|
|
19
|
+
* (theme, enabled segments, terminal width) and renders. Used both for the
|
|
20
|
+
* local session and for a context pushed by a remote daemon, so every surface
|
|
21
|
+
* themes the prompt its own way from the same facts.
|
|
22
|
+
*
|
|
23
|
+
* @param context - The engine-known prompt facts.
|
|
24
|
+
* @param terminalWidth - The rendering width (default local stdout columns, or 80).
|
|
25
|
+
* @returns The rendered prompt string.
|
|
26
|
+
*/
|
|
27
|
+
export function promptFromContext_render(context, terminalWidth) {
|
|
28
|
+
const ctx = {
|
|
29
|
+
...context,
|
|
30
|
+
terminalWidth: terminalWidth ?? (process.stdout.columns || 80),
|
|
31
|
+
p10kSegments: settings.config.p10kSegments,
|
|
32
|
+
};
|
|
33
|
+
return prompt_render(settings.config.promptTheme, ctx);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Renders the themed prompt string for the current local session context.
|
|
37
|
+
*
|
|
38
|
+
* @param options - The last-command and width inputs.
|
|
39
|
+
* @returns The rendered prompt string.
|
|
40
|
+
*/
|
|
41
|
+
export async function sessionPrompt_render(options = {}) {
|
|
42
|
+
const context = await sessionPromptContext_build({
|
|
43
|
+
lastExitCode: options.lastExitCode,
|
|
44
|
+
lastCommandDurationMs: options.lastCommandDurationMs,
|
|
45
|
+
});
|
|
46
|
+
return promptFromContext_render(context, options.terminalWidth);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/core/prompt/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,0BAA0B,EAA6B,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AAgB/D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAA6B,EAAE,aAAsB;IAC5F,MAAM,GAAG,GAAkB;QACzB,GAAG,OAAO;QACV,aAAa,EAAE,aAAa,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QAC9D,YAAY,EAAG,QAAQ,CAAC,MAAM,CAAC,YAAY;KAC5C,CAAC;IACF,OAAO,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAAgC,EAAE;IAC3E,MAAM,OAAO,GAAyB,MAAM,0BAA0B,CAAC;QACrE,YAAY,EAAW,OAAO,CAAC,YAAY;QAC3C,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;KACrD,CAAC,CAAC;IACH,OAAO,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;AAClE,CAAC"}
|
package/dist/core/repl.d.ts
CHANGED
|
@@ -1,20 +1,40 @@
|
|
|
1
|
+
import type { BrasaEngine } from '@fnndsc/brasa';
|
|
2
|
+
/**
|
|
3
|
+
* Handles the Read-Eval-Print Loop (REPL) interaction.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Options for the REPL host.
|
|
7
|
+
*
|
|
8
|
+
* @property promptText - A prompt to display instead of the locally-rendered
|
|
9
|
+
* themed prompt: a fixed string, or a provider called on each redraw. The
|
|
10
|
+
* remote client passes a provider that returns the latest prompt string the
|
|
11
|
+
* daemon pushed, so a remote surface shows the same themed prompt as a local
|
|
12
|
+
* session.
|
|
13
|
+
*/
|
|
14
|
+
export interface ReplOptions {
|
|
15
|
+
promptText?: string | (() => string);
|
|
16
|
+
}
|
|
1
17
|
/**
|
|
2
18
|
* Handles the Read-Eval-Print Loop (REPL) interaction.
|
|
3
19
|
*/
|
|
4
20
|
export declare class REPL {
|
|
5
21
|
private rl;
|
|
22
|
+
private engine;
|
|
6
23
|
private isOpen;
|
|
7
24
|
private lastCommandDurationMs;
|
|
8
25
|
private lastExitCode;
|
|
26
|
+
private promptText;
|
|
9
27
|
/**
|
|
10
|
-
* Initializes the REPL interface.
|
|
28
|
+
* Initializes the REPL interface around an engine.
|
|
29
|
+
*
|
|
30
|
+
* @param engine - The engine that executes lines and answers completions.
|
|
31
|
+
* @param options - Optional host settings (e.g. a fixed prompt string).
|
|
11
32
|
*/
|
|
12
|
-
constructor();
|
|
33
|
+
constructor(engine: BrasaEngine, options?: ReplOptions);
|
|
13
34
|
/**
|
|
14
|
-
* Starts the REPL loop.
|
|
15
|
-
* @param commandHandler - Async function to process each input line.
|
|
35
|
+
* Starts the REPL loop, executing each input line through the engine.
|
|
16
36
|
*/
|
|
17
|
-
start(
|
|
37
|
+
start(): Promise<void>;
|
|
18
38
|
/**
|
|
19
39
|
* Updates and redisplays the prompt based on current session state.
|
|
20
40
|
*/
|