@fnndsc/brasa 0.9.2 → 0.10.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 (153) hide show
  1. package/dist/buildinfo.json +1 -0
  2. package/dist/builtins/argumentTokens.d.ts +18 -0
  3. package/dist/builtins/argumentTokens.js +58 -0
  4. package/dist/builtins/argumentTokens.js.map +1 -0
  5. package/dist/builtins/executable.d.ts +3 -7
  6. package/dist/builtins/executable.js +32 -29
  7. package/dist/builtins/executable.js.map +1 -1
  8. package/dist/builtins/feedCreation.d.ts +23 -0
  9. package/dist/builtins/feedCreation.js +45 -0
  10. package/dist/builtins/feedCreation.js.map +1 -0
  11. package/dist/builtins/fs/cat.args.d.ts +36 -0
  12. package/dist/builtins/fs/cat.args.js +63 -0
  13. package/dist/builtins/fs/cat.args.js.map +1 -0
  14. package/dist/builtins/fs/cat.d.ts +2 -2
  15. package/dist/builtins/fs/cat.js +222 -101
  16. package/dist/builtins/fs/cat.js.map +1 -1
  17. package/dist/builtins/fs/cd.js +41 -5
  18. package/dist/builtins/fs/cd.js.map +1 -1
  19. package/dist/builtins/fs/cp.js +3 -2
  20. package/dist/builtins/fs/cp.js.map +1 -1
  21. package/dist/builtins/fs/download.d.ts +1 -1
  22. package/dist/builtins/fs/download.js +52 -13
  23. package/dist/builtins/fs/download.js.map +1 -1
  24. package/dist/builtins/fs/du.js +15 -1
  25. package/dist/builtins/fs/du.js.map +1 -1
  26. package/dist/builtins/fs/ls.js +10 -1
  27. package/dist/builtins/fs/ls.js.map +1 -1
  28. package/dist/builtins/fs/mv.js +7 -3
  29. package/dist/builtins/fs/mv.js.map +1 -1
  30. package/dist/builtins/fs/pull.args.d.ts +14 -1
  31. package/dist/builtins/fs/pull.args.js +72 -9
  32. package/dist/builtins/fs/pull.args.js.map +1 -1
  33. package/dist/builtins/fs/pull.d.ts +1 -0
  34. package/dist/builtins/fs/pull.js +191 -259
  35. package/dist/builtins/fs/pull.js.map +1 -1
  36. package/dist/builtins/fs/rm.js +4 -0
  37. package/dist/builtins/fs/rm.js.map +1 -1
  38. package/dist/builtins/fs/tree.js +7 -3
  39. package/dist/builtins/fs/tree.js.map +1 -1
  40. package/dist/builtins/fs/upload.js +29 -2
  41. package/dist/builtins/fs/upload.js.map +1 -1
  42. package/dist/builtins/help.d.ts +7 -0
  43. package/dist/builtins/help.js +144 -36
  44. package/dist/builtins/help.js.map +1 -1
  45. package/dist/builtins/index.d.ts +1 -0
  46. package/dist/builtins/index.js +1 -0
  47. package/dist/builtins/index.js.map +1 -1
  48. package/dist/builtins/net/pacs.d.ts +1 -0
  49. package/dist/builtins/net/pacs.js +5 -1
  50. package/dist/builtins/net/pacs.js.map +1 -1
  51. package/dist/builtins/net/pacsUtils.d.ts +5 -4
  52. package/dist/builtins/net/pacsUtils.js +12 -32
  53. package/dist/builtins/net/pacsUtils.js.map +1 -1
  54. package/dist/builtins/net/query.js +4 -1
  55. package/dist/builtins/net/query.js.map +1 -1
  56. package/dist/builtins/net/status.d.ts +14 -0
  57. package/dist/builtins/net/status.js +210 -0
  58. package/dist/builtins/net/status.js.map +1 -0
  59. package/dist/builtins/pluginExecute.d.ts +3 -2
  60. package/dist/builtins/pluginExecute.js +41 -70
  61. package/dist/builtins/pluginExecute.js.map +1 -1
  62. package/dist/builtins/pluginSelector.d.ts +15 -0
  63. package/dist/builtins/pluginSelector.js +21 -0
  64. package/dist/builtins/pluginSelector.js.map +1 -0
  65. package/dist/builtins/proc.js +106 -4
  66. package/dist/builtins/proc.js.map +1 -1
  67. package/dist/builtins/res/compute.js +8 -3
  68. package/dist/builtins/res/compute.js.map +1 -1
  69. package/dist/builtins/res/group.d.ts +1 -1
  70. package/dist/builtins/res/group.js +122 -5
  71. package/dist/builtins/res/group.js.map +1 -1
  72. package/dist/builtins/res/pipeline.args.d.ts +4 -0
  73. package/dist/builtins/res/pipeline.args.js +63 -12
  74. package/dist/builtins/res/pipeline.args.js.map +1 -1
  75. package/dist/builtins/res/pipeline.d.ts +3 -1
  76. package/dist/builtins/res/pipeline.js +155 -60
  77. package/dist/builtins/res/pipeline.js.map +1 -1
  78. package/dist/builtins/res/pipeline.manifest.d.ts +15 -0
  79. package/dist/builtins/res/pipeline.manifest.js +93 -0
  80. package/dist/builtins/res/pipeline.manifest.js.map +1 -0
  81. package/dist/builtins/res/plugin.js +14 -7
  82. package/dist/builtins/res/plugin.js.map +1 -1
  83. package/dist/builtins/res/user.d.ts +8 -0
  84. package/dist/builtins/res/user.js +87 -0
  85. package/dist/builtins/res/user.js.map +1 -0
  86. package/dist/builtins/store.js +24 -3
  87. package/dist/builtins/store.js.map +1 -1
  88. package/dist/builtins/sys/fortune.d.ts +9 -0
  89. package/dist/builtins/sys/fortune.js +16 -1
  90. package/dist/builtins/sys/fortune.js.map +1 -1
  91. package/dist/builtins/sys/whoami.d.ts +13 -1
  92. package/dist/builtins/sys/whoami.js +47 -2
  93. package/dist/builtins/sys/whoami.js.map +1 -1
  94. package/dist/builtins/utils.d.ts +14 -1
  95. package/dist/builtins/utils.js +13 -3
  96. package/dist/builtins/utils.js.map +1 -1
  97. package/dist/builtins/wildcard.d.ts +31 -0
  98. package/dist/builtins/wildcard.js +112 -50
  99. package/dist/builtins/wildcard.js.map +1 -1
  100. package/dist/command-keys.js +2 -1
  101. package/dist/command-keys.js.map +1 -1
  102. package/dist/core/cancellation.d.ts +28 -0
  103. package/dist/core/cancellation.js +70 -0
  104. package/dist/core/cancellation.js.map +1 -0
  105. package/dist/core/dispatch.d.ts +1 -8
  106. package/dist/core/dispatch.js +82 -82
  107. package/dist/core/dispatch.js.map +1 -1
  108. package/dist/core/elevation.d.ts +35 -0
  109. package/dist/core/elevation.js +77 -0
  110. package/dist/core/elevation.js.map +1 -0
  111. package/dist/core/engine.d.ts +12 -0
  112. package/dist/core/engine.js +35 -8
  113. package/dist/core/engine.js.map +1 -1
  114. package/dist/core/preprocess.d.ts +11 -4
  115. package/dist/core/preprocess.js +43 -10
  116. package/dist/core/preprocess.js.map +1 -1
  117. package/dist/core/progress.d.ts +15 -5
  118. package/dist/core/progress.js +14 -0
  119. package/dist/core/progress.js.map +1 -1
  120. package/dist/core/promptContext.d.ts +3 -5
  121. package/dist/core/promptContext.js +9 -2
  122. package/dist/core/promptContext.js.map +1 -1
  123. package/dist/core/sink.d.ts +9 -0
  124. package/dist/core/sink.js +23 -3
  125. package/dist/core/sink.js.map +1 -1
  126. package/dist/core/surface.d.ts +14 -0
  127. package/dist/core/surface.js +5 -0
  128. package/dist/core/surface.js.map +1 -1
  129. package/dist/core/version.d.ts +34 -0
  130. package/dist/core/version.js +51 -0
  131. package/dist/core/version.js.map +1 -1
  132. package/dist/index.d.ts +1 -0
  133. package/dist/index.js +1 -0
  134. package/dist/index.js.map +1 -1
  135. package/dist/lib/completer/index.js +39 -1
  136. package/dist/lib/completer/index.js.map +1 -1
  137. package/dist/lib/parser.d.ts +75 -2
  138. package/dist/lib/parser.js +158 -15
  139. package/dist/lib/parser.js.map +1 -1
  140. package/dist/lib/vfs/providers/binEntry.d.ts +20 -0
  141. package/dist/lib/vfs/providers/binEntry.js +47 -0
  142. package/dist/lib/vfs/providers/binEntry.js.map +1 -0
  143. package/dist/lib/vfs/providers/static.js +1 -0
  144. package/dist/lib/vfs/providers/static.js.map +1 -1
  145. package/dist/lib/vfs/providers/static_content.js +5 -36
  146. package/dist/lib/vfs/providers/static_content.js.map +1 -1
  147. package/dist/lib/vfs/vfs.d.ts +7 -0
  148. package/dist/lib/vfs/vfs.js +25 -0
  149. package/dist/lib/vfs/vfs.js.map +1 -1
  150. package/dist/session/index.d.ts +18 -0
  151. package/dist/session/index.js +29 -1
  152. package/dist/session/index.js.map +1 -1
  153. package/package.json +10 -5
