@fnndsc/brasa 0.34.0 → 0.35.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 (425) hide show
  1. package/dist/api/models.d.ts +1 -2
  2. package/dist/api/models.js.map +1 -1
  3. package/dist/buildinfo.json +1 -1
  4. package/dist/builtins/debug.d.ts +1 -1
  5. package/dist/builtins/debug.js +12 -8
  6. package/dist/builtins/debug.js.map +1 -1
  7. package/dist/builtins/executable.d.ts +1 -1
  8. package/dist/builtins/executable.js +2 -1
  9. package/dist/builtins/executable.js.map +1 -1
  10. package/dist/builtins/fs/acl.d.ts +1 -16
  11. package/dist/builtins/fs/acl.js +3 -1
  12. package/dist/builtins/fs/acl.js.map +1 -1
  13. package/dist/builtins/fs/archive.js +1 -1
  14. package/dist/builtins/fs/archive.js.map +1 -1
  15. package/dist/builtins/fs/cat.d.ts +1 -1
  16. package/dist/builtins/fs/cat.js +47 -7
  17. package/dist/builtins/fs/cat.js.map +1 -1
  18. package/dist/builtins/fs/cd.d.ts +1 -19
  19. package/dist/builtins/fs/cd.js +45 -94
  20. package/dist/builtins/fs/cd.js.map +1 -1
  21. package/dist/builtins/fs/configWrite.d.ts +1 -1
  22. package/dist/builtins/fs/configWrite.js +1 -1
  23. package/dist/builtins/fs/configWrite.js.map +1 -1
  24. package/dist/builtins/fs/cp.d.ts +1 -1
  25. package/dist/builtins/fs/cp.js +19 -13
  26. package/dist/builtins/fs/cp.js.map +1 -1
  27. package/dist/builtins/fs/download.d.ts +1 -1
  28. package/dist/builtins/fs/download.js +2 -1
  29. package/dist/builtins/fs/download.js.map +1 -1
  30. package/dist/builtins/fs/du.d.ts +10 -1
  31. package/dist/builtins/fs/du.js +36 -2
  32. package/dist/builtins/fs/du.js.map +1 -1
  33. package/dist/builtins/fs/edit.d.ts +1 -1
  34. package/dist/builtins/fs/edit.js +10 -4
  35. package/dist/builtins/fs/edit.js.map +1 -1
  36. package/dist/builtins/fs/entries.d.ts +43 -0
  37. package/dist/builtins/fs/entries.js +81 -0
  38. package/dist/builtins/fs/entries.js.map +1 -0
  39. package/dist/builtins/fs/ls.d.ts +1 -2
  40. package/dist/builtins/fs/ls.js +70 -10
  41. package/dist/builtins/fs/ls.js.map +1 -1
  42. package/dist/builtins/fs/mkdir.d.ts +1 -1
  43. package/dist/builtins/fs/mkdir.js +29 -20
  44. package/dist/builtins/fs/mkdir.js.map +1 -1
  45. package/dist/builtins/fs/mv.d.ts +1 -1
  46. package/dist/builtins/fs/mv.js +40 -23
  47. package/dist/builtins/fs/mv.js.map +1 -1
  48. package/dist/builtins/fs/pull.d.ts +1 -1
  49. package/dist/builtins/fs/pull.js +2 -1
  50. package/dist/builtins/fs/pull.js.map +1 -1
  51. package/dist/builtins/fs/pwd.d.ts +1 -1
  52. package/dist/builtins/fs/pwd.js +9 -45
  53. package/dist/builtins/fs/pwd.js.map +1 -1
  54. package/dist/builtins/fs/rm.d.ts +1 -22
  55. package/dist/builtins/fs/rm.js +33 -58
  56. package/dist/builtins/fs/rm.js.map +1 -1
  57. package/dist/builtins/fs/rmdir.d.ts +1 -1
  58. package/dist/builtins/fs/rmdir.js +21 -40
  59. package/dist/builtins/fs/rmdir.js.map +1 -1
  60. package/dist/builtins/fs/touch.d.ts +1 -1
  61. package/dist/builtins/fs/touch.js +64 -25
  62. package/dist/builtins/fs/touch.js.map +1 -1
  63. package/dist/builtins/fs/tree.d.ts +1 -1
  64. package/dist/builtins/fs/tree.js +26 -3
  65. package/dist/builtins/fs/tree.js.map +1 -1
  66. package/dist/builtins/fs/upload.d.ts +1 -1
  67. package/dist/builtins/fs/upload.js +3 -1
  68. package/dist/builtins/fs/upload.js.map +1 -1
  69. package/dist/builtins/fs/url.d.ts +19 -0
  70. package/dist/builtins/fs/url.js +53 -0
  71. package/dist/builtins/fs/url.js.map +1 -0
  72. package/dist/builtins/fs/xattr.d.ts +1 -10
  73. package/dist/builtins/fs/xattr.js +3 -1
  74. package/dist/builtins/fs/xattr.js.map +1 -1
  75. package/dist/builtins/games/bytes.d.ts +1 -1
  76. package/dist/builtins/games/bytes.js +2 -1
  77. package/dist/builtins/games/bytes.js.map +1 -1
  78. package/dist/builtins/games/chimes.d.ts +1 -13
  79. package/dist/builtins/games/chimes.js +1 -1
  80. package/dist/builtins/games/chimes.js.map +1 -1
  81. package/dist/builtins/games/chrislab.d.ts +33 -0
  82. package/dist/builtins/games/chrislab.js +117 -0
  83. package/dist/builtins/games/chrislab.js.map +1 -0
  84. package/dist/builtins/games/cowsay.d.ts +1 -11
  85. package/dist/builtins/games/cowsay.js +1 -1
  86. package/dist/builtins/games/cowsay.js.map +1 -1
  87. package/dist/builtins/games/figlet.d.ts +1 -11
  88. package/dist/builtins/games/figlet.js +1 -1
  89. package/dist/builtins/games/figlet.js.map +1 -1
  90. package/dist/builtins/games/lab.d.ts +1 -43
  91. package/dist/builtins/games/lab.js +7 -111
  92. package/dist/builtins/games/lab.js.map +1 -1
  93. package/dist/builtins/games/lolcat.d.ts +1 -11
  94. package/dist/builtins/games/lolcat.js +1 -1
  95. package/dist/builtins/games/lolcat.js.map +1 -1
  96. package/dist/builtins/games/morse.d.ts +1 -10
  97. package/dist/builtins/games/morse.js +1 -1
  98. package/dist/builtins/games/morse.js.map +1 -1
  99. package/dist/builtins/games/numbers.d.ts +1 -10
  100. package/dist/builtins/games/numbers.js +1 -1
  101. package/dist/builtins/games/numbers.js.map +1 -1
  102. package/dist/builtins/games/play.d.ts +1 -11
  103. package/dist/builtins/games/play.js +1 -1
  104. package/dist/builtins/games/play.js.map +1 -1
  105. package/dist/builtins/games/qr.d.ts +1 -12
  106. package/dist/builtins/games/qr.js +1 -1
  107. package/dist/builtins/games/qr.js.map +1 -1
  108. package/dist/builtins/games/show.d.ts +1 -12
  109. package/dist/builtins/games/show.js +1 -1
  110. package/dist/builtins/games/show.js.map +1 -1
  111. package/dist/builtins/games/sky.d.ts +1 -11
  112. package/dist/builtins/games/sky.js +1 -1
  113. package/dist/builtins/games/sky.js.map +1 -1
  114. package/dist/builtins/games/text.d.ts +1 -10
  115. package/dist/builtins/games/text.js +1 -1
  116. package/dist/builtins/games/text.js.map +1 -1
  117. package/dist/builtins/games/wtf.d.ts +1 -9
  118. package/dist/builtins/games/wtf.js +1 -1
  119. package/dist/builtins/games/wtf.js.map +1 -1
  120. package/dist/builtins/help.d.ts +18 -15
  121. package/dist/builtins/help.js +60 -1197
  122. package/dist/builtins/help.js.map +1 -1
  123. package/dist/builtins/net/connect.d.ts +1 -1
  124. package/dist/builtins/net/connect.js +2 -1
  125. package/dist/builtins/net/connect.js.map +1 -1
  126. package/dist/builtins/net/cubepath.d.ts +1 -1
  127. package/dist/builtins/net/cubepath.js +1 -1
  128. package/dist/builtins/net/cubepath.js.map +1 -1
  129. package/dist/builtins/net/logout.d.ts +1 -1
  130. package/dist/builtins/net/logout.js +1 -1
  131. package/dist/builtins/net/logout.js.map +1 -1
  132. package/dist/builtins/net/netstat.d.ts +1 -1
  133. package/dist/builtins/net/netstat.js +1 -2
  134. package/dist/builtins/net/netstat.js.map +1 -1
  135. package/dist/builtins/net/pacs.d.ts +1 -1
  136. package/dist/builtins/net/pacs.js +3 -2
  137. package/dist/builtins/net/pacs.js.map +1 -1
  138. package/dist/builtins/net/pacsUtils.js +2 -1
  139. package/dist/builtins/net/pacsUtils.js.map +1 -1
  140. package/dist/builtins/net/query.csv.js +1 -1
  141. package/dist/builtins/net/query.csv.js.map +1 -1
  142. package/dist/builtins/net/query.d.ts +2 -2
  143. package/dist/builtins/net/query.fanout.d.ts +1 -1
  144. package/dist/builtins/net/query.fanout.js +1 -1
  145. package/dist/builtins/net/query.fanout.js.map +1 -1
  146. package/dist/builtins/net/query.js +3 -2
  147. package/dist/builtins/net/query.js.map +1 -1
  148. package/dist/builtins/net/status.d.ts +1 -1
  149. package/dist/builtins/net/status.js +2 -1
  150. package/dist/builtins/net/status.js.map +1 -1
  151. package/dist/builtins/parametersofplugin.d.ts +1 -1
  152. package/dist/builtins/parametersofplugin.js +1 -1
  153. package/dist/builtins/parametersofplugin.js.map +1 -1
  154. package/dist/builtins/pluginExecute.d.ts +1 -1
  155. package/dist/builtins/pluginExecute.js +3 -1
  156. package/dist/builtins/pluginExecute.js.map +1 -1
  157. package/dist/builtins/proc.d.ts +1 -2
  158. package/dist/builtins/proc.js +98 -9
  159. package/dist/builtins/proc.js.map +1 -1
  160. package/dist/builtins/res/compute.d.ts +1 -1
  161. package/dist/builtins/res/compute.js +2 -1
  162. package/dist/builtins/res/compute.js.map +1 -1
  163. package/dist/builtins/res/dicom.d.ts +2 -2
  164. package/dist/builtins/res/dicom.js +1 -2
  165. package/dist/builtins/res/dicom.js.map +1 -1
  166. package/dist/builtins/res/expect.d.ts +1 -1
  167. package/dist/builtins/res/expect.js +2 -1
  168. package/dist/builtins/res/expect.js.map +1 -1
  169. package/dist/builtins/res/feed.d.ts +1 -1
  170. package/dist/builtins/res/feed.diagram.d.ts +1 -2
  171. package/dist/builtins/res/feed.diagram.js +2 -2
  172. package/dist/builtins/res/feed.diagram.js.map +1 -1
  173. package/dist/builtins/res/feed.js +3 -1
  174. package/dist/builtins/res/feed.js.map +1 -1
  175. package/dist/builtins/res/feed.tree.d.ts +1 -1
  176. package/dist/builtins/res/feed.tree.js +1 -1
  177. package/dist/builtins/res/feed.tree.js.map +1 -1
  178. package/dist/builtins/res/files.d.ts +1 -1
  179. package/dist/builtins/res/files.js +1 -1
  180. package/dist/builtins/res/files.js.map +1 -1
  181. package/dist/builtins/res/gather.d.ts +1 -1
  182. package/dist/builtins/res/gather.js +1 -1
  183. package/dist/builtins/res/gather.js.map +1 -1
  184. package/dist/builtins/res/gather.store.js.map +1 -1
  185. package/dist/builtins/res/group.d.ts +1 -1
  186. package/dist/builtins/res/group.js +1 -1
  187. package/dist/builtins/res/group.js.map +1 -1
  188. package/dist/builtins/res/image.d.ts +1 -20
  189. package/dist/builtins/res/image.js +1 -2
  190. package/dist/builtins/res/image.js.map +1 -1
  191. package/dist/builtins/res/pipeline.d.ts +1 -1
  192. package/dist/builtins/res/pipeline.diagram.d.ts +1 -1
  193. package/dist/builtins/res/pipeline.diagram.js +2 -2
  194. package/dist/builtins/res/pipeline.diagram.js.map +1 -1
  195. package/dist/builtins/res/pipeline.js +3 -1
  196. package/dist/builtins/res/pipeline.js.map +1 -1
  197. package/dist/builtins/res/play.d.ts +1 -1
  198. package/dist/builtins/res/play.js +2 -1
  199. package/dist/builtins/res/play.js.map +1 -1
  200. package/dist/builtins/res/plugin.d.ts +1 -1
  201. package/dist/builtins/res/plugin.info.d.ts +1 -1
  202. package/dist/builtins/res/plugin.info.js +2 -1
  203. package/dist/builtins/res/plugin.info.js.map +1 -1
  204. package/dist/builtins/res/plugin.js +2 -2
  205. package/dist/builtins/res/plugin.js.map +1 -1
  206. package/dist/builtins/res/plugininstance.d.ts +1 -1
  207. package/dist/builtins/res/plugininstance.js +1 -1
  208. package/dist/builtins/res/plugininstance.js.map +1 -1
  209. package/dist/builtins/res/pluginmeta.d.ts +1 -1
  210. package/dist/builtins/res/pluginmeta.js +1 -1
  211. package/dist/builtins/res/pluginmeta.js.map +1 -1
  212. package/dist/builtins/res/record.d.ts +1 -1
  213. package/dist/builtins/res/record.js +1 -1
  214. package/dist/builtins/res/record.js.map +1 -1
  215. package/dist/builtins/res/tag.d.ts +1 -1
  216. package/dist/builtins/res/tag.js +1 -1
  217. package/dist/builtins/res/tag.js.map +1 -1
  218. package/dist/builtins/res/user.d.ts +1 -1
  219. package/dist/builtins/res/user.js +2 -1
  220. package/dist/builtins/res/user.js.map +1 -1
  221. package/dist/builtins/res/workflow.d.ts +1 -1
  222. package/dist/builtins/res/workflow.js +1 -1
  223. package/dist/builtins/res/workflow.js.map +1 -1
  224. package/dist/builtins/store.d.ts +1 -1
  225. package/dist/builtins/store.js +2 -1
  226. package/dist/builtins/store.js.map +1 -1
  227. package/dist/builtins/sys/cal.d.ts +1 -12
  228. package/dist/builtins/sys/cal.js +1 -1
  229. package/dist/builtins/sys/cal.js.map +1 -1
  230. package/dist/builtins/sys/context.d.ts +1 -1
  231. package/dist/builtins/sys/context.js +1 -1
  232. package/dist/builtins/sys/context.js.map +1 -1
  233. package/dist/builtins/sys/date.d.ts +1 -12
  234. package/dist/builtins/sys/date.js +1 -1
  235. package/dist/builtins/sys/date.js.map +1 -1
  236. package/dist/builtins/sys/fortune.d.ts +1 -11
  237. package/dist/builtins/sys/fortune.js +1 -1
  238. package/dist/builtins/sys/fortune.js.map +1 -1
  239. package/dist/builtins/sys/motd.d.ts +1 -18
  240. package/dist/builtins/sys/motd.js +3 -3
  241. package/dist/builtins/sys/motd.js.map +1 -1
  242. package/dist/builtins/sys/notes.d.ts +1 -2
  243. package/dist/builtins/sys/notes.js +1 -2
  244. package/dist/builtins/sys/notes.js.map +1 -1
  245. package/dist/builtins/sys/physicalmode.d.ts +1 -1
  246. package/dist/builtins/sys/physicalmode.js +1 -1
  247. package/dist/builtins/sys/physicalmode.js.map +1 -1
  248. package/dist/builtins/sys/timing.d.ts +1 -1
  249. package/dist/builtins/sys/timing.js +1 -1
  250. package/dist/builtins/sys/timing.js.map +1 -1
  251. package/dist/builtins/sys/version.d.ts +1 -7
  252. package/dist/builtins/sys/version.js +1 -1
  253. package/dist/builtins/sys/version.js.map +1 -1
  254. package/dist/builtins/sys/weather.d.ts +1 -1
  255. package/dist/builtins/sys/weather.js +1 -1
  256. package/dist/builtins/sys/weather.js.map +1 -1
  257. package/dist/builtins/sys/whoami.d.ts +1 -1
  258. package/dist/builtins/sys/whoami.js +2 -1
  259. package/dist/builtins/sys/whoami.js.map +1 -1
  260. package/dist/builtins/utils.d.ts +2 -19
  261. package/dist/builtins/utils.js +5 -55
  262. package/dist/builtins/utils.js.map +1 -1
  263. package/dist/builtins/wildcard.d.ts +4 -53
  264. package/dist/builtins/wildcard.js +3 -177
  265. package/dist/builtins/wildcard.js.map +1 -1
  266. package/dist/chris/backend.d.ts +22 -0
  267. package/dist/chris/backend.js +102 -0
  268. package/dist/chris/backend.js.map +1 -0
  269. package/dist/chris/binEntry.js.map +1 -0
  270. package/dist/chris/binMount.d.ts +60 -0
  271. package/dist/chris/binMount.js +154 -0
  272. package/dist/chris/binMount.js.map +1 -0
  273. package/dist/{core → chris}/chiliDelegate.d.ts +1 -1
  274. package/dist/{core → chris}/chiliDelegate.js +1 -1
  275. package/dist/chris/chiliDelegate.js.map +1 -0
  276. package/dist/chris/chrisCommands.d.ts +14 -0
  277. package/dist/chris/chrisCommands.js +168 -0
  278. package/dist/chris/chrisCommands.js.map +1 -0
  279. package/dist/chris/commandFallback.d.ts +3 -0
  280. package/dist/chris/commandFallback.js +113 -0
  281. package/dist/chris/commandFallback.js.map +1 -0
  282. package/dist/chris/completion.d.ts +3 -0
  283. package/dist/chris/completion.js +100 -0
  284. package/dist/chris/completion.js.map +1 -0
  285. package/dist/chris/connect.js.map +1 -0
  286. package/dist/chris/debug.d.ts +10 -0
  287. package/dist/chris/debug.js +9 -0
  288. package/dist/chris/debug.js.map +1 -0
  289. package/dist/chris/files.d.ts +16 -0
  290. package/dist/chris/files.js +178 -0
  291. package/dist/chris/files.js.map +1 -0
  292. package/dist/chris/filesystem.d.ts +3 -0
  293. package/dist/chris/filesystem.js +57 -0
  294. package/dist/chris/filesystem.js.map +1 -0
  295. package/dist/chris/help.d.ts +16 -0
  296. package/dist/chris/help.js +1197 -0
  297. package/dist/chris/help.js.map +1 -0
  298. package/dist/chris/jobsState.js.map +1 -0
  299. package/dist/chris/mounts.d.ts +7 -0
  300. package/dist/chris/mounts.js +34 -0
  301. package/dist/chris/mounts.js.map +1 -0
  302. package/dist/chris/navigation.d.ts +40 -0
  303. package/dist/chris/navigation.js +160 -0
  304. package/dist/chris/navigation.js.map +1 -0
  305. package/dist/{core → chris}/promptContext.d.ts +2 -2
  306. package/dist/{core → chris}/promptContext.js +3 -3
  307. package/dist/chris/promptContext.js.map +1 -0
  308. package/dist/chris/references.d.ts +14 -0
  309. package/dist/chris/references.js +113 -0
  310. package/dist/chris/references.js.map +1 -0
  311. package/dist/chris/tasks.d.ts +31 -0
  312. package/dist/chris/tasks.js +55 -0
  313. package/dist/chris/tasks.js.map +1 -0
  314. package/dist/chris/universeLayout.js.map +1 -0
  315. package/dist/chris/watch.d.ts +3 -0
  316. package/dist/chris/watch.js +15 -0
  317. package/dist/chris/watch.js.map +1 -0
  318. package/dist/core/answerKinds.d.ts +32 -0
  319. package/dist/core/answerKinds.js +56 -0
  320. package/dist/core/answerKinds.js.map +1 -0
  321. package/dist/core/backend.d.ts +274 -0
  322. package/dist/core/backend.js +32 -0
  323. package/dist/core/backend.js.map +1 -0
  324. package/dist/core/commandOrder.d.ts +16 -0
  325. package/dist/core/commandOrder.js +17 -0
  326. package/dist/core/commandOrder.js.map +1 -0
  327. package/dist/core/commandRegistry.d.ts +120 -0
  328. package/dist/core/commandRegistry.js +124 -0
  329. package/dist/core/commandRegistry.js.map +1 -0
  330. package/dist/core/coreCommands.d.ts +16 -0
  331. package/dist/core/coreCommands.js +159 -0
  332. package/dist/core/coreCommands.js.map +1 -0
  333. package/dist/core/dispatch.d.ts +2 -19
  334. package/dist/core/dispatch.js +86 -447
  335. package/dist/core/dispatch.js.map +1 -1
  336. package/dist/core/elevation.d.ts +5 -5
  337. package/dist/core/elevation.js +12 -7
  338. package/dist/core/elevation.js.map +1 -1
  339. package/dist/core/engine.d.ts +30 -18
  340. package/dist/core/engine.js +58 -116
  341. package/dist/core/engine.js.map +1 -1
  342. package/dist/core/errorText.d.ts +14 -0
  343. package/dist/core/errorText.js +26 -0
  344. package/dist/core/errorText.js.map +1 -0
  345. package/dist/core/expansion.d.ts +0 -2
  346. package/dist/core/expansion.js +43 -101
  347. package/dist/core/expansion.js.map +1 -1
  348. package/dist/core/fileRefusal.d.ts +4 -15
  349. package/dist/core/fileRefusal.js +4 -26
  350. package/dist/core/fileRefusal.js.map +1 -1
  351. package/dist/core/filesystem.d.ts +27 -0
  352. package/dist/core/filesystem.js +45 -0
  353. package/dist/core/filesystem.js.map +1 -0
  354. package/dist/core/handlerRun.d.ts +30 -0
  355. package/dist/core/handlerRun.js +34 -0
  356. package/dist/core/handlerRun.js.map +1 -0
  357. package/dist/core/paths.d.ts +18 -0
  358. package/dist/core/paths.js +49 -0
  359. package/dist/core/paths.js.map +1 -0
  360. package/dist/core/preprocess.d.ts +1 -1
  361. package/dist/core/preprocess.js +1 -1
  362. package/dist/core/preprocess.js.map +1 -1
  363. package/dist/core/sink.d.ts +1 -1
  364. package/dist/core/sink.js +0 -8
  365. package/dist/core/sink.js.map +1 -1
  366. package/dist/core/taskWatch.d.ts +42 -0
  367. package/dist/core/taskWatch.js +142 -0
  368. package/dist/core/taskWatch.js.map +1 -0
  369. package/dist/core/tasks.d.ts +46 -0
  370. package/dist/core/tasks.js +102 -0
  371. package/dist/core/tasks.js.map +1 -0
  372. package/dist/core.d.ts +22 -0
  373. package/dist/core.js +23 -0
  374. package/dist/core.js.map +1 -0
  375. package/dist/index.d.ts +8 -5
  376. package/dist/index.js +17 -5
  377. package/dist/index.js.map +1 -1
  378. package/dist/lib/completer/index.js +41 -99
  379. package/dist/lib/completer/index.js.map +1 -1
  380. package/dist/lib/prefetch.js +2 -2
  381. package/dist/lib/prefetch.js.map +1 -1
  382. package/dist/lib/vfs/listing.d.ts +1 -1
  383. package/dist/lib/vfs/providers/static.d.ts +15 -6
  384. package/dist/lib/vfs/providers/static.js +20 -43
  385. package/dist/lib/vfs/providers/static.js.map +1 -1
  386. package/dist/lib/vfs/providers/static_content.d.ts +4 -4
  387. package/dist/lib/vfs/providers/static_content.js +4 -24
  388. package/dist/lib/vfs/providers/static_content.js.map +1 -1
  389. package/dist/lib/vfs/vfs.d.ts +11 -2
  390. package/dist/lib/vfs/vfs.js +90 -51
  391. package/dist/lib/vfs/vfs.js.map +1 -1
  392. package/dist/lib/wildcard.d.ts +57 -0
  393. package/dist/lib/wildcard.js +183 -0
  394. package/dist/lib/wildcard.js.map +1 -0
  395. package/dist/notes.json +1 -1
  396. package/dist/null/backend.d.ts +29 -0
  397. package/dist/null/backend.js +41 -0
  398. package/dist/null/backend.js.map +1 -0
  399. package/dist/session/answer.d.ts +4 -4
  400. package/dist/session/answer.js +0 -2
  401. package/dist/session/answer.js.map +1 -1
  402. package/dist/session/index.d.ts +12 -10
  403. package/dist/session/index.js +9 -38
  404. package/dist/session/index.js.map +1 -1
  405. package/package.json +13 -7
  406. package/dist/builtins/fs/folderExists.d.ts +0 -8
  407. package/dist/builtins/fs/folderExists.js +0 -67
  408. package/dist/builtins/fs/folderExists.js.map +0 -1
  409. package/dist/command-keys.d.ts +0 -8
  410. package/dist/command-keys.js +0 -37
  411. package/dist/command-keys.js.map +0 -1
  412. package/dist/core/chiliDelegate.js.map +0 -1
  413. package/dist/core/connect.js.map +0 -1
  414. package/dist/core/jobsState.js.map +0 -1
  415. package/dist/core/promptContext.js.map +0 -1
  416. package/dist/lib/vfs/providers/binEntry.js.map +0 -1
  417. package/dist/universe/universeLayout.js.map +0 -1
  418. /package/dist/{lib/vfs/providers → chris}/binEntry.d.ts +0 -0
  419. /package/dist/{lib/vfs/providers → chris}/binEntry.js +0 -0
  420. /package/dist/{core → chris}/connect.d.ts +0 -0
  421. /package/dist/{core → chris}/connect.js +0 -0
  422. /package/dist/{core → chris}/jobsState.d.ts +0 -0
  423. /package/dist/{core → chris}/jobsState.js +0 -0
  424. /package/dist/{universe → chris}/universeLayout.d.ts +0 -0
  425. /package/dist/{universe → chris}/universeLayout.js +0 -0
