@fnndsc/brasa 0.11.1 → 0.13.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.
Files changed (48) hide show
  1. package/dist/buildinfo.json +1 -1
  2. package/dist/builtins/fs/archive.d.ts +43 -0
  3. package/dist/builtins/fs/archive.js +174 -0
  4. package/dist/builtins/fs/archive.js.map +1 -0
  5. package/dist/builtins/fs/download.d.ts +2 -1
  6. package/dist/builtins/fs/download.js +108 -2
  7. package/dist/builtins/fs/download.js.map +1 -1
  8. package/dist/builtins/fs/pull.js +43 -11
  9. package/dist/builtins/fs/pull.js.map +1 -1
  10. package/dist/builtins/help.js +5 -0
  11. package/dist/builtins/help.js.map +1 -1
  12. package/dist/builtins/net/query.d.ts +16 -0
  13. package/dist/builtins/net/query.js +104 -3
  14. package/dist/builtins/net/query.js.map +1 -1
  15. package/dist/builtins/proc.js +17 -9
  16. package/dist/builtins/proc.js.map +1 -1
  17. package/dist/builtins/res/feed.diagram.d.ts +24 -0
  18. package/dist/builtins/res/feed.diagram.js +66 -2
  19. package/dist/builtins/res/feed.diagram.js.map +1 -1
  20. package/dist/builtins/res/feed.js +4 -2
  21. package/dist/builtins/res/feed.js.map +1 -1
  22. package/dist/builtins/res/pipeline.diagram.js +27 -4
  23. package/dist/builtins/res/pipeline.diagram.js.map +1 -1
  24. package/dist/core/engine.d.ts +36 -0
  25. package/dist/core/engine.js +24 -1
  26. package/dist/core/engine.js.map +1 -1
  27. package/dist/core/progress.d.ts +7 -30
  28. package/dist/core/progress.js +6 -17
  29. package/dist/core/progress.js.map +1 -1
  30. package/dist/core/promptContext.d.ts +15 -0
  31. package/dist/core/promptContext.js +22 -0
  32. package/dist/core/promptContext.js.map +1 -1
  33. package/dist/core/surface.d.ts +34 -0
  34. package/dist/core/surface.js +7 -0
  35. package/dist/core/surface.js.map +1 -1
  36. package/dist/index.d.ts +1 -0
  37. package/dist/index.js +1 -0
  38. package/dist/index.js.map +1 -1
  39. package/dist/lib/spinner.d.ts +48 -9
  40. package/dist/lib/spinner.js +65 -45
  41. package/dist/lib/spinner.js.map +1 -1
  42. package/dist/logo/brain.d.ts +31 -0
  43. package/dist/logo/brain.js +256 -0
  44. package/dist/logo/brain.js.map +1 -0
  45. package/dist/session/index.d.ts +17 -0
  46. package/dist/session/index.js +20 -0
  47. package/dist/session/index.js.map +1 -1
  48. package/package.json +5 -4