@@ -11,28 +11,21 @@
11
11
  * @module
12
12
  */
13
13
  import chalk from 'chalk';
14
- import WebSocket from 'ws';
15
- import { pacsQueries_create, pacsRetrieve_create, envelope_ok, envelope_error, } from '@fnndsc/cumin';
14
+ import { envelope_ok, envelope_error, procCache_get, seriesStorage_resolve, } from '@fnndsc/cumin';
15
+ import { feed_create, plugin_run, retrieveTask_make, retrieveTasks_fire, retrieveTasks_skipComplete, retrieve_fireAndWatch, retrieve_confirmLoop, retrieveProgress_classify, } from '@fnndsc/salsa';
16
16
  import { session } from '../../session/index.js';
17
17
  import { args_checkHasHelpFlag, help_render } from '../help.js';
18
18
  import { pacsQuery_createAndWait, queryExpr_parse } from '../net/query.js';
19
19
  import { spinner } from '../../lib/spinner.js';
20
20
  import { path_resolve } from '../utils.js';
21
- import { pacs_seriesCollect, pacsServer_resolve, series_cubePathGet, } from '../net/pacsUtils.js';
21
+ import { pacs_seriesCollect, pacsServer_resolve, } from '../net/pacsUtils.js';
22
22
  import { builtin_cubepath } from '../net/cubepath.js';