@@ -0,0 +1,100 @@
1
+ /**
2
+ * @file What a ChRIS session adds to completion: its plugins as command
3
+ * words, a pipeline's `--node.field` options, and the names completed at `/`.
4
+ *
5
+ * @module
6
+ */
7
+ import { plugins_listAll, pipelineManifest_get } from '@fnndsc/salsa';
8
+ import { listCache_get } from '@fnndsc/cumin';
9
+ /**
10
+ * Fetches available plugin names from /bin in the format: name-vVersion.
11
+ * This matches the display format used in /bin listings.
12
+ * Uses cache first for fast completion.
13
+ * @returns Array of plugin names with version suffixes.
14
+ */
15
+ async function plugins_getNames() {
16
+ try {
17
+ // Check cache first for /bin
18
+ const listCache = listCache_get();
19
+ const cached = listCache.cache_get('/bin');
20
+ if (cached && cached.data) {
21
+ // Return cached plugin names immediately
22
+ return cached.data.map((item) => item.name);
23
+ }
24
+ // Cache miss - fetch from API (only on first tab completion)
25
+ const plugins = await plugins_listAll({});
26
+ if (plugins && plugins.tableData) {
27
+ const pluginNames = plugins.tableData.map((p) => {
28
+ const name = typeof p.name === 'string' ? p.name : String(p.name ?? '');
29
+ const version = typeof p.version === 'string' ? p.version : String(p.version ?? '');
30
+ // Format as name-vVersion to match /bin display format
31
+ return version ? `${name}-v${version}` : name;
32
+ });
33
+ // Cache it for next time
34
+ const lsItems = plugins.tableData.map((p) => {
35
+ const name = typeof p.name === 'string' ? p.name : String(p.name ?? '');
36
+ const version = typeof p.version === 'string' ? p.version : String(p.version ?? '');
37
+ return {
38
+ name: version ? `${name}-v${version}` : name,
39
+ type: 'plugin',
40
+ size: 0,
41
+ owner: 'system',
42
+ date: p.creation_date ? String(p.creation_date) : '',
43
+ };
44
+ });
45
+ listCache.cache_set('/bin', lsItems);
46
+ return pluginNames;
47
+ }
48
+ }
49
+ catch (e) {
50
+ // Silently fail if plugins cannot be fetched
51
+ }
52
+ return [];
53
+ }
54
+ /** The fields every pipeline node takes for its execution. */
55
+ const EXECUTION_FIELDS = [
56
+ 'compute_resource_name', 'cpu_limit', 'memory_limit', 'gpu_limit', 'number_of_workers',
57
+ ];
58
+ /**
59
+ * The `--node.field` options of the pipeline a line runs (`pipeline run X`
60
+ * or `X` itself), starting with the word typed.
61
+ *
62
+ * @param args - The line's words.
63
+ * @param word - The option word typed so far.
64
+ * @returns The options, none when the pipeline cannot be read, or null for
65
+ * a line naming no pipeline.
66
+ */
67
+ async function pipelineOptions_get(args, word) {
68
+ const pipelineSpecifier = args[0] === 'pipeline' && args[1] === 'run'
69
+ ? args[2]
70
+ : args[0];
71
+ if (pipelineSpecifier === undefined)
72
+ return null;
73
+ const result = await pipelineManifest_get(pipelineSpecifier);
74
+ if (!result.ok)
75
+ return [];
76
+ const options = [];
77
+ const manifest = result.value;
78
+ for (const node of manifest.nodes) {
79
+ const titleUsable = /^[A-Za-z0-9_-]+$/.test(node.title) &&
80
+ manifest.nodes.filter((candidate) => candidate.title === node.title).length === 1;
81
+ const selectors = titleUsable ? [node.title, `@${node.pipingID}`] : [`@${node.pipingID}`];
82
+ const fields = [
83
+ ...EXECUTION_FIELDS,
84
+ ...(node.parameterDefinitions ?? [])
85
+ .filter((parameter) => parameter.name !== 'plugininstances')
86
+ .map((parameter) => parameter.name),
87
+ ];
88
+ for (const field of fields) {
89
+ options.push(...selectors.map((selector) => `--${selector}.${field}`));
90
+ }
91
+ }
92
+ return options.filter((option) => option.startsWith(word));
93
+ }
94
+ /** What the ChRIS session adds to completion. */
95
+ export const chrisCompletion = {
96
+ commandWords: plugins_getNames,
97
+ options: pipelineOptions_get,
98
+ rootWords: ['bin', 'usr'],
99
+ };
100
+ //# sourceMappingURL=completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/chris/completion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAoD,MAAM,eAAe,CAAC;AACxH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI9C;;;;;GAKG;AACH,KAAK,UAAU,gBAAgB;IAC7B,IAAI,CAAC;QACH,6BAA6B;QAC7B,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAgB,MAAM,CAAC,CAAC;QAE1D,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAC1B,yCAAyC;YACzC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,CAAC;QAED,6DAA6D;QAC7D,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACjC,MAAM,WAAW,GAAa,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAA0B,EAAE,EAAE;gBACjF,MAAM,IAAI,GAAW,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAChF,MAAM,OAAO,GAAW,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;gBAC5F,uDAAuD;gBACvD,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAChD,CAAC,CAAC,CAAC;YAEH,yBAAyB;YACzB,MAAM,OAAO,GAAkB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAA0B,EAAE,EAAE;gBAClF,MAAM,IAAI,GAAW,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAChF,MAAM,OAAO,GAAW,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;gBAC5F,OAAO;oBACL,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI;oBAC5C,IAAI,EAAE,QAAiB;oBACvB,IAAI,EAAE,CAAC;oBACP,KAAK,EAAE,QAAQ;oBACf,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;iBACrD,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAErC,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,6CAA6C;IAC/C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAGD,8DAA8D;AAC9D,MAAM,gBAAgB,GAA0B;IAC9C,uBAAuB,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB;CACvF,CAAC;AAEF;;;;;;;;GAQG;AACH,KAAK,UAAU,mBAAmB,CAAC,IAAc,EAAE,IAAY;IAC7D,MAAM,iBAAiB,GAAuB,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK;QACvF,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACT,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACZ,IAAI,iBAAiB,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IAC7D,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAqB,MAAM,CAAC,KAAyB,CAAC;IACpE,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,WAAW,GAAY,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAC9D,QAAQ,CAAC,KAAK,CAAC,MAAM,CACnB,CAAC,SAA+B,EAAW,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAC7E,CAAC,MAAM,KAAK,CAAC,CAAC;QACjB,MAAM,SAAS,GAAa,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpG,MAAM,MAAM,GAAa;YACvB,GAAG,gBAAgB;YACnB,GAAG,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC;iBACjC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,iBAAiB,CAAC;iBAC3D,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;SACtC,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAgB,EAAU,EAAE,CAAC,KAAK,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAc,EAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,iDAAiD;AACjD,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,YAAY,EAAE,gBAAgB;IAC9B,OAAO,EAAE,mBAAmB;IAC5B,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;CAC1B,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/chris/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAyB,YAAY,EAAE,OAAO,EAA4B,MAAM,eAAe,CAAC;AAqBvG;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,MAAM,OAAO,GAAkB,MAAM,iBAAiB,EAAE,CAAC;IAEzD,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,KAAK,GAAkB,MAAM,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IACzC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAkB,MAAM,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QACpE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YACvB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QAC1C,CAAC;QACD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IACzC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAC7G,CAAC;AACH,CAAC;AAeD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAAY,EAAE,GAAW,EAAE,KAAa;IACrF,MAAM,OAAO,GAAwB,MAAM,OAAO,CAAC,UAAU,CAAC,2BAA2B,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IAChH,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,iBAAiB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IAC1F,CAAC;IACD,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;IACxB,MAAM,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,EAAE,EAAE,CAAC;AACrE,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @file Debugging in a ChRIS session: the CUBE connection's own flag.
3
+ *
4
+ * @module
5
+ */
6
+ import type { Backend } from '../core/backend.js';
7
+ /** Whether the CUBE connection is debugging, or null until its configuration exists. */
8
+ export declare const chrisDebug_get: NonNullable<Backend['debug_get']>;
9
+ /** Turns the CUBE connection's debugging on or off, once its configuration exists. */
10
+ export declare const chrisDebug_set: NonNullable<Backend['debug_set']>;
@@ -0,0 +1,9 @@
1
+ import { session } from '../session/index.js';
2
+ /** Whether the CUBE connection is debugging, or null until its configuration exists. */
3
+ export const chrisDebug_get = () => (session.connection?.config ? Boolean(session.connection.config.debug) : null);
4
+ /** Turns the CUBE connection's debugging on or off, once its configuration exists. */
5
+ export const chrisDebug_set = (on) => {
6
+ if (session.connection?.config)
7
+ session.connection.config.debug = on;
8
+ };
9
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/chris/debug.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,wFAAwF;AACxF,MAAM,CAAC,MAAM,cAAc,GAAsC,GAAmB,EAAE,CACpF,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAEjF,sFAAsF;AACtF,MAAM,CAAC,MAAM,cAAc,GAAsC,CAAC,EAAW,EAAQ,EAAE;IACrF,IAAI,OAAO,CAAC,UAAU,EAAE,MAAM;QAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;AACvE,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { Backend } from '../core/backend.js';
2
+ import { FileReadRefusal } from '../core/fileRefusal.js';
3
+ /**
4
+ * Reads the kernel's notes since a checkpoint and names the refusal: a
5
+ * status for the route and a line for the operator. CUBE's own status is
6
+ * taken from the note when it carries one; a file the lookup could not
7
+ * find is 404; anything else is the kernel's own failure, 502, so a 404
8
+ * never again stands for "something went wrong".
9
+ *
10
+ * @param filePath - The file asked for.
11
+ * @param notes - The kernel's error notes since the read began, oldest first.
12
+ * @returns The refusal to throw.
13
+ */
14
+ export declare function fileRefusal_name(filePath: string, notes: ReadonlyArray<string>): FileReadRefusal;
15
+ /** The ChRIS backend's files. */
16
+ export declare const chrisFiles: NonNullable<Backend['files']>;
@@ -0,0 +1,178 @@
1
+ /**
2
+ * @file The ChRIS backend's file bytes for a surface: read from and written
3
+ * to CUBE at a path the session resolves, `/proc` projections included.
4
+ *
5
+ * @module
6
+ */
7
+ import { vfsOutcome_toResult } from '@fnndsc/fond';
8
+ import { FileReadRefusal } from '../core/fileRefusal.js';
9
+ /**
10
+ * Reads the kernel's notes since a checkpoint and names the refusal: a
11
+ * status for the route and a line for the operator. CUBE's own status is
12
+ * taken from the note when it carries one; a file the lookup could not
13
+ * find is 404; anything else is the kernel's own failure, 502, so a 404
14
+ * never again stands for "something went wrong".
15
+ *
16
+ * @param filePath - The file asked for.
17
+ * @param notes - The kernel's error notes since the read began, oldest first.
18
+ * @returns The refusal to throw.
19
+ */
20
+ export function fileRefusal_name(filePath, notes) {
21
+ const last = notes[notes.length - 1] ?? '';
22
+ const status = notes.map((note) => Number(/\b(40[0-9]|41[0-9]|5[0-9][0-9])\b/.exec(note)?.[1] ?? NaN)).find((n) => !Number.isNaN(n));
23
+ if (status === 403 || status === 401)
24
+ return new FileReadRefusal(filePath, 403, 'not yours to read: CUBE refused the bytes (403)');
25
+ if (status === 404 || /not found|no files found/i.test(last))
26
+ return new FileReadRefusal(filePath, 404, 'no such file in CUBE (404)');
27
+ if (status !== undefined && status >= 500)
28
+ return new FileReadRefusal(filePath, 502, `CUBE could not serve it (${status})`);
29
+ // A note reads `[function ] | message`; the operator gets the message.
30
+ return new FileReadRefusal(filePath, 502, last.replace(/^\[[^\]]*\]\s*\|\s*/, '').trim() || 'could not be read');
31
+ }
32
+ /**
33
+ * Writes bytes to one ChRIS path through the kernel's own create.
34
+ *
35
+ * A browser surface holds bytes the daemon's machine has never seen; this
36
+ * is how they reach the store without any surface talking to CUBE.
37
+ *
38
+ * @param filePath - The destination path (absolute or cwd-relative).
39
+ * @param bytes - The content to write.
40
+ * @throws {Error} When the store refused the write.
41
+ */
42
+ async function file_write(filePath, bytes) {
43
+ const { path_resolve } = await import('../builtins/utils.js');
44
+ const { files_create } = await import('@fnndsc/salsa');
45
+ const { listCache_get } = await import('@fnndsc/cumin');
46
+ const resolved = await path_resolve(filePath);
47
+ const written = await files_create(bytes, resolved);
48
+ if (!written) {
49
+ throw new Error(`cannot write ${filePath}`);
50
+ }
51
+ // A write invalidates the listing it changed, as every writing builtin
52
+ // does. Without this the browser that delivered the file asks for the
53
+ // folder again and is served the folder as it was before the delivery —
54
+ // which reads as an upload that silently did nothing.
55
+ const parent = resolved.replace(/\/[^/]*$/, '') || '/';
56
+ listCache_get().cache_invalidate(parent);
57
+ }
58
+ /**
59
+ * A `/proc` job data path as the physical file behind it, when the node's
60
+ * output folder is a link. Returns the input unchanged when it is not a
61
+ * data path or resolves no further.
62
+ *
63
+ * @param projected - A path under a projection.
64
+ * @returns The physical path, or the input.
65
+ */
66
+ async function projectedPath_physical(projected) {
67
+ try {
68
+ const link = /^(\/proc\/jobs\/feed_\d+\/[^/]+\/data)(\/.*)?$/.exec(projected);
69
+ if (link === null)
70
+ return projected;
71
+ const { vfsDispatcher } = await import('@fnndsc/salsa');
72
+ const target = await vfsDispatcher.linkTarget_resolve(link[1]);
73
+ if (!target.ok)
74
+ return projected;
75
+ const { logical_toPhysical } = await import('@fnndsc/chili/utils');
76
+ const physical = await logical_toPhysical(`${target.value}${link[2] ?? ''}`);
77
+ return physical.ok ? physical.value : projected;
78
+ }
79
+ catch {
80
+ return projected;
81
+ }
82
+ }
83
+ /**
84
+ * Reads one ChRIS file's raw bytes through ChILI, resolved against the
85
+ * session's working directory.
86
+ *
87
+ * Resolved, as its twin {@link file_write} is: a surface addresses a file
88
+ * the way the session does, and the session's paths include the relative
89
+ * ones and the `/proc` projections. Handing the raw path to ChILI meant a
90
+ * volume produced by a run could not be read at the address the graph
91
+ * itself gives for it — the node's own `data` — while the same bytes read
92
+ * fine under `/home`. One file, two names, one of them refused.
93
+ *
94
+ * @param filePath - The file's path (absolute, cwd-relative, or projected).
95
+ * @returns The file's bytes.
96
+ * @throws {Error} When the path does not resolve to a readable file.
97
+ */
98
+ async function file_read(filePath) {
99
+ const { path_resolve } = await import('../builtins/utils.js');
100
+ const { errorStack } = await import('@fnndsc/fond');
101
+ const since = errorStack.checkpoint_mark();
102
+ const refusal = () => fileRefusal_name(filePath, errorStack.checkpoint_drain(since).map((note) => note.message));
103
+ const resolved = await path_resolve(filePath);
104
+ const { vfsDispatcher } = await import('@fnndsc/salsa');
105
+ // A projection is read by the provider that owns it — `/proc/jobs/…/data`
106
+ // follows the node's own data link and delegates to the file behind it.
107
+ // ChILI's cat knows only CFS, so a path under a projection reached this
108
+ // route and 404'd: the volume a run had just produced could not be read
109
+ // at the address its own graph gives for it.
110
+ if (vfsDispatcher.path_isVirtual(resolved)) {
111
+ const projected = vfsOutcome_toResult(await vfsDispatcher.readBinary(resolved), 'readBinary', resolved);
112
+ if (projected.ok)
113
+ return projected.value;
114
+ // A node's data link can point at a folder that is ITSELF a link — a
115
+ // `pl-dircopy` of a PACS pull stores its DICOM under `/SERVICES/PACS`
116
+ // — and the provider hands back the logical name, which no file id
117
+ // answers to. Follow it the rest of the way rather than refusing a
118
+ // file the same graph just listed.
119
+ const physical = await projectedPath_physical(resolved);
120
+ if (physical !== resolved) {
121
+ const { files_catBinary: catLinked } = await import('@fnndsc/chili/commands/fs/cat.js');
122
+ const followed = await catLinked(physical);
123
+ if (followed.ok)
124
+ return followed.value;
125
+ }
126
+ throw refusal();
127
+ }
128
+ const { files_catBinary } = await import('@fnndsc/chili/commands/fs/cat.js');
129
+ const result = await files_catBinary(resolved);
130
+ if (!result.ok) {
131
+ throw refusal();
132
+ }
133
+ errorStack.checkpoint_drain(since);
134
+ return result.value;
135
+ }
136
+ /**
137
+ * Opens one ChRIS file's bytes as a stream, resolved as {@link file_read}
138
+ * resolves, so a download is served as CUBE sends it and never held whole
139
+ * in the daemon. A projection (`/proc/…/data`) is read whole, as before:
140
+ * those are small virtual files or links the read already follows.
141
+ *
142
+ * @param filePath - The file's path (absolute, cwd-relative, or projected).
143
+ * @returns The stream and its size when CUBE gave one.
144
+ * @throws {FileReadRefusal} When the file cannot be opened, with the kernel's reason.
145
+ */
146
+ async function file_stream(filePath) {
147
+ const { path_resolve } = await import('../builtins/utils.js');
148
+ const { vfsDispatcher, fileContent_getBinaryStream } = await import('@fnndsc/salsa');
149
+ const resolved = await path_resolve(filePath);
150
+ // A node's `/proc/…/data` path streams the file behind its data link; any
151
+ // other projection is small and read whole.
152
+ let target = resolved;
153
+ if (vfsDispatcher.path_isVirtual(resolved)) {
154
+ target = await projectedPath_physical(resolved);
155
+ if (target === resolved) {
156
+ const bytes = await file_read(filePath);
157
+ const { Readable } = await import('node:stream');
158
+ return { stream: Readable.from(bytes), size: bytes.length };
159
+ }
160
+ }
161
+ const { errorStack } = await import('@fnndsc/fond');
162
+ const since = errorStack.checkpoint_mark();
163
+ const { path_resolveChrisFs } = await import('@fnndsc/chili/utils/cli.js');
164
+ const physical = await path_resolveChrisFs(target, {});
165
+ const opened = await fileContent_getBinaryStream(physical);
166
+ const notes = errorStack.checkpoint_drain(since).map((note) => note.message);
167
+ if (!opened.ok)
168
+ throw fileRefusal_name(filePath, notes);
169
+ const value = opened.value;
170
+ return { stream: value.stream, ...(value.size !== undefined ? { size: value.size } : {}) };
171
+ }
172
+ /** The ChRIS backend's files. */
173
+ export const chrisFiles = {
174
+ read: file_read,
175
+ write: file_write,
176
+ stream: file_stream,
177
+ };
178
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/chris/files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BackendFilesystem } from '../core/backend.js';
2
+ /** The ChRIS session's filesystem. */
3
+ export declare const chrisFilesystem: BackendFilesystem;
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @file The filesystem of a ChRIS session, as the core's listings read it:
3
+ * salsa's dispatcher (CUBE's mounts, and `/bin` from `mounts.ts`), cumin's
4
+ * listing cache, a feed's tags, and the link-aware path walk.
5
+ *
6
+ * @module
7
+ */
8
+ import { vfsDispatcher } from '@fnndsc/salsa';
9
+ import { listCache_get, feedTags_byFeed } from '@fnndsc/cumin';
10
+ import { errorStack } from '@fnndsc/fond';
11
+ import { CHRIS_STRUCTURAL_PATHS, chrisFolder_enter, chrisSegment_title } from './navigation.js';
12
+ /**
13
+ * Hangs each feed's tags on its row, for a long listing that holds feeds
14
+ * (`feed_N` rows). A listing with no feed in it reads nothing; a map that
15
+ * cannot be read leaves the rows as they were.
16
+ *
17
+ * @param items - The rows.
18
+ * @returns The rows, feeds carrying their tags.
19
+ */
20
+ async function feedTags_annotate(items) {
21
+ const feedOf = (name) => {
22
+ const match = name.match(/^feed_(\d+)$/);
23
+ return match === null ? null : Number(match[1]);
24
+ };
25
+ if (!items.some((item) => feedOf(item.name) !== null))
26
+ return items;
27
+ const map = await feedTags_byFeed();
28
+ if (!map.ok) {
29
+ errorStack.stack_pop();
30
+ return items;
31
+ }
32
+ return items.map((item) => {
33
+ const feedId = feedOf(item.name);
34
+ const tags = feedId === null ? undefined : map.value.get(feedId);
35
+ return tags === undefined ? item : { ...item, tags };
36
+ });
37
+ }
38
+ /** The ChRIS session's filesystem. */
39
+ export const chrisFilesystem = {
40
+ dispatcher: vfsDispatcher,
41
+ get cache() {
42
+ return listCache_get();
43
+ },
44
+ // /proc is backed by the process cache, which keeps its own freshness.
45
+ cache_holds: (path) => !path.startsWith('/proc'),
46
+ longRows_annotate: feedTags_annotate,
47
+ // chili's path walk is loaded when a listing first asks, not with the backend.
48
+ unreadLinks_take: async () => (await import('@fnndsc/chili/utils')).pathMapper_get().blindParents_take(),
49
+ structural: CHRIS_STRUCTURAL_PATHS,
50
+ folder_enter: chrisFolder_enter,
51
+ segment_title: chrisSegment_title,
52
+ path_physical: async (path) => {
53
+ const { path_resolveChrisFs } = await import('@fnndsc/chili/utils/cli.js');
54
+ return path_resolveChrisFs(path, {});
55
+ },
56
+ };
57
+ //# sourceMappingURL=filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/chris/filesystem.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAU,UAAU,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEhG;;;;;;;GAOG;AACH,KAAK,UAAU,iBAAiB,CAAC,KAAoB;IACnD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAiB,EAAE;QAC7C,MAAM,KAAK,GAA4B,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAClE,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAiB,EAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1F,MAAM,GAAG,GAAkC,MAAM,eAAe,EAAE,CAAC;IACnE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,UAAU,CAAC,SAAS,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAiB,EAAe,EAAE;QAClD,MAAM,MAAM,GAAkB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,IAAI,GAAyB,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvF,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sCAAsC;AACtC,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,UAAU,EAAE,aAAa;IACzB,IAAI,KAAK;QACP,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;IACD,uEAAuE;IACvE,WAAW,EAAE,CAAC,IAAY,EAAW,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;IACjE,iBAAiB,EAAE,iBAAiB;IACpC,+EAA+E;IAC/E,gBAAgB,EAAE,KAAK,IAAuB,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,iBAAiB,EAAE;IAC3H,UAAU,EAAE,sBAAsB;IAClC,YAAY,EAAE,iBAAiB;IAC/B,aAAa,EAAE,kBAAkB;IACjC,aAAa,EAAE,KAAK,EAAE,IAAY,EAAmB,EAAE;QACrD,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;QAC3E,OAAO,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC;CACF,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @file The ChRIS backend's help: a page for each command it registers.
3
+ *
4
+ * The core's own commands keep their pages in `builtins/help.ts`; these are
5
+ * registered with the ChRIS commands, so a session without ChRIS has none.
6
+ *
7
+ * @module
8
+ */
9
+ import type { CommandHelp } from '../core/commandRegistry.js';
10
+ /**
11
+ * Standard subcommands and options injected into every resource help entry.
12
+ * Captures the Resource Contract documented in CONTEXT.md.
13
+ */
14
+ export declare const RESOURCE_LIST_OPTIONS: string[];
15
+ /** The help for each ChRIS command, by name. */
16
+ export declare const chrisHelp: Record<string, CommandHelp>;