@fnndsc/brasa 0.16.1 → 0.17.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/api/index.js +1 -0
- package/dist/api/index.js.map +1 -1
- package/dist/buildinfo.json +1 -1
- package/dist/builtins/fs/acl.js +57 -1
- package/dist/builtins/fs/acl.js.map +1 -1
- package/dist/builtins/fs/cat.js +46 -9
- package/dist/builtins/fs/cat.js.map +1 -1
- package/dist/builtins/fs/cp.js +42 -2
- package/dist/builtins/fs/cp.js.map +1 -1
- package/dist/builtins/fs/destination.d.ts +52 -0
- package/dist/builtins/fs/destination.js +52 -0
- package/dist/builtins/fs/destination.js.map +1 -0
- package/dist/builtins/fs/download.js +5 -2
- package/dist/builtins/fs/download.js.map +1 -1
- package/dist/builtins/fs/mv.js +41 -1
- package/dist/builtins/fs/mv.js.map +1 -1
- package/dist/builtins/fs/rm.d.ts +6 -0
- package/dist/builtins/fs/rm.js +35 -17
- package/dist/builtins/fs/rm.js.map +1 -1
- package/dist/builtins/fs/upload.js +15 -4
- package/dist/builtins/fs/upload.js.map +1 -1
- package/dist/builtins/help.js +43 -6
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/net/pacs.js +37 -1
- package/dist/builtins/net/pacs.js.map +1 -1
- package/dist/builtins/net/query.csv.d.ts +73 -0
- package/dist/builtins/net/query.csv.js +267 -0
- package/dist/builtins/net/query.csv.js.map +1 -0
- package/dist/builtins/net/query.d.ts +28 -1
- package/dist/builtins/net/query.fanout.d.ts +92 -0
- package/dist/builtins/net/query.fanout.js +171 -0
- package/dist/builtins/net/query.fanout.js.map +1 -0
- package/dist/builtins/net/query.js +709 -20
- package/dist/builtins/net/query.js.map +1 -1
- package/dist/builtins/net/status.js +4 -1
- package/dist/builtins/net/status.js.map +1 -1
- package/dist/builtins/proc.js +18 -0
- package/dist/builtins/proc.js.map +1 -1
- package/dist/builtins/res/feed.js +43 -2
- package/dist/builtins/res/feed.js.map +1 -1
- package/dist/builtins/res/plugin.info.d.ts +32 -0
- package/dist/builtins/res/plugin.info.js +167 -0
- package/dist/builtins/res/plugin.info.js.map +1 -0
- package/dist/builtins/res/plugin.js +41 -1
- package/dist/builtins/res/plugin.js.map +1 -1
- package/dist/core/engine.d.ts +21 -0
- package/dist/core/engine.js +27 -0
- package/dist/core/engine.js.map +1 -1
- package/dist/core/promptContext.d.ts +1 -1
- package/dist/core/question.d.ts +27 -0
- package/dist/core/question.js +38 -0
- package/dist/core/question.js.map +1 -1
- package/dist/core/surface.d.ts +16 -3
- package/dist/core/surface.js.map +1 -1
- package/dist/lib/vfs/providers/static_content.js +10 -81
- package/dist/lib/vfs/providers/static_content.js.map +1 -1
- package/dist/lib/vfs/vfs.js +13 -1
- package/dist/lib/vfs/vfs.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file One registered plugin, as data — and the manual as a projection of it.
|
|
3
|
+
*
|
|
4
|
+
* A plugin is the one-node case of the compute graph, and until now its
|
|
5
|
+
* substance existed only as a rendered manual: `cat /bin/<plugin>` scraped
|
|
6
|
+
* CUBE and printed a table, and that table was the whole of what any surface
|
|
7
|
+
* could have. Nothing downstream could use it — not a card, not a parameter
|
|
8
|
+
* list, not a form.
|
|
9
|
+
*
|
|
10
|
+
* This module builds the model first and renders from it, so the text a
|
|
11
|
+
* terminal prints and the data a graphical surface reads are the same facts
|
|
12
|
+
* said twice rather than two independent scrapes that can disagree.
|
|
13
|
+
*
|
|
14
|
+
* Parameters are drained to exhaustion. The `{ limit: 100 }` this replaces
|
|
15
|
+
* dropped the tail of any plugin declaring more and said nothing about it —
|
|
16
|
+
* and a parameter table that stops early is worse than no table, because it
|
|
17
|
+
* still looks complete.
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
import chalk from 'chalk';
|
|
22
|
+
import { errorStack, plugin_find, pluginParameters_drain, Ok, Err, } from '@fnndsc/cumin';
|
|
23
|
+
import { session } from '../../session/index.js';
|
|
24
|
+
/** How a `/bin` entry names a plugin: `<name>-v<version>`. */
|
|
25
|
+
const BIN_VERSION_SEPARATOR = '-v';
|
|
26
|
+
/**
|
|
27
|
+
* Splits a `/bin` entry name into the plugin identity it addresses.
|
|
28
|
+
*
|
|
29
|
+
* @param entry - A `/bin` basename or full path (`pl-dcm2niix-v1.0.0`).
|
|
30
|
+
* @returns The name and version, or null when the entry names no version.
|
|
31
|
+
*/
|
|
32
|
+
export function pluginSpecifier_parse(entry) {
|
|
33
|
+
const command = entry.replace(/^.*\//, '');
|
|
34
|
+
const cut = command.lastIndexOf(BIN_VERSION_SEPARATOR);
|
|
35
|
+
if (cut === -1)
|
|
36
|
+
return null;
|
|
37
|
+
const name = command.substring(0, cut);
|
|
38
|
+
const version = command.substring(cut + BIN_VERSION_SEPARATOR.length);
|
|
39
|
+
if (name === '' || version === '')
|
|
40
|
+
return null;
|
|
41
|
+
return { name, version, command };
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Projects one wire parameter row onto the model's parameter shape.
|
|
45
|
+
*
|
|
46
|
+
* @param row - The parameter as CUBE serves it.
|
|
47
|
+
* @returns The typed parameter.
|
|
48
|
+
*/
|
|
49
|
+
function parameter_project(row) {
|
|
50
|
+
const name = row.name;
|
|
51
|
+
const declaredFlag = row.flag;
|
|
52
|
+
const flag = typeof declaredFlag === 'string' && declaredFlag !== ''
|
|
53
|
+
? declaredFlag
|
|
54
|
+
: `--${name}`;
|
|
55
|
+
return {
|
|
56
|
+
name,
|
|
57
|
+
type: row.type ?? 'string',
|
|
58
|
+
optional: row.optional ?? false,
|
|
59
|
+
flag,
|
|
60
|
+
...(row.default === undefined ? {} : { default: row.default }),
|
|
61
|
+
...(row.help === undefined || row.help === '' ? {} : { help: row.help }),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Reads one registered plugin whole: its identity, its authoring facts, and
|
|
66
|
+
* every parameter it declares.
|
|
67
|
+
*
|
|
68
|
+
* @param specifier - The plugin's name, version and `/bin` command.
|
|
69
|
+
* @returns The model, or a failure with the reason on the error stack.
|
|
70
|
+
*/
|
|
71
|
+
export async function pluginInfo_build(specifier) {
|
|
72
|
+
const client = await session.connection.client_get();
|
|
73
|
+
if (!client) {
|
|
74
|
+
errorStack.stack_push('error', 'No active ChRIS connection to read a plugin.');
|
|
75
|
+
return Err();
|
|
76
|
+
}
|
|
77
|
+
const found = await plugin_find(client, specifier.name, specifier.version);
|
|
78
|
+
if (found === null) {
|
|
79
|
+
errorStack.stack_push('error', `Plugin not found on server: ${specifier.name} v${specifier.version}`);
|
|
80
|
+
return Err();
|
|
81
|
+
}
|
|
82
|
+
const rows = await pluginParameters_drain(found.handle);
|
|
83
|
+
const data = found.data;
|
|
84
|
+
return Ok({
|
|
85
|
+
...(typeof data.id === 'number' ? { id: data.id } : {}),
|
|
86
|
+
name: data.name ?? specifier.name,
|
|
87
|
+
version: data.version ?? specifier.version,
|
|
88
|
+
type: data.type ?? 'ds',
|
|
89
|
+
...(data.title === undefined || data.title === '' ? {} : { title: data.title }),
|
|
90
|
+
...(data.description === undefined || data.description === '' ? {} : { description: data.description }),
|
|
91
|
+
...(data.authors === undefined || data.authors === '' ? {} : { authors: data.authors }),
|
|
92
|
+
...(data.documentation === undefined || data.documentation === '' ? {} : { documentation: data.documentation }),
|
|
93
|
+
...(data.category === undefined || data.category === '' ? {} : { category: data.category }),
|
|
94
|
+
parameters: rows.map(parameter_project),
|
|
95
|
+
command: specifier.command,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/** Column widths of the rendered parameter table. */
|
|
99
|
+
const FLAG_WIDTH = 22;
|
|
100
|
+
const TYPE_WIDTH = 11;
|
|
101
|
+
const REQUIRED_WIDTH = 11;
|
|
102
|
+
const DEFAULT_WIDTH = 13;
|
|
103
|
+
/** Width of the rules that bracket the manual's sections. */
|
|
104
|
+
const RULE_WIDTH = 74;
|
|
105
|
+
/**
|
|
106
|
+
* Renders a parameter's default the way an operator reads it: the value, an
|
|
107
|
+
* explicit pair of quotes for the empty string, and `None` for no default at
|
|
108
|
+
* all — an empty cell would read as the empty string.
|
|
109
|
+
*
|
|
110
|
+
* @param parameter - The declared parameter.
|
|
111
|
+
* @returns The cell text.
|
|
112
|
+
*/
|
|
113
|
+
function defaultCell_render(parameter) {
|
|
114
|
+
if (parameter.default === undefined || parameter.default === null)
|
|
115
|
+
return 'None';
|
|
116
|
+
const shown = String(parameter.default);
|
|
117
|
+
return shown === '' ? '""' : shown;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Renders the plugin manual — the same text `cat /bin/<plugin>` has always
|
|
121
|
+
* printed, now a projection of the model rather than the only thing there is.
|
|
122
|
+
*
|
|
123
|
+
* @param model - The plugin model.
|
|
124
|
+
* @returns The formatted manual.
|
|
125
|
+
*/
|
|
126
|
+
export function pluginInfoText_render(model) {
|
|
127
|
+
const command = model.command ?? `${model.name}${BIN_VERSION_SEPARATOR}${model.version}`;
|
|
128
|
+
const lines = [];
|
|
129
|
+
lines.push('');
|
|
130
|
+
lines.push(chalk.bold.magenta(`${model.name.toUpperCase()} (Version ${model.version})`));
|
|
131
|
+
lines.push(chalk.gray('─'.repeat(RULE_WIDTH)));
|
|
132
|
+
lines.push(`${chalk.bold.blue('Type:')} ${model.type}`);
|
|
133
|
+
lines.push(`${chalk.bold.blue('Author:')} ${model.authors ?? 'FNNDSC <dev@babymri.org>'}`);
|
|
134
|
+
if (model.documentation !== undefined) {
|
|
135
|
+
lines.push(`${chalk.bold.blue('Repository:')} ${model.documentation}`);
|
|
136
|
+
}
|
|
137
|
+
lines.push('');
|
|
138
|
+
lines.push(chalk.bold.blue('DESCRIPTION'));
|
|
139
|
+
lines.push(` ${model.description ?? 'No description provided.'}`);
|
|
140
|
+
lines.push('');
|
|
141
|
+
lines.push(chalk.bold.blue('PARAMETERS'));
|
|
142
|
+
lines.push(` ${chalk.bold.white('Flag'.padEnd(FLAG_WIDTH))}${chalk.bold.white('Type'.padEnd(TYPE_WIDTH))}${chalk.bold.white('Required'.padEnd(REQUIRED_WIDTH))}${chalk.bold.white('Default'.padEnd(DEFAULT_WIDTH))}${chalk.bold.white('Description')}`);
|
|
143
|
+
lines.push(` ${chalk.gray('─'.repeat(RULE_WIDTH))}`);
|
|
144
|
+
for (const parameter of model.parameters) {
|
|
145
|
+
const required = parameter.optional ? 'No' : 'Yes';
|
|
146
|
+
lines.push(` ${chalk.yellow(parameter.flag.padEnd(FLAG_WIDTH))}${parameter.type.padEnd(TYPE_WIDTH)}${required.padEnd(REQUIRED_WIDTH)}${defaultCell_render(parameter).padEnd(DEFAULT_WIDTH)}${parameter.help ?? ''}`);
|
|
147
|
+
}
|
|
148
|
+
lines.push('');
|
|
149
|
+
lines.push(chalk.bold.blue('USAGE EXAMPLES'));
|
|
150
|
+
const required = model.parameters.filter((parameter) => !parameter.optional);
|
|
151
|
+
const optional = model.parameters.filter((parameter) => parameter.optional);
|
|
152
|
+
const requiredFlags = required
|
|
153
|
+
.map((parameter) => `${parameter.flag} "value"`)
|
|
154
|
+
.join(' ');
|
|
155
|
+
const basic = requiredFlags ? `${command} ${requiredFlags}` : command;
|
|
156
|
+
lines.push(` ${chalk.white(basic)} ${chalk.gray('# Basic execution')}`);
|
|
157
|
+
const first = optional[0];
|
|
158
|
+
if (first !== undefined) {
|
|
159
|
+
const withOptional = requiredFlags
|
|
160
|
+
? `${command} ${requiredFlags} ${first.flag} "value"`
|
|
161
|
+
: `${command} ${first.flag} "value"`;
|
|
162
|
+
lines.push(` ${chalk.white(withOptional)} ${chalk.gray('# With optional parameter')}`);
|
|
163
|
+
}
|
|
164
|
+
lines.push('');
|
|
165
|
+
return lines.join('\n');
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=plugin.info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.info.js","sourceRoot":"","sources":["../../../src/builtins/res/plugin.info.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,8 @@ import { table_render } from '@fnndsc/chili/screen/screen.js';
|
|
|
22
22
|
import { spinner } from '../../lib/spinner.js';
|
|
23
23
|
import { errorStack, envelope_ok, envelope_error } from '@fnndsc/cumin';
|
|
24
24
|
import { chili_capture } from '@fnndsc/chili/screen/output.js';
|
|
25
|
+
import { PLUGIN_INFO_MODEL_KIND } from '@fnndsc/menu';
|
|
26
|
+
import { pluginInfo_build, pluginInfoText_render, pluginSpecifier_parse, } from './plugin.info.js';
|
|
25
27
|
import { authorizationFailure_is, sudoHint_build } from '../../core/elevation.js';
|
|
26
28
|
/**
|
|
27
29
|
* Handles plugin commands.
|
|
@@ -67,12 +69,15 @@ export async function builtin_plugin(args) {
|
|
|
67
69
|
}
|
|
68
70
|
return envelope_ok(`${chalk.gray('No fields found.')}\n`);
|
|
69
71
|
}
|
|
72
|
+
else if (subcommand === 'info') {
|
|
73
|
+
return await pluginInfo_show(parsed._.slice(1));
|
|
74
|
+
}
|
|
70
75
|
else if (subcommand === 'search') {
|
|
71
76
|
const query = parsed._[1] ?? '';
|
|
72
77
|
return await builtin_plugin(['list', `--search`, query]);
|
|
73
78
|
}
|
|
74
79
|
process.exitCode = 1;
|
|
75
|
-
return envelope_error('', undefined, `${chalk.yellow(`Unknown subcommand: ${subcommand}. Usage: plugin <list|run|add|inspect|search>`)}\n`);
|
|
80
|
+
return envelope_error('', undefined, `${chalk.yellow(`Unknown subcommand: ${subcommand}. Usage: plugin <list|run|add|info|inspect|search>`)}\n`);
|
|
76
81
|
}
|
|
77
82
|
catch (e) {
|
|
78
83
|
const msg = e instanceof Error ? e.message : String(e);
|
|
@@ -80,6 +85,41 @@ export async function builtin_plugin(args) {
|
|
|
80
85
|
return envelope_error('', undefined, `${chalk.red(`Plugin error: ${msg}`)}\n`);
|
|
81
86
|
}
|
|
82
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Shows one registered plugin: the manual on the terminal, the whole plugin
|
|
90
|
+
* on the wire.
|
|
91
|
+
*
|
|
92
|
+
* Spelled the way `/bin` spells it — `plugin info pl-dcm2niix-v1.0.0`, or the
|
|
93
|
+
* path itself — with `<name> <version>` accepted for an operator who has the
|
|
94
|
+
* two halves and not the entry name.
|
|
95
|
+
*
|
|
96
|
+
* @param words - The specifier: one `/bin` entry, or a name and a version.
|
|
97
|
+
* @returns An envelope carrying the manual and the `plugin.info` model.
|
|
98
|
+
*/
|
|
99
|
+
async function pluginInfo_show(words) {
|
|
100
|
+
const entry = words[0];
|
|
101
|
+
if (entry === undefined) {
|
|
102
|
+
return envelope_ok(`${chalk.red('Usage: plugin info <name>-v<version> | <name> <version>')}\n`);
|
|
103
|
+
}
|
|
104
|
+
const version = words[1];
|
|
105
|
+
const specifier = version === undefined
|
|
106
|
+
? pluginSpecifier_parse(entry)
|
|
107
|
+
: { name: entry.replace(/^.*\//, ''), version, command: `${entry.replace(/^.*\//, '')}-v${version}` };
|
|
108
|
+
if (specifier === null) {
|
|
109
|
+
process.exitCode = 1;
|
|
110
|
+
return envelope_error('', undefined, `${chalk.red(`Not a versioned plugin entry: ${entry}. Spell it '<name>-v<version>'.`)}\n`);
|
|
111
|
+
}
|
|
112
|
+
const built = await pluginInfo_build(specifier);
|
|
113
|
+
if (!built.ok) {
|
|
114
|
+
const problem = errorStack.stack_pop();
|
|
115
|
+
process.exitCode = 1;
|
|
116
|
+
return envelope_error('', undefined, `${chalk.red(problem?.message ?? 'Plugin not found.')}\n`);
|
|
117
|
+
}
|
|
118
|
+
return envelope_ok(pluginInfoText_render(built.value), {
|
|
119
|
+
kind: PLUGIN_INFO_MODEL_KIND,
|
|
120
|
+
data: built.value,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
83
123
|
/**
|
|
84
124
|
* Interactive plugin add command with spinner and colored output.
|
|
85
125
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/builtins/res/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAc,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAoB,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAwB,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE9F,OAAO,EAAE,aAAa,EAAsB,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAWlF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc;IACjD,MAAM,MAAM,GAAe,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,UAAU,GAAW,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvC,IAAI,CAAC,UAAU,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,CAAC;QACH,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,MAAM,iBAAiB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;YACjG,IAAI,QAAQ,GAAW,GAAG,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;YACvH,IAAI,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;gBAC5D,QAAQ,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,MAAM,OAAO,UAAU,uDAAuD,CAAC,IAAI,CAAC;YACtI,CAAC;YACD,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAW,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACf,OAAO,WAAW,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC,IAAI,CAAC,CAAC;YAChF,CAAC;YACD,MAAM,MAAM,GAAW,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAA0B,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACjF,IAAI,QAAQ,EAAE,CAAC;gBACZ,OAAO,WAAW,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACtF,CAAC;aAAM,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YAC/B,OAAO,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,MAAM,GAAoB,MAAM,kBAAkB,EAAE,CAAC;YAC3D,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,OAAO,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;YACzJ,CAAC;YACD,OAAO,WAAW,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,KAAK,GAAW,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO,MAAM,cAAc,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,uBAAuB,UAAU
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/builtins/res/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/core/engine.d.ts
CHANGED
|
@@ -50,6 +50,16 @@ export interface BrasaEngine {
|
|
|
50
50
|
* @returns The file's bytes.
|
|
51
51
|
*/
|
|
52
52
|
file_read?(filePath: string): Promise<Buffer>;
|
|
53
|
+
/**
|
|
54
|
+
* Writes bytes to one ChRIS path, resolved against the session's working
|
|
55
|
+
* directory. The twin of {@link Engine.file_read}: a surface that cannot
|
|
56
|
+
* reach the machine's disk (a browser) hands its bytes to the daemon,
|
|
57
|
+
* which puts them in the store through the kernel like any other write.
|
|
58
|
+
*
|
|
59
|
+
* @param filePath - The destination path (absolute or cwd-relative).
|
|
60
|
+
* @param bytes - The content to write.
|
|
61
|
+
*/
|
|
62
|
+
file_write?(filePath: string, bytes: Buffer): Promise<void>;
|
|
53
63
|
/**
|
|
54
64
|
* Notes a regard write from a surface: the addressable thing the operator
|
|
55
65
|
* most recently indicated. The engine retains it as session truth (last
|
|
@@ -155,6 +165,17 @@ export declare function command_handle(line: string): Promise<void>;
|
|
|
155
165
|
* @returns The engine facade.
|
|
156
166
|
*/
|
|
157
167
|
export declare function engine_create(): Promise<BrasaEngine>;
|
|
168
|
+
/**
|
|
169
|
+
* Writes bytes to one ChRIS path through the kernel's own create.
|
|
170
|
+
*
|
|
171
|
+
* A browser surface holds bytes the daemon's machine has never seen; this
|
|
172
|
+
* is how they reach the store without any surface talking to CUBE.
|
|
173
|
+
*
|
|
174
|
+
* @param filePath - The destination path (absolute or cwd-relative).
|
|
175
|
+
* @param bytes - The content to write.
|
|
176
|
+
* @throws {Error} When the store refused the write.
|
|
177
|
+
*/
|
|
178
|
+
export declare function file_write(filePath: string, bytes: Buffer): Promise<void>;
|
|
158
179
|
/**
|
|
159
180
|
* Reads one ChRIS file's raw bytes through ChILI, resolved against the
|
|
160
181
|
* session's working directory.
|
package/dist/core/engine.js
CHANGED
|
@@ -253,6 +253,7 @@ export async function engine_create() {
|
|
|
253
253
|
line_cancel,
|
|
254
254
|
line_complete,
|
|
255
255
|
file_read,
|
|
256
|
+
file_write,
|
|
256
257
|
regard_note: (regard) => session.regard_set(regard),
|
|
257
258
|
regard_get: () => session.regard_get(),
|
|
258
259
|
watch_set: (subject, owner, on) => {
|
|
@@ -268,6 +269,32 @@ export async function engine_create() {
|
|
|
268
269
|
ambient_listen,
|
|
269
270
|
};
|
|
270
271
|
}
|
|
272
|
+
/**
|
|
273
|
+
* Writes bytes to one ChRIS path through the kernel's own create.
|
|
274
|
+
*
|
|
275
|
+
* A browser surface holds bytes the daemon's machine has never seen; this
|
|
276
|
+
* is how they reach the store without any surface talking to CUBE.
|
|
277
|
+
*
|
|
278
|
+
* @param filePath - The destination path (absolute or cwd-relative).
|
|
279
|
+
* @param bytes - The content to write.
|
|
280
|
+
* @throws {Error} When the store refused the write.
|
|
281
|
+
*/
|
|
282
|
+
export async function file_write(filePath, bytes) {
|
|
283
|
+
const { path_resolve } = await import('../builtins/utils.js');
|
|
284
|
+
const { files_create } = await import('@fnndsc/salsa');
|
|
285
|
+
const { listCache_get } = await import('@fnndsc/cumin');
|
|
286
|
+
const resolved = await path_resolve(filePath);
|
|
287
|
+
const written = await files_create(bytes, resolved);
|
|
288
|
+
if (!written) {
|
|
289
|
+
throw new Error(`cannot write ${filePath}`);
|
|
290
|
+
}
|
|
291
|
+
// A write invalidates the listing it changed, as every writing builtin
|
|
292
|
+
// does. Without this the browser that delivered the file asks for the
|
|
293
|
+
// folder again and is served the folder as it was before the delivery —
|
|
294
|
+
// which reads as an upload that silently did nothing.
|
|
295
|
+
const parent = resolved.replace(/\/[^/]*$/, '') || '/';
|
|
296
|
+
listCache_get().cache_invalidate(parent);
|
|
297
|
+
}
|
|
271
298
|
/**
|
|
272
299
|
* Reads one ChRIS file's raw bytes through ChILI, resolved against the
|
|
273
300
|
* session's working directory.
|
package/dist/core/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/core/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnI,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EACL,WAAW,EACX,cAAc,EACd,0BAA0B,GAE3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,gBAAgB,EAChB,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/core/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ export interface SessionPromptContext {
|
|
|
34
34
|
jobs: number;
|
|
35
35
|
feeds: number;
|
|
36
36
|
};
|
|
37
|
-
/**
|
|
37
|
+
/** Calypso's declared host-control tiers, when it acts on its own host. */
|
|
38
38
|
hostControl?: string[];
|
|
39
39
|
/**
|
|
40
40
|
* Warm-up steps that failed behind the prompt and have not since
|
package/dist/core/question.d.ts
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*
|
|
12
12
|
* @module
|
|
13
13
|
*/
|
|
14
|
+
import { type PromptPath } from './surface.js';
|
|
14
15
|
/**
|
|
15
16
|
* Asks a question through the active surface.
|
|
16
17
|
*
|
|
@@ -25,3 +26,29 @@ export declare function repl_question(prompt: string): Promise<string>;
|
|
|
25
26
|
* @returns The trimmed secret string.
|
|
26
27
|
*/
|
|
27
28
|
export declare function repl_questionHidden(prompt: string): Promise<string>;
|
|
29
|
+
/**
|
|
30
|
+
* Asks for a yes/no through the active surface.
|
|
31
|
+
*
|
|
32
|
+
* The kind travels so a surface can offer two capsules rather than make an
|
|
33
|
+
* operator type a letter; a terminal still reads `y`/`n`, and the answer is
|
|
34
|
+
* interpreted here so every caller agrees on what counts as yes.
|
|
35
|
+
*
|
|
36
|
+
* @param prompt - The question string to display.
|
|
37
|
+
* @returns True when the answer was yes.
|
|
38
|
+
*/
|
|
39
|
+
export declare function repl_confirm(prompt: string): Promise<boolean>;
|
|
40
|
+
/**
|
|
41
|
+
* Asks for a location through the active surface.
|
|
42
|
+
*
|
|
43
|
+
* The anchor is a fact the kernel knows — the session's own cwd, the
|
|
44
|
+
* directory a command is already working in — never a directory invented
|
|
45
|
+
* for the occasion, since inventing one means creating it behind the
|
|
46
|
+
* operator's back.
|
|
47
|
+
*
|
|
48
|
+
* @param prompt - The question string to display.
|
|
49
|
+
* @param details - Where to start, whether a directory is wanted, and a
|
|
50
|
+
* basename to offer.
|
|
51
|
+
* @param commit - The word the committing control should read.
|
|
52
|
+
* @returns The location the operator gave.
|
|
53
|
+
*/
|
|
54
|
+
export declare function repl_questionPath(prompt: string, details: PromptPath, commit?: string): Promise<string>;
|
package/dist/core/question.js
CHANGED
|
@@ -30,4 +30,42 @@ export function repl_question(prompt) {
|
|
|
30
30
|
export function repl_questionHidden(prompt) {
|
|
31
31
|
return surface_get().prompt({ message: prompt, hidden: true });
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Asks for a yes/no through the active surface.
|
|
35
|
+
*
|
|
36
|
+
* The kind travels so a surface can offer two capsules rather than make an
|
|
37
|
+
* operator type a letter; a terminal still reads `y`/`n`, and the answer is
|
|
38
|
+
* interpreted here so every caller agrees on what counts as yes.
|
|
39
|
+
*
|
|
40
|
+
* @param prompt - The question string to display.
|
|
41
|
+
* @returns True when the answer was yes.
|
|
42
|
+
*/
|
|
43
|
+
export async function repl_confirm(prompt) {
|
|
44
|
+
const answer = await surface_get().prompt({ message: prompt, wants: 'confirm' });
|
|
45
|
+
const said = answer.trim().toLowerCase();
|
|
46
|
+
return said === 'y' || said === 'yes';
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Asks for a location through the active surface.
|
|
50
|
+
*
|
|
51
|
+
* The anchor is a fact the kernel knows — the session's own cwd, the
|
|
52
|
+
* directory a command is already working in — never a directory invented
|
|
53
|
+
* for the occasion, since inventing one means creating it behind the
|
|
54
|
+
* operator's back.
|
|
55
|
+
*
|
|
56
|
+
* @param prompt - The question string to display.
|
|
57
|
+
* @param details - Where to start, whether a directory is wanted, and a
|
|
58
|
+
* basename to offer.
|
|
59
|
+
* @param commit - The word the committing control should read.
|
|
60
|
+
* @returns The location the operator gave.
|
|
61
|
+
*/
|
|
62
|
+
export function repl_questionPath(prompt, details, commit) {
|
|
63
|
+
const wants = 'path';
|
|
64
|
+
return surface_get().prompt({
|
|
65
|
+
message: prompt,
|
|
66
|
+
wants,
|
|
67
|
+
path: details,
|
|
68
|
+
...(commit === undefined ? {} : { commit }),
|
|
69
|
+
});
|
|
70
|
+
}
|
|
33
71
|
//# sourceMappingURL=question.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"question.js","sourceRoot":"","sources":["../../src/core/question.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"question.js","sourceRoot":"","sources":["../../src/core/question.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,EAAoC,MAAM,cAAc,CAAC;AAE7E;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AACnD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc;IAC/C,MAAM,MAAM,GAAW,MAAM,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACzF,MAAM,IAAI,GAAW,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjD,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,KAAK,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAc,EACd,OAAmB,EACnB,MAAe;IAEf,MAAM,KAAK,GAAe,MAAM,CAAC;IACjC,OAAO,WAAW,EAAE,CAAC,MAAM,CAAC;QAC1B,OAAO,EAAE,MAAM;QACf,KAAK;QACL,IAAI,EAAE,OAAO;QACb,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC"}
|
package/dist/core/surface.d.ts
CHANGED
|
@@ -68,13 +68,26 @@ export interface SurfaceCapabilities {
|
|
|
68
68
|
/**
|
|
69
69
|
* A request to prompt the user for a line of input.
|
|
70
70
|
*
|
|
71
|
+
* `wants` is what the question is asking FOR, so a surface can choose the
|
|
72
|
+
* instrument that answers it — a browser to walk for a location, a masked
|
|
73
|
+
* field for a secret, two capsules for a yes/no — rather than reading the
|
|
74
|
+
* wording and guessing. A terminal ignores all of it and reads a line,
|
|
75
|
+
* which is why every field beyond `message` is optional.
|
|
76
|
+
*
|
|
71
77
|
* @property message - The prompt text to display.
|
|
72
78
|
* @property hidden - When true, the entered text is not echoed; requires the
|
|
73
|
-
* `hiddenInput` capability.
|
|
79
|
+
* `hiddenInput` capability. Kept beside `wants` because it is what an
|
|
80
|
+
* older surface reads.
|
|
81
|
+
* @property wants - The kind of value that answers this.
|
|
82
|
+
* @property path - Where browsing starts and what to compose, for a `path`.
|
|
83
|
+
* @property commit - The word the committing control should read.
|
|
74
84
|
*/
|
|
75
85
|
export interface PromptRequest {
|
|
76
86
|
message: string;
|
|
77
87
|
hidden?: boolean;
|
|
88
|
+
wants?: PromptKind;
|
|
89
|
+
path?: PromptPath;
|
|
90
|
+
commit?: string;
|
|
78
91
|
}
|
|
79
92
|
/**
|
|
80
93
|
* Content handed to a surface's local editor.
|
|
@@ -87,8 +100,8 @@ export interface LocalEditRequest {
|
|
|
87
100
|
content: string;
|
|
88
101
|
extension?: string;
|
|
89
102
|
}
|
|
90
|
-
export type { FileDeliverRequest, FileDeliverResult } from '@fnndsc/menu';
|
|
91
|
-
import type { FileDeliverRequest, FileDeliverResult } from '@fnndsc/menu';
|
|
103
|
+
export type { FileDeliverRequest, FileDeliverResult, PromptKind, PromptPath } from '@fnndsc/menu';
|
|
104
|
+
import type { FileDeliverRequest, FileDeliverResult, PromptKind, PromptPath } from '@fnndsc/menu';
|
|
92
105
|
/**
|
|
93
106
|
* The outcome of a local edit.
|
|
94
107
|
*
|
package/dist/core/surface.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface.js","sourceRoot":"","sources":["../../src/core/surface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;
|
|
1
|
+
{"version":3,"file":"surface.js","sourceRoot":"","sources":["../../src/core/surface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AA4KH;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,mDAAmD;IACnC,UAAU,CAA4B;IAEtD;;;OAGG;IACH,YAAY,UAAqC,EAAE,OAAe;QAChE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,OAAO,eAAe;IAC1B,kBAAkB;IACF,YAAY,GAAwB;QAClD,WAAW,EAAE,KAAK;QAClB,SAAS,EAAE,KAAK;QAChB,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,KAAK;QACpB,YAAY,EAAE,KAAK;QACnB,gBAAgB,EAAE,KAAK;QACvB,eAAe,EAAE,KAAK;KACvB,CAAC;IAEF,kBAAkB;IACX,MAAM,CAAC,QAAuB;QACnC,MAAM,IAAI,eAAe,CAAC,KAAK,EAAE,uCAAuC,CAAC,CAAC;IAC5E,CAAC;IAED,kBAAkB;IACX,WAAW,CAAC,QAAgB,EAAE,MAAc;QACjD,MAAM,IAAI,eAAe,CAAC,cAAc,EAAE,4CAA4C,CAAC,CAAC;IAC1F,CAAC;IAED,kBAAkB;IACX,YAAY,CAAC,QAAgB;QAClC,MAAM,IAAI,eAAe,CAAC,eAAe,EAAE,yCAAyC,CAAC,CAAC;IACxF,CAAC;IAED,kBAAkB;IACX,SAAS,CAAC,QAA0B;QACzC,MAAM,IAAI,eAAe,CAAC,WAAW,EAAE,0CAA0C,CAAC,CAAC;IACrF,CAAC;IAED,kBAAkB;IACX,WAAW,CAAC,QAA4B;QAC7C,MAAM,IAAI,eAAe,CAAC,cAAc,EAAE,qCAAqC,CAAC,CAAC;IACnF,CAAC;CACF;AAED,0EAA0E;AAC1E,IAAI,aAAa,GAAY,IAAI,eAAe,EAAE,CAAC;AAEnD;;;;GAIG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,MAAM,QAAQ,GAAY,aAAa,CAAC;IACxC,aAAa,GAAG,OAAO,CAAC;IACxB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAqC,EACrC,OAAe;IAEf,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|