23
23
  import { pullArgs_parse } from './pull.args.js';
24
24
  import { sink_get, sink_dataLine, sink_errLine } from '../../core/sink.js';
25
- const STALL_TIMEOUT_MS = 30_000;
26
- const NO_ACTIVITY_TIMEOUT_MS = 15_000;
27
- const SERIES_TIMEOUT_MS = 5 * 60 * 1_000;
28
- const CHECKER_INTERVAL_MS = 2_000;
29
- function progressStatus_fromSeries(status, lonkConfirmed) {
30
- if (status === 'pulled')
31
- return lonkConfirmed ? 'done' : 'unconfirmed';
32
- if (status === 'pending' || status === 'pulling')
33
- return 'running';
34
- return status;
35
- }
25
+ import { newFeed_cacheAdd } from '../feedCreation.js';
26
+ import { builtin_pipeline } from '../res/pipeline.js';
27
+ import { executableArguments_parse } from '../argumentTokens.js';
28
+ import { pluginSelector_normalize } from '../pluginSelector.js';
36
29
  function pullProgress_emit(task, status, phase = 'watching') {
37
30
  const current = task.actualFiles;
38
31
  const total = task.expectedFiles > 0 ? Math.max(task.expectedFiles, current, 1) : Math.max(current, 1);
@@ -46,9 +39,21 @@ function pullProgress_emit(task, status, phase = 'watching') {
46
39
  total,
47
40
  percent: total > 0 ? Math.min(100, (current / total) * 100) : undefined,
48
41
  unit: 'files',
49
- status: status ?? progressStatus_fromSeries(task.status, task.lonkConfirmed),
42
+ status: status ?? retrieveProgress_classify(task),
50
43
  });
51
44
  }