@@ -1 +1 @@
1
- {"hash":"752c98"}
1
+ {"hash":"03f466"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @file Archiving a directory so it can leave CUBE as one file.
3
+ *
4
+ * CUBE serves a file's bytes but has no representation of a directory, so a
5
+ * client that wants a copy of a tree must build one. The platform's own answer
6
+ * is a registered pipeline — `pl-dircopy` into a zip plugin — and using it is
7
+ * right: making an archive is a computation, and computations here are
8
+ * plugins. What is wrong is where that orchestration has historically lived.
9
+ * The ChRIS web UI carried it in a saga, so no other client could reuse it,
10
+ * and a presentation layer became an orchestrator. Here it is an intent, in
11
+ * the kernel, reached identically by every surface.
12
+ *
13
+ * The cost is real and worth stating: an archive run creates a feed, so the
14
+ * compute graph records a copy as though it were an analysis step. That is a
15
+ * CUBE gap, filed as issue #233, not a design choice — the day CUBE can hand
16
+ * over a directory, this module is deleted.
17
+ *
18
+ * @module
19
+ */
20
+ /**
21
+ * The archive a run produced.
22
+ *
23
+ * @property path - The archive's path in the session's namespace.
24
+ * @property filename - Its basename, for a surface to suggest at the destination.
25
+ * @property size - Its size in bytes, when the listing reported one.
26
+ */
27
+ export interface ArchiveResult {
28
+ path: string;
29
+ filename: string;
30
+ size?: number;
31
+ }
32
+ /**
33
+ * Archives a directory into a single file inside CUBE.
34
+ *
35
+ * Announces what it is doing, because it is a workaround and a silent one
36
+ * would leave the operator wondering why a feed appeared: see
37
+ * link:../../../../docs/CUBE-gaps.adoc[CUBE-gaps.adoc].
38
+ *
39
+ * @param directory - The directory to archive, already resolved.
40
+ * @returns The archive, or null when the run could not complete. Reasons are
41
+ * pushed to the error stack.
42
+ */
43
+ export declare function directory_archive(directory: string): Promise<ArchiveResult | null>;
@@ -0,0 +1,174 @@
1
+ /**
2
+ * @file Archiving a directory so it can leave CUBE as one file.
3
+ *
4
+ * CUBE serves a file's bytes but has no representation of a directory, so a
5
+ * client that wants a copy of a tree must build one. The platform's own answer
6
+ * is a registered pipeline — `pl-dircopy` into a zip plugin — and using it is
7
+ * right: making an archive is a computation, and computations here are
8
+ * plugins. What is wrong is where that orchestration has historically lived.
9
+ * The ChRIS web UI carried it in a saga, so no other client could reuse it,
10
+ * and a presentation layer became an orchestrator. Here it is an intent, in
11
+ * the kernel, reached identically by every surface.
12
+ *
13
+ * The cost is real and worth stating: an archive run creates a feed, so the
14
+ * compute graph records a copy as though it were an analysis step. That is a
15
+ * CUBE gap, filed as issue #233, not a design choice — the day CUBE can hand
16
+ * over a directory, this module is deleted.
17
+ *
18
+ * @module
19
+ */
20
+ import chalk from 'chalk';
21
+ import { errorStack } from '@fnndsc/cumin';
22
+ import { feed_create, files_listRecursive, job_statusFetch, feed_delete, pipeline_readiness, pipeline_run, } from '@fnndsc/salsa';
23
+ import { sink_get } from '../../core/sink.js';
24
+ import { vfs } from '../../lib/vfs/vfs.js';
25
+ /**
26
+ * The registered pipeline that produces the archive.
27
+ *
28
+ * Named rather than assembled: a pipeline is the platform's unit of composed
29
+ * work and is what a deployment actually registers. `CHRIS_ARCHIVE_PIPELINE`
30
+ * overrides it, because the name carries a version stamp and a given CUBE may
31
+ * have registered a different one.
32
+ */
33
+ const ARCHIVE_PIPELINE = process.env['CHRIS_ARCHIVE_PIPELINE'] ?? 'zip v20240311';
34
+ /** How often the archive job's status is checked, in milliseconds. */
35
+ const POLL_INTERVAL_MS = 2000;
36
+ /** How long to wait before giving up on the archive job, in milliseconds. */
37
+ const POLL_TIMEOUT_MS = 15 * 60 * 1000;
38
+ /** Terminal job states, successful or not. */
39
+ const SETTLED = [
40
+ 'finishedSuccessfully', 'finishedWithError', 'cancelled',
41
+ ];
42
+ /**
43
+ * Waits for a plugin instance to reach a terminal state.
44
+ *
45
+ * @param instanceId - The instance to watch.
46
+ * @param label - What to call it while reporting progress.
47
+ * @returns The terminal status, or null when it never settled.
48
+ */
49
+ async function instance_settle(instanceId, label) {
50
+ const deadline = Date.now() + POLL_TIMEOUT_MS;
51
+ while (Date.now() < deadline) {
52
+ const status = await job_statusFetch(instanceId);
53
+ if (status.ok && SETTLED.includes(status.value)) {
54
+ return status.value;
55
+ }
56
+ sink_get().progress_write({
57
+ operation: 'task',
58
+ kind: 'inspection',
59
+ phase: 'working',
60
+ label: `${label} — ${status.ok ? status.value : 'waiting'}`,
61
+ });
62
+ await new Promise((resolve) => { setTimeout(resolve, POLL_INTERVAL_MS); });
63
+ }
64
+ return null;
65
+ }
66
+ /**
67
+ * Archives a directory into a single file inside CUBE.
68
+ *
69
+ * Announces what it is doing, because it is a workaround and a silent one
70
+ * would leave the operator wondering why a feed appeared: see
71
+ * link:../../../../docs/CUBE-gaps.adoc[CUBE-gaps.adoc].
72
+ *
73
+ * @param directory - The directory to archive, already resolved.
74
+ * @returns The archive, or null when the run could not complete. Reasons are
75
+ * pushed to the error stack.
76
+ */
77
+ export async function directory_archive(directory) {
78
+ const name = directory.split('/').filter(Boolean).pop() ?? 'archive';
79
+ const bin = await vfs.data_get('/bin');
80
+ if (!bin.ok || !bin.value.some((item) => item.name.startsWith('pl-dircopy'))) {
81
+ errorStack.stack_push('error', 'pl-dircopy is not registered on this CUBE, so no feed can be created and no directory archived.');
82
+ return null;
83
+ }
84
+ // Ask whether the pipeline can run before creating anything. Preparing it
85
+ // needs no feed, and a feed created for a run that never happens is litter
86
+ // on someone's CUBE that nobody knows to clean up.
87
+ const readiness = await pipeline_readiness(ARCHIVE_PIPELINE);
88
+ if (!readiness.ready) {
89
+ errorStack.stack_push('error', readiness.reason === 'unregistered'
90
+ ? `The '${ARCHIVE_PIPELINE}' pipeline is not registered on this CUBE, so a directory cannot be archived. ` +
91
+ 'Register it from the ChRIS store, or set CHRIS_ARCHIVE_PIPELINE to one that is.'
92
+ : `The '${ARCHIVE_PIPELINE}' pipeline is registered but cannot run here — see the reason above, which is ` +
93
+ 'usually a node not registered on the target compute environment. Fix that, or set ' +
94
+ 'CHRIS_ARCHIVE_PIPELINE to a pipeline that can run.');
95
+ return null;
96
+ }
97
+ sink_get().status_write(`${chalk.yellow('⚠ CUBE cannot hand over a directory, so this runs the ')}` +
98
+ `${chalk.bold(ARCHIVE_PIPELINE)}${chalk.yellow(' pipeline to make an archive first.')}\n` +
99
+ `${chalk.gray(' That creates a feed. See docs/CUBE-gaps.adoc and issue 233.')}\n`);
100
+ const feed = await feed_create([directory], { title: `Archive of ${name}` });
101
+ if (!feed) {
102
+ errorStack.stack_push('error', `Could not create a feed to archive ${directory}.`);
103
+ return null;
104
+ }
105
+ const dircopyId = feed.pluginInstance.data.id;
106
+ const workflow = await pipeline_run(ARCHIVE_PIPELINE, dircopyId);
107
+ if (!workflow.ok || workflow.value.pluginInstanceIds.length === 0) {
108
+ // Readiness passed, so this failed between then and now. Say what was left
109
+ // behind rather than overwriting a reason the stack already carries.
110
+ await feed_discard(feed.id, name);
111
+ return null;
112
+ }
113
+ const archiveInstanceId = workflow.value.pluginInstanceIds[0];
114
+ const status = await instance_settle(archiveInstanceId, `Archiving ${name}`);
115
+ sink_get().progress_write({ operation: 'task', kind: 'inspection', phase: 'complete' });
116
+ if (status === null) {
117
+ errorStack.stack_push('error', `Archiving ${name} did not finish within the time allowed.`);
118
+ // The run may yet finish, so its feed is left alone rather than deleted
119
+ // out from under a job that is still going.
120
+ return null;
121
+ }
122
+ if (status !== 'finishedSuccessfully') {
123
+ errorStack.stack_push('error', `Archiving ${name} ended as ${status}.`);
124
+ await feed_discard(feed.id, name);
125
+ return null;
126
+ }
127
+ return archiveOutput_find(feed.id, dircopyId, archiveInstanceId, name);
128
+ }
129
+ /**
130
+ * Removes a feed created for an archive run that then failed.
131
+ *
132
+ * The feed exists only to root the archive. Left behind it is litter in
133
+ * someone's feed list and a copy in the compute graph asserting an analysis
134
+ * that produced nothing — so it is removed, and named when it cannot be.
135
+ *
136
+ * @param feedId - The feed to discard.
137
+ * @param name - The directory's name, for the message.
138
+ */
139
+ async function feed_discard(feedId, name) {
140
+ const removed = await feed_delete(feedId);
141
+ errorStack.stack_push('error', removed
142
+ ? `Archiving ${name} failed; the feed it created was removed.`
143
+ : `Archiving ${name} failed, and feed ${feedId} could not be removed. Delete it when convenient.`);
144
+ }
145
+ /**
146
+ * Locates the file an archive run produced.
147
+ *
148
+ * The output directory is listed rather than its path reconstructed: the
149
+ * archive's name is the pipeline's business, and a client that guesses it
150
+ * breaks the day the pipeline changes.
151
+ *
152
+ * @param feedId - The feed the run created.
153
+ * @param dircopyId - The `pl-dircopy` instance that rooted it.
154
+ * @param archiveInstanceId - The instance that produced the archive.
155
+ * @param name - The directory's name, for the error message.
156
+ * @returns The archive, or null when the output directory held no file.
157
+ */
158
+ async function archiveOutput_find(feedId, dircopyId, archiveInstanceId, name) {
159
+ const outputRoot = `feeds/feed_${feedId}/pl-dircopy_${dircopyId}`;
160
+ const items = await files_listRecursive(outputRoot);
161
+ const produced = items.filter((item) => item.path.includes(`_${archiveInstanceId}/data/`) && item.type !== 'dir');
162
+ if (produced.length === 0) {
163
+ errorStack.stack_push('error', `The archive of ${name} produced no file.`);
164
+ return null;
165
+ }
166
+ const archive = produced[0];
167
+ const filename = archive.path.split('/').filter(Boolean).pop() ?? `${name}.zip`;
168
+ return {
169
+ path: archive.path,
170
+ filename,
171
+ ...(typeof archive.size === 'number' ? { size: archive.size } : {}),
172
+ };
173
+ }
174
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/builtins/fs/archive.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { type CommandEnvelope } from '@fnndsc/cumin';
2
2
  /**
3
- * Downloads a remote ChRIS file or directory to the local filesystem.
3
+ * Downloads a remote ChRIS file or directory to the local filesystem, or hands
4
+ * it to the surface when the engine's disk is not the operator's.
4
5
  *
5
6
  * @param args - [remotePathOrGlob, localPath] plus optional -f/--force to overwrite.
6
7
  * @returns An envelope carrying the download summary.
@@ -5,11 +5,13 @@
5
5
  import path from 'path';
6
6
  import chalk from 'chalk';
7
7
  import { files_downloadWithProgress as chefs_download_cmd, files_downloadManyWithProgress as chefs_downloadMany_cmd, bytes_format } from '@fnndsc/chili/commands/fs/download.js';
8
- import { envelope_ok, envelope_error } from '@fnndsc/cumin';
8
+ import { envelope_ok, envelope_error, errorStack } from '@fnndsc/cumin';
9
9
  import { sink_get } from '../../core/sink.js';
10
10
  import { shellArguments_pathnameExpanded } from '../../lib/parser.js';
11
11
  import { path_resolve } from '../utils.js';
12
12
  import { surface_get } from '../../core/surface.js';
13
+ import { files_path_isDirectory, files_listRecursive } from '@fnndsc/salsa';
14
+ import { directory_archive } from './archive.js';
13
15
  /**
14
16
  * Asks the issuing surface to confirm a local download overwrite or merge.
15
17
  *
@@ -24,7 +26,100 @@ async function downloadConfirmation_request(message) {
24
26
  }
25
27
  }
26
28
  /**
27
- * Downloads a remote ChRIS file or directory to the local filesystem.
29
+ * Hands each requested file to the surface, for a session whose engine runs
30
+ * somewhere its operator is not.
31
+ *
32
+ * Only the request travels: the surface fetches the bytes itself, through
33
+ * whichever route suits it. Multiple sources become multiple deliveries, since
34
+ * a surface with no filesystem — a browser — has no directory to fill.
35
+ *
36
+ * @param surface - The surface running this command.
37
+ * @param sourceArgs - The requested source paths, before resolution.
38
+ * @param destination - Where the operator asked for it. A surface with a
39
+ * filesystem treats an existing directory as a place to fill and anything
40
+ * else as the filename; a surface without one ignores it.
41
+ * @returns An envelope summarising where the files landed.
42
+ */
43
+ async function surfaceDownload_run(surface, sourceArgs, destination) {
44
+ if (!surface.capabilities.fileDelivery) {
45
+ process.exitCode = 1;
46
+ return envelope_error('', undefined, `${chalk.red('download: this surface cannot receive a file, and the engine will not write to its own host.')}\n`);
47
+ }
48
+ const sources = await Promise.all(sourceArgs.map(path_resolve));
49
+ // A directory has no bytes to hand over, and what to do about that depends on
50
+ // what the surface has. A shell — remote or not — owns a filesystem, so it
51
+ // receives the tree file by file and gets the folder it asked for. A browser
52
+ // owns no directory and can only take files one at a time, so several hundred
53
+ // DICOM instances would be several hundred saves; for that surface alone the
54
+ // directory is archived into one CUBE file first. See issue #233 for why an
55
+ // archive is a workaround rather than a feature.
56
+ const targets = [];
57
+ for (const source of sources) {
58
+ if (!(await files_path_isDirectory(source))) {
59
+ targets.push({ path: source, filename: source.split('/').filter(Boolean).pop() ?? 'download' });
60
+ continue;
61
+ }
62
+ if (surface.capabilities.localFilesystem) {
63
+ const items = await files_listRecursive(source);
64
+ for (const item of items) {
65
+ if (item.type === 'dir')
66
+ continue;
67
+ targets.push({
68
+ path: item.path,
69
+ // Keep the tree: a surface with directories reproduces the shape
70
+ // under the destination rather than flattening it.
71
+ filename: item.path.startsWith(source)
72
+ ? item.path.slice(source.length).replace(/^\/+/, '')
73
+ : (item.path.split('/').filter(Boolean).pop() ?? 'download'),
74
+ ...(typeof item.size === 'number' ? { size: item.size } : {}),
75
+ });
76
+ }
77
+ continue;
78
+ }
79
+ const archived = await directory_archive(source);
80
+ if (!archived) {
81
+ process.exitCode = 1;
82
+ const reasons = errorStack.stack_getAll?.()
83
+ .map((entry) => typeof entry === 'string' ? entry : (entry.message ?? String(entry)))
84
+ .join('\n ') ?? '';
85
+ return envelope_error('', undefined, `${chalk.red(`download: could not archive ${source}.`)}\n${reasons ? ` ${chalk.red(reasons)}\n` : ''}`);
86
+ }
87
+ targets.push(archived);
88
+ }
89
+ const delivered = [];
90
+ const failed = [];
91
+ for (const target of targets) {
92
+ const filename = target.filename;
93
+ try {
94
+ const result = await surface.fileDeliver({
95
+ path: target.path,
96
+ filename,
97
+ destination,
98
+ ...(target.size !== undefined ? { size: target.size } : {}),
99
+ });
100
+ delivered.push(`${chalk.gray(` ${filename} → ${result.location}`)} ${chalk.gray(`(${bytes_format(result.bytes)})`)}`);
101
+ }
102
+ catch (error) {
103
+ const reason = error instanceof Error ? error.message : String(error);
104
+ failed.push(`${chalk.red(` ${filename}: ${reason}`)}`);
105
+ }
106
+ }
107
+ let rendered = '\n';
108
+ if (failed.length === 0) {
109
+ rendered += `${chalk.green(`✓ Delivered ${delivered.length} file(s)`)}\n`;
110
+ }
111
+ else {
112
+ rendered += `${chalk.yellow(`⚠ Delivered ${delivered.length} file(s), ${failed.length} failed`)}\n`;
113
+ process.exitCode = 1;
114
+ }
115
+ rendered += [...delivered, ...failed].join('\n');
116
+ if (delivered.length > 0 || failed.length > 0)
117
+ rendered += '\n';
118
+ return failed.length === 0 ? envelope_ok(rendered) : envelope_error(rendered, undefined, '');
119
+ }
120
+ /**
121
+ * Downloads a remote ChRIS file or directory to the local filesystem, or hands
122
+ * it to the surface when the engine's disk is not the operator's.
28
123
  *
29
124
  * @param args - [remotePathOrGlob, localPath] plus optional -f/--force to overwrite.
30
125
  * @returns An envelope carrying the download summary.
@@ -45,6 +140,17 @@ export async function builtin_download(args) {
45
140
  const sourceWasExpanded = positionalIndexes
46
141
  .slice(0, -1)
47
142
  .some((index) => shellArguments_pathnameExpanded(args, index));
143
+ // A path resolved here is a path on the *engine's* disk. That is the
144
+ // operator's disk only when a local shell hosts the engine in its own
145
+ // process; under a daemon it is a machine nobody attending the session is
146
+ // sitting at. So when the surface does not share the engine's filesystem,
147
+ // the file is handed to the surface, which puts it somewhere its operator
148
+ // can actually reach — the client's disk for a remote shell, the download
149
+ // manager for a browser.
150
+ const surface = surface_get();
151
+ if (!surface.capabilities.engineFilesystem) {
152
+ return surfaceDownload_run(surface, sourceArgs, localPathArg);
153
+ }
48
154
  const targetLocal = path.resolve(localPathArg);
49
155
  try {
50
156
  const progress = {
@@ -1 +1 @@
1
- {"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/builtins/fs/download.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/builtins/fs/download.ts"],"names":[],"mappings":"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"}
@@ -52,20 +52,38 @@ function pullEvents_make() {
52
52
  return {
53
53
  task: (task, status, phase) => pullProgress_emit(task, status, phase),
54
54
  retryRound: (attempt, retryMax, count) => sink_dataLine(chalk.yellow(`\nRetry ${attempt}/${retryMax} for ${count} unconfirmed series...`)),
55
+ // Said out loud: a silent reconnection during a long pull is
56
+ // indistinguishable from a stall, and this one takes seconds.
57
+ reconnect: (attempt, maxAttempts, watching) => sink_dataLine(chalk.gray(` Retrieve watch reconnecting (${attempt}/${maxAttempts}) — ${watching} series still in flight; ` +
58
+ 'the retrieves themselves are unaffected.')),
55
59
  };
56
60
  }
57
- function pullProgress_complete(allTasks, failed) {
61
+ /**
62
+ * Closes the pull's progress channel with an honest terminal state.
63
+ *
64
+ * A pull that lost its watch is neither a success nor a failure: the surface
65
+ * should stop showing work in flight without claiming an outcome nobody
66
+ * observed.
67
+ *
68
+ * @param allTasks - Every task this pull covered.
69
+ * @param failed - Whether any series genuinely failed or was never fired.
70
+ * @param unconfirmed - How many series the watch stopped following.
71
+ */
72
+ function pullProgress_complete(allTasks, failed, unconfirmed) {
58
73
  const done = allTasks.filter((t) => t.status === 'pulled').length;
74
+ const label = failed
75
+ ? 'Pull incomplete'
76
+ : (unconfirmed > 0 ? `Pull ended — ${unconfirmed} series unconfirmed` : 'Pull complete');
59
77
  sink_get().progress_write({
60
78
  operation: 'pull',
61
79
  kind: 'retrieve',
62
80
  phase: failed ? 'failed' : 'complete',
63
- label: failed ? 'Pull incomplete' : 'Pull complete',
81
+ label,
64
82
  current: done,
65
83
  total: allTasks.length,
66
84
  percent: allTasks.length > 0 ? (done / allTasks.length) * 100 : 100,
67
85
  unit: 'series',
68
- status: failed ? 'error' : 'done',
86
+ status: failed ? 'error' : (unconfirmed > 0 ? 'unconfirmed' : 'done'),
69
87
  });
70
88
  }
71
89
  /**
@@ -132,15 +150,19 @@ async function paths_resolveToVfs(paths, pacsserver) {
132
150
  function pullSummary_print(allTasks, totalFiringErrors) {
133
151
  const pulled = allTasks.filter((t) => t.status === 'pulled').length;
134
152
  const totalCount = allTasks.length;
135
- const failures = allTasks.filter((t) => t.status !== 'pulled');
136
- if (failures.length === 0) {
153
+ // Not seeing the end of a retrieve is not the same as it failing. The PACS
154
+ // keeps pushing and CUBE keeps registering after a watch drops, so a series
155
+ // the client lost sight of is reported as unknown rather than lost — and it
156
+ // does not fail the command, because nothing here knows that it failed.
157
+ const unconfirmed = allTasks.filter((t) => t.status === 'unconfirmed');
158
+ const failures = allTasks.filter((t) => t.status !== 'pulled' && t.status !== 'unconfirmed');
159
+ if (failures.length === 0 && unconfirmed.length === 0) {
137
160
  sink_dataLine(chalk.green(`\n✓ ${pulled}/${totalCount} series pulled successfully.`));
138
161
  }
139
162
  else {
140
- sink_dataLine(chalk.yellow(`\n⚠ ${pulled}/${totalCount} series complete.`));
141
- // An unfired series is permanent loss for this run (no retrieve exists,
142
- // nothing will ever arrive); a watch failure is usually cosmetic — the
143
- // PACS keeps pushing and CUBE keeps registering after detach.
163
+ sink_dataLine(chalk.yellow(`\n⚠ ${pulled}/${totalCount} series confirmed.`));
164
+ // An unfired series is permanent loss for this run: no retrieve exists, so
165
+ // nothing will ever arrive for it.
144
166
  for (const f of failures) {
145
167
  if (f.status === 'unfired') {
146
168
  sink_dataLine(chalk.red(` ✗ ${f.label} [FAILED TO FIRE — will not arrive; re-run pull]`));
@@ -149,13 +171,23 @@ function pullSummary_print(allTasks, totalFiringErrors) {
149
171
  sink_dataLine(chalk.yellow(` ✗ ${f.label} [${f.status.toUpperCase()} — verify with: pacs status]`));
150
172
  }
151
173
  }
152
- process.exitCode = 1;
174
+ for (const u of unconfirmed) {
175
+ sink_dataLine(chalk.gray(` ? ${u.label} [WATCH ENDED — may still be arriving; check with: pacs status]`));
176
+ }
177
+ if (unconfirmed.length > 0) {
178
+ sink_dataLine(chalk.gray(` The retrieve watch ended before ${unconfirmed.length} series finished. ` +
179
+ 'That is a lost connection, not a failed retrieve.'));
180
+ }
181
+ // Only a real failure fails the command.
182
+ if (failures.length > 0) {
183
+ process.exitCode = 1;
184
+ }
153
185
  }
154
186
  if (totalFiringErrors > 0) {
155
187
  sink_dataLine(chalk.red(` ${totalFiringErrors} retrieve(s) were never fired — re-run pull to fetch them.`));
156
188
  process.exitCode = 1;
157
189
  }
158
- pullProgress_complete(allTasks, failures.length > 0 || totalFiringErrors > 0);
190
+ pullProgress_complete(allTasks, failures.length > 0 || totalFiringErrors > 0, unconfirmed.length);
159
191
  }
160
192
  /**
161
193
  * Resolves the exact CUBE directories materialised by a completed pull.
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/builtins/fs/pull.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/builtins/fs/pull.ts"],"names":[],"mappings":"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"}
@@ -658,6 +658,11 @@ export const helpText = {
658
658
  description: 'Print the currently authenticated ChRIS username',
659
659
  examples: ['whoami'],
660
660
  },
661
+ version: {
662
+ usage: 'version',
663
+ description: 'Report the versions of the mise stack layers running this session',
664
+ examples: ['version'],
665
+ },
661
666
  id: {
662
667
  usage: 'id',
663
668
  description: 'Print the current CUBE user as a Unix-style UID, projected primary GID, and complete list of CUBE group memberships.',