@fnndsc/brasa 0.49.1 → 0.50.1

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 (177) hide show
  1. package/dist/buildinfo.json +1 -1
  2. package/dist/builtins/fs/cat.js +6 -5
  3. package/dist/builtins/fs/cat.js.map +1 -1
  4. package/dist/builtins/fs/configWrite.js +6 -5
  5. package/dist/builtins/fs/configWrite.js.map +1 -1
  6. package/dist/builtins/fs/cp.js +3 -2
  7. package/dist/builtins/fs/cp.js.map +1 -1
  8. package/dist/builtins/fs/download.js +5 -4
  9. package/dist/builtins/fs/download.js.map +1 -1
  10. package/dist/builtins/fs/du.js +4 -6
  11. package/dist/builtins/fs/du.js.map +1 -1
  12. package/dist/builtins/fs/edit.js +10 -9
  13. package/dist/builtins/fs/edit.js.map +1 -1
  14. package/dist/builtins/fs/find.js +3 -2
  15. package/dist/builtins/fs/find.js.map +1 -1
  16. package/dist/builtins/fs/ls.js +2 -1
  17. package/dist/builtins/fs/ls.js.map +1 -1
  18. package/dist/builtins/fs/mv.js +3 -2
  19. package/dist/builtins/fs/mv.js.map +1 -1
  20. package/dist/builtins/fs/pull.js +13 -12
  21. package/dist/builtins/fs/pull.js.map +1 -1
  22. package/dist/builtins/fs/rmdir.js +2 -1
  23. package/dist/builtins/fs/rmdir.js.map +1 -1
  24. package/dist/builtins/fs/tree.js +30 -39
  25. package/dist/builtins/fs/tree.js.map +1 -1
  26. package/dist/builtins/fs/upload.js +3 -2
  27. package/dist/builtins/fs/upload.js.map +1 -1
  28. package/dist/builtins/fs/url.js +2 -1
  29. package/dist/builtins/fs/url.js.map +1 -1
  30. package/dist/builtins/games/stdin.d.ts +8 -0
  31. package/dist/builtins/games/stdin.js +26 -14
  32. package/dist/builtins/games/stdin.js.map +1 -1
  33. package/dist/builtins/help.js +19 -3
  34. package/dist/builtins/help.js.map +1 -1
  35. package/dist/builtins/net/connect.js +2 -1
  36. package/dist/builtins/net/connect.js.map +1 -1
  37. package/dist/builtins/net/cubepath.js +5 -4
  38. package/dist/builtins/net/cubepath.js.map +1 -1
  39. package/dist/builtins/net/pacs.js +6 -5
  40. package/dist/builtins/net/pacs.js.map +1 -1
  41. package/dist/builtins/net/query.js +14 -13
  42. package/dist/builtins/net/query.js.map +1 -1
  43. package/dist/builtins/net/status.js +5 -4
  44. package/dist/builtins/net/status.js.map +1 -1
  45. package/dist/builtins/parametersofplugin.js +2 -1
  46. package/dist/builtins/parametersofplugin.js.map +1 -1
  47. package/dist/builtins/pluginExecute.js +2 -1
  48. package/dist/builtins/pluginExecute.js.map +1 -1
  49. package/dist/builtins/proc.js +31 -30
  50. package/dist/builtins/proc.js.map +1 -1
  51. package/dist/builtins/res/compute.js +4 -3
  52. package/dist/builtins/res/compute.js.map +1 -1
  53. package/dist/builtins/res/dicom.js +4 -3
  54. package/dist/builtins/res/dicom.js.map +1 -1
  55. package/dist/builtins/res/expect.js +8 -7
  56. package/dist/builtins/res/expect.js.map +1 -1
  57. package/dist/builtins/res/feed.diagram.js +4 -3
  58. package/dist/builtins/res/feed.diagram.js.map +1 -1
  59. package/dist/builtins/res/feed.js +13 -12
  60. package/dist/builtins/res/feed.js.map +1 -1
  61. package/dist/builtins/res/feed.tree.js +3 -2
  62. package/dist/builtins/res/feed.tree.js.map +1 -1
  63. package/dist/builtins/res/files.js +3 -2
  64. package/dist/builtins/res/files.js.map +1 -1
  65. package/dist/builtins/res/gather.js +2 -1
  66. package/dist/builtins/res/gather.js.map +1 -1
  67. package/dist/builtins/res/gather.process.js +2 -1
  68. package/dist/builtins/res/gather.process.js.map +1 -1
  69. package/dist/builtins/res/group.js +7 -6
  70. package/dist/builtins/res/group.js.map +1 -1
  71. package/dist/builtins/res/image.js +2 -1
  72. package/dist/builtins/res/image.js.map +1 -1
  73. package/dist/builtins/res/pipeline.diagram.js +2 -1
  74. package/dist/builtins/res/pipeline.diagram.js.map +1 -1
  75. package/dist/builtins/res/pipeline.js +20 -19
  76. package/dist/builtins/res/pipeline.js.map +1 -1
  77. package/dist/builtins/res/play.js +25 -31
  78. package/dist/builtins/res/play.js.map +1 -1
  79. package/dist/builtins/res/plugin.js +7 -6
  80. package/dist/builtins/res/plugin.js.map +1 -1
  81. package/dist/builtins/res/plugininstance.js +6 -5
  82. package/dist/builtins/res/plugininstance.js.map +1 -1
  83. package/dist/builtins/res/pluginmeta.js +5 -4
  84. package/dist/builtins/res/pluginmeta.js.map +1 -1
  85. package/dist/builtins/res/record.js +6 -5
  86. package/dist/builtins/res/record.js.map +1 -1
  87. package/dist/builtins/res/tag.js +5 -4
  88. package/dist/builtins/res/tag.js.map +1 -1
  89. package/dist/builtins/res/user.js +2 -1
  90. package/dist/builtins/res/user.js.map +1 -1
  91. package/dist/builtins/res/workflow.js +5 -4
  92. package/dist/builtins/res/workflow.js.map +1 -1
  93. package/dist/builtins/store.js +5 -4
  94. package/dist/builtins/store.js.map +1 -1
  95. package/dist/builtins/sys/apropos.js +2 -1
  96. package/dist/builtins/sys/apropos.js.map +1 -1
  97. package/dist/builtins/sys/echo.js +4 -3
  98. package/dist/builtins/sys/echo.js.map +1 -1
  99. package/dist/builtins/sys/grep.js +3 -2
  100. package/dist/builtins/sys/grep.js.map +1 -1
  101. package/dist/builtins/sys/joblets.d.ts +28 -0
  102. package/dist/builtins/sys/joblets.js +95 -0
  103. package/dist/builtins/sys/joblets.js.map +1 -0
  104. package/dist/builtins/sys/tasks.d.ts +1 -1
  105. package/dist/builtins/sys/tasks.js +7 -1
  106. package/dist/builtins/sys/tasks.js.map +1 -1
  107. package/dist/builtins/sys/textFilters.js +5 -4
  108. package/dist/builtins/sys/textFilters.js.map +1 -1
  109. package/dist/builtins/sys/variables.js +6 -5
  110. package/dist/builtins/sys/variables.js.map +1 -1
  111. package/dist/builtins/sys/whoami.js +4 -3
  112. package/dist/builtins/sys/whoami.js.map +1 -1
  113. package/dist/chris/chiliDelegate.js +2 -1
  114. package/dist/chris/chiliDelegate.js.map +1 -1
  115. package/dist/chris/chrisCommands.d.ts +0 -1
  116. package/dist/chris/chrisCommands.js +13 -0
  117. package/dist/chris/chrisCommands.js.map +1 -1
  118. package/dist/chris/connect.js +8 -5
  119. package/dist/chris/connect.js.map +1 -1
  120. package/dist/core/assignment.js +2 -2
  121. package/dist/core/assignment.js.map +1 -1
  122. package/dist/core/cancellation.d.ts +10 -7
  123. package/dist/core/cancellation.js +39 -24
  124. package/dist/core/cancellation.js.map +1 -1
  125. package/dist/core/commandRegistry.d.ts +19 -0
  126. package/dist/core/commandRegistry.js +12 -0
  127. package/dist/core/commandRegistry.js.map +1 -1
  128. package/dist/core/coreCommands.d.ts +0 -1
  129. package/dist/core/coreCommands.js +22 -0
  130. package/dist/core/coreCommands.js.map +1 -1
  131. package/dist/core/dispatch.js +12 -18
  132. package/dist/core/dispatch.js.map +1 -1
  133. package/dist/core/elevation.js +7 -6
  134. package/dist/core/elevation.js.map +1 -1
  135. package/dist/core/engine.d.ts +43 -40
  136. package/dist/core/engine.js +43 -19
  137. package/dist/core/engine.js.map +1 -1
  138. package/dist/core/handlerRun.d.ts +16 -6
  139. package/dist/core/handlerRun.js +47 -2
  140. package/dist/core/handlerRun.js.map +1 -1
  141. package/dist/core/holds.d.ts +25 -0
  142. package/dist/core/holds.js +74 -0
  143. package/dist/core/holds.js.map +1 -0
  144. package/dist/core/joblets.d.ts +94 -0
  145. package/dist/core/joblets.js +363 -0
  146. package/dist/core/joblets.js.map +1 -0
  147. package/dist/core/lineOrigin.d.ts +31 -0
  148. package/dist/core/lineOrigin.js +38 -0
  149. package/dist/core/lineOrigin.js.map +1 -0
  150. package/dist/core/listing.d.ts +8 -0
  151. package/dist/core/listing.js +26 -14
  152. package/dist/core/listing.js.map +1 -1
  153. package/dist/core/runner.d.ts +15 -0
  154. package/dist/core/runner.js +25 -7
  155. package/dist/core/runner.js.map +1 -1
  156. package/dist/core/surface.d.ts +17 -2
  157. package/dist/core/surface.js +26 -3
  158. package/dist/core/surface.js.map +1 -1
  159. package/dist/core/variables.d.ts +7 -0
  160. package/dist/core/variables.js +9 -0
  161. package/dist/core/variables.js.map +1 -1
  162. package/dist/notes.json +1 -1
  163. package/dist/session/answer.d.ts +8 -11
  164. package/dist/session/answer.js +36 -25
  165. package/dist/session/answer.js.map +1 -1
  166. package/dist/session/cwdScope.d.ts +25 -0
  167. package/dist/session/cwdScope.js +36 -0
  168. package/dist/session/cwdScope.js.map +1 -0
  169. package/dist/session/index.js +14 -4
  170. package/dist/session/index.js.map +1 -1
  171. package/dist/session/recorder.d.ts +7 -4
  172. package/dist/session/recorder.js +16 -21
  173. package/dist/session/recorder.js.map +1 -1
  174. package/package.json +5 -5
  175. package/dist/core/turn.d.ts +0 -61
  176. package/dist/core/turn.js +0 -83
  177. package/dist/core/turn.js.map +0 -1