45
+ /**
46
+ * Engine progress events rendered onto this surface's structured sink, plus
47
+ * the retry-round banner line.
48
+ *
49
+ * @returns Event callbacks for the retrieve engine.
50
+ */
51
+ function pullEvents_make() {
52
+ return {
53
+ task: (task, status, phase) => pullProgress_emit(task, status, phase),
54
+ retryRound: (attempt, retryMax, count) => sink_dataLine(chalk.yellow(`\nRetry ${attempt}/${retryMax} for ${count} unconfirmed series...`)),
55
+ };
56
+ }
52
57
  function pullProgress_complete(allTasks, failed) {
53
58
  const done = allTasks.filter((t) => t.status === 'pulled').length;
54
59
  sink_get().progress_write({
@@ -64,215 +69,33 @@ function pullProgress_complete(allTasks, failed) {
64
69
  });
65
70
  }
66
71
  /**
67
- * Walks a VFS path and returns SeriesPullTask array, delegating collection to pacsUtils.
72
+ * Walks a VFS path and returns RetrieveTask array, delegating collection to pacsUtils.
68
73
  *
69
74
  * @param pathStr - Absolute VFS path to a query, study, or series directory.
70
75
  * @param fallbackPacsName - PACS identifier used when RetrieveAETitle is absent.
71
- * @returns Array of SeriesPullTask ready for firing.
76
+ * @returns Array of RetrieveTask ready for firing.
72
77
  */
73
78
  async function path_seriesCollect(pathStr, fallbackPacsName) {
74
79
  const infos = await pacs_seriesCollect(pathStr, fallbackPacsName, 'pull');
75
- return infos.map((info) => ({
80
+ return infos.map((info) => retrieveTask_make({
76
81
  label: info.label,
77
82
  seriesUID: info.seriesUID,
78
83
  studyUID: info.studyUID,
79
84
  pacsName: info.pacsName,
80
85
  expectedFiles: info.expectedFiles,
81
- syntheticQueryId: null,
82
- retrieveId: null,
83
- status: 'pending',
84
- actualFiles: 0,
85
- lastProgressFiles: 0,
86
- lastProgressTime: Date.now(),
87
- startTime: 0,
88
- lonkConfirmed: false,
89
- cubePathDir: null,
90
86
  }));
91
87
  }
92
- /**
93
- * Creates a synthetic PACSQuery + PACSRetrieve for a single series.
94
- *
95
- * @param task - The pull task to fire (mutated in place: syntheticQueryId, retrieveId, startTime).
96
- * @param pacsserver - Resolved PACS server ID string.
97
- */
98
- async function task_fire(task, pacsserver) {
99
- const queryData = {
100
- // CUBE rejects duplicate query titles per user, which used to make a
101
- // re-pull of the same series fail; a timestamp keeps titles unique.
102
- title: `pull_${task.seriesUID}_${Date.now().toString(36)}`,
103
- query: JSON.stringify({
104
- SeriesInstanceUID: task.seriesUID,
105
- StudyInstanceUID: task.studyUID,
106
- }),
107
- execute: false,
108
- };
109
- const queryResult = await pacsQueries_create(pacsserver, queryData);
110
- if (!queryResult.ok) {
111
- task.status = 'error';
112
- return;
113
- }
114
- const syntheticQueryId = queryResult.value.id;
115
- const retrieveResult = await pacsRetrieve_create(syntheticQueryId);
116
- if (!retrieveResult.ok) {
117
- task.status = 'error';
118
- return;
119
- }
120
- task.syntheticQueryId = syntheticQueryId;
121
- task.retrieveId = retrieveResult.value.id;
122
- task.startTime = Date.now();
123
- }
124
- /**
125
- * Constructs a LONK WebSocket URL from a download token response.
126
- *
127
- * @param tokenUrl - The download token resource URL.
128
- * @param token - The actual download token string.
129
- * @returns WebSocket URL for the LONK endpoint.
130
- */
131
- function lonkWsUrl_build(tokenUrl, token) {
132
- return tokenUrl
133
- .replace(/^http(s?):\/\//, (_m, s) => `ws${s}://`)
134
- .replace(/v1\/downloadtokens\/\d+\//, `v1/pacs/ws/?token=${token}`);
135
- }
136
- /**
137
- * Opens a LONK WebSocket, fires retrieves for the given tasks, and blocks until all
138
- * tasks reach a terminal state. Mutates each task's status, actualFiles, and lonkConfirmed.
139
- *
140
- * @param tasks - Tasks to subscribe, fire, and watch.
141
- * @param pacsserver - Resolved PACS server identifier.
142
- * @param client - Authenticated ChRIS API client.
143
- * @returns Number of tasks that failed to fire their retrieve.
144
- */
145
- async function tasks_pullWatch(tasks, pacsserver, client) {
146
- const tokenClient = client;
147
- const downloadToken = await tokenClient.createDownloadToken();
148
- const tokenStr = String(downloadToken.data.token ?? '');
149
- const wsUrl = lonkWsUrl_build(downloadToken.url, tokenStr);
150
- const ws = new WebSocket(wsUrl);
151
- await new Promise((openResolve, openReject) => {
152
- ws.once('open', openResolve);
153
- ws.once('error', (err) => openReject(err));
154
- });
155
- for (const t of tasks) {
156
- ws.send(JSON.stringify({
157
- SeriesInstanceUID: t.seriesUID,
158
- pacs_name: t.pacsName,
159
- action: 'subscribe',
160
- }));
161
- }
162
- await Promise.all(tasks.map((t) => task_fire(t, pacsserver)));
163
- const fired = tasks.filter((t) => t.status !== 'error');
164
- const firingErrors = tasks.length - fired.length;
165
- if (fired.length === 0) {
166
- for (const t of tasks) {
167
- if (t.status === 'error')
168
- pullProgress_emit(t, 'error');
169
- }
170
- ws.close();
171
- return firingErrors;
172
- }
173
- for (const t of tasks) {
174
- pullProgress_emit(t, t.status === 'error' ? 'error' : 'running');
175
- }
176
- const taskByUID = new Map(tasks.map((t) => [t.seriesUID, t]));
177
- await new Promise((resolve) => {
178
- let resolved = false;
179
- const done = () => {
180
- if (resolved)
181
- return;
182
- resolved = true;
183
- clearInterval(checker);
184
- try {
185
- ws.close();
186
- }
187
- catch { /* ignore */ }
188
- resolve();
189
- };
190
- const checker = setInterval(() => {
191
- const now = Date.now();
192
- let allTerminal = true;
193
- for (const t of fired) {
194
- if (t.status === 'pulled' || t.status === 'error' || t.status === 'stalled' || t.status === 'timeout') {
195
- continue;
196
- }
197
- allTerminal = false;
198
- if (t.startTime > 0 && now - t.startTime > SERIES_TIMEOUT_MS) {
199
- t.status = 'timeout';
200
- pullProgress_emit(t, 'timeout');
201
- continue;
202
- }
203
- if (t.actualFiles > 0 && now - t.lastProgressTime > STALL_TIMEOUT_MS) {
204
- t.status = 'stalled';
205
- pullProgress_emit(t, 'stalled');
206
- continue;
207
- }
208
- if (t.startTime > 0 && t.actualFiles === 0 && now - t.startTime > NO_ACTIVITY_TIMEOUT_MS) {
209
- t.status = 'pulled';
210
- t.lonkConfirmed = false;
211
- pullProgress_emit(t, 'unconfirmed');
212
- continue;
213
- }
214
- }
215
- if (allTerminal)
216
- done();
217
- }, CHECKER_INTERVAL_MS);
218
- ws.on('message', (data) => {
219
- try {
220
- const outer = JSON.parse(data.toString());
221
- const seriesUID = outer.SeriesInstanceUID;
222
- const message = outer.message;
223
- if (!seriesUID || !message)
224
- return;
225
- const t = taskByUID.get(seriesUID);
226
- if (!t)
227
- return;
228
- if ('ndicom' in message && typeof message.ndicom === 'number') {
229
- const n = message.ndicom;
230
- t.actualFiles = n;
231
- t.lastProgressFiles = n;
232
- t.lastProgressTime = Date.now();
233
- if (t.status === 'pending')
234
- t.status = 'pulling';
235
- pullProgress_emit(t, 'running');
236
- }
237
- else if ('done' in message && message.done === true) {
238
- t.status = 'pulled';
239
- t.lonkConfirmed = true;
240
- if (t.actualFiles < t.expectedFiles)
241
- t.actualFiles = t.expectedFiles;
242
- pullProgress_emit(t, 'done');
243
- }
244
- else if ('error' in message && typeof message.error === 'string') {
245
- t.status = 'error';
246
- pullProgress_emit(t, 'error');
247
- }
248
- }
249
- catch {
250
- // Malformed message — ignore
251
- }
252
- });
253
- ws.on('error', () => {
254
- for (const t of fired) {
255
- if (t.status === 'pending' || t.status === 'pulling') {
256
- t.status = 'error';
257
- pullProgress_emit(t, 'error');
258
- }
259
- }
260
- done();
261
- });
262
- ws.on('close', () => { done(); });
263
- });
264
- return firingErrors;
265
- }
266
88
  /**
267
89
  * Resolves raw path/query arguments to concrete `/net/pacs` VFS paths,
268
90
  * running PACS queries for query expressions.
269
91
  *
270
92
  * @param paths - Raw path or query-expression operands.
271
93
  * @param pacsserver - The resolved PACS server identifier.
272
- * @returns The resolved VFS paths.
94
+ * @returns Resolved VFS paths and whether every operand resolved.
273
95
  */
274
96
  async function paths_resolveToVfs(paths, pacsserver) {
275
97
  const resolvedPaths = [];
98
+ let complete = true;
276
99
  for (const rawPath of paths) {
277
100
  const p = rawPath.startsWith('/') ? rawPath : await path_resolve(rawPath);
278
101
  if (p.startsWith('/net/pacs')) {
@@ -290,59 +113,15 @@ async function paths_resolveToVfs(paths, pacsserver) {
290
113
  }
291
114
  else {
292
115
  sink_errLine(chalk.red(`pull: Query failed for: ${rawPath}`));
116
+ complete = false;
293
117
  }
294
118
  }
295
119
  else {
296
120
  sink_errLine(chalk.red(`pull: Not a PACS VFS path or valid query expression: ${rawPath}`));
121
+ complete = false;
297
122
  }
298
123
  }
299
- return resolvedPaths;
300
- }
301
- /**
302
- * Re-fires retrieves for series that pulled without LONK confirmation, up to
303
- * `retryMax` additional attempts, then permanently fails any still unconfirmed.
304
- *
305
- * @param allTasks - All pull tasks.
306
- * @param retryMax - Maximum retry attempts.
307
- * @param pacsserver - The PACS server identifier.
308
- * @param client - The connected ChRIS client.
309
- * @returns The number of additional retrieve-firing errors incurred.
310
- */
311
- async function pullRetryLoop(allTasks, retryMax, pacsserver, client) {
312
- let extraFiringErrors = 0;
313
- let retryCandidates = allTasks.filter((t) => t.status === 'pulled' && !t.lonkConfirmed);
314
- const pacsClient = client;
315
- for (let attempt = 1; attempt <= retryMax && retryCandidates.length > 0; attempt++) {
316
- await Promise.all(retryCandidates.map(async (t) => {
317
- const result = await series_cubePathGet(t.seriesUID, pacsClient, 1, 0);
318
- if (result) {
319
- t.lonkConfirmed = true;
320
- t.cubePathDir = result.folderPath;
321
- }
322
- }));
323
- retryCandidates = retryCandidates.filter((t) => !t.lonkConfirmed);
324
- if (retryCandidates.length === 0)
325
- break;
326
- sink_dataLine(chalk.yellow(`\nRetry ${attempt}/${retryMax} for ${retryCandidates.length} unconfirmed series...`));
327
- for (const t of retryCandidates) {
328
- t.status = 'pending';
329
- t.actualFiles = 0;
330
- t.lastProgressFiles = 0;
331
- t.lastProgressTime = Date.now();
332
- t.startTime = 0;
333
- t.lonkConfirmed = false;
334
- t.syntheticQueryId = null;
335
- t.retrieveId = null;
336
- pullProgress_emit(t, 'running', 'retrying');
337
- }
338
- extraFiringErrors += await tasks_pullWatch(retryCandidates, pacsserver, client);
339
- retryCandidates = retryCandidates.filter((t) => t.status === 'pulled' && !t.lonkConfirmed);
340
- }
341
- for (const t of retryCandidates) {
342
- t.status = 'error';
343
- pullProgress_emit(t, 'error');
344
- }
345
- return extraFiringErrors;
124
+ return { paths: resolvedPaths, complete };
346
125
  }
347
126
  /**
348
127
  * Prints the pull summary and sets a non-zero exit code on any failure.
@@ -359,17 +138,81 @@ function pullSummary_print(allTasks, totalFiringErrors) {
359
138
  }
360
139
  else {
361
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.
362
144
  for (const f of failures) {
363
- sink_dataLine(chalk.red(` ✗ ${f.label} [${f.status.toUpperCase()}]`));
145
+ if (f.status === 'unfired') {
146
+ sink_dataLine(chalk.red(` ✗ ${f.label} [FAILED TO FIRE — will not arrive; re-run pull]`));
147
+ }
148
+ else {
149
+ sink_dataLine(chalk.yellow(` ✗ ${f.label} [${f.status.toUpperCase()} — verify with: pacs status]`));
150
+ }
364
151
  }
365
152
  process.exitCode = 1;
366
153
  }
367
154
  if (totalFiringErrors > 0) {
368
- sink_dataLine(chalk.red(` ${totalFiringErrors} retrieve(s) failed to start.`));
155
+ sink_dataLine(chalk.red(` ${totalFiringErrors} retrieve(s) were never fired — re-run pull to fetch them.`));
369
156
  process.exitCode = 1;
370
157
  }
371
158
  pullProgress_complete(allTasks, failures.length > 0 || totalFiringErrors > 0);
372
159
  }
160
+ /**
161
+ * Resolves the exact CUBE directories materialised by a completed pull.
162
+ *
163
+ * @param allTasks - Successfully pulled series tasks.
164
+ * @param client - Authenticated ChRIS API client.
165
+ * @returns De-duplicated CUBE directories, or null if any series is unresolved.
166
+ */
167
+ async function feedInputDirs_resolve(allTasks, client) {
168
+ const resolved = await Promise.all(allTasks.map(async (task) => {
169
+ if (task.cubePathDir !== null)
170
+ return { task, folderPath: task.cubePathDir };
171
+ const stateResult = await seriesStorage_resolve(task.seriesUID, { attempts: 4, delayMs: 2_000 });
172
+ return { task, folderPath: stateResult.ok ? stateResult.value.folderPath : null };
173
+ }));
174
+ const missing = resolved.find(({ folderPath }) => folderPath === null);
175
+ if (missing) {
176
+ sink_errLine(chalk.red(`pull: Could not resolve CUBE storage for series ${missing.task.seriesUID}; new feed not created.`));
177
+ return null;
178
+ }
179
+ return [...new Set(resolved.map(({ folderPath }) => folderPath))];
180
+ }
181
+ /**
182
+ * Creates a feed whose pl-dircopy root contains exactly the pulled series.
183
+ *
184
+ * @param title - Requested feed title.
185
+ * @param allTasks - Successfully pulled series tasks.
186
+ * @param client - Authenticated ChRIS API client.
187
+ * @returns True when a valid feed and root instance were created.
188
+ */
189
+ async function pulledFeed_create(title, allTasks, client) {
190
+ const dirs = await feedInputDirs_resolve(allTasks, client);
191
+ if (dirs === null)
192
+ return null;
193
+ const feed = await feed_create(dirs, { title });
194
+ const feedID = Number(feed?.id);
195
+ const rootInstanceID = Number(feed?.pluginInstance?.data?.id);
196
+ const owner = typeof feed?.owner_username === 'string'
197
+ ? feed.owner_username.trim()
198
+ : '';
199
+ if (!feed || !Number.isInteger(feedID) || feedID <= 0 ||
200
+ !Number.isInteger(rootInstanceID) || rootInstanceID <= 0 || owner.length === 0) {
201
+ sink_errLine(chalk.red(`pull: Failed to create feed '${title}'.`));
202
+ return null;
203
+ }
204
+ newFeed_cacheAdd({
205
+ feedID,
206
+ title,
207
+ ownerUsername: owner,
208
+ rootInstanceID,
209
+ });
210
+ sink_dataLine(chalk.green(`Feed created: ${feedID}`));
211
+ sink_dataLine(chalk.green(`Root job: pl-dircopy (ID: ${rootInstanceID})`));
212
+ sink_dataLine(`Input: ${allTasks.length} PACS series`);
213
+ sink_dataLine(chalk.cyan(`Feed path: /home/${owner}/feeds/feed_${feedID}/pl-dircopy_${rootInstanceID}/data/`));
214
+ return { feedID, rootInstanceID, owner };
215
+ }
373
216
  /**
374
217
  * Pulls one or more `/net/pacs/queries/...` VFS paths into ChRIS storage.
375
218
  *
@@ -377,6 +220,7 @@ function pullSummary_print(allTasks, totalFiringErrors) {
377
220
  * exits non-zero on partial failure.
378
221
  * With `--nowait`: fires retrieves and prints `<seriesUID> <retrieveId>` per line, then returns.
379
222
  * With `--retry N`: re-fires retrieves for [NO LONK] series up to N additional times.
223
+ * With `--new-feed TITLE`: creates one feed from the exact successfully retrieved set.
380
224
  *
381
225
  * @param args - Command arguments (VFS paths, optional flags).
382
226
  * @example
@@ -387,9 +231,20 @@ export async function builtin_pull(args) {
387
231
  if (args_checkHasHelpFlag(args, 'pull')) {
388
232
  return envelope_ok(help_render('pull'));
389
233
  }
390
- const { nowait, retryMax, paths } = pullArgs_parse(args);
234
+ const parsed = pullArgs_parse(args);
235
+ const { nowait, retryMax, newFeedTitle, parseError, paths } = parsed;
236
+ if (parseError !== null) {
237
+ sink_errLine(chalk.red(`pull: ${parseError}.`));
238
+ process.exitCode = 1;
239
+ return envelope_error('');
240
+ }
241
+ if (nowait && newFeedTitle !== null) {
242
+ sink_errLine(chalk.red('pull: --new-feed cannot be combined with --nowait.'));
243
+ process.exitCode = 1;
244
+ return envelope_error('');
245
+ }
391
246
  if (paths.length === 0) {
392
- sink_errLine(chalk.red('pull: No paths specified. Usage: pull [--nowait] [--retry N] <vfs-path> [...]'));
247
+ sink_errLine(chalk.red('pull: No paths specified. Usage: pull [--nowait] [--retry N] [--new-feed <title>] <vfs-path> [...]'));
393
248
  process.exitCode = 1;
394
249
  return envelope_error('');
395
250
  }
@@ -400,12 +255,15 @@ export async function builtin_pull(args) {
400
255
  return envelope_error('');
401
256
  }
402
257
  const pacsserver = pacsIdentifier;
403
- const resolvedPaths = await paths_resolveToVfs(paths, pacsserver);
258
+ const pathResolution = await paths_resolveToVfs(paths, pacsserver);
259
+ const resolvedPaths = pathResolution.paths;
260
+ let selectionComplete = pathResolution.complete;
404
261
  const allTasks = [];
405
262
  for (const p of resolvedPaths) {
406
263
  const tasks = await path_seriesCollect(p, pacsIdentifier);
407
264
  if (tasks.length === 0) {
408
265
  sink_errLine(chalk.yellow(`pull: No series found under: ${p}`));
266
+ selectionComplete = false;
409
267
  }
410
268
  allTasks.push(...tasks);
411
269
  }
@@ -420,10 +278,18 @@ export async function builtin_pull(args) {
420
278
  process.exitCode = 1;
421
279
  return envelope_error('');
422
280
  }
281
+ // Idempotent recovery: skip series whose expected file count is already
282
+ // registered in CUBE, so re-running the same pull fetches only what is
283
+ // missing instead of re-firing the whole study.
284
+ const skipped = await retrieveTasks_skipComplete(allTasks);
285
+ if (skipped > 0) {
286
+ sink_dataLine(chalk.gray(`pull: ${skipped}/${allTasks.length} series already in CUBE — skipped.`));
287
+ }
288
+ const toFetch = allTasks.filter((t) => t.status !== 'pulled');
423
289
  // --nowait: fire retrieves and exit without watching
424
290
  if (nowait) {
425
- for (const t of allTasks) {
426
- await task_fire(t, pacsserver);
291
+ await retrieveTasks_fire(toFetch, pacsserver);
292
+ for (const t of toFetch) {
427
293
  if (t.retrieveId !== null) {
428
294
  sink_dataLine(`${t.seriesUID} ${t.retrieveId}`);
429
295
  }
@@ -434,8 +300,11 @@ export async function builtin_pull(args) {
434
300
  }
435
301
  return envelope_ok('');
436
302
  }
437
- let totalFiringErrors = await tasks_pullWatch(allTasks, pacsserver, client);
438
- totalFiringErrors += await pullRetryLoop(allTasks, retryMax, pacsserver, client);
303
+ const events = pullEvents_make();
304
+ let totalFiringErrors = toFetch.length > 0
305
+ ? await retrieve_fireAndWatch(toFetch, pacsserver, client, events)
306
+ : 0;
307
+ totalFiringErrors += await retrieve_confirmLoop(allTasks, retryMax, pacsserver, client, events);
439
308
  pullSummary_print(allTasks, totalFiringErrors);
440
309
  // Report CUBE paths via cubepath; --retry handles pacsseries DB lag post-pull
441
310
  const cubeEnvelope = await builtin_cubepath([...resolvedPaths, '--retry']);
@@ -443,7 +312,70 @@ export async function builtin_pull(args) {
443
312
  sink_get().data_write(cubeEnvelope.rendered);
444
313
  if (cubeEnvelope.renderedErr !== undefined && cubeEnvelope.renderedErr.length > 0)
445
314
  sink_get().err_write(cubeEnvelope.renderedErr);
446
- sink_dataLine(chalk.gray('Detached use `pacsretrieve report <queryId>` to verify.'));
315
+ if (newFeedTitle !== null) {
316
+ if (!selectionComplete) {
317
+ sink_errLine(chalk.red('pull: New feed not created because the requested selection was incomplete.'));
318
+ process.exitCode = 1;
319
+ return envelope_error('');
320
+ }
321
+ const incomplete = totalFiringErrors > 0 || allTasks.some((task) => task.status !== 'pulled');
322
+ if (incomplete) {
323
+ sink_errLine(chalk.red('pull: New feed not created because retrieval was incomplete.'));
324
+ process.exitCode = 1;
325
+ return envelope_error('');
326
+ }
327
+ const feedResult = await pulledFeed_create(newFeedTitle, allTasks, client);
328
+ if (feedResult === null) {
329
+ process.exitCode = 1;
330
+ return envelope_error('');
331
+ }
332
+ const attachment = parsed.attachment;
333
+ if (attachment?.kind === 'pipeline') {
334
+ const attachmentEnvelope = await builtin_pipeline([
335
+ 'run', attachment.selector, '--previous', String(feedResult.rootInstanceID), ...attachment.args,
336
+ ]);
337
+ if (attachmentEnvelope.status === 'error') {
338
+ sink_errLine(chalk.red(`pull: Pipeline attachment failed; Feed ${feedResult.feedID} and root ${feedResult.rootInstanceID} were retained.`));
339
+ process.exitCode = 1;
340
+ return envelope_error('');
341
+ }
342
+ sink_dataLine(chalk.green(`Pipeline attached: ${attachment.selector}`));
343
+ }
344
+ else if (attachment?.kind === 'plugin') {
345
+ let pluginParameters;
346
+ try {
347
+ pluginParameters = executableArguments_parse(attachment.args);
348
+ }
349
+ catch (error) {
350
+ const message = error instanceof Error ? error.message : String(error);
351
+ sink_errLine(chalk.red(`pull: Plugin attachment failed (${message}); Feed ${feedResult.feedID} and root ${feedResult.rootInstanceID} were retained.`));
352
+ process.exitCode = 1;
353
+ return envelope_error('');
354
+ }
355
+ const instance = await plugin_run(pluginSelector_normalize(attachment.selector), {
356
+ ...pluginParameters,
357
+ previous_id: feedResult.rootInstanceID,
358
+ });
359
+ const instanceID = Number(instance?.id);
360
+ if (!instance || !Number.isInteger(instanceID) || instanceID <= 0) {
361
+ sink_errLine(chalk.red(`pull: Plugin attachment failed; Feed ${feedResult.feedID} and root ${feedResult.rootInstanceID} were retained.`));
362
+ process.exitCode = 1;
363
+ return envelope_error('');
364
+ }
365
+ procCache_get().instance_add({
366
+ id: instanceID,
367
+ feedID: feedResult.feedID,
368
+ parentID: feedResult.rootInstanceID,
369
+ pluginName: typeof instance.plugin_name === 'string' ? instance.plugin_name : attachment.selector,
370
+ params: null,
371
+ status: 'scheduled',
372
+ });
373
+ sink_dataLine(chalk.green(`Plugin attached: ${attachment.selector} (ID: ${instanceID})`));
374
+ }
375
+ }
376
+ if (newFeedTitle === null) {
377
+ sink_dataLine(chalk.gray('Detached — use `pacsretrieve report <queryId>` to verify.'));
378
+ }
447
379
  return envelope_ok('');
448
380
  }
449
381
  //# sourceMappingURL=pull.js.map
@@ -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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"}
@@ -164,6 +164,10 @@ export async function builtin_rm(args) {
164
164
  const listCache = listCache_get();
165
165
  const parentDir = path.posix.dirname(target);
166
166
  listCache.cache_invalidate(parentDir);
167
+ // Also drop the removed target and any listings cached beneath it:
168
+ // a later re-upload to the same path must not inherit still-fresh
169
+ // nested listings from the deleted tree.
170
+ listCache.cache_invalidateTree(target);
167
171
  }
168
172
  else {
169
173
  err_emit(chalk.red(`rm: cannot remove '${pathArg}': ${result.error || 'unknown error'}`));