@fnndsc/brasa 0.50.0 → 0.51.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/buildinfo.json +1 -1
- package/dist/builtins/help.js +15 -2
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/operands.d.ts +122 -0
- package/dist/builtins/operands.js +249 -0
- package/dist/builtins/operands.js.map +1 -0
- package/dist/builtins/pluginExecute.js +81 -4
- package/dist/builtins/pluginExecute.js.map +1 -1
- package/dist/chris/binExecutables.d.ts +34 -0
- package/dist/chris/binExecutables.js +61 -0
- package/dist/chris/binExecutables.js.map +1 -1
- package/dist/chris/commandFallback.js +92 -3
- package/dist/chris/commandFallback.js.map +1 -1
- package/dist/chris/completion.js +89 -1
- package/dist/chris/completion.js.map +1 -1
- package/dist/chris/connect.js +8 -5
- package/dist/chris/connect.js.map +1 -1
- package/dist/chris/help.js +3 -0
- package/dist/chris/help.js.map +1 -1
- package/dist/core/backend.d.ts +2 -0
- package/dist/core/backend.js.map +1 -1
- package/dist/lib/completer/index.js +22 -2
- package/dist/lib/completer/index.js.map +1 -1
- package/dist/notes.json +1 -1
- package/package.json +6 -6
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module
|
|
8
8
|
*/
|
|
9
|
-
import { plugin_executeInPlace } from '@fnndsc/salsa';
|
|
9
|
+
import { plugin_executeInPlace, plugins_list } from '@fnndsc/salsa';
|
|
10
10
|
import { procCache_get } from '@fnndsc/cumin';
|
|
11
11
|
import { envelope_error, envelope_ok } from '@fnndsc/menu';
|
|
12
12
|
import chalk from 'chalk';
|
|
@@ -19,6 +19,23 @@ import { pluginSelector_normalize } from './pluginSelector.js';
|
|
|
19
19
|
import { sink_dataLine, sink_errLine } from '../core/sink.js';
|
|
20
20
|
import { errorStack } from '@fnndsc/fond';
|
|
21
21
|
import { exitCode_set } from '../core/handlerRun.js';
|
|
22
|
+
import { path_resolve } from '../core/paths.js';
|
|
23
|
+
import { OperandRefusal, operands_read, stage_lines, stage_make, stageMade_lines } from './operands.js';
|
|
24
|
+
/**
|
|
25
|
+
* Reads a plugin's kind from CUBE: `fs`, `ds` or `ts`.
|
|
26
|
+
*
|
|
27
|
+
* @param pluginName - The `/bin` name, `<name>-v<version>`.
|
|
28
|
+
* @returns The kind, or null when CUBE did not say.
|
|
29
|
+
*/
|
|
30
|
+
async function pluginKind_read(pluginName) {
|
|
31
|
+
const match = pluginName.match(/^(.+)-v(.+)$/);
|
|
32
|
+
if (match === null)
|
|
33
|
+
return null;
|
|
34
|
+
const listed = await plugins_list({ search: { name_exact: match[1], version: match[2] } });
|
|
35
|
+
const row = listed?.tableData?.[0];
|
|
36
|
+
const kind = row?.['type'];
|
|
37
|
+
return typeof kind === 'string' ? kind : null;
|
|
38
|
+
}
|
|
22
39
|
/**
|
|
23
40
|
* Executes a plugin in the current directory context.
|
|
24
41
|
*
|
|
@@ -48,6 +65,57 @@ export async function builtin_executePlugin(pluginName, args, place) {
|
|
|
48
65
|
// read. Left in, it would be posted to CUBE as a plugin parameter.
|
|
49
66
|
const detach = args.includes('--detach');
|
|
50
67
|
args = args.filter((arg) => arg !== '--detach');
|
|
68
|
+
// 0b. The input operand (operands.ts): a directory replaces cwd; files
|
|
69
|
+
// are shaped into a stage the run roots the feed with; to an fs
|
|
70
|
+
// plugin an operand is its `dir`, untranslated.
|
|
71
|
+
let operandPlace = null;
|
|
72
|
+
let stage = null;
|
|
73
|
+
let operandDir = null;
|
|
74
|
+
if (place === undefined) {
|
|
75
|
+
let operands;
|
|
76
|
+
try {
|
|
77
|
+
operands = await operands_read(args);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
if (!(error instanceof OperandRefusal))
|
|
81
|
+
throw error;
|
|
82
|
+
sink_errLine(chalk.red(`${pluginName}: ${error.message}`));
|
|
83
|
+
return envelope_error('');
|
|
84
|
+
}
|
|
85
|
+
args = operands.rest;
|
|
86
|
+
if (operands.directory !== null || operands.subjects.length > 0) {
|
|
87
|
+
const kind = await pluginKind_read(pluginName);
|
|
88
|
+
if (kind === null) {
|
|
89
|
+
sink_errLine(chalk.red(`${pluginName}: could not read the plugin's kind from CUBE, so the operand cannot be placed`));
|
|
90
|
+
return envelope_error('');
|
|
91
|
+
}
|
|
92
|
+
if (kind === 'fs') {
|
|
93
|
+
const named = operands.subjects.find((subject) => subject.named);
|
|
94
|
+
if (named !== undefined) {
|
|
95
|
+
sink_errLine(chalk.red(`${pluginName}: as ${named.name}: an fs plugin takes paths as its dir, not subjects`));
|
|
96
|
+
return envelope_error('');
|
|
97
|
+
}
|
|
98
|
+
operandDir = [...(operands.directory !== null ? [operands.directory] : []), ...operands.subjects.flatMap((subject) => subject.files)].join(',');
|
|
99
|
+
}
|
|
100
|
+
else if (operands.directory !== null) {
|
|
101
|
+
operandPlace = operands.directory;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
try {
|
|
105
|
+
stage = await stage_make(operands.subjects, await path_resolve('~'));
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
if (!(error instanceof OperandRefusal))
|
|
109
|
+
throw error;
|
|
110
|
+
sink_errLine(chalk.red(`${pluginName}: ${error.message}`));
|
|
111
|
+
return envelope_error('');
|
|
112
|
+
}
|
|
113
|
+
for (const line of stage_lines(stage))
|
|
114
|
+
sink_dataLine(chalk.cyan(line));
|
|
115
|
+
operandPlace = stage.path;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
51
119
|
// 1. Split the already-tokenized arguments on the context delimiter.
|
|
52
120
|
const delimiterIndex = args.indexOf('--');
|
|
53
121
|
const pluginArgTokens = delimiterIndex === -1 ? args : args.slice(0, delimiterIndex);
|
|
@@ -65,6 +133,8 @@ export async function builtin_executePlugin(pluginName, args, place) {
|
|
|
65
133
|
return envelope_error('');
|
|
66
134
|
}
|
|
67
135
|
}
|
|
136
|
+
if (operandDir !== null)
|
|
137
|
+
pluginParams['dir'] = operandDir;
|
|
68
138
|
if (contextArgTokens.length > 0) {
|
|
69
139
|
try {
|
|
70
140
|
contextParams = executableArguments_parse(contextArgTokens);
|
|
@@ -76,11 +146,12 @@ export async function builtin_executePlugin(pluginName, args, place) {
|
|
|
76
146
|
}
|
|
77
147
|
}
|
|
78
148
|
// 3. Set default context params if not provided
|
|
79
|
-
const cwd = place ?? await session.getCWD();
|
|
149
|
+
const cwd = place ?? operandPlace ?? await session.getCWD();
|
|
80
150
|
const isInFeed = cwd.includes('/feeds/feed_');
|
|
81
|
-
// If no context params provided and not in a feed, use directory name as
|
|
151
|
+
// If no context params provided and not in a feed, use directory name as
|
|
152
|
+
// feed title; a stage is named by its subjects, not its id.
|
|
82
153
|
if (contextArgTokens.length === 0 && !isInFeed) {
|
|
83
|
-
const defaultTitle = cwd.split('/').pop() || 'Untitled';
|
|
154
|
+
const defaultTitle = stage !== null ? stage.subjects.map((subject) => subject.name).join(', ') : cwd.split('/').pop() || 'Untitled';
|
|
84
155
|
contextParams.feed_title = defaultTitle;
|
|
85
156
|
sink_dataLine(chalk.cyan(`Using feed title: "${defaultTitle}" (customize with -- feed_title="Custom Title")`));
|
|
86
157
|
}
|
|
@@ -143,6 +214,12 @@ export async function builtin_executePlugin(pluginName, args, place) {
|
|
|
143
214
|
if (result.feedID) {
|
|
144
215
|
sink_dataLine(chalk.green(`Feed created: ${result.feedID}`));
|
|
145
216
|
}
|
|
217
|
+
// What CUBE made of the stage: the real paths, since the data moved.
|
|
218
|
+
if (stage !== null && result.feedID !== undefined && result.dircopyInstanceID !== undefined) {
|
|
219
|
+
const rootOutput = `/home/${cwd.split('/')[2] ?? ''}/feeds/feed_${result.feedID}/pl-dircopy_${result.dircopyInstanceID}/data`;
|
|
220
|
+
for (const line of stageMade_lines(stage, rootOutput))
|
|
221
|
+
sink_dataLine(chalk.cyan(line));
|
|
222
|
+
}
|
|
146
223
|
const feedIDOfRun = result.feedID !== undefined
|
|
147
224
|
? result.feedID
|
|
148
225
|
: result.parentID !== null ? (procCache_get().instance_get(result.parentID)?.feedID ?? null) : null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pluginExecute.js","sourceRoot":"","sources":["../../src/builtins/pluginExecute.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,qBAAqB,EAAyB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"pluginExecute.js","sourceRoot":"","sources":["../../src/builtins/pluginExecute.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,3 +23,37 @@ export interface BinExecutableMatches {
|
|
|
23
23
|
* @returns Matching dynamic executable entries, if the listing is available.
|
|
24
24
|
*/
|
|
25
25
|
export declare function binExecutableMatches_get(command: string): Promise<BinExecutableMatches>;
|
|
26
|
+
/** A bare plugin name resolved to the highest version `/bin` lists for it. */
|
|
27
|
+
export interface BinPluginHighest {
|
|
28
|
+
/** The `/bin` entry that runs: `<name>-v<version>`. */
|
|
29
|
+
executable: string;
|
|
30
|
+
/** The highest version. */
|
|
31
|
+
version: string;
|
|
32
|
+
/** Every version `/bin` lists for the name, lowest first. */
|
|
33
|
+
versions: string[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Orders two plugin versions: dotted numeric segments as numbers, a missing
|
|
37
|
+
* segment as 0, so `1.10.0` is above `1.9.9`; a segment that is not a number
|
|
38
|
+
* sorts below any number at its place and against its kind as text, so
|
|
39
|
+
* `1.0.4` is above `1.0.4-rc1`.
|
|
40
|
+
*
|
|
41
|
+
* @param a - One version.
|
|
42
|
+
* @param b - Another.
|
|
43
|
+
* @returns Negative when `a` is lower, positive when higher, 0 when equal.
|
|
44
|
+
*/
|
|
45
|
+
export declare function pluginVersions_compare(a: string, b: string): number;
|
|
46
|
+
/**
|
|
47
|
+
* Resolves a bare plugin name to the highest version `/bin` lists for it.
|
|
48
|
+
*
|
|
49
|
+
* `/bin` lists a plugin per version as `<name>-v<version>`, so a bare name
|
|
50
|
+
* matches nothing there by itself. Reading it as "the highest registered
|
|
51
|
+
* version" is derived from CUBE's own state, the same answer for everyone
|
|
52
|
+
* on that CUBE at that moment, and the run's record names the exact version
|
|
53
|
+
* regardless; a pin, when wanted, is the full name (#1303).
|
|
54
|
+
*
|
|
55
|
+
* @param command - The bare name as typed, e.g. `pl-freesurfer`.
|
|
56
|
+
* @returns The executable to run and the versions seen, or null when `/bin`
|
|
57
|
+
* lists no version of that name.
|
|
58
|
+
*/
|
|
59
|
+
export declare function binPluginHighest_find(command: string): Promise<BinPluginHighest | null>;
|
|
@@ -25,4 +25,65 @@ export async function binExecutableMatches_get(command) {
|
|
|
25
25
|
pipeline: binResult.value.find((item) => item.type === 'pipeline' && item.title === command),
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Orders two plugin versions: dotted numeric segments as numbers, a missing
|
|
30
|
+
* segment as 0, so `1.10.0` is above `1.9.9`; a segment that is not a number
|
|
31
|
+
* sorts below any number at its place and against its kind as text, so
|
|
32
|
+
* `1.0.4` is above `1.0.4-rc1`.
|
|
33
|
+
*
|
|
34
|
+
* @param a - One version.
|
|
35
|
+
* @param b - Another.
|
|
36
|
+
* @returns Negative when `a` is lower, positive when higher, 0 when equal.
|
|
37
|
+
*/
|
|
38
|
+
export function pluginVersions_compare(a, b) {
|
|
39
|
+
const segments = (version) => version.split(/[.\-]/);
|
|
40
|
+
const left = segments(a);
|
|
41
|
+
const right = segments(b);
|
|
42
|
+
const length = Math.max(left.length, right.length);
|
|
43
|
+
for (let index = 0; index < length; index++) {
|
|
44
|
+
const one = left[index] ?? '0';
|
|
45
|
+
const other = right[index] ?? '0';
|
|
46
|
+
const oneNumber = /^\d+$/.test(one) ? Number(one) : NaN;
|
|
47
|
+
const otherNumber = /^\d+$/.test(other) ? Number(other) : NaN;
|
|
48
|
+
if (!Number.isNaN(oneNumber) && !Number.isNaN(otherNumber)) {
|
|
49
|
+
if (oneNumber !== otherNumber)
|
|
50
|
+
return oneNumber - otherNumber;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
// A pre-release word where the other side has a number, or has ended
|
|
54
|
+
// (`1.0.4` against `1.0.4-rc1`: the bare one is higher).
|
|
55
|
+
if (Number.isNaN(oneNumber) !== Number.isNaN(otherNumber))
|
|
56
|
+
return Number.isNaN(oneNumber) ? -1 : 1;
|
|
57
|
+
if (one !== other)
|
|
58
|
+
return one < other ? -1 : 1;
|
|
59
|
+
}
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Resolves a bare plugin name to the highest version `/bin` lists for it.
|
|
64
|
+
*
|
|
65
|
+
* `/bin` lists a plugin per version as `<name>-v<version>`, so a bare name
|
|
66
|
+
* matches nothing there by itself. Reading it as "the highest registered
|
|
67
|
+
* version" is derived from CUBE's own state, the same answer for everyone
|
|
68
|
+
* on that CUBE at that moment, and the run's record names the exact version
|
|
69
|
+
* regardless; a pin, when wanted, is the full name (#1303).
|
|
70
|
+
*
|
|
71
|
+
* @param command - The bare name as typed, e.g. `pl-freesurfer`.
|
|
72
|
+
* @returns The executable to run and the versions seen, or null when `/bin`
|
|
73
|
+
* lists no version of that name.
|
|
74
|
+
*/
|
|
75
|
+
export async function binPluginHighest_find(command) {
|
|
76
|
+
const binResult = await vfs.data_get('/bin');
|
|
77
|
+
if (!binResult.ok)
|
|
78
|
+
return null;
|
|
79
|
+
const versions = binResult.value
|
|
80
|
+
.filter((item) => item.type === 'plugin' && item.name.startsWith(`${command}-v`))
|
|
81
|
+
.map((item) => item.name.slice(command.length + 2))
|
|
82
|
+
.filter((version) => version.length > 0)
|
|
83
|
+
.sort(pluginVersions_compare);
|
|
84
|
+
const version = versions[versions.length - 1];
|
|
85
|
+
if (version === undefined)
|
|
86
|
+
return null;
|
|
87
|
+
return { executable: `${command}-v${version}`, version, versions };
|
|
88
|
+
}
|
|
28
89
|
//# sourceMappingURL=binExecutables.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binExecutables.js","sourceRoot":"","sources":["../../src/chris/binExecutables.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAQxC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAAe;IAC5D,MAAM,SAAS,GAA0B,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,MAAM,GAA4B,SAAS,CAAC,KAAK,CAAC,IAAI,CAC1D,CAAC,IAAiB,EAAW,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAChF,CAAC;IACF,MAAM,QAAQ,GAA4B,SAAS,CAAC,KAAK,CAAC,IAAI,CAC5D,CAAC,IAAiB,EAAW,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAClF,CAAC;IACF,IAAI,MAAM,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAChF,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAC5B,CAAC,IAAiB,EAAW,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,CACnF;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"binExecutables.js","sourceRoot":"","sources":["../../src/chris/binExecutables.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,16 +8,90 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
11
|
+
import chalk from 'chalk';
|
|
11
12
|
import { CHRIS_BUILTIN_LINES } from './help.js';
|
|
12
13
|
import { variablesPage_render } from '../builtins/variablesPage.js';
|
|
13
14
|
import { envelope_deliver, sink_get } from '../core/sink.js';
|
|
14
15
|
import { exitCode_read, handler_runDirect } from '../core/handlerRun.js';
|
|
15
|
-
import { binExecutableMatches_get } from './binExecutables.js';
|
|
16
|
+
import { binExecutableMatches_get, binPluginHighest_find } from './binExecutables.js';
|
|
16
17
|
import { builtin_pipeline } from '../builtins/res/pipeline.js';
|
|
17
18
|
import { builtin_executePlugin } from '../builtins/pluginExecute.js';
|
|
18
19
|
import { pluginExecutable_handle } from '../builtins/executable.js';
|
|
19
20
|
import { pipelineExecutableHelp_render, pluginExecutableHelp_render } from '../builtins/help.js';
|
|
20
21
|
import { chiliCommand_run, chiliCommand_exists, chiliDelegationNotice_build } from './chiliDelegate.js';
|
|
22
|
+
import { feed_create } from '@fnndsc/salsa';
|
|
23
|
+
import { path_extractPluginInstanceID, path_isInFeed } from '@fnndsc/cumin';
|
|
24
|
+
import path from 'path';
|
|
25
|
+
import { path_resolve } from '../core/paths.js';
|
|
26
|
+
import { newFeed_cacheAdd } from '../builtins/feedCreation.js';
|
|
27
|
+
import { OperandRefusal, operands_read, stage_lines, stage_make, stageMade_lines } from '../builtins/operands.js';
|
|
28
|
+
/**
|
|
29
|
+
* The node a pipeline run starts from, read from its operand (#1303): a
|
|
30
|
+
* directory inside a feed is that node; outside one, or a set of files
|
|
31
|
+
* shaped into a stage, pl-dircopy roots a new feed first, the directory's
|
|
32
|
+
* name (or the subjects') as its title, and the run goes on from that root.
|
|
33
|
+
*
|
|
34
|
+
* @param name - The pipeline's `/bin` name, for the refusal lines.
|
|
35
|
+
* @param args - The words after it.
|
|
36
|
+
* @returns The words to run with (`--previous` set), or null after a refusal was said.
|
|
37
|
+
*/
|
|
38
|
+
async function pipelineOperand_place(name, args) {
|
|
39
|
+
let operands;
|
|
40
|
+
try {
|
|
41
|
+
operands = await operands_read(args);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
if (!(error instanceof OperandRefusal))
|
|
45
|
+
throw error;
|
|
46
|
+
sink_get().err_write(chalk.red(`${name}: ${error.message}\n`));
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
if (operands.directory === null && operands.subjects.length === 0)
|
|
50
|
+
return args;
|
|
51
|
+
if (operands.rest.includes('--previous')) {
|
|
52
|
+
sink_get().err_write(chalk.red(`${name}: the operand and --previous say the input twice\n`));
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
if (operands.directory !== null && path_isInFeed(operands.directory)) {
|
|
56
|
+
const here = path_extractPluginInstanceID(operands.directory);
|
|
57
|
+
if (here === null) {
|
|
58
|
+
sink_get().err_write(chalk.red(`${name}: ${operands.typed[0]} is in a feed but not at a node (…/feeds/feed_N/pl-x_ID)\n`));
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
return ['--previous', String(here), ...operands.rest];
|
|
62
|
+
}
|
|
63
|
+
let stage = null;
|
|
64
|
+
let root = operands.directory ?? '';
|
|
65
|
+
let title = path.posix.basename(root);
|
|
66
|
+
if (operands.directory === null) {
|
|
67
|
+
try {
|
|
68
|
+
stage = await stage_make(operands.subjects, await path_resolve('~'));
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
if (!(error instanceof OperandRefusal))
|
|
72
|
+
throw error;
|
|
73
|
+
sink_get().err_write(chalk.red(`${name}: ${error.message}\n`));
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
for (const line of stage_lines(stage))
|
|
77
|
+
sink_get().data_write(chalk.cyan(`${line}\n`));
|
|
78
|
+
root = stage.path;
|
|
79
|
+
title = stage.subjects.map((subject) => subject.name).join(', ');
|
|
80
|
+
}
|
|
81
|
+
const feed = await feed_create([root], { title });
|
|
82
|
+
if (feed === null) {
|
|
83
|
+
sink_get().err_write(chalk.red(`${name}: could not root a feed with pl-dircopy of ${operands.typed.join(' ')}\n`));
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
const rootInstanceID = feed.pluginInstance.data.id;
|
|
87
|
+
newFeed_cacheAdd({ feedID: feed.id, title, ownerUsername: feed.owner_username, rootInstanceID });
|
|
88
|
+
sink_get().data_write(chalk.green(`Feed created: ${feed.id}\n`));
|
|
89
|
+
if (stage !== null) {
|
|
90
|
+
for (const line of stageMade_lines(stage, `/home/${feed.owner_username}/feeds/feed_${feed.id}/pl-dircopy_${rootInstanceID}/data`))
|
|
91
|
+
sink_get().data_write(chalk.cyan(`${line}\n`));
|
|
92
|
+
}
|
|
93
|
+
return ['--previous', String(rootInstanceID), ...operands.rest];
|
|
94
|
+
}
|
|
21
95
|
/**
|
|
22
96
|
* Handles a pipeline name invoked directly as an executable from /bin.
|
|
23
97
|
* Routes flag combinations to the appropriate pipeline subcommand:
|
|
@@ -56,7 +130,9 @@ async function pipelineExecutable_handle(name, args) {
|
|
|
56
130
|
envelope = await builtin_pipeline(['source', name]);
|
|
57
131
|
}
|
|
58
132
|
else {
|
|
59
|
-
|
|
133
|
+
// The operand says where the run starts (#1303); refused, nothing runs.
|
|
134
|
+
const placed = await pipelineOperand_place(name, args);
|
|
135
|
+
envelope = placed === null ? { status: 'error', rendered: '' } : await builtin_pipeline(['run', name, ...placed]);
|
|
60
136
|
}
|
|
61
137
|
const result = envelope ?? { status: 'ok', rendered: '' };
|
|
62
138
|
const exitCodeAfter = exitCode_read();
|
|
@@ -98,6 +174,15 @@ export const chrisFallback = {
|
|
|
98
174
|
envelope_deliver(envelope);
|
|
99
175
|
return envelope;
|
|
100
176
|
}
|
|
177
|
+
// A bare plugin name runs the highest version /bin lists for it, and
|
|
178
|
+
// says which, so the line read back names exactly what ran (#1303).
|
|
179
|
+
// The same job rule as above: typed at the prompt it starts one, in a
|
|
180
|
+
// pipe or a redirect it does not.
|
|
181
|
+
const highest = captured ? null : await binPluginHighest_find(command);
|
|
182
|
+
if (highest !== null) {
|
|
183
|
+
sink_get().data_write(chalk.gray(`running ${highest.executable} (highest of ${highest.versions.join(', ')})\n`));
|
|
184
|
+
return handler_runDirect((pluginArgs) => builtin_executePlugin(highest.executable, pluginArgs), args);
|
|
185
|
+
}
|
|
101
186
|
return chili_delegate(command, args);
|
|
102
187
|
},
|
|
103
188
|
help: async (command) => {
|
|
@@ -108,7 +193,11 @@ export const chrisFallback = {
|
|
|
108
193
|
if (/-v[^/]+$/.test(command))
|
|
109
194
|
return pluginExecutableHelp_render(command);
|
|
110
195
|
const binMatches = await binExecutableMatches_get(command);
|
|
111
|
-
|
|
196
|
+
if (binMatches.pipeline)
|
|
197
|
+
return pipelineExecutableHelp_render(binMatches.pipeline.name);
|
|
198
|
+
// A bare plugin name's help is its highest version's.
|
|
199
|
+
const highest = await binPluginHighest_find(command);
|
|
200
|
+
return highest === null ? null : pluginExecutableHelp_render(highest.executable);
|
|
112
201
|
},
|
|
113
202
|
};
|
|
114
203
|
//# sourceMappingURL=commandFallback.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commandFallback.js","sourceRoot":"","sources":["../../src/chris/commandFallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAIpE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"commandFallback.js","sourceRoot":"","sources":["../../src/chris/commandFallback.ts"],"names":[],"mappings":"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"}
|
package/dist/chris/completion.js
CHANGED
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { plugins_listAll, pipelineManifest_get } from '@fnndsc/salsa';
|
|
8
8
|
import { listCache_get } from '@fnndsc/cumin';
|
|
9
|
+
import { pluginInfo_build, pluginSpecifier_parse } from '../builtins/res/plugin.info.js';
|
|
10
|
+
import { pluginVersions_compare } from './binExecutables.js';
|
|
11
|
+
import { vfs } from '../lib/vfs/vfs.js';
|
|
9
12
|
/**
|
|
10
13
|
* Fetches available plugin names from /bin in the format: name-vVersion.
|
|
11
14
|
* This matches the display format used in /bin listings.
|
|
@@ -91,10 +94,95 @@ async function pipelineOptions_get(args, word) {
|
|
|
91
94
|
}
|
|
92
95
|
return options.filter((option) => option.startsWith(word));
|
|
93
96
|
}
|
|
97
|
+
/** A plugin's option words, by its `/bin` name, kept once read. */
|
|
98
|
+
const pluginOptions_cache = new Map();
|
|
99
|
+
/**
|
|
100
|
+
* The `/bin` name a line's first word runs as a plugin: itself when it is a
|
|
101
|
+
* full `name-vVersion` /bin lists, the highest version when it is a bare
|
|
102
|
+
* name (#1303), or null when /bin lists no such plugin.
|
|
103
|
+
*
|
|
104
|
+
* @param word - The line's first word.
|
|
105
|
+
* @returns The full `/bin` name, or null.
|
|
106
|
+
*/
|
|
107
|
+
async function pluginExecutable_resolve(word) {
|
|
108
|
+
const names = await plugins_getNames();
|
|
109
|
+
if (names.includes(word))
|
|
110
|
+
return word;
|
|
111
|
+
const versions = names
|
|
112
|
+
.filter((name) => name.startsWith(`${word}-v`))
|
|
113
|
+
.map((name) => name.slice(word.length + 2))
|
|
114
|
+
.sort(pluginVersions_compare);
|
|
115
|
+
const highest = versions[versions.length - 1];
|
|
116
|
+
return highest === undefined ? null : `${word}-v${highest}`;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* The `--flag` options of the plugin a line runs, starting with the word
|
|
120
|
+
* typed: its parameters as CUBE declares them, the list `--parameters`
|
|
121
|
+
* prints, read once per plugin (#1306). A boolean parameter is its flag
|
|
122
|
+
* alone.
|
|
123
|
+
*
|
|
124
|
+
* @param args - The line's words.
|
|
125
|
+
* @param word - The option word typed so far.
|
|
126
|
+
* @returns The options, none when the plugin cannot be read, or null for a
|
|
127
|
+
* line naming no plugin.
|
|
128
|
+
*/
|
|
129
|
+
async function pluginOptions_get(args, word) {
|
|
130
|
+
const first = args[0];
|
|
131
|
+
if (first === undefined)
|
|
132
|
+
return null;
|
|
133
|
+
const executable = await pluginExecutable_resolve(first);
|
|
134
|
+
if (executable === null)
|
|
135
|
+
return null;
|
|
136
|
+
let options = pluginOptions_cache.get(executable);
|
|
137
|
+
if (options === undefined) {
|
|
138
|
+
const specifier = pluginSpecifier_parse(executable);
|
|
139
|
+
if (specifier === null)
|
|
140
|
+
return [];
|
|
141
|
+
const info = await pluginInfo_build(specifier);
|
|
142
|
+
if (!info.ok)
|
|
143
|
+
return [];
|
|
144
|
+
options = info.value.parameters.map((parameter) => parameter.flag);
|
|
145
|
+
pluginOptions_cache.set(executable, options);
|
|
146
|
+
}
|
|
147
|
+
return options.filter((option) => option.startsWith(word));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* The option words for a line: a plugin's parameters when its first word
|
|
151
|
+
* runs a plugin, else a pipeline's `--node.field` options.
|
|
152
|
+
*
|
|
153
|
+
* @param args - The line's words.
|
|
154
|
+
* @param word - The option word typed so far.
|
|
155
|
+
* @returns The options, or null for a line the session does not complete.
|
|
156
|
+
*/
|
|
157
|
+
async function lineOptions_get(args, word) {
|
|
158
|
+
const plugin = await pluginOptions_get(args, word);
|
|
159
|
+
return plugin !== null ? plugin : pipelineOptions_get(args, word);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Whether a word names a `/bin` entry, whose arguments are paths (#1305):
|
|
163
|
+
* a plugin `name-vVersion`, a bare plugin name (any version listed, #1303),
|
|
164
|
+
* or a pipeline by its `/bin` name or its own name.
|
|
165
|
+
*
|
|
166
|
+
* @param command - The line's first word.
|
|
167
|
+
* @returns True for a `/bin` entry.
|
|
168
|
+
*/
|
|
169
|
+
async function binPathArguments(command) {
|
|
170
|
+
const names = await plugins_getNames();
|
|
171
|
+
if (names.includes(command) || names.some((name) => name.startsWith(`${command}-v`)))
|
|
172
|
+
return true;
|
|
173
|
+
try {
|
|
174
|
+
const bin = await vfs.data_get('/bin');
|
|
175
|
+
return bin.ok && bin.value.some((item) => item.type === 'pipeline' && (item.name === command || item.title === command));
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
94
181
|
/** What the ChRIS session adds to completion. */
|
|
95
182
|
export const chrisCompletion = {
|
|
96
183
|
commandWords: plugins_getNames,
|
|
97
|
-
options:
|
|
184
|
+
options: lineOptions_get,
|
|
185
|
+
pathArguments: binPathArguments,
|
|
98
186
|
rootWords: ['bin', 'usr'],
|
|
99
187
|
};
|
|
100
188
|
//# sourceMappingURL=completion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/chris/completion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAoD,MAAM,eAAe,CAAC;AACxH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/chris/completion.ts"],"names":[],"mappings":"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"}
|
package/dist/chris/connect.js
CHANGED
|
@@ -44,17 +44,20 @@ export async function sessionFromSaved_connect() {
|
|
|
44
44
|
session.offline = true;
|
|
45
45
|
return { status: 'no-client', context };
|
|
46
46
|
}
|
|
47
|
+
// The check reads `users/`, not the API root: the root is the feed
|
|
48
|
+
// list, which can outlast the check for an identity that sees
|
|
49
|
+
// thousands of feeds (#1280).
|
|
50
|
+
const url = context.URL;
|
|
47
51
|
try {
|
|
48
|
-
await
|
|
52
|
+
await session.connection.token_check(url, token);
|
|
49
53
|
}
|
|
50
54
|
catch (first) {
|
|
51
|
-
// No answer at all is not a refusal:
|
|
52
|
-
//
|
|
53
|
-
// once more before the session gives up on it.
|
|
55
|
+
// No answer at all is not a refusal: asked once more before the
|
|
56
|
+
// session gives up on it.
|
|
54
57
|
if (!answer_none(first))
|
|
55
58
|
throw first;
|
|
56
59
|
await new Promise((resolve) => setTimeout(resolve, SAVED_TOKEN_RETRY_MS));
|
|
57
|
-
await
|
|
60
|
+
await session.connection.token_check(url, token);
|
|
58
61
|
}
|
|
59
62
|
return { status: 'restored', context };
|
|
60
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/chris/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAyB,YAAY,EAAE,OAAO,EAA4B,MAAM,eAAe,CAAC;AAqBvG,gFAAgF;AAChF,MAAM,CAAC,MAAM,oBAAoB,GAAW,IAAI,CAAC;AAEjD,iFAAiF;AACjF,SAAS,WAAW,CAAC,KAAc;IACjC,MAAM,OAAO,GAAW,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/E,OAAO,iGAAiG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,MAAM,OAAO,GAAkB,MAAM,iBAAiB,EAAE,CAAC;IAEzD,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,KAAK,GAAkB,MAAM,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IACzC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAkB,MAAM,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QACpE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YACvB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC;YACH,MAAM,
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/chris/connect.ts"],"names":[],"mappings":"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"}
|
package/dist/chris/help.js
CHANGED
|
@@ -227,6 +227,9 @@ export const chrisHelp = {
|
|
|
227
227
|
'',
|
|
228
228
|
'RUNNING A PLUGIN:',
|
|
229
229
|
' pl-dcm2niix-v1.0.2 --param value -- feed_title="T" run where you stand',
|
|
230
|
+
' pl-dcm2niix … the bare name runs the highest version, and says which',
|
|
231
|
+
' pl-dcm2niix ~/uploads/subjects on that tree instead of where you stand',
|
|
232
|
+
' pl-dcm2niix ~/uploads/t1.nii as sub-01 --param v one subject, the file in it; operands first',
|
|
230
233
|
' A=$(pl-dcm2niix-v1.0.2 …) and name the run',
|
|
231
234
|
'',
|
|
232
235
|
' Run "parametersofplugin <name>" to see available parameters for a plugin.',
|