@@ -30,24 +30,28 @@ import chalk from 'chalk';
30
30
  import { taskWatch_set, taskWatch_release } from './taskWatch.js';
31
31
  import { ambient_listen } from './ambient.js';
32
32
  import { session } from '../session/index.js';
33
+ import { cwdScope_run } from '../session/cwdScope.js';
33
34
  import { semicolons_parse } from '../lib/semicolonParser.js';
34
35
  import { pipes_parse, redirect_parse, command_shellEscape_detect, } from './preprocess.js';
35
36
  import { command_executeToEnvelope, command_timingMaybePrint, redirect_execute, pipe_execute, } from './dispatch.js';
36
37
  import { capability_require, surface_get, surface_set } from './surface.js';
37
38
  import { commandCancellation_abort, commandCancellation_stopped, commandCancellation_active, commandCancellation_enable, commandCancellation_request, commandCancellation_run, commandCancellation_signalGet } from './cancellation.js';
38
- import { turn_leave, turn_resume, turn_within } from './turn.js';
39
39
  import { errorStack } from '@fnndsc/fond';
40
40
  import { recorder_note } from '../session/recorder.js';
41
41
  import { assignment_parse } from './variables.js';
42
42
  import { assignment_execute } from './assignment.js';
43
43
  import { answerAdapters_register } from '../session/answerAdapters.js';
44
- import { numbering_get } from '../session/answer.js';
44
+ import { answerOrigin_forget } from '../session/answer.js';
45
+ import { lineOrigin_run } from './lineOrigin.js';
46
+ import { lineHolds_get } from './holds.js';
47
+ import { joblet_start, jobletLine_parse, joblets_running, jobletsSource } from './joblets.js';
45
48
  import { sink_get, sink_set } from './sink.js';
46
49
  import { backend_install, backendInstalled_get } from './backend.js';
47
50
  import { JobRunner, jobsRoot_derive, runner_get, runner_install } from './runner.js';
48
51
  import { vfsDispatcher_get } from './filesystem.js';
49
52
  import { itemType_isContainer } from './itemKinds.js';
50
53
  import { quoteOpen_find } from '../lib/quoting.js';
54
+ import { exitCode_set, exitScope_run } from './handlerRun.js';
51
55
  /**
52
56
  * Whether a batch (semicolon list, script) should abort on the first error.
53
57
  * Read by the batch loop; set by the boot layer for `-e` / script modes.
@@ -137,16 +141,26 @@ async function batch_execute(commands, startTime, timingEnabled) {
137
141
  * active sink as each command completes.
138
142
  *
139
143
  * @param line - The raw input line.
144
+ * @param options - The surface the line came from, when a host names it.
140
145
  * @returns The envelopes of the executed commands, in execution order.
141
146
  */
142
- export async function line_execute(line) {
147
+ export async function line_execute(line, options = {}) {
148
+ // A host that names the line's surface scopes it there: what it lists is
149
+ // that surface's answer (#1273).
150
+ if (options.origin !== undefined) {
151
+ const origin = options.origin;
152
+ const { origin: _origin, ...rest } = options;
153
+ return await lineOrigin_run(origin, () => line_execute(line, rest));
154
+ }
143
155
  // A line inside a command (a manifest's) shares that command's scope.
144
156
  if (commandCancellation_active())
145
157
  return await line_execute_run(line);
146
158
  // A top-level line keeps its own error stack: another command running
147
159
  // while this one waits on a question cannot pop its messages, nor have
148
160
  // its own drained by this one.
149
- return await commandCancellation_run(() => errorStack.scope_run(() => line_execute_run(line)));
161
+ // ...and its own exit status, so a line running beside it (a read, a
162
+ // background job) never marks it failed, nor it them (#1273).
163
+ return await commandCancellation_run(() => exitScope_run(() => errorStack.scope_run(() => cwdScope_run(() => line_execute_run(line))), options.ended), options.id);
150
164
  }
151
165
  /**
152
166
  * Executes one line inside its already-established cancellation scope.
@@ -166,7 +180,7 @@ async function line_execute_run(line, captured = false) {
166
180
  const open = command_shellEscape_detect(trimmedLine) ? null : quoteOpen_find(trimmedLine);
167
181
  if (open !== null) {
168
182
  sink_get().err_write(`${chalk.red(`chell: the ${open.quote} at column ${open.column} never closes; nothing of the line ran`)}\n`);
169
- process.exitCode = 2;
183
+ exitCode_set(2);
170
184
  return [{ status: 'error', rendered: '' }];
171
185
  }
172
186
  // A press on a surface and a line at a console arrive here alike, which is
@@ -177,6 +191,14 @@ async function line_execute_run(line, captured = false) {
177
191
  // Start timing if enabled
178
192
  const timingEnabled = session.timingEnabled_get();
179
193
  const startTime = timingEnabled ? performance.now() : 0;
194
+ // `line &` runs the line as a joblet: its surface has its prompt back at once.
195
+ const background = captured ? null : jobletLine_parse(trimmedLine);
196
+ if (background !== null) {
197
+ const started = await joblet_start(background);
198
+ if (started.status === 'error')
199
+ exitCode_set(1);
200
+ return [started];
201
+ }
180
202
  if (command_shellEscape_detect(trimmedLine)) {
181
203
  return shellEscape_execute(trimmedLine, startTime, timingEnabled);
182
204
  }
@@ -215,20 +237,22 @@ async function line_execute_run(line, captured = false) {
215
237
  return envelope ? [envelope] : [];
216
238
  }
217
239
  /**
218
- * Requests cancellation of the active foreground command.
240
+ * Requests cancellation of a running command (Ctrl-C).
219
241
  *
220
- * @returns True when a command can honor the request.
242
+ * @param id - The line, as its host named it; the most recent when omitted.
243
+ * @returns True when the command can honor the request.
221
244
  */
222
- export function line_cancel() {
223
- return commandCancellation_request();
245
+ export function line_cancel(id) {
246
+ return commandCancellation_request(id);
224
247
  }
225
248
  /**
226
- * Aborts the active foreground command, cancellable or not (the operator's STOP).
249
+ * Aborts a running command, cancellable or not (the operator's STOP).
227
250
  *
228
- * @returns True when a command was running.
251
+ * @param id - The line, as its host named it; the most recent when omitted.
252
+ * @returns True when such a command was running.
229
253
  */
230
- export function line_abort() {
231
- return commandCancellation_abort();
254
+ export function line_abort(id) {
255
+ return commandCancellation_abort(id);
232
256
  }
233
257
  /**
234
258
  * Computes completion candidates for a partial input line.
@@ -310,8 +334,9 @@ export async function engine_create(backend) {
310
334
  backend_install(backend);
311
335
  // What each listing's rows are, so `@3` can name one.
312
336
  answerAdapters_register();
313
- const jobs = backendInstalled_get()?.jobs ?? [];
314
- runner_install(jobs.length > 0 ? new JobRunner(jobsRoot_derive(backendInstalled_get()?.id ?? 'session'), jobs) : null);
337
+ // Every session runs joblets (`line &`); a backend adds its own jobs.
338
+ const jobs = [...(backendInstalled_get()?.jobs ?? []), jobletsSource];
339
+ runner_install(new JobRunner(jobsRoot_derive(backendInstalled_get()?.id ?? 'session'), jobs));
315
340
  await session.init();
316
341
  await vfsProviders_register();
317
342
  // A backend's containers are folders to every tool, the dispatcher's read included.
@@ -321,16 +346,15 @@ export async function engine_create(backend) {
321
346
  line_cancel,
322
347
  line_abort,
323
348
  command_stopped: commandCancellation_stopped,
324
- turn_leave,
325
- turn_resume,
326
- turn_abort: (state) => { turn_within(state, () => { line_abort(); }); },
349
+ line_holds: lineHolds_get,
350
+ joblets_running,
327
351
  line_complete,
328
352
  file_read,
329
353
  file_stream,
330
354
  file_write,
331
355
  regard_note: (regard) => session.regard_set(regard),
332
356
  regard_get: () => session.regard_get(),
333
- numbering_get: () => numbering_get(),
357
+ origin_forget: (origin) => answerOrigin_forget(origin),
334
358
  // The backend answers for its own subjects (ChRIS: feeds); a task it
335
359
  // leaves to the core is watched by the core.
336
360
  watch_set: (subject, owner, on) => backendInstalled_get()?.watch?.set(subject, owner, on)
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/core/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/core/engine.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,26 @@
1
- /**
2
- * @file Running a printing command handler, and reading the outcome it left.
3
- *
4
- * @module
5
- */
6
1
  import type { CommandEnvelope } from '@fnndsc/menu';
7
2
  import type { CommandHandler } from './commandRegistry.js';
8
3
  /**
9
- * Reads the current process exit code as a number.
4
+ * Reads the exit status as a number: the running line's own, else the
5
+ * process's.
10
6
  *
11
7
  * @returns The exit code, treating an unset code as zero.
12
8
  */
13
9
  export declare function exitCode_read(): number;
10
+ /**
11
+ * Sets the exit status: the running line's own, else the process's.
12
+ *
13
+ * @param code - The status, or undefined to clear it.
14
+ */
15
+ export declare function exitCode_set(code: number | undefined): void;
16
+ /**
17
+ * Runs a line with an exit status of its own, then leaves that status as
18
+ * the process's, so a one-shot `chell -c` still exits with its line's code.
19
+ *
20
+ * @param operation - The line's work.
21
+ * @returns What the work returned.
22
+ */
23
+ export declare function exitScope_run<T>(operation: () => Promise<T>, ended?: (code: number) => void): Promise<T>;
14
24
  /**
15
25
  * Runs a printing handler uncaptured, preserving an explicit envelope or
16
26
  * deriving one from the exit-code delta for legacy handlers.
@@ -1,10 +1,55 @@
1
1
  /**
2
- * Reads the current process exit code as a number.
2
+ * @file Running a printing command handler, and reading the outcome it left.
3
+ *
4
+ * @module
5
+ */
6
+ import { AsyncLocalStorage } from 'node:async_hooks';
7
+ /**
8
+ * The exit status of the line running on this async path. Lines that run
9
+ * at once (a read beside a writer, a background job) each have their own,
10
+ * so one's failure never marks another's (#1273). Outside a line (a test
11
+ * calling a handler, chell's own boot) the process's exit code is used.
12
+ */
13
+ const exitScope = new AsyncLocalStorage();
14
+ /**
15
+ * Reads the exit status as a number: the running line's own, else the
16
+ * process's.
3
17
  *
4
18
  * @returns The exit code, treating an unset code as zero.
5
19
  */
6
20
  export function exitCode_read() {
7
- return typeof process.exitCode === 'number' ? process.exitCode : 0;
21
+ const line = exitScope.getStore();
22
+ const code = line !== undefined ? line.code : process.exitCode;
23
+ return typeof code === 'number' ? code : 0;
24
+ }
25
+ /**
26
+ * Sets the exit status: the running line's own, else the process's.
27
+ *
28
+ * @param code - The status, or undefined to clear it.
29
+ */
30
+ export function exitCode_set(code) {
31
+ const line = exitScope.getStore();
32
+ if (line !== undefined)
33
+ line.code = code;
34
+ else
35
+ process.exitCode = code;
36
+ }
37
+ /**
38
+ * Runs a line with an exit status of its own, then leaves that status as
39
+ * the process's, so a one-shot `chell -c` still exits with its line's code.
40
+ *
41
+ * @param operation - The line's work.
42
+ * @returns What the work returned.
43
+ */
44
+ export async function exitScope_run(operation, ended) {
45
+ const line = { code: undefined };
46
+ try {
47
+ return await exitScope.run(line, operation);
48
+ }
49
+ finally {
50
+ process.exitCode = line.code;
51
+ ended?.(typeof line.code === 'number' ? line.code : 0);
52
+ }
8
53
  }
9
54
  /**
10
55
  * Runs a printing handler uncaptured, preserving an explicit envelope or
@@ -1 +1 @@
1
- {"version":3,"file":"handlerRun.js","sourceRoot":"","sources":["../../src/core/handlerRun.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAuB,EAAE,IAAc;IAC7E,MAAM,cAAc,GAAW,aAAa,EAAE,CAAC;IAC/C,MAAM,gBAAgB,GAA2B,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,gBAAgB,CAAC;IAC5D,MAAM,aAAa,GAAW,aAAa,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAY,aAAa,KAAK,CAAC,IAAI,aAAa,KAAK,cAAc,CAAC;IAChF,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"handlerRun.js","sourceRoot":"","sources":["../../src/core/handlerRun.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AASrD;;;;;GAKG;AACH,MAAM,SAAS,GAAkC,IAAI,iBAAiB,EAAc,CAAC;AAErF;;;;;GAKG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,IAAI,GAA2B,SAAS,CAAC,QAAQ,EAAE,CAAC;IAC1D,MAAM,IAAI,GAAuC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACnG,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAwB;IACnD,MAAM,IAAI,GAA2B,SAAS,CAAC,QAAQ,EAAE,CAAC;IAC1D,IAAI,IAAI,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;QACpC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC/B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAI,SAA2B,EAAE,KAA8B;IAChG,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7C,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QAC7B,KAAK,EAAE,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAuB,EAAE,IAAc;IAC7E,MAAM,cAAc,GAAW,aAAa,EAAE,CAAC;IAC/C,MAAM,gBAAgB,GAA2B,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,gBAAgB,CAAC;IAC5D,MAAM,aAAa,GAAW,aAAa,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAY,aAAa,KAAK,CAAC,IAAI,aAAa,KAAK,cAAc,CAAC;IAChF,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @file What a line holds of the session while it runs.
3
+ *
4
+ * Lines from several surfaces share one session, and one line's work must
5
+ * not stop another's: a listing read in a browser should not wait behind a
6
+ * PACS pull typed in a console. So a host runs lines side by side unless
7
+ * they change the same piece of the session, and asks the kernel, before
8
+ * a line runs, what it holds (#1273). A line holds what its commands hold:
9
+ * nothing for a read, the working directory for `cd`, the cohort for
10
+ * `gather`. Whatever cannot be read off the line (a command that has not
11
+ * said, a host shell, a capture inside a word) holds the whole session, as
12
+ * every line did before.
13
+ *
14
+ * @module
15
+ */
16
+ import { type SessionPiece } from './commandRegistry.js';
17
+ /** What a line holds: the pieces it changes, or the whole session. */
18
+ export type LineHolds = SessionPiece[] | 'all';
19
+ /**
20
+ * What a line holds of the session while it runs.
21
+ *
22
+ * @param line - The line, as the operator typed it.
23
+ * @returns The pieces its commands change (none for a read), or 'all'.
24
+ */
25
+ export declare function lineHolds_get(line: string): LineHolds;
@@ -0,0 +1,74 @@
1
+ /**
2
+ * @file What a line holds of the session while it runs.
3
+ *
4
+ * Lines from several surfaces share one session, and one line's work must
5
+ * not stop another's: a listing read in a browser should not wait behind a
6
+ * PACS pull typed in a console. So a host runs lines side by side unless
7
+ * they change the same piece of the session, and asks the kernel, before
8
+ * a line runs, what it holds (#1273). A line holds what its commands hold:
9
+ * nothing for a read, the working directory for `cd`, the cohort for
10
+ * `gather`. Whatever cannot be read off the line (a command that has not
11
+ * said, a host shell, a capture inside a word) holds the whole session, as
12
+ * every line did before.
13
+ *
14
+ * @module
15
+ */
16
+ import { commandHolds_get } from './commandRegistry.js';
17
+ import { pipes_parse } from './preprocess.js';
18
+ import { semicolons_parse } from '../lib/semicolonParser.js';
19
+ import { assignment_parse } from './variables.js';
20
+ import { jobletLine_parse } from './joblets.js';
21
+ /**
22
+ * What a line holds of the session while it runs.
23
+ *
24
+ * @param line - The line, as the operator typed it.
25
+ * @returns The pieces its commands change (none for a read), or 'all'.
26
+ */
27
+ export function lineHolds_get(line) {
28
+ // A line sent to the background only starts a joblet, which takes its
29
+ // own hold when it runs.
30
+ if (jobletLine_parse(line) !== null)
31
+ return [];
32
+ const pieces = new Set();
33
+ for (const command of semicolons_parse(line)) {
34
+ const held = commandLine_holds(command.trim());
35
+ if (held === 'all')
36
+ return 'all';
37
+ for (const piece of held)
38
+ pieces.add(piece);
39
+ }
40
+ return [...pieces];
41
+ }
42
+ /**
43
+ * What one command line (no semicolons) holds.
44
+ *
45
+ * @param command - The trimmed command line.
46
+ * @returns Its pieces, or 'all'.
47
+ */
48
+ function commandLine_holds(command) {
49
+ if (command === '')
50
+ return [];
51
+ // A host shell may do anything, the session's own tools included.
52
+ if (command.startsWith('!'))
53
+ return 'all';
54
+ const assignment = assignment_parse(command);
55
+ if (assignment !== null) {
56
+ // A store is one step: the assignment holds what its capture holds.
57
+ if ('capture' in assignment)
58
+ return lineHolds_get(assignment.capture);
59
+ return 'literal' in assignment && !/\$\(|`/.test(assignment.literal) ? [] : 'all';
60
+ }
61
+ if (/\$\(|`/.test(command))
62
+ return 'all';
63
+ const pieces = new Set();
64
+ for (const segment of pipes_parse(command)) {
65
+ const name = segment.trim().split(/\s+/)[0] ?? '';
66
+ const held = commandHolds_get(name);
67
+ if (held === null)
68
+ return 'all';
69
+ for (const piece of held)
70
+ pieces.add(piece);
71
+ }
72
+ return [...pieces];
73
+ }
74
+ //# sourceMappingURL=holds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"holds.js","sourceRoot":"","sources":["../../src/core/holds.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,gBAAgB,EAAqB,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAmB,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAKhD;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,sEAAsE;IACtE,yBAAyB;IACzB,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAsB,IAAI,GAAG,EAAE,CAAC;IAC5C,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAc,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QACjC,KAAK,MAAM,KAAK,IAAI,IAAI;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,OAAe;IACxC,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC9B,kEAAkE;IAClE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,UAAU,GAAsB,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAChE,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,oEAAoE;QACpE,IAAI,SAAS,IAAI,UAAU;YAAE,OAAO,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtE,OAAO,SAAS,IAAI,UAAU,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACpF,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,MAAM,MAAM,GAAsB,IAAI,GAAG,EAAE,CAAC;IAC5C,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAW,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAmC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,IAAI;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * @file Joblets: lines run in the background, `line &` (#1273).
3
+ *
4
+ * A long line (a PACS pull, a feed's creation, a teardown) need not hold the
5
+ * console it was typed in. Ended with `&`, it runs as a joblet: the runner
6
+ * keeps it as `/proc/joblets/<N>`, its output goes to its log rather than to
7
+ * a console someone is typing in, and its surface hears one line when it
8
+ * starts (`[1] pull … &`) and one when it ends (`[1]+ Done pull …`).
9
+ *
10
+ * A joblet is a subshell, as POSIX's is: it stands where its line was typed
11
+ * and starts with that line's variables, and its own `cd`s and assignments
12
+ * stay inside it. What lives in CUBE (a feed, the cohort) is shared, and a
13
+ * joblet holds what its line changes while it works, as a foreground line
14
+ * does, so it waits for, and is waited for by, the lines it conflicts with.
15
+ *
16
+ * A joblet that needs an answer pauses and says so (`[1]+ Waiting for an
17
+ * answer: … · fg %1 to answer`), as a POSIX background job that reads the
18
+ * terminal is stopped: a question asked out of the blue in a console would
19
+ * be answered by accident. `fg %1`, from any surface, asks it there.
20
+ *
21
+ * Joblets belong to the session: they outlive the surface that started them,
22
+ * and a daemon restart ends them, their logs kept ("ended by restart").
23
+ *
24
+ * @module
25
+ */
26
+ import { type CommandEnvelope } from '@fnndsc/menu';
27
+ import { type JobSource } from './runner.js';
28
+ import { type PromptRequest } from './surface.js';
29
+ /** The runner source joblets are kept in: `/proc/joblets/<N>`. */
30
+ export declare const JOBLETS_SOURCE_ID: string;
31
+ /** A question a joblet waits on, until someone `fg`s it. */
32
+ export interface JobletQuestion {
33
+ request: PromptRequest;
34
+ answer(text: string): void;
35
+ refuse(reason: Error): void;
36
+ }
37
+ /** The joblets' source, which the core gives every session's runner. */
38
+ export declare const jobletsSource: JobSource;
39
+ /**
40
+ * The line a `&` sends to the background, when the line ends with one.
41
+ *
42
+ * @param line - The line as typed.
43
+ * @returns The line without its `&`, or null when it is not one (`&&`,
44
+ * `\&`, a `&` inside quotes, a bare `&`).
45
+ */
46
+ export declare function jobletLine_parse(line: string): string | null;
47
+ /**
48
+ * Starts a line as a joblet.
49
+ *
50
+ * @param line - The line, without its `&`.
51
+ * @returns The start notice, `[1] line &`, or why it could not start.
52
+ */
53
+ export declare function joblet_start(line: string): Promise<CommandEnvelope>;
54
+ /**
55
+ * The question a joblet waits on now, if any.
56
+ *
57
+ * @param number - The joblet.
58
+ * @returns Its question, or null.
59
+ */
60
+ export declare function jobletQuestion_get(number: number): JobletQuestion | null;
61
+ /**
62
+ * Waits until a joblet asks a question, or the wait is called off.
63
+ *
64
+ * @param number - The joblet.
65
+ * @param until - Calls the wait off when it settles.
66
+ * @returns The question, or null when called off first.
67
+ */
68
+ export declare function jobletQuestion_await(number: number, until: Promise<unknown>): Promise<JobletQuestion | null>;
69
+ /** A joblet still running, as a restart's warning counts it. */
70
+ export interface JobletRunning {
71
+ number: number;
72
+ line: string;
73
+ waiting: boolean;
74
+ }
75
+ /**
76
+ * The joblets running now: what a restart would end.
77
+ *
78
+ * @returns Them, by number.
79
+ */
80
+ export declare function joblets_running(): JobletRunning[];
81
+ /**
82
+ * Whether a joblet waits on an answer.
83
+ *
84
+ * @param number - The joblet.
85
+ * @returns True while it waits.
86
+ */
87
+ export declare function joblet_isWaiting(number: number): boolean;
88
+ /**
89
+ * The joblet a word names: `%3`, `%%`/`%+` (the most recent), or `3`.
90
+ *
91
+ * @param word - The word.
92
+ * @returns The joblet's number, or null when the word names none.
93
+ */
94
+ export declare function jobletWord_parse(word: string): number | null;