@fnndsc/brasa 0.33.4 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/models.d.ts +1 -2
- package/dist/api/models.js.map +1 -1
- package/dist/buildinfo.json +1 -1
- package/dist/builtins/debug.d.ts +1 -1
- package/dist/builtins/debug.js +12 -8
- package/dist/builtins/debug.js.map +1 -1
- package/dist/builtins/executable.d.ts +1 -1
- package/dist/builtins/executable.js +2 -1
- package/dist/builtins/executable.js.map +1 -1
- package/dist/builtins/fs/acl.d.ts +1 -16
- package/dist/builtins/fs/acl.js +3 -1
- package/dist/builtins/fs/acl.js.map +1 -1
- package/dist/builtins/fs/archive.js +1 -1
- package/dist/builtins/fs/archive.js.map +1 -1
- package/dist/builtins/fs/cat.d.ts +1 -1
- package/dist/builtins/fs/cat.js +47 -7
- package/dist/builtins/fs/cat.js.map +1 -1
- package/dist/builtins/fs/cd.d.ts +1 -19
- package/dist/builtins/fs/cd.js +45 -94
- package/dist/builtins/fs/cd.js.map +1 -1
- package/dist/builtins/fs/configWrite.d.ts +1 -1
- package/dist/builtins/fs/configWrite.js +1 -1
- package/dist/builtins/fs/configWrite.js.map +1 -1
- package/dist/builtins/fs/cp.d.ts +1 -1
- package/dist/builtins/fs/cp.js +19 -13
- package/dist/builtins/fs/cp.js.map +1 -1
- package/dist/builtins/fs/download.d.ts +1 -1
- package/dist/builtins/fs/download.js +2 -1
- package/dist/builtins/fs/download.js.map +1 -1
- package/dist/builtins/fs/du.d.ts +10 -1
- package/dist/builtins/fs/du.js +36 -2
- package/dist/builtins/fs/du.js.map +1 -1
- package/dist/builtins/fs/edit.d.ts +1 -1
- package/dist/builtins/fs/edit.js +10 -4
- package/dist/builtins/fs/edit.js.map +1 -1
- package/dist/builtins/fs/entries.d.ts +43 -0
- package/dist/builtins/fs/entries.js +81 -0
- package/dist/builtins/fs/entries.js.map +1 -0
- package/dist/builtins/fs/ls.d.ts +1 -2
- package/dist/builtins/fs/ls.js +70 -10
- package/dist/builtins/fs/ls.js.map +1 -1
- package/dist/builtins/fs/mkdir.d.ts +1 -1
- package/dist/builtins/fs/mkdir.js +29 -20
- package/dist/builtins/fs/mkdir.js.map +1 -1
- package/dist/builtins/fs/mv.d.ts +1 -1
- package/dist/builtins/fs/mv.js +40 -23
- package/dist/builtins/fs/mv.js.map +1 -1
- package/dist/builtins/fs/pull.d.ts +1 -1
- package/dist/builtins/fs/pull.js +2 -1
- package/dist/builtins/fs/pull.js.map +1 -1
- package/dist/builtins/fs/pwd.d.ts +1 -1
- package/dist/builtins/fs/pwd.js +9 -45
- package/dist/builtins/fs/pwd.js.map +1 -1
- package/dist/builtins/fs/rm.d.ts +1 -22
- package/dist/builtins/fs/rm.js +33 -58
- package/dist/builtins/fs/rm.js.map +1 -1
- package/dist/builtins/fs/rmdir.d.ts +1 -1
- package/dist/builtins/fs/rmdir.js +21 -40
- package/dist/builtins/fs/rmdir.js.map +1 -1
- package/dist/builtins/fs/touch.d.ts +1 -1
- package/dist/builtins/fs/touch.js +64 -25
- package/dist/builtins/fs/touch.js.map +1 -1
- package/dist/builtins/fs/tree.d.ts +1 -1
- package/dist/builtins/fs/tree.js +26 -3
- package/dist/builtins/fs/tree.js.map +1 -1
- package/dist/builtins/fs/upload.d.ts +1 -1
- package/dist/builtins/fs/upload.js +3 -1
- package/dist/builtins/fs/upload.js.map +1 -1
- package/dist/builtins/fs/xattr.d.ts +1 -10
- package/dist/builtins/fs/xattr.js +3 -1
- package/dist/builtins/fs/xattr.js.map +1 -1
- package/dist/builtins/games/bytes.d.ts +1 -1
- package/dist/builtins/games/bytes.js +2 -1
- package/dist/builtins/games/bytes.js.map +1 -1
- package/dist/builtins/games/chimes.d.ts +1 -13
- package/dist/builtins/games/chimes.js +1 -1
- package/dist/builtins/games/chimes.js.map +1 -1
- package/dist/builtins/games/chrislab.d.ts +33 -0
- package/dist/builtins/games/chrislab.js +117 -0
- package/dist/builtins/games/chrislab.js.map +1 -0
- package/dist/builtins/games/cowsay.d.ts +1 -11
- package/dist/builtins/games/cowsay.js +1 -1
- package/dist/builtins/games/cowsay.js.map +1 -1
- package/dist/builtins/games/figlet.d.ts +1 -11
- package/dist/builtins/games/figlet.js +1 -1
- package/dist/builtins/games/figlet.js.map +1 -1
- package/dist/builtins/games/lab.d.ts +1 -43
- package/dist/builtins/games/lab.js +7 -111
- package/dist/builtins/games/lab.js.map +1 -1
- package/dist/builtins/games/lolcat.d.ts +1 -11
- package/dist/builtins/games/lolcat.js +1 -1
- package/dist/builtins/games/lolcat.js.map +1 -1
- package/dist/builtins/games/morse.d.ts +1 -10
- package/dist/builtins/games/morse.js +1 -1
- package/dist/builtins/games/morse.js.map +1 -1
- package/dist/builtins/games/numbers.d.ts +1 -10
- package/dist/builtins/games/numbers.js +1 -1
- package/dist/builtins/games/numbers.js.map +1 -1
- package/dist/builtins/games/play.d.ts +1 -11
- package/dist/builtins/games/play.js +1 -1
- package/dist/builtins/games/play.js.map +1 -1
- package/dist/builtins/games/qr.d.ts +1 -12
- package/dist/builtins/games/qr.js +1 -1
- package/dist/builtins/games/qr.js.map +1 -1
- package/dist/builtins/games/show.d.ts +1 -12
- package/dist/builtins/games/show.js +1 -1
- package/dist/builtins/games/show.js.map +1 -1
- package/dist/builtins/games/sky.d.ts +1 -11
- package/dist/builtins/games/sky.js +1 -1
- package/dist/builtins/games/sky.js.map +1 -1
- package/dist/builtins/games/text.d.ts +1 -10
- package/dist/builtins/games/text.js +1 -1
- package/dist/builtins/games/text.js.map +1 -1
- package/dist/builtins/games/wtf.d.ts +1 -9
- package/dist/builtins/games/wtf.js +1 -1
- package/dist/builtins/games/wtf.js.map +1 -1
- package/dist/builtins/help.d.ts +18 -15
- package/dist/builtins/help.js +51 -1200
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/net/connect.d.ts +1 -1
- package/dist/builtins/net/connect.js +2 -1
- package/dist/builtins/net/connect.js.map +1 -1
- package/dist/builtins/net/cubepath.d.ts +1 -1
- package/dist/builtins/net/cubepath.js +1 -1
- package/dist/builtins/net/cubepath.js.map +1 -1
- package/dist/builtins/net/logout.d.ts +1 -1
- package/dist/builtins/net/logout.js +1 -1
- package/dist/builtins/net/logout.js.map +1 -1
- package/dist/builtins/net/netstat.d.ts +1 -1
- package/dist/builtins/net/netstat.js +1 -2
- package/dist/builtins/net/netstat.js.map +1 -1
- package/dist/builtins/net/pacs.d.ts +1 -1
- package/dist/builtins/net/pacs.js +3 -2
- package/dist/builtins/net/pacs.js.map +1 -1
- package/dist/builtins/net/pacsUtils.js +2 -1
- package/dist/builtins/net/pacsUtils.js.map +1 -1
- package/dist/builtins/net/query.csv.js +1 -1
- package/dist/builtins/net/query.csv.js.map +1 -1
- package/dist/builtins/net/query.d.ts +2 -2
- package/dist/builtins/net/query.fanout.d.ts +1 -1
- package/dist/builtins/net/query.fanout.js +1 -1
- package/dist/builtins/net/query.fanout.js.map +1 -1
- package/dist/builtins/net/query.js +3 -2
- package/dist/builtins/net/query.js.map +1 -1
- package/dist/builtins/net/status.d.ts +1 -1
- package/dist/builtins/net/status.js +2 -1
- package/dist/builtins/net/status.js.map +1 -1
- package/dist/builtins/parametersofplugin.d.ts +1 -1
- package/dist/builtins/parametersofplugin.js +1 -1
- package/dist/builtins/parametersofplugin.js.map +1 -1
- package/dist/builtins/pluginExecute.d.ts +1 -1
- package/dist/builtins/pluginExecute.js +3 -1
- package/dist/builtins/pluginExecute.js.map +1 -1
- package/dist/builtins/proc.d.ts +1 -2
- package/dist/builtins/proc.js +4 -3
- package/dist/builtins/proc.js.map +1 -1
- package/dist/builtins/res/compute.d.ts +1 -1
- package/dist/builtins/res/compute.js +2 -1
- package/dist/builtins/res/compute.js.map +1 -1
- package/dist/builtins/res/dicom.d.ts +2 -2
- package/dist/builtins/res/dicom.js +1 -2
- package/dist/builtins/res/dicom.js.map +1 -1
- package/dist/builtins/res/expect.d.ts +1 -1
- package/dist/builtins/res/expect.js +2 -1
- package/dist/builtins/res/expect.js.map +1 -1
- package/dist/builtins/res/feed.d.ts +1 -1
- package/dist/builtins/res/feed.diagram.d.ts +1 -2
- package/dist/builtins/res/feed.diagram.js +2 -2
- package/dist/builtins/res/feed.diagram.js.map +1 -1
- package/dist/builtins/res/feed.js +3 -1
- package/dist/builtins/res/feed.js.map +1 -1
- package/dist/builtins/res/feed.tree.d.ts +1 -1
- package/dist/builtins/res/feed.tree.js +1 -1
- package/dist/builtins/res/feed.tree.js.map +1 -1
- package/dist/builtins/res/files.d.ts +1 -1
- package/dist/builtins/res/files.js +1 -1
- package/dist/builtins/res/files.js.map +1 -1
- package/dist/builtins/res/gather.d.ts +1 -1
- package/dist/builtins/res/gather.js +1 -1
- package/dist/builtins/res/gather.js.map +1 -1
- package/dist/builtins/res/gather.store.js.map +1 -1
- package/dist/builtins/res/group.d.ts +1 -1
- package/dist/builtins/res/group.js +1 -1
- package/dist/builtins/res/group.js.map +1 -1
- package/dist/builtins/res/image.d.ts +1 -20
- package/dist/builtins/res/image.js +1 -2
- package/dist/builtins/res/image.js.map +1 -1
- package/dist/builtins/res/pipeline.d.ts +1 -1
- package/dist/builtins/res/pipeline.diagram.d.ts +1 -1
- package/dist/builtins/res/pipeline.diagram.js +2 -2
- package/dist/builtins/res/pipeline.diagram.js.map +1 -1
- package/dist/builtins/res/pipeline.js +3 -1
- package/dist/builtins/res/pipeline.js.map +1 -1
- package/dist/builtins/res/play.d.ts +1 -1
- package/dist/builtins/res/play.js +2 -1
- package/dist/builtins/res/play.js.map +1 -1
- package/dist/builtins/res/plugin.d.ts +1 -1
- package/dist/builtins/res/plugin.info.d.ts +1 -1
- package/dist/builtins/res/plugin.info.js +2 -1
- package/dist/builtins/res/plugin.info.js.map +1 -1
- package/dist/builtins/res/plugin.js +2 -2
- package/dist/builtins/res/plugin.js.map +1 -1
- package/dist/builtins/res/plugininstance.d.ts +1 -1
- package/dist/builtins/res/plugininstance.js +1 -1
- package/dist/builtins/res/plugininstance.js.map +1 -1
- package/dist/builtins/res/pluginmeta.d.ts +1 -1
- package/dist/builtins/res/pluginmeta.js +1 -1
- package/dist/builtins/res/pluginmeta.js.map +1 -1
- package/dist/builtins/res/record.d.ts +1 -1
- package/dist/builtins/res/record.js +1 -1
- package/dist/builtins/res/record.js.map +1 -1
- package/dist/builtins/res/tag.d.ts +1 -1
- package/dist/builtins/res/tag.js +1 -1
- package/dist/builtins/res/tag.js.map +1 -1
- package/dist/builtins/res/user.d.ts +1 -1
- package/dist/builtins/res/user.js +2 -1
- package/dist/builtins/res/user.js.map +1 -1
- package/dist/builtins/res/workflow.d.ts +1 -1
- package/dist/builtins/res/workflow.js +1 -1
- package/dist/builtins/res/workflow.js.map +1 -1
- package/dist/builtins/store.d.ts +1 -1
- package/dist/builtins/store.js +2 -1
- package/dist/builtins/store.js.map +1 -1
- package/dist/builtins/sys/cal.d.ts +1 -12
- package/dist/builtins/sys/cal.js +1 -1
- package/dist/builtins/sys/cal.js.map +1 -1
- package/dist/builtins/sys/context.d.ts +1 -1
- package/dist/builtins/sys/context.js +1 -1
- package/dist/builtins/sys/context.js.map +1 -1
- package/dist/builtins/sys/date.d.ts +1 -12
- package/dist/builtins/sys/date.js +1 -1
- package/dist/builtins/sys/date.js.map +1 -1
- package/dist/builtins/sys/fortune.d.ts +1 -11
- package/dist/builtins/sys/fortune.js +1 -1
- package/dist/builtins/sys/fortune.js.map +1 -1
- package/dist/builtins/sys/motd.d.ts +1 -18
- package/dist/builtins/sys/motd.js +3 -3
- package/dist/builtins/sys/motd.js.map +1 -1
- package/dist/builtins/sys/notes.d.ts +1 -2
- package/dist/builtins/sys/notes.js +1 -2
- package/dist/builtins/sys/notes.js.map +1 -1
- package/dist/builtins/sys/physicalmode.d.ts +1 -1
- package/dist/builtins/sys/physicalmode.js +1 -1
- package/dist/builtins/sys/physicalmode.js.map +1 -1
- package/dist/builtins/sys/timing.d.ts +1 -1
- package/dist/builtins/sys/timing.js +1 -1
- package/dist/builtins/sys/timing.js.map +1 -1
- package/dist/builtins/sys/version.d.ts +1 -7
- package/dist/builtins/sys/version.js +1 -1
- package/dist/builtins/sys/version.js.map +1 -1
- package/dist/builtins/sys/weather.d.ts +1 -1
- package/dist/builtins/sys/weather.js +1 -1
- package/dist/builtins/sys/weather.js.map +1 -1
- package/dist/builtins/sys/whoami.d.ts +1 -1
- package/dist/builtins/sys/whoami.js +2 -1
- package/dist/builtins/sys/whoami.js.map +1 -1
- package/dist/builtins/utils.d.ts +2 -19
- package/dist/builtins/utils.js +5 -55
- package/dist/builtins/utils.js.map +1 -1
- package/dist/builtins/wildcard.d.ts +4 -53
- package/dist/builtins/wildcard.js +3 -177
- package/dist/builtins/wildcard.js.map +1 -1
- package/dist/chris/backend.d.ts +22 -0
- package/dist/chris/backend.js +102 -0
- package/dist/chris/backend.js.map +1 -0
- package/dist/chris/binEntry.js.map +1 -0
- package/dist/chris/binMount.d.ts +60 -0
- package/dist/chris/binMount.js +154 -0
- package/dist/chris/binMount.js.map +1 -0
- package/dist/{core → chris}/chiliDelegate.d.ts +1 -1
- package/dist/{core → chris}/chiliDelegate.js +1 -1
- package/dist/chris/chiliDelegate.js.map +1 -0
- package/dist/chris/chrisCommands.d.ts +14 -0
- package/dist/chris/chrisCommands.js +168 -0
- package/dist/chris/chrisCommands.js.map +1 -0
- package/dist/chris/commandFallback.d.ts +3 -0
- package/dist/chris/commandFallback.js +113 -0
- package/dist/chris/commandFallback.js.map +1 -0
- package/dist/chris/completion.d.ts +3 -0
- package/dist/chris/completion.js +100 -0
- package/dist/chris/completion.js.map +1 -0
- package/dist/chris/connect.js.map +1 -0
- package/dist/chris/debug.d.ts +10 -0
- package/dist/chris/debug.js +9 -0
- package/dist/chris/debug.js.map +1 -0
- package/dist/chris/files.d.ts +16 -0
- package/dist/chris/files.js +141 -0
- package/dist/chris/files.js.map +1 -0
- package/dist/chris/filesystem.d.ts +3 -0
- package/dist/chris/filesystem.js +57 -0
- package/dist/chris/filesystem.js.map +1 -0
- package/dist/chris/help.d.ts +16 -0
- package/dist/chris/help.js +1193 -0
- package/dist/chris/help.js.map +1 -0
- package/dist/chris/jobsState.js.map +1 -0
- package/dist/chris/mounts.d.ts +7 -0
- package/dist/chris/mounts.js +34 -0
- package/dist/chris/mounts.js.map +1 -0
- package/dist/chris/navigation.d.ts +40 -0
- package/dist/chris/navigation.js +160 -0
- package/dist/chris/navigation.js.map +1 -0
- package/dist/{core → chris}/promptContext.d.ts +2 -2
- package/dist/{core → chris}/promptContext.js +3 -3
- package/dist/chris/promptContext.js.map +1 -0
- package/dist/chris/references.d.ts +14 -0
- package/dist/chris/references.js +113 -0
- package/dist/chris/references.js.map +1 -0
- package/dist/chris/tasks.d.ts +31 -0
- package/dist/chris/tasks.js +55 -0
- package/dist/chris/tasks.js.map +1 -0
- package/dist/chris/universeLayout.js.map +1 -0
- package/dist/chris/watch.d.ts +3 -0
- package/dist/chris/watch.js +15 -0
- package/dist/chris/watch.js.map +1 -0
- package/dist/core/answerKinds.d.ts +32 -0
- package/dist/core/answerKinds.js +56 -0
- package/dist/core/answerKinds.js.map +1 -0
- package/dist/core/backend.d.ts +261 -0
- package/dist/core/backend.js +32 -0
- package/dist/core/backend.js.map +1 -0
- package/dist/core/commandOrder.d.ts +16 -0
- package/dist/core/commandOrder.js +17 -0
- package/dist/core/commandOrder.js.map +1 -0
- package/dist/core/commandRegistry.d.ts +120 -0
- package/dist/core/commandRegistry.js +124 -0
- package/dist/core/commandRegistry.js.map +1 -0
- package/dist/core/coreCommands.d.ts +16 -0
- package/dist/core/coreCommands.js +156 -0
- package/dist/core/coreCommands.js.map +1 -0
- package/dist/core/dispatch.d.ts +2 -19
- package/dist/core/dispatch.js +86 -447
- package/dist/core/dispatch.js.map +1 -1
- package/dist/core/elevation.d.ts +5 -5
- package/dist/core/elevation.js +12 -7
- package/dist/core/elevation.js.map +1 -1
- package/dist/core/engine.d.ts +28 -18
- package/dist/core/engine.js +44 -119
- package/dist/core/engine.js.map +1 -1
- package/dist/core/errorText.d.ts +14 -0
- package/dist/core/errorText.js +26 -0
- package/dist/core/errorText.js.map +1 -0
- package/dist/core/expansion.d.ts +0 -2
- package/dist/core/expansion.js +43 -101
- package/dist/core/expansion.js.map +1 -1
- package/dist/core/fileRefusal.d.ts +4 -15
- package/dist/core/fileRefusal.js +4 -26
- package/dist/core/fileRefusal.js.map +1 -1
- package/dist/core/filesystem.d.ts +27 -0
- package/dist/core/filesystem.js +45 -0
- package/dist/core/filesystem.js.map +1 -0
- package/dist/core/handlerRun.d.ts +30 -0
- package/dist/core/handlerRun.js +34 -0
- package/dist/core/handlerRun.js.map +1 -0
- package/dist/core/paths.d.ts +18 -0
- package/dist/core/paths.js +49 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/preprocess.d.ts +1 -1
- package/dist/core/preprocess.js +1 -1
- package/dist/core/preprocess.js.map +1 -1
- package/dist/core/sink.d.ts +3 -25
- package/dist/core/sink.js +0 -8
- package/dist/core/sink.js.map +1 -1
- package/dist/core/surface.d.ts +3 -179
- package/dist/core/surface.js.map +1 -1
- package/dist/core/taskWatch.d.ts +42 -0
- package/dist/core/taskWatch.js +142 -0
- package/dist/core/taskWatch.js.map +1 -0
- package/dist/core/tasks.d.ts +46 -0
- package/dist/core/tasks.js +102 -0
- package/dist/core/tasks.js.map +1 -0
- package/dist/core.d.ts +22 -0
- package/dist/core.js +23 -0
- package/dist/core.js.map +1 -0
- package/dist/index.d.ts +8 -5
- package/dist/index.js +17 -5
- package/dist/index.js.map +1 -1
- package/dist/lib/completer/index.js +41 -99
- package/dist/lib/completer/index.js.map +1 -1
- package/dist/lib/prefetch.js +2 -2
- package/dist/lib/prefetch.js.map +1 -1
- package/dist/lib/vfs/listing.d.ts +1 -1
- package/dist/lib/vfs/providers/static.d.ts +15 -6
- package/dist/lib/vfs/providers/static.js +20 -43
- package/dist/lib/vfs/providers/static.js.map +1 -1
- package/dist/lib/vfs/providers/static_content.d.ts +4 -4
- package/dist/lib/vfs/providers/static_content.js +4 -24
- package/dist/lib/vfs/providers/static_content.js.map +1 -1
- package/dist/lib/vfs/vfs.d.ts +11 -2
- package/dist/lib/vfs/vfs.js +90 -51
- package/dist/lib/vfs/vfs.js.map +1 -1
- package/dist/lib/wildcard.d.ts +57 -0
- package/dist/lib/wildcard.js +183 -0
- package/dist/lib/wildcard.js.map +1 -0
- package/dist/notes.json +1 -1
- package/dist/null/backend.d.ts +29 -0
- package/dist/null/backend.js +41 -0
- package/dist/null/backend.js.map +1 -0
- package/dist/session/answer.d.ts +4 -4
- package/dist/session/answer.js +0 -2
- package/dist/session/answer.js.map +1 -1
- package/dist/session/index.d.ts +12 -10
- package/dist/session/index.js +9 -38
- package/dist/session/index.js.map +1 -1
- package/package.json +12 -6
- package/dist/builtins/fs/folderExists.d.ts +0 -8
- package/dist/builtins/fs/folderExists.js +0 -67
- package/dist/builtins/fs/folderExists.js.map +0 -1
- package/dist/command-keys.d.ts +0 -8
- package/dist/command-keys.js +0 -37
- package/dist/command-keys.js.map +0 -1
- package/dist/core/chiliDelegate.js.map +0 -1
- package/dist/core/connect.js.map +0 -1
- package/dist/core/jobsState.js.map +0 -1
- package/dist/core/promptContext.js.map +0 -1
- package/dist/lib/vfs/providers/binEntry.js.map +0 -1
- package/dist/universe/universeLayout.js.map +0 -1
- /package/dist/{lib/vfs/providers → chris}/binEntry.d.ts +0 -0
- /package/dist/{lib/vfs/providers → chris}/binEntry.js +0 -0
- /package/dist/{core → chris}/connect.d.ts +0 -0
- /package/dist/{core → chris}/connect.js +0 -0
- /package/dist/{core → chris}/jobsState.d.ts +0 -0
- /package/dist/{core → chris}/jobsState.js +0 -0
- /package/dist/{universe → chris}/universeLayout.d.ts +0 -0
- /package/dist/{universe → chris}/universeLayout.js +0 -0
package/dist/builtins/help.js
CHANGED
|
@@ -8,36 +8,12 @@
|
|
|
8
8
|
import { gamesShelf_render, gamesShelf_names } from './games/shelf.js';
|
|
9
9
|
import chalk from 'chalk';
|
|
10
10
|
import { CAT_USAGE } from './fs/cat.args.js';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* Captures the Resource Contract documented in CONTEXT.md.
|
|
14
|
-
*/
|
|
15
|
-
export const RESOURCE_LIST_OPTIONS = [
|
|
16
|
-
'',
|
|
17
|
-
'STANDARD SUBCOMMANDS:',
|
|
18
|
-
' list List resources (default: 20 per page)',
|
|
19
|
-
' search <term> Search resources (alias: list --search <term>)',
|
|
20
|
-
' inspect List available field names',
|
|
21
|
-
'',
|
|
22
|
-
'STANDARD OPTIONS:',
|
|
23
|
-
' --all Fetch all pages',
|
|
24
|
-
' --limit <n> Page size (default: 20)',
|
|
25
|
-
' --fields <f,f> Columns to display',
|
|
26
|
-
' --sort <field> Sort by field',
|
|
27
|
-
' --reverse Reverse sort order',
|
|
28
|
-
' --table Tabular output',
|
|
29
|
-
' --csv CSV output',
|
|
30
|
-
];
|
|
11
|
+
import { commands_register, commandHelpEntry_get, helpTopic_names, builtinCommand_has } from '../core/commandRegistry.js';
|
|
12
|
+
import { backendInstalled_get } from '../core/backend.js';
|
|
31
13
|
/**
|
|
32
14
|
* Help-text registry keyed by builtin command name.
|
|
33
15
|
*/
|
|
34
16
|
export const helpText = {
|
|
35
|
-
user: {
|
|
36
|
-
usage: 'user <add|inspect|disable|enable|remove> <username>',
|
|
37
|
-
description: 'Manage CUBE-local accounts; federated identities remain externally managed',
|
|
38
|
-
options: ['Use `sudo user …` for lifecycle operations.', 'add prompts for email and a hidden password confirmation.'],
|
|
39
|
-
examples: ['sudo user add jack.bivowac', 'sudo user disable jack.bivowac', 'sudo user remove jack.bivowac'],
|
|
40
|
-
},
|
|
41
17
|
sudo: {
|
|
42
18
|
usage: 'sudo <command> [arguments...]',
|
|
43
19
|
description: 'Run one ChRIS command with a temporary administrator identity',
|
|
@@ -87,19 +63,6 @@ export const helpText = {
|
|
|
87
63
|
'cd # Show current directory',
|
|
88
64
|
],
|
|
89
65
|
},
|
|
90
|
-
netstat: {
|
|
91
|
-
usage: 'netstat [-n <count>] [-r]',
|
|
92
|
-
description: 'What the session has asked of CUBE: requests since the session (or the last reset), by endpoint family with the time spent, and the last few timed',
|
|
93
|
-
options: [
|
|
94
|
-
'-n <count> List that many recent requests (default 10)',
|
|
95
|
-
'-r, --reset Forget the count after showing it',
|
|
96
|
-
],
|
|
97
|
-
examples: [
|
|
98
|
-
'netstat # the count, by family, the last 10',
|
|
99
|
-
'netstat -n 30 # the last 30 requests, timed',
|
|
100
|
-
'netstat -r; cd ~/feeds; netstat # what one navigation costs',
|
|
101
|
-
],
|
|
102
|
-
},
|
|
103
66
|
pwd: {
|
|
104
67
|
usage: 'pwd [options]',
|
|
105
68
|
description: 'Print current working directory',
|
|
@@ -135,93 +98,6 @@ export const helpText = {
|
|
|
135
98
|
'cat file1 file2 # Display multiple files',
|
|
136
99
|
],
|
|
137
100
|
},
|
|
138
|
-
edit: {
|
|
139
|
-
usage: 'edit <file>',
|
|
140
|
-
description: 'Edit a ChRIS file in $EDITOR — fetches, opens, saves back on write',
|
|
141
|
-
options: [
|
|
142
|
-
'Uses $EDITOR (or $VISUAL, or vi as fallback)',
|
|
143
|
-
'No-ops if file is unchanged on exit',
|
|
144
|
-
'On save: deletes original and re-uploads — file path preserved, ID changes',
|
|
145
|
-
'On upload failure: edited content preserved in /tmp',
|
|
146
|
-
],
|
|
147
|
-
examples: [
|
|
148
|
-
'edit /home/chris/uploads/config.yaml',
|
|
149
|
-
'edit notes.txt',
|
|
150
|
-
'EDITOR=nano edit report.json',
|
|
151
|
-
],
|
|
152
|
-
},
|
|
153
|
-
setfacl: {
|
|
154
|
-
usage: 'setfacl -m u:<user>:r|g:<group>:r|o::r|o::- <path>... | setfacl -x u:<user>|g:<group> <path>...',
|
|
155
|
-
summary: 'Share a feed with a user, a group or everyone, or stop sharing it',
|
|
156
|
-
description: 'A feed\'s access list, as POSIX ACL entries. -m u:<user>:r shares it with a user, -m g:<group>:r '
|
|
157
|
-
+ 'with a group, -m o::r with everyone (a public feed) and -m o::- makes it private again. '
|
|
158
|
-
+ '-x u:<user> or -x g:<group> withdraws that grant. A feed is named by id, by the feed_N a '
|
|
159
|
-
+ 'listing shows, by any path through /feeds/, or by /proc/jobs/feed_N. Given a feed and no '
|
|
160
|
-
+ 'entry, it asks which user to share it with.',
|
|
161
|
-
options: [
|
|
162
|
-
'-m u:<user>:r Share with a user (the perms must include r)',
|
|
163
|
-
'-m g:<group>:r Share with a group',
|
|
164
|
-
'-m o::r | o::- Make the feed public, or private again (chmod o+r / o-r is the same)',
|
|
165
|
-
'-x u:<user> Stop sharing with a user',
|
|
166
|
-
'-x g:<group> Stop sharing with a group',
|
|
167
|
-
],
|
|
168
|
-
examples: [
|
|
169
|
-
'setfacl -m u:someone:r /home/me/feeds/feed_12',
|
|
170
|
-
'setfacl -m g:grantlab:r feed_12 feed_13',
|
|
171
|
-
'setfacl -m o::r feed_12 # public',
|
|
172
|
-
'setfacl -x u:someone feed_12',
|
|
173
|
-
'setfacl feed_12 # asks who to share it with',
|
|
174
|
-
],
|
|
175
|
-
},
|
|
176
|
-
getfacl: {
|
|
177
|
-
usage: 'getfacl <path>...',
|
|
178
|
-
summary: 'Show who can read a feed: users, groups, and whether it is public',
|
|
179
|
-
description: 'Show who can read a feed, in the familiar block: a # file: line, the owner\'s user:: entry, '
|
|
180
|
-
+ 'one user: line per user and one group: line per group holding access, then other:: '
|
|
181
|
-
+ '(r-- when the feed is public).',
|
|
182
|
-
examples: [
|
|
183
|
-
'getfacl /home/me/feeds/feed_12',
|
|
184
|
-
],
|
|
185
|
-
},
|
|
186
|
-
chmod: {
|
|
187
|
-
usage: 'chmod o+r|o-r <feed>...',
|
|
188
|
-
summary: 'Make a feed public, or private again',
|
|
189
|
-
description: 'The other entry of a feed\'s access list spelled as a mode: o+r makes it public, o-r private, '
|
|
190
|
-
+ 'exactly as setfacl -m o::r and o::- do. No other mode is one a feed has.',
|
|
191
|
-
examples: [
|
|
192
|
-
'chmod o+r feed_12',
|
|
193
|
-
'chmod o-r /proc/jobs/feed_12',
|
|
194
|
-
],
|
|
195
|
-
},
|
|
196
|
-
setfattr: {
|
|
197
|
-
usage: 'setfattr -n tag -v <value> <path>... | setfattr -x tag [-v <value>] <path>...',
|
|
198
|
-
summary: 'Hang a tag on a feed, or take it off',
|
|
199
|
-
description: 'A feed\'s tags are the values of one extended attribute, tag (also user.tag): CUBE\'s '
|
|
200
|
-
+ 'freeform labels. -n tag -v <value> hangs one of your tags (a folder under /proc/tags: '
|
|
201
|
-
+ 'mkdir /proc/tags/<name> makes a tag, and naming one that does not exist is an error); '
|
|
202
|
-
+ '-x tag -v <value> takes it off; -x tag alone takes every tag off, as '
|
|
203
|
-
+ 'setfattr removes the whole attribute. A feed is named by id, by feed_N, by any path '
|
|
204
|
-
+ 'through /feeds/, or by its projection /proc/jobs/feed_N. Silent on success.',
|
|
205
|
-
options: [
|
|
206
|
-
'-n, --name tag The attribute to set (only tag exists)',
|
|
207
|
-
'-v, --value <value> The tag',
|
|
208
|
-
'-x, --remove tag Remove the tag given by -v, or every tag without -v',
|
|
209
|
-
],
|
|
210
|
-
examples: [
|
|
211
|
-
'setfattr -n tag -v urgent feed_12',
|
|
212
|
-
'setfattr -n tag -v review feed_12 feed_13',
|
|
213
|
-
'setfattr -x tag -v urgent /proc/jobs/feed_12',
|
|
214
|
-
],
|
|
215
|
-
},
|
|
216
|
-
getfattr: {
|
|
217
|
-
usage: 'getfattr [-n tag] <path>...',
|
|
218
|
-
summary: 'Show the tags a feed wears',
|
|
219
|
-
description: 'Show a feed\'s tags in getfattr\'s dump shape: a # file: line, then one tag="…" line per tag.',
|
|
220
|
-
examples: [
|
|
221
|
-
'getfattr feed_12',
|
|
222
|
-
'getfattr -n tag /home/me/feeds/feed_12',
|
|
223
|
-
],
|
|
224
|
-
},
|
|
225
101
|
rm: {
|
|
226
102
|
usage: 'rm [options] <path> [path...]',
|
|
227
103
|
description: 'Remove files or directories',
|
|
@@ -298,15 +174,6 @@ export const helpText = {
|
|
|
298
174
|
'touch --withContentsFromFile template.json config.json # Create from local file',
|
|
299
175
|
],
|
|
300
176
|
},
|
|
301
|
-
config: {
|
|
302
|
-
usage: 'config write <cfs-path> <base64-content>',
|
|
303
|
-
description: 'Write a small configuration document into the user\'s CUBE home (the durable layer: argus desktops, surface preferences). Reads travel the ordinary cat. Documents are notes, not datasets: 256KB limit.',
|
|
304
|
-
options: [],
|
|
305
|
-
examples: [
|
|
306
|
-
'config write ~/.config/argus/desktops/quad.desk dmlldyBmaWxlcwo= # a saved argus desktop',
|
|
307
|
-
'cat ~/.config/argus/desktops/quad.desk # reading one back',
|
|
308
|
-
],
|
|
309
|
-
},
|
|
310
177
|
mkdir: {
|
|
311
178
|
usage: 'mkdir [-p] <directory> [directory...]',
|
|
312
179
|
description: 'Create directories',
|
|
@@ -331,482 +198,16 @@ export const helpText = {
|
|
|
331
198
|
'rmdir /proc/tags/old # Delete a tag no feed wears',
|
|
332
199
|
],
|
|
333
200
|
},
|
|
334
|
-
upload: {
|
|
335
|
-
usage: 'upload <local_path_or_glob> <chris_path>',
|
|
336
|
-
description: 'Upload local files, directories, or glob matches to ChRIS with progress tracking',
|
|
337
|
-
options: [
|
|
338
|
-
'Displays progress bar showing:',
|
|
339
|
-
' - File count and percentage complete',
|
|
340
|
-
' - Estimated time remaining (ETA)',
|
|
341
|
-
' - Data transfer progress',
|
|
342
|
-
'Shows summary statistics after upload',
|
|
343
|
-
],
|
|
344
|
-
examples: [
|
|
345
|
-
'upload ~/data/file.csv /home/user/uploads/',
|
|
346
|
-
'upload ~/Pictures/earthandmoon* .',
|
|
347
|
-
'upload ./results/ ~/data/',
|
|
348
|
-
'upload ~/experiment/data /home/user/projects/',
|
|
349
|
-
],
|
|
350
|
-
},
|
|
351
|
-
download: {
|
|
352
|
-
usage: 'download <chris_path_or_glob> <local_path> [-f|--force]',
|
|
353
|
-
description: 'Download a ChRIS file, directory, or CFS glob to the local filesystem with progress tracking',
|
|
354
|
-
options: [
|
|
355
|
-
'-f, --force Overwrite existing local paths',
|
|
356
|
-
'Progress bar shows files, ETA, bytes transferred',
|
|
357
|
-
],
|
|
358
|
-
examples: [
|
|
359
|
-
'download /home/user/data ./data',
|
|
360
|
-
'download /home/user/results/*.nii ./results/',
|
|
361
|
-
'download /feeds/feed_123 ./downloads -f',
|
|
362
|
-
],
|
|
363
|
-
},
|
|
364
|
-
connect: {
|
|
365
|
-
usage: 'connect <username> <url> [password]',
|
|
366
|
-
description: 'Connect to ChRIS server',
|
|
367
|
-
examples: [
|
|
368
|
-
'connect alice https://cube.chrisproject.org/api/v1/',
|
|
369
|
-
'connect bob http://localhost:8000/api/v1/ mypassword',
|
|
370
|
-
],
|
|
371
|
-
},
|
|
372
|
-
logout: {
|
|
373
|
-
usage: 'logout',
|
|
374
|
-
description: 'Disconnect from ChRIS server',
|
|
375
|
-
examples: ['logout'],
|
|
376
|
-
},
|
|
377
|
-
plugin: {
|
|
378
|
-
usage: 'plugin <subcommand> [options]',
|
|
379
|
-
description: 'Work with a single ChRIS plugin - run, search, view documentation',
|
|
380
|
-
options: [
|
|
381
|
-
'',
|
|
382
|
-
'DESCRIPTION:',
|
|
383
|
-
' Plugins are computational units in ChRIS that process data. The "plugin"',
|
|
384
|
-
' command operates on individual plugins - running them, searching for specific',
|
|
385
|
-
' plugins, or viewing their documentation.',
|
|
386
|
-
'',
|
|
387
|
-
'SUBCOMMANDS:',
|
|
388
|
-
' run [--detach] <searchable> [params] Run a plugin and wait for it to finish',
|
|
389
|
-
' (--detach returns the instance id at once)',
|
|
390
|
-
' info <name>-v<version> Show one plugin whole: facts and every parameter',
|
|
391
|
-
' search <searchable> Resolve a searchable to plugin IDs',
|
|
392
|
-
' readme <pluginId> Display plugin README documentation',
|
|
393
|
-
'',
|
|
394
|
-
'SEARCHABLE FORMATS:',
|
|
395
|
-
' Simple: pl-dircopy',
|
|
396
|
-
' Compound: name:pl-dircopy,version:1.3.2',
|
|
397
|
-
' ID-based: id:42',
|
|
398
|
-
' Batch: id:77++id:33 (multiple plugins)',
|
|
399
|
-
'',
|
|
400
|
-
'PLUGIN RUN PARAMETERS:',
|
|
401
|
-
' Plugin-specific parameters use CLI flag format:',
|
|
402
|
-
' --param value Single parameter',
|
|
403
|
-
' --flag Boolean flag',
|
|
404
|
-
' --param1 val1 --param2 val2 Multiple parameters',
|
|
405
|
-
'',
|
|
406
|
-
' Run "parametersofplugin <name>" to see available parameters for a plugin.',
|
|
407
|
-
],
|
|
408
|
-
examples: [
|
|
409
|
-
'# Read one plugin: the same manual "cat /bin/<entry>" prints',
|
|
410
|
-
'plugin info pl-dircopy-v1.0.0',
|
|
411
|
-
'plugin info pl-dircopy 1.0.0',
|
|
412
|
-
'',
|
|
413
|
-
'# Search for plugins',
|
|
414
|
-
'plugin search pl-dircopy',
|
|
415
|
-
'plugin search name:dcm2niix',
|
|
416
|
-
'plugin search id:42',
|
|
417
|
-
'',
|
|
418
|
-
'# View plugin documentation',
|
|
419
|
-
'plugin readme 42',
|
|
420
|
-
'plugin readme pl-dircopy',
|
|
421
|
-
'',
|
|
422
|
-
'# Run a plugin (simple)',
|
|
423
|
-
'plugin run pl-dircopy',
|
|
424
|
-
'',
|
|
425
|
-
'# Run plugin with parameters',
|
|
426
|
-
'plugin run pl-dircopy --dir /incoming',
|
|
427
|
-
'plugin run name:pl-dcm2niix,version:1.0.2 --outputdir /results',
|
|
428
|
-
'',
|
|
429
|
-
'# Run with multiple parameters',
|
|
430
|
-
'plugin run pl-segmentation --threshold 0.5 --method watershed',
|
|
431
|
-
'',
|
|
432
|
-
'# Run with specific version',
|
|
433
|
-
'plugin run name:pl-dircopy,version:2.1.1 --dir /data',
|
|
434
|
-
],
|
|
435
|
-
},
|
|
436
|
-
plugins: {
|
|
437
|
-
usage: 'plugins <subcommand> [options]',
|
|
438
|
-
description: 'Manage collections of ChRIS plugins - list, add, delete, query',
|
|
439
|
-
options: [
|
|
440
|
-
'',
|
|
441
|
-
'DESCRIPTION:',
|
|
442
|
-
' Plugins are computational units in ChRIS. The "plugins" command operates on',
|
|
443
|
-
' collections of plugins - listing all available plugins, adding new plugins to',
|
|
444
|
-
' ChRIS, deleting plugins, or querying plugin metadata.',
|
|
445
|
-
...RESOURCE_LIST_OPTIONS,
|
|
446
|
-
'',
|
|
447
|
-
'RESOURCE-SPECIFIC SUBCOMMANDS:',
|
|
448
|
-
' add <input> [admin] Register a new plugin to ChRIS',
|
|
449
|
-
' delete <id> [admin] Remove a plugin from ChRIS',
|
|
450
|
-
' overview Show plugin system overview',
|
|
451
|
-
'',
|
|
452
|
-
'PLUGINS ADD OPTIONS:',
|
|
453
|
-
' --compute <resources> Comma-separated compute resources (default: host)',
|
|
454
|
-
' --store <url> Peer store URL (default: cube.chrisproject.org)',
|
|
455
|
-
' --adminUser <username> Administrator username (non-interactive compatibility)',
|
|
456
|
-
' --adminPassword <password> Administrator password (non-interactive compatibility)',
|
|
457
|
-
' --publicRepo <url> Public repository URL for the plugin',
|
|
458
|
-
'',
|
|
459
|
-
'PLUGIN INPUT FORMATS:',
|
|
460
|
-
' Plugin name: pl-dircopy',
|
|
461
|
-
' Docker image: fnndsc/pl-dircopy:2.1.1',
|
|
462
|
-
' Store URL: https://cube.chrisproject.org/api/v1/plugins/96/',
|
|
463
|
-
],
|
|
464
|
-
examples: [
|
|
465
|
-
'# List all plugins',
|
|
466
|
-
'plugins list',
|
|
467
|
-
'plugins list --all',
|
|
468
|
-
'plugins list --search name:dircopy',
|
|
469
|
-
'plugins list --fields name,version,dock_image',
|
|
470
|
-
'plugins search dircopy',
|
|
471
|
-
'',
|
|
472
|
-
'# Inspect available fields',
|
|
473
|
-
'plugins inspect',
|
|
474
|
-
'',
|
|
475
|
-
'# Delete a plugin',
|
|
476
|
-
'plugins delete 42',
|
|
477
|
-
'',
|
|
478
|
-
'# Show plugin system overview',
|
|
479
|
-
'plugins overview',
|
|
480
|
-
'',
|
|
481
|
-
'# Add plugin from peer store (searches cube.chrisproject.org)',
|
|
482
|
-
'plugins add pl-dircopy',
|
|
483
|
-
'plugins add pl-dircopy --compute host,gpu',
|
|
484
|
-
'',
|
|
485
|
-
'# Add a plugin with a temporary administrator identity',
|
|
486
|
-
'sudo plugins add pl-dircopy',
|
|
487
|
-
'',
|
|
488
|
-
'# Add plugin from Docker image',
|
|
489
|
-
'plugins add fnndsc/pl-dircopy:2.1.1',
|
|
490
|
-
'plugins add fnndsc/pl-dircopy:2.1.1 --compute host',
|
|
491
|
-
'',
|
|
492
|
-
'# Add plugin from custom peer store',
|
|
493
|
-
'plugins add pl-custom --store https://my-cube.org/api/v1/',
|
|
494
|
-
'',
|
|
495
|
-
'# Add plugin with specific repository',
|
|
496
|
-
'plugins add my-plugin:latest --publicRepo https://github.com/org/my-plugin',
|
|
497
|
-
],
|
|
498
|
-
},
|
|
499
|
-
feed: {
|
|
500
|
-
usage: 'feed <subcommand> [options]',
|
|
501
|
-
description: 'Work with a single ChRIS feed - create, annotate, comment',
|
|
502
|
-
options: [
|
|
503
|
-
'',
|
|
504
|
-
'SUBCOMMANDS:',
|
|
505
|
-
' create <path> Create a new feed from a data directory',
|
|
506
|
-
' note <feedId> Show the feed\'s note',
|
|
507
|
-
' note edit <feedId> Edit the note in the surface\'s editor (edit /proc/jobs/feed_N/note)',
|
|
508
|
-
' note <feedId> --title <t> Update note title',
|
|
509
|
-
' note <feedId> --content <c> Update note content',
|
|
510
|
-
' comments <feedId> List all comments on a feed',
|
|
511
|
-
' comment add <feedId> Add a comment (--title, --content)',
|
|
512
|
-
' comment edit <feedId> <commentId> Edit a comment (--title, --content)',
|
|
513
|
-
' comment delete <feedId> <commentId> Delete a comment',
|
|
514
|
-
' rm [<feed>] [-f] Remove a feed and everything in it (asks first)',
|
|
515
|
-
' tree [<feed>] Render the feed\'s plugin-instance DAG',
|
|
516
|
-
' tree [<feed>] --focus <id> Scope the tree to one node\'s subtree',
|
|
517
|
-
' tree [<feed>] --max-nodes <n> Cap rendered nodes (0 = all)',
|
|
518
|
-
' diagram [<feed>] Shallow alias of feed tree',
|
|
519
|
-
' diagram --signalflow [<feed>] Emit the DAG as SignalFlow YAML to stdout',
|
|
520
|
-
' (pipe it: feed diagram --signalflow 42 | signalflow -)',
|
|
521
|
-
'',
|
|
522
|
-
' <feed> accepts an ID, feed_N directory name, exact title, or unique search.',
|
|
523
|
-
' Omit it while inside a feed_N path to use the current directory\'s feed.',
|
|
524
|
-
],
|
|
525
|
-
examples: [
|
|
526
|
-
'feed create /home/user/uploads/MRI-data',
|
|
527
|
-
'feed tree 1669',
|
|
528
|
-
'feed diagram # Current feed, from inside feed_N',
|
|
529
|
-
'feed note 42',
|
|
530
|
-
'feed note 42 --title "QC passed" --content "No artefacts found"',
|
|
531
|
-
'feed comments 42',
|
|
532
|
-
'feed comment add 42 --title "Issue" --content "Slice 14 looks odd"',
|
|
533
|
-
'feed comment edit 42 7 --content "Resolved — motion artefact, excluded"',
|
|
534
|
-
'feed comment delete 42 7',
|
|
535
|
-
],
|
|
536
|
-
},
|
|
537
|
-
feeds: {
|
|
538
|
-
usage: 'feeds <subcommand> [options]',
|
|
539
|
-
description: 'Manage collections of ChRIS feeds - list, delete, share, query',
|
|
540
|
-
options: [
|
|
541
|
-
'',
|
|
542
|
-
'DESCRIPTION:',
|
|
543
|
-
' A feed represents a data analysis workflow in ChRIS - a DAG of linked plugin',
|
|
544
|
-
' instances, also navigable as a folder at /home/<user>/feeds/.',
|
|
545
|
-
...RESOURCE_LIST_OPTIONS,
|
|
546
|
-
'--user <username> Filter by owner username (admin only)',
|
|
547
|
-
'',
|
|
548
|
-
'RESOURCE-SPECIFIC SUBCOMMANDS:',
|
|
549
|
-
' delete <id> Remove a feed',
|
|
550
|
-
],
|
|
551
|
-
examples: [
|
|
552
|
-
'feeds list',
|
|
553
|
-
'feeds list --all',
|
|
554
|
-
'feeds list --limit 100',
|
|
555
|
-
'feeds search experiment',
|
|
556
|
-
'feeds list --fields id,name,creation_date',
|
|
557
|
-
'feeds list --user radstar',
|
|
558
|
-
'feeds list --all --user radstar',
|
|
559
|
-
'feeds inspect',
|
|
560
|
-
'feeds delete 123',
|
|
561
|
-
],
|
|
562
|
-
},
|
|
563
|
-
files: {
|
|
564
|
-
usage: 'files <subcommand> [path] [options]',
|
|
565
|
-
description: 'Manage ChRIS file resources',
|
|
566
|
-
options: [...RESOURCE_LIST_OPTIONS],
|
|
567
|
-
examples: [
|
|
568
|
-
'files list',
|
|
569
|
-
'files list /path',
|
|
570
|
-
'files search fname:dicom',
|
|
571
|
-
'files inspect',
|
|
572
|
-
],
|
|
573
|
-
},
|
|
574
|
-
links: {
|
|
575
|
-
usage: 'links <subcommand> [path] [options]',
|
|
576
|
-
description: 'Manage ChRIS link resources',
|
|
577
|
-
options: [...RESOURCE_LIST_OPTIONS],
|
|
578
|
-
examples: ['links list', 'links search', 'links inspect'],
|
|
579
|
-
},
|
|
580
|
-
dirs: {
|
|
581
|
-
usage: 'dirs <subcommand> [path] [options]',
|
|
582
|
-
description: 'Manage ChRIS directory resources',
|
|
583
|
-
options: [...RESOURCE_LIST_OPTIONS],
|
|
584
|
-
examples: ['dirs list', 'dirs search', 'dirs inspect'],
|
|
585
|
-
},
|
|
586
|
-
pipeline: {
|
|
587
|
-
usage: 'pipeline <subcommand> [args]',
|
|
588
|
-
description: 'Manage and execute ChRIS pipelines (registered DAG workflows)',
|
|
589
|
-
options: [
|
|
590
|
-
...RESOURCE_LIST_OPTIONS,
|
|
591
|
-
'',
|
|
592
|
-
'RESOURCE-SPECIFIC SUBCOMMANDS:',
|
|
593
|
-
' info <name|id> Show pipeline nodes, plugins, and topology',
|
|
594
|
-
' manifest <name|id|slug> Emit complete registered invocation YAML',
|
|
595
|
-
' run <name|id> Run a pipeline on the context node and wait for it',
|
|
596
|
-
' source <name|id> Display the pipeline YAML source file',
|
|
597
|
-
' diagram <name|id> Draw the pipeline as a shallow tree',
|
|
598
|
-
' --withargs Include stored non-null plugin defaults inline',
|
|
599
|
-
' --signalflow Emit SignalFlow YAML instead of the shallow tree',
|
|
600
|
-
' delete <id> Remove a pipeline',
|
|
601
|
-
'',
|
|
602
|
-
'RUN OPTIONS:',
|
|
603
|
-
' --detach Return the instance ids at once, without waiting',
|
|
604
|
-
' --compute <resource> Override compute resource for all nodes',
|
|
605
|
-
' --previous <inst_id> Explicit previous instance ID (default: context node)',
|
|
606
|
-
' --paramFile <cfs-file> Apply one sparse YAML invocation overlay',
|
|
607
|
-
' --<node>.<parameter> <value> Override one hosted plugin parameter',
|
|
608
|
-
' --<node>.<control> <value> Override one node execution control',
|
|
609
|
-
' Use --@<piping-id>.<field> when a node title is ambiguous or shell-unsafe',
|
|
610
|
-
'',
|
|
611
|
-
'PIPELINE EXECUTABLES:',
|
|
612
|
-
' Pipelines also appear in /bin (colored magenta) and can be invoked directly.',
|
|
613
|
-
' <PipelineName> Run pipeline on context node',
|
|
614
|
-
' <PipelineName> --nodes Show DAG structure (alias: --parameters)',
|
|
615
|
-
' <PipelineName> --source Show YAML source (alias: --readme)',
|
|
616
|
-
' <PipelineName> --manifest Emit complete registered invocation YAML',
|
|
617
|
-
' <PipelineName> --diagram Draw the shallow pipeline topology',
|
|
618
|
-
' <PipelineName> --signalflow Emit SignalFlow YAML directly',
|
|
619
|
-
' --withargs Include arguments with --diagram',
|
|
620
|
-
' cat /bin/<PipelineName> Show a fast cached executable summary',
|
|
621
|
-
],
|
|
622
|
-
examples: [
|
|
623
|
-
'pipeline list # List all pipelines',
|
|
624
|
-
'pipeline list PHI # Filter by name',
|
|
625
|
-
'pipeline info PHI_detection # Show nodes and topology',
|
|
626
|
-
'pipeline manifest PHI_detection # Registered invocation YAML',
|
|
627
|
-
'pipeline run PHI_detection # Run on current context node',
|
|
628
|
-
'pipeline run PHI_detection --compute gpu',
|
|
629
|
-
'pipeline run PHI_detection --segmentation.threshold 0.5',
|
|
630
|
-
'pipeline run PHI_detection --paramFile ~/params/run.yaml',
|
|
631
|
-
'pipeline source PHI_detection # Show YAML source',
|
|
632
|
-
'pipeline diagram PHI_detection # Draw the authored DAG',
|
|
633
|
-
'pipeline diagram --withargs PHI_detection',
|
|
634
|
-
'pipeline diagram --signalflow PHI_detection | signalflow -',
|
|
635
|
-
'',
|
|
636
|
-
'# Direct invocation from /bin',
|
|
637
|
-
'PHI_detection # Run with defaults',
|
|
638
|
-
'PHI_detection --nodes # Show node structure',
|
|
639
|
-
'PHI_detection --source # Show YAML source',
|
|
640
|
-
'PHI_detection --manifest # Registered invocation YAML',
|
|
641
|
-
'PHI_detection --diagram # Draw the authored DAG',
|
|
642
|
-
'PHI_detection --signalflow # Emit SignalFlow YAML',
|
|
643
|
-
'cat /bin/PHI_detection # Cached executable summary',
|
|
644
|
-
],
|
|
645
|
-
},
|
|
646
|
-
pacs: {
|
|
647
|
-
usage: 'pacs <subcommand> [args]',
|
|
648
|
-
description: 'PACS subsystem — server context, query, and series retrieval',
|
|
649
|
-
options: [
|
|
650
|
-
'SUBCOMMANDS:',
|
|
651
|
-
' connect List registered PACS servers with active one marked',
|
|
652
|
-
' connect <name|id> Set active PACS server',
|
|
653
|
-
' disconnect Clear active PACS server',
|
|
654
|
-
' list List registered PACS servers (alias: pacs connect)',
|
|
655
|
-
' query <Key:Value...> Create PACS query and wait for results',
|
|
656
|
-
' pull <vfs-path...> Pull DICOM series into ChRIS storage',
|
|
657
|
-
' status <target> Per-series pulled/pending report with in-CUBE paths;',
|
|
658
|
-
' target is an expression, VFS path, or query id',
|
|
659
|
-
],
|
|
660
|
-
examples: [
|
|
661
|
-
'pacs # Show active server',
|
|
662
|
-
'pacs connect # List all servers',
|
|
663
|
-
'pacs connect PACSDCM # Set active server by identifier',
|
|
664
|
-
'pacs connect 1 # Set active server by numeric ID',
|
|
665
|
-
'pacs disconnect # Clear active server',
|
|
666
|
-
'pacs list # List all servers',
|
|
667
|
-
'pacs query PatientID:1234 # Query PACS',
|
|
668
|
-
'pacs pull /net/pacs/queries/42_AccessionNumber:12345678',
|
|
669
|
-
'pacs status AccessionNumber:22119730 # What has landed in CUBE, what is missing',
|
|
670
|
-
],
|
|
671
|
-
},
|
|
672
|
-
'pacs query': {
|
|
673
|
-
usage: 'pacs query <Key:Value[,Key:Value...]> [--table | --csv | --csv-to <cfs-path>] [--series] [--title <title>] [--pacsserver <id>] [--fresh]',
|
|
674
|
-
description: 'Create a PACS query, wait for results, and print the VFS path',
|
|
675
|
-
options: [
|
|
676
|
-
'--title <title> Title for the query record (default: Query <timestamp>)',
|
|
677
|
-
'--pacsserver <id> Override PACS server (default: context PACSserver);',
|
|
678
|
-
' a comma-separated list asks each and names the server on every row',
|
|
679
|
-
'--patients <list> Ask after several patients: MRNs comma-separated, or @<cfs-file>',
|
|
680
|
-
' (one MRN per line; blanks and # comments ignored)',
|
|
681
|
-
'--csv Render the answer as CSV (a row per study, and one per patient with none)',
|
|
682
|
-
'--csv-to <cfs-path> Write that CSV into ChRIS storage, where a detached surface can reach it',
|
|
683
|
-
' (given no path, the destination is asked for)',
|
|
684
|
-
'--force Overwrite the table at that path; without it, an existing file is kept',
|
|
685
|
-
'--table Show the answer\'s rows as an aligned table: the CSV\'s columns, for a screen',
|
|
686
|
-
'--series One row per series instead of per study (on the table and in the CSV);',
|
|
687
|
-
' alone, it shows the series table',
|
|
688
|
-
'--anon Stand in for names and record numbers (for demonstrating on a live PACS)',
|
|
689
|
-
'--fresh Ask the PACS even if this question was answered before',
|
|
690
|
-
'--help Show this help',
|
|
691
|
-
],
|
|
692
|
-
examples: [
|
|
693
|
-
'pacs query PatientID:1234',
|
|
694
|
-
'pacs query PatientID:1234 --fresh # ignore the stored answer',
|
|
695
|
-
'pacs query AccessionNumber:12345678 --title "Hip DDH workup"',
|
|
696
|
-
'pacs query PatientID:1234,StudyDate:20240101',
|
|
697
|
-
'pacs query PatientID:1234 --table # the rows, aligned, one per study',
|
|
698
|
-
'pacs query PatientID:1234 --series # one row per series',
|
|
699
|
-
'pacs query PatientID:1234 --csv-to ~/audit.csv --table --series',
|
|
700
|
-
'',
|
|
701
|
-
'# Standalone alias (identical behaviour)',
|
|
702
|
-
'query PatientID:1234',
|
|
703
|
-
],
|
|
704
|
-
},
|
|
705
|
-
'pacs pull': {
|
|
706
|
-
usage: 'pacs pull [--nowait] [--retry N] [--new-feed <title> [--plugin <selector>|--pipeline <selector>] [-- <args...>]] <vfs-path|query-expr> [...]',
|
|
707
|
-
description: 'Pull PACS series into ChRIS storage (blocking, with LONK progress)',
|
|
708
|
-
options: [
|
|
709
|
-
'--detach Fire retrieves and return the handles at once; prints <seriesUID> <retrieveId> per line',
|
|
710
|
-
' (--nowait is the older spelling of the same flag)',
|
|
711
|
-
'--retry N Re-fire retrieves for [NO LONK] series up to N additional times',
|
|
712
|
-
'--new-feed <title> Create one named feed from the complete retrieved selection',
|
|
713
|
-
'--plugin <selector> Attach one plugin to the new Feed root',
|
|
714
|
-
'--pipeline <selector> Attach one pipeline to the new Feed root',
|
|
715
|
-
'-- <args...> Forward remaining tokens to the selected analysis',
|
|
716
|
-
' (cannot be combined with --detach)',
|
|
717
|
-
'--help Show this help',
|
|
718
|
-
],
|
|
719
|
-
examples: [
|
|
720
|
-
'pacs pull /net/pacs/queries/42_AccessionNumber:12345678',
|
|
721
|
-
'pacs pull /net/pacs/queries/42_.../Study_1.2.3_US-Hips_DDH',
|
|
722
|
-
'pacs pull AccessionNumber:12345678 # query-then-pull shorthand',
|
|
723
|
-
'pacs pull AccessionNumber:12345678 --new-feed "Brain MRI"',
|
|
724
|
-
'',
|
|
725
|
-
'# Standalone alias (identical behaviour)',
|
|
726
|
-
'pull /net/pacs/queries/42_AccessionNumber:12345678',
|
|
727
|
-
],
|
|
728
|
-
},
|
|
729
|
-
'pacs connect': {
|
|
730
|
-
usage: 'pacs connect [<name|id>]',
|
|
731
|
-
description: 'List registered PACS servers or set the active one',
|
|
732
|
-
examples: [
|
|
733
|
-
'pacs connect # List all servers with active marked',
|
|
734
|
-
'pacs connect PACSDCM # Set active server by identifier',
|
|
735
|
-
'pacs connect 1 # Set active server by numeric ID',
|
|
736
|
-
],
|
|
737
|
-
},
|
|
738
|
-
'pacs disconnect': {
|
|
739
|
-
usage: 'pacs disconnect',
|
|
740
|
-
description: 'Clear the active PACS server from context',
|
|
741
|
-
examples: [
|
|
742
|
-
'pacs disconnect # Clear active server',
|
|
743
|
-
],
|
|
744
|
-
},
|
|
745
|
-
'pacs list': {
|
|
746
|
-
usage: 'pacs list',
|
|
747
|
-
description: 'List registered PACS servers with active one marked (alias: pacs connect)',
|
|
748
|
-
examples: [
|
|
749
|
-
'pacs list # List all servers',
|
|
750
|
-
],
|
|
751
|
-
},
|
|
752
|
-
pacsservers: {
|
|
753
|
-
usage: 'pacsservers <subcommand> [options]',
|
|
754
|
-
description: 'List or inspect available PACS servers (context-aware)',
|
|
755
|
-
examples: [
|
|
756
|
-
'pacsservers list # List PACS servers',
|
|
757
|
-
'pacsservers list --table # Table view',
|
|
758
|
-
'pacsservers fieldslist # Show fields',
|
|
759
|
-
],
|
|
760
|
-
},
|
|
761
|
-
pacsqueries: {
|
|
762
|
-
usage: 'pacsqueries <subcommand> [options]',
|
|
763
|
-
description: 'Create or list PACS queries (uses current pacsserver context unless overridden)',
|
|
764
|
-
options: [
|
|
765
|
-
'--pacsserver <id|name> Use specific PACS server for this call',
|
|
766
|
-
'--title <string> Title for created query',
|
|
767
|
-
'--search <filters> Filters for list (supports comma-separated key:value)',
|
|
768
|
-
],
|
|
769
|
-
examples: [
|
|
770
|
-
'pacsqueries list # List for current pacsserver',
|
|
771
|
-
'pacsqueries list --pacsserver PACSDCM # Override server',
|
|
772
|
-
'pacsqueries create "PatientID:1234" --title "PID 1234"',
|
|
773
|
-
'pacsqueries decode <id> # Decode a query result',
|
|
774
|
-
],
|
|
775
|
-
},
|
|
776
|
-
pacsretrieve: {
|
|
777
|
-
usage: 'pacsretrieve <subcommand> [options]',
|
|
778
|
-
description: 'Pull or inspect DICOM retrieves for PACS queries',
|
|
779
|
-
examples: [
|
|
780
|
-
'pacsretrieve pull <queryId> # Pull data for a query',
|
|
781
|
-
'pacsretrieve report <queryId> # Show retrieve status',
|
|
782
|
-
'pacsretrieve cancel <retrieveId> # Cancel a retrieve',
|
|
783
|
-
],
|
|
784
|
-
},
|
|
785
201
|
exit: {
|
|
786
202
|
usage: 'exit',
|
|
787
203
|
description: 'Exit the shell',
|
|
788
204
|
examples: ['exit'],
|
|
789
205
|
},
|
|
790
|
-
context: {
|
|
791
|
-
usage: 'context',
|
|
792
|
-
description: 'Display current ChRIS context information',
|
|
793
|
-
examples: ['context'],
|
|
794
|
-
},
|
|
795
|
-
whoami: {
|
|
796
|
-
usage: 'whoami',
|
|
797
|
-
description: 'Print the currently authenticated ChRIS username',
|
|
798
|
-
examples: ['whoami'],
|
|
799
|
-
},
|
|
800
206
|
version: {
|
|
801
207
|
usage: 'version',
|
|
802
208
|
description: 'Report the versions of the mise stack layers running this session',
|
|
803
209
|
examples: ['version'],
|
|
804
210
|
},
|
|
805
|
-
id: {
|
|
806
|
-
usage: 'id',
|
|
807
|
-
description: 'Print the current CUBE user as a Unix-style UID, projected primary GID, and complete list of CUBE group memberships.',
|
|
808
|
-
examples: ['id'],
|
|
809
|
-
},
|
|
810
211
|
fortune: {
|
|
811
212
|
usage: 'fortune',
|
|
812
213
|
summary: 'Print a random fortune cookie',
|
|
@@ -931,19 +332,6 @@ export const helpText = {
|
|
|
931
332
|
description: 'The time, how long the process serving this session has run, how many surfaces are attached, since when, and its pid.',
|
|
932
333
|
examples: ['uptime'],
|
|
933
334
|
},
|
|
934
|
-
ping: {
|
|
935
|
-
usage: 'ping [-c N] [cube]',
|
|
936
|
-
summary: 'Round trips to CUBE, timed',
|
|
937
|
-
description: 'Makes N (3) HTTP round trips to the CUBE this session talks to and times each, then sums up as ping does — and adds the average of this session\'s own calls to CUBE so far. Only CUBE is pinged from here: a hosted session is not a probe for the network it sits on.',
|
|
938
|
-
options: [' -c N Round trips to make (default 3, at most 20)'],
|
|
939
|
-
examples: ['ping', 'ping -c 10'],
|
|
940
|
-
},
|
|
941
|
-
chrisfetch: {
|
|
942
|
-
usage: 'chrisfetch',
|
|
943
|
-
summary: 'The brain beside the session\'s facts, neofetch style',
|
|
944
|
-
description: 'Who you are and where, feeds by scope, jobs run and the failure rate, the index\'s state, the surfaces attached, the uptime — beside the ChRIS brain. All from what the session already holds: no extra calls.',
|
|
945
|
-
examples: ['chrisfetch', 'chrisfetch | lolcat'],
|
|
946
|
-
},
|
|
947
335
|
say: {
|
|
948
336
|
usage: 'say [text]',
|
|
949
337
|
summary: 'A surface with a voice speaks it',
|
|
@@ -957,38 +345,6 @@ export const helpText = {
|
|
|
957
345
|
options: [' -l, --list Every term in the book'],
|
|
958
346
|
examples: ['wtf is lonk', 'wtf cube pfdcm', 'wtf -l'],
|
|
959
347
|
},
|
|
960
|
-
file: {
|
|
961
|
-
usage: 'file <path>...',
|
|
962
|
-
summary: 'What a file is, by its first bytes',
|
|
963
|
-
description: 'Reads a CFS file\'s head and names it by its magic: DICOM, NIfTI, gzip, PNG, JPEG, PDF, ZIP, JSON, text and more, with its size.',
|
|
964
|
-
examples: ['file 0001.dcm', 'file ~/data/*'],
|
|
965
|
-
},
|
|
966
|
-
xxd: {
|
|
967
|
-
usage: 'xxd [-s OFFSET] [-l LENGTH] <path>',
|
|
968
|
-
summary: 'A hex dump of a file',
|
|
969
|
-
description: 'The canonical hex dump — offset, sixteen bytes in pairs, the text beside — of a CFS file. 256 bytes unless -l asks for more; -s starts further in. Says how much of the file it showed.',
|
|
970
|
-
options: [' -s OFFSET Start at this byte (default 0)', ' -l LENGTH Show this many bytes (default 256)'],
|
|
971
|
-
examples: ['xxd 0001.dcm', 'xxd -s 128 -l 16 0001.dcm', 'xxd -l 4096 image.nii'],
|
|
972
|
-
},
|
|
973
|
-
strings: {
|
|
974
|
-
usage: 'strings [-n MIN] [-l LIMIT] <path>',
|
|
975
|
-
summary: 'The readable runs in a file',
|
|
976
|
-
description: 'Prints the runs of printable characters, MIN (4) or longer, in a CFS file — the way to see what a binary carries. 200 lines unless -l asks for more; says how many there were.',
|
|
977
|
-
options: [' -n MIN Shortest run to show (default 4)', ' -l LIMIT Most runs to show (default 200)'],
|
|
978
|
-
examples: ['strings 0001.dcm', 'strings -n 8 report.pdf'],
|
|
979
|
-
},
|
|
980
|
-
sha256sum: {
|
|
981
|
-
usage: 'sha256sum <path>...',
|
|
982
|
-
summary: 'The SHA-256 digest of a file',
|
|
983
|
-
description: 'Prints each CFS file\'s SHA-256 as hex, then its name, in the format the coreutils tool uses.',
|
|
984
|
-
examples: ['sha256sum image.nii.gz', 'sha256sum ~/uploads/*'],
|
|
985
|
-
},
|
|
986
|
-
md5sum: {
|
|
987
|
-
usage: 'md5sum <path>...',
|
|
988
|
-
summary: 'The MD5 digest of a file',
|
|
989
|
-
description: 'Prints each CFS file\'s MD5 as hex, then its name.',
|
|
990
|
-
examples: ['md5sum image.nii.gz'],
|
|
991
|
-
},
|
|
992
348
|
qr: {
|
|
993
349
|
usage: 'qr <text or URL>',
|
|
994
350
|
summary: 'A QR code in the console, for a phone',
|
|
@@ -1107,12 +463,6 @@ export const helpText = {
|
|
|
1107
463
|
],
|
|
1108
464
|
examples: ['weather', 'weather Cape Town', 'weather Boston --units imperial', 'weather Paris -d 7'],
|
|
1109
465
|
},
|
|
1110
|
-
motd: {
|
|
1111
|
-
usage: 'motd [surface]',
|
|
1112
|
-
summary: 'The greeting a session gives on arrival',
|
|
1113
|
-
description: 'Says who you are, how many feeds you hold, how many jobs have run and what share of them failed, and what is running now — from the session\'s own index, at no cost. While the index is still warming it says what it holds so far. A surface may name itself (motd ARGUS) and the greeting says where you arrived. Ends with a short fortune.',
|
|
1114
|
-
examples: ['motd', 'motd ARGUS'],
|
|
1115
|
-
},
|
|
1116
466
|
date: {
|
|
1117
467
|
usage: 'date [-u] [+FORMAT]',
|
|
1118
468
|
summary: 'Print the current date and time',
|
|
@@ -1129,60 +479,6 @@ export const helpText = {
|
|
|
1129
479
|
description: 'Prints a month or year calendar with today highlighted, in the spirit of UNIX cal.',
|
|
1130
480
|
examples: ['cal', 'cal 2026', 'cal 7 2026'],
|
|
1131
481
|
},
|
|
1132
|
-
whereami: {
|
|
1133
|
-
usage: 'whereami',
|
|
1134
|
-
description: 'Print the current CUBE URL',
|
|
1135
|
-
examples: ['whereami'],
|
|
1136
|
-
},
|
|
1137
|
-
proc: {
|
|
1138
|
-
usage: 'proc <jobs|stat|feeds|refresh|retry|find|here|watch|unwatch> [args]',
|
|
1139
|
-
summary: 'Job history inspector — navigate, query and monitor ChRIS pipeline execution via /proc/jobs',
|
|
1140
|
-
description: '/proc/jobs is a job history inspector for every computation visible to the current ChRIS identity. Each plugin instance is a discrete job with a parent, zero or more children, a status, parameters, and a log. Jobs are grouped into feeds (pipeline runs), and the parent-child relationships form a DAG: the execution tree of a full computation. /proc/jobs exposes this as a navigable filesystem. The daemon restores an identity-scoped local topology checkpoint, validates feed visibility with CUBE, and reconciles all plugin instances in the background. Restored queries remain usable while syncing; a cold cache still guards global queries until complete. CUBE remains authoritative.',
|
|
1141
|
-
subcommands: [
|
|
1142
|
-
'jobs list List all feeds with full counter fields (default 20)',
|
|
1143
|
-
'jobs list --fields id,title,erroredJobs Select columns',
|
|
1144
|
-
'jobs list --sort erroredJobs --reverse Sort by field',
|
|
1145
|
-
'jobs list --table Tabular output',
|
|
1146
|
-
'jobs list --csv CSV output',
|
|
1147
|
-
'jobs list --all All feeds (no limit)',
|
|
1148
|
-
'jobs list --search failed Filter by title substring',
|
|
1149
|
-
'jobs list --force Wait for warm-up, then list complete results',
|
|
1150
|
-
'jobs inspect Show all available field names',
|
|
1151
|
-
'stat Show cache summary',
|
|
1152
|
-
'stat <feed_id> Show raw counters + topology state for one feed',
|
|
1153
|
-
'feeds <title> [--force] Search feed titles; --force waits for warm-up',
|
|
1154
|
-
'universe Every feed the index holds as it landed: size, status, pipeline shape; honest while warming',
|
|
1155
|
-
'layout <name> Where a surface last laid the universe out under a layout, as the session keeps it',
|
|
1156
|
-
'layout put <name> <places> Keep a layout: node ids to [x, y, z], as JSON (surfaces put what they settle)',
|
|
1157
|
-
'refresh Rebuild entire proc cache',
|
|
1158
|
-
'refresh <feed_id> Rebuild cache for one feed only',
|
|
1159
|
-
'retry Resume a failed topology sweep at its failed page',
|
|
1160
|
-
'find <id> Targeted instance lookup; available during warm-up',
|
|
1161
|
-
'find <name> [--force] Name search; --force waits for warm-up',
|
|
1162
|
-
'here Navigate from a CFS feed/output path to its matching job',
|
|
1163
|
-
'watch <feed> Keep a running feed live: sample it while it runs, push its DAG to every surface',
|
|
1164
|
-
'watch List the session\'s watches with their state',
|
|
1165
|
-
'unwatch <feed> Release the watch on a feed',
|
|
1166
|
-
],
|
|
1167
|
-
examples: [
|
|
1168
|
-
'proc jobs list',
|
|
1169
|
-
'proc jobs list --sort erroredJobs --reverse --table',
|
|
1170
|
-
'proc jobs list --fields id,title,erroredJobs,startedJobs --all',
|
|
1171
|
-
'proc jobs list --search failed',
|
|
1172
|
-
'proc jobs inspect',
|
|
1173
|
-
'proc stat',
|
|
1174
|
-
'proc stat 899',
|
|
1175
|
-
'proc feeds failed',
|
|
1176
|
-
'proc universe',
|
|
1177
|
-
'proc refresh',
|
|
1178
|
-
'proc retry',
|
|
1179
|
-
'proc find 64306',
|
|
1180
|
-
'proc find pl-fshack',
|
|
1181
|
-
'proc here',
|
|
1182
|
-
'proc watch feed_2583',
|
|
1183
|
-
'proc unwatch 2583',
|
|
1184
|
-
],
|
|
1185
|
-
},
|
|
1186
482
|
prompt: {
|
|
1187
483
|
usage: 'prompt [list | <theme>]',
|
|
1188
484
|
description: 'List available prompt themes or switch the active theme',
|
|
@@ -1197,19 +493,6 @@ export const helpText = {
|
|
|
1197
493
|
'prompt p10k # Switch to two-line Powerlevel10k-inspired theme',
|
|
1198
494
|
],
|
|
1199
495
|
},
|
|
1200
|
-
physicalmode: {
|
|
1201
|
-
usage: 'physicalmode [on|off]',
|
|
1202
|
-
description: 'Toggle or display physical filesystem mode',
|
|
1203
|
-
options: [
|
|
1204
|
-
'on Enable physical mode (paths used directly)',
|
|
1205
|
-
'off Disable physical mode (use logical-to-physical mapping)',
|
|
1206
|
-
],
|
|
1207
|
-
examples: [
|
|
1208
|
-
'physicalmode # Show current status',
|
|
1209
|
-
'physicalmode on # Enable physical mode',
|
|
1210
|
-
'physicalmode off # Disable physical mode',
|
|
1211
|
-
],
|
|
1212
|
-
},
|
|
1213
496
|
timing: {
|
|
1214
497
|
usage: 'timing [on|off]',
|
|
1215
498
|
description: 'Toggle or display command timing mode',
|
|
@@ -1236,343 +519,6 @@ export const helpText = {
|
|
|
1236
519
|
'debug off # Disable debug mode',
|
|
1237
520
|
],
|
|
1238
521
|
},
|
|
1239
|
-
parametersofplugin: {
|
|
1240
|
-
usage: 'parametersofplugin <plugin_name>',
|
|
1241
|
-
description: 'Display parameters for a specific plugin',
|
|
1242
|
-
examples: [
|
|
1243
|
-
'parametersofplugin pl-dircopy',
|
|
1244
|
-
'parametersofplugin pl-simpledsapp',
|
|
1245
|
-
],
|
|
1246
|
-
},
|
|
1247
|
-
tree: {
|
|
1248
|
-
usage: 'tree [options] [path]',
|
|
1249
|
-
description: 'Display directory tree structure',
|
|
1250
|
-
options: [
|
|
1251
|
-
'--follow Follow symbolic links when traversing',
|
|
1252
|
-
'--path Emit one full path per entry (grep-friendly, no tree art)',
|
|
1253
|
-
'--dirs Show directories only',
|
|
1254
|
-
'--dirpath Emit one full directory path per line',
|
|
1255
|
-
],
|
|
1256
|
-
examples: [
|
|
1257
|
-
'tree # Tree of current directory',
|
|
1258
|
-
'tree /home/user/data # Tree of specific path',
|
|
1259
|
-
'tree --follow # Follow symbolic links',
|
|
1260
|
-
'tree --path # One path per line, no decoration',
|
|
1261
|
-
'tree --dirs # Directory hierarchy only',
|
|
1262
|
-
'tree --dirpath # One directory path per line',
|
|
1263
|
-
],
|
|
1264
|
-
},
|
|
1265
|
-
du: {
|
|
1266
|
-
usage: 'du [options] [path]',
|
|
1267
|
-
description: 'Display disk usage statistics (mimics Linux du)',
|
|
1268
|
-
options: [
|
|
1269
|
-
'-h, --human-readable Print sizes in human readable format',
|
|
1270
|
-
'-s, --summarize Display only total for each argument',
|
|
1271
|
-
'-a, --all Show counts for all files, not just directories',
|
|
1272
|
-
'-c, --total Produce a grand total',
|
|
1273
|
-
'-d N, --max-depth=N Print total only if N or fewer levels below',
|
|
1274
|
-
'-S, --separate-dirs Do not include size of subdirectories',
|
|
1275
|
-
],
|
|
1276
|
-
examples: [
|
|
1277
|
-
'du # Disk usage of current directory',
|
|
1278
|
-
'du -h # Human-readable sizes (1K, 234M, 2G)',
|
|
1279
|
-
'du -s /home/user/data # Summary only for specified path',
|
|
1280
|
-
'du -a # Show all files, not just directories',
|
|
1281
|
-
'du -c # Show grand total at end',
|
|
1282
|
-
'du -d 2 # Max depth of 2 levels',
|
|
1283
|
-
'du -sh # Human-readable summary',
|
|
1284
|
-
],
|
|
1285
|
-
},
|
|
1286
|
-
store: {
|
|
1287
|
-
usage: 'store <subcommand> [options]',
|
|
1288
|
-
description: 'Browse, search, and install plugins from ChRIS peer store',
|
|
1289
|
-
options: [
|
|
1290
|
-
'',
|
|
1291
|
-
'NOTE: The Store is an external peer ChRIS instance, not a local CUBE resource.',
|
|
1292
|
-
' Standard resource options (--all, --limit, etc.) do not apply.',
|
|
1293
|
-
'',
|
|
1294
|
-
'SUBCOMMANDS:',
|
|
1295
|
-
' list Browse all plugins in the peer store',
|
|
1296
|
-
' search <query> Search plugins by name',
|
|
1297
|
-
' install <name> Install a plugin from the store into local CUBE',
|
|
1298
|
-
' inspect Show current peer store URL and connection info',
|
|
1299
|
-
' set <url> Set peer store URL (persisted to ~/.config/chell/settings.json)',
|
|
1300
|
-
' reset Reset peer store URL to default (cube.chrisproject.org)',
|
|
1301
|
-
'',
|
|
1302
|
-
'INSTALL OPTIONS:',
|
|
1303
|
-
' --compute <names> Compute resources (comma-separated)',
|
|
1304
|
-
' Use `sudo store install …` for an administrator installation.',
|
|
1305
|
-
'-l Long listing format',
|
|
1306
|
-
],
|
|
1307
|
-
examples: [
|
|
1308
|
-
'store list',
|
|
1309
|
-
'store search dicom',
|
|
1310
|
-
'store install pl-dcm2niix',
|
|
1311
|
-
'store install pl-dcm2niix-v1.2.3',
|
|
1312
|
-
'store install fnndsc/pl-dcm2niix:1.2.3',
|
|
1313
|
-
'store install pl-dcm2niix --compute moc',
|
|
1314
|
-
'store inspect',
|
|
1315
|
-
'store set https://my-cube.org/api/v1/',
|
|
1316
|
-
'store reset',
|
|
1317
|
-
],
|
|
1318
|
-
},
|
|
1319
|
-
compute: {
|
|
1320
|
-
usage: 'compute <subcommand> [options]',
|
|
1321
|
-
description: 'Manage ChRIS compute resources',
|
|
1322
|
-
options: [
|
|
1323
|
-
...RESOURCE_LIST_OPTIONS,
|
|
1324
|
-
],
|
|
1325
|
-
examples: [
|
|
1326
|
-
'compute list',
|
|
1327
|
-
'compute list --table',
|
|
1328
|
-
'compute list --csv',
|
|
1329
|
-
'compute inspect',
|
|
1330
|
-
],
|
|
1331
|
-
},
|
|
1332
|
-
tag: {
|
|
1333
|
-
usage: 'tags <subcommand> [options]',
|
|
1334
|
-
description: 'Manage ChRIS tags',
|
|
1335
|
-
options: [
|
|
1336
|
-
...RESOURCE_LIST_OPTIONS,
|
|
1337
|
-
'',
|
|
1338
|
-
'RESOURCE-SPECIFIC SUBCOMMANDS:',
|
|
1339
|
-
' create <name> Create a new tag',
|
|
1340
|
-
' update <id> <name> Rename a tag',
|
|
1341
|
-
' delete <id> Remove a tag',
|
|
1342
|
-
],
|
|
1343
|
-
examples: ['tags list', 'tags search brain', 'tags inspect', 'tag create neuro', 'tag delete 5'],
|
|
1344
|
-
},
|
|
1345
|
-
tags: {
|
|
1346
|
-
usage: 'tags <subcommand> [options]',
|
|
1347
|
-
description: 'Manage ChRIS tags',
|
|
1348
|
-
options: [
|
|
1349
|
-
...RESOURCE_LIST_OPTIONS,
|
|
1350
|
-
'',
|
|
1351
|
-
'RESOURCE-SPECIFIC SUBCOMMANDS:',
|
|
1352
|
-
' create <name> Create a new tag',
|
|
1353
|
-
' update <id> <name> Rename a tag',
|
|
1354
|
-
' delete <id> Remove a tag',
|
|
1355
|
-
],
|
|
1356
|
-
examples: ['tags list', 'tags search brain', 'tags inspect', 'tag create neuro', 'tag delete 5'],
|
|
1357
|
-
},
|
|
1358
|
-
record: {
|
|
1359
|
-
usage: 'record <start <manifest>|stop|status>',
|
|
1360
|
-
description: 'Write what this session does down as a manifest',
|
|
1361
|
-
options: [
|
|
1362
|
-
'SUBCOMMANDS:',
|
|
1363
|
-
' start <manifest> Begin capturing the lines this session runs',
|
|
1364
|
-
' stop Write the manifest and say what it holds',
|
|
1365
|
-
' status Whether anything is recording, and how much (the default)',
|
|
1366
|
-
'',
|
|
1367
|
-
'A recording captures typed lines and the lines a surface mints from a press',
|
|
1368
|
-
'alike. It never invents expectations: adding `expect` lines is the author\'s',
|
|
1369
|
-
'act, and the one that turns a recording into a test. Identifiers a PACS line',
|
|
1370
|
-
'wears on its face (PatientID, AccessionNumber, PatientName) are offered as',
|
|
1371
|
-
'parameters, so the file is shareable rather than personal.',
|
|
1372
|
-
],
|
|
1373
|
-
examples: [
|
|
1374
|
-
'record start ~/flows/sag-cohort.mise',
|
|
1375
|
-
'# … do the work, by hand or by pressing …',
|
|
1376
|
-
'record stop',
|
|
1377
|
-
'play ~/flows/sag-cohort.mise --param MRN=1234567',
|
|
1378
|
-
],
|
|
1379
|
-
},
|
|
1380
|
-
play: {
|
|
1381
|
-
usage: 'play <manifest> [--param NAME=value]... [--pace <duration>] [--dry-run]',
|
|
1382
|
-
description: "Run a workflow manifest: the lines an operator could have typed",
|
|
1383
|
-
options: [
|
|
1384
|
-
'OPTIONS:',
|
|
1385
|
-
' --param NAME=value Supply a parameter the manifest declares (repeatable)',
|
|
1386
|
-
' --pace <duration> Wait between lines, for watching a play at a surface',
|
|
1387
|
-
' --dry-run Expand the lines and show them without running any',
|
|
1388
|
-
'',
|
|
1389
|
-
'A MANIFEST:',
|
|
1390
|
-
' # a comment',
|
|
1391
|
-
' @name what this workflow is',
|
|
1392
|
-
' @description one line about it',
|
|
1393
|
-
' @param MRN a parameter it needs',
|
|
1394
|
-
' @param LABEL = draft one with a default',
|
|
1395
|
-
' <any kernel line>',
|
|
1396
|
-
'',
|
|
1397
|
-
'PRONOUNS a line may use:',
|
|
1398
|
-
' ${gather} every gathered member, as operands (where it was gathered FROM)',
|
|
1399
|
-
' ${gather.place} the same members, where they LANDED in CUBE',
|
|
1400
|
-
' ${gather.first} ${gather.last} ${gather.3} ${gather.size} ${gather.name}',
|
|
1401
|
-
' ${gather.first.place} one member, where it landed (pull takes the address, image takes the place)',
|
|
1402
|
-
' ${feed} the feed this session most recently worked in',
|
|
1403
|
-
' ${run} the run it most recently scheduled',
|
|
1404
|
-
' ${run.place} where that run writes — what the next act in a chain takes',
|
|
1405
|
-
' ${query} where its most recent PACS answer lives',
|
|
1406
|
-
' ${cwd} where the session is standing',
|
|
1407
|
-
],
|
|
1408
|
-
examples: [
|
|
1409
|
-
'play ~/flows/sag-cohort.mise --param MRN=1234567',
|
|
1410
|
-
'play ~/flows/sag-cohort.mise --dry-run',
|
|
1411
|
-
'play ~/flows/battery.mise --pace 2s',
|
|
1412
|
-
],
|
|
1413
|
-
},
|
|
1414
|
-
expect: {
|
|
1415
|
-
usage: 'expect <gather|feed|run|path> [<target>] <property> [<predicate> <value>] [--within <duration>]',
|
|
1416
|
-
description: 'State a claim about the session, and refuse when it does not hold',
|
|
1417
|
-
options: [
|
|
1418
|
-
'SUBJECTS:',
|
|
1419
|
-
' gather size|pulled|name The cohort this session is working on',
|
|
1420
|
-
' feed <id> status A feed, as this session indexed it',
|
|
1421
|
-
' run <instance-id> status One plugin instance',
|
|
1422
|
-
' path <p> exists Whether a path is there',
|
|
1423
|
-
' path <p> count [--matching <glob>] How many things a folder holds',
|
|
1424
|
-
' path <p> tags <TagName> What a DICOM header says',
|
|
1425
|
-
'',
|
|
1426
|
-
'COMPARISONS:',
|
|
1427
|
-
' eq ne gt gte lt lte contains notContains matches',
|
|
1428
|
-
'',
|
|
1429
|
-
'OPTIONS:',
|
|
1430
|
-
' --within <duration> Keep asking until the claim holds or the time is up (30s, 20m, 2h)',
|
|
1431
|
-
' --matching <glob> Narrow a count to names matching a shell pattern',
|
|
1432
|
-
' --deep Count beneath the folder too — a plugin files its output in a tree',
|
|
1433
|
-
],
|
|
1434
|
-
examples: [
|
|
1435
|
-
'expect gather size eq 14',
|
|
1436
|
-
'expect run 601152 status eq finishedSuccessfully --within 20m',
|
|
1437
|
-
'expect path ~/feeds/feed_4599/pl-dcm2niix_1/data count --matching "*.nii*" gt 0',
|
|
1438
|
-
'expect path ~/anon tags PatientID eq anon-001',
|
|
1439
|
-
],
|
|
1440
|
-
},
|
|
1441
|
-
gather: {
|
|
1442
|
-
usage: 'gather <subcommand> [path...]',
|
|
1443
|
-
description: "Hold the set of things this session is working on",
|
|
1444
|
-
options: [
|
|
1445
|
-
'SUBCOMMANDS:',
|
|
1446
|
-
' list Show the cohort (the default)',
|
|
1447
|
-
' add <path...> Take series, directories or files into it',
|
|
1448
|
-
' remove <path|index...> Drop members, by path or by listed index',
|
|
1449
|
-
' clear Empty it, name and feed included',
|
|
1450
|
-
' name [<name>] Read the cohort\'s name, or give it one',
|
|
1451
|
-
],
|
|
1452
|
-
examples: [
|
|
1453
|
-
'gather',
|
|
1454
|
-
'gather add /net/pacs/queries/qid:3125/Study_1.2.3/Series_4.5.6',
|
|
1455
|
-
'gather add ~/uploads/brain',
|
|
1456
|
-
'gather remove 2',
|
|
1457
|
-
'gather name "sag cohort"',
|
|
1458
|
-
],
|
|
1459
|
-
},
|
|
1460
|
-
group: {
|
|
1461
|
-
usage: 'groups <subcommand> [options]',
|
|
1462
|
-
description: 'Manage ChRIS user groups',
|
|
1463
|
-
options: [
|
|
1464
|
-
...RESOURCE_LIST_OPTIONS,
|
|
1465
|
-
'',
|
|
1466
|
-
'RESOURCE-SPECIFIC SUBCOMMANDS:',
|
|
1467
|
-
' inspect [<group>] Show group identity, or fields when omitted',
|
|
1468
|
-
' members <group> List users in a group',
|
|
1469
|
-
' create <name> [admin] Create a new group',
|
|
1470
|
-
' delete <id> [admin] Remove a group',
|
|
1471
|
-
' adduser <group> <user...> [admin] Add one or more users',
|
|
1472
|
-
' removeuser <group> <user...> [admin] Remove one or more users',
|
|
1473
|
-
],
|
|
1474
|
-
examples: ['groups list', 'group members pacs_users', 'group adduser pacs_users peter.hong joe.schmo', 'group removeuser pacs_users joe.schmo'],
|
|
1475
|
-
},
|
|
1476
|
-
groups: {
|
|
1477
|
-
usage: 'groups <subcommand> [options]',
|
|
1478
|
-
description: 'Manage ChRIS user groups',
|
|
1479
|
-
options: [
|
|
1480
|
-
...RESOURCE_LIST_OPTIONS,
|
|
1481
|
-
'',
|
|
1482
|
-
'RESOURCE-SPECIFIC SUBCOMMANDS:',
|
|
1483
|
-
' inspect [<group>] Show group identity, or fields when omitted',
|
|
1484
|
-
' members <group> List users in a group',
|
|
1485
|
-
' create <name> [admin] Create a new group',
|
|
1486
|
-
' delete <id> [admin] Remove a group',
|
|
1487
|
-
' adduser <group> <user...> [admin] Add one or more users',
|
|
1488
|
-
' removeuser <group> <user...> [admin] Remove one or more users',
|
|
1489
|
-
],
|
|
1490
|
-
examples: ['groups list', 'group members pacs_users', 'group adduser pacs_users peter.hong joe.schmo', 'group removeuser pacs_users joe.schmo'],
|
|
1491
|
-
},
|
|
1492
|
-
pluginmeta: {
|
|
1493
|
-
usage: 'pluginmetas <subcommand> [options]',
|
|
1494
|
-
description: 'Browse ChRIS plugin metadata (abstract tool identities across versions)',
|
|
1495
|
-
options: [
|
|
1496
|
-
...RESOURCE_LIST_OPTIONS,
|
|
1497
|
-
'',
|
|
1498
|
-
'RESOURCE-SPECIFIC SUBCOMMANDS:',
|
|
1499
|
-
' plugins <id> List all registered versions of a plugin meta',
|
|
1500
|
-
],
|
|
1501
|
-
examples: ['pluginmetas list', 'pluginmetas search dircopy', 'pluginmetas inspect', 'pluginmeta plugins 12'],
|
|
1502
|
-
},
|
|
1503
|
-
pluginmetas: {
|
|
1504
|
-
usage: 'pluginmetas <subcommand> [options]',
|
|
1505
|
-
description: 'Browse ChRIS plugin metadata (abstract tool identities across versions)',
|
|
1506
|
-
options: [
|
|
1507
|
-
...RESOURCE_LIST_OPTIONS,
|
|
1508
|
-
'',
|
|
1509
|
-
'RESOURCE-SPECIFIC SUBCOMMANDS:',
|
|
1510
|
-
' plugins <id> List all registered versions of a plugin meta',
|
|
1511
|
-
],
|
|
1512
|
-
examples: ['pluginmetas list', 'pluginmetas search dircopy', 'pluginmetas inspect', 'pluginmeta plugins 12'],
|
|
1513
|
-
},
|
|
1514
|
-
plugininstance: {
|
|
1515
|
-
usage: 'plugininstances <subcommand> [options]',
|
|
1516
|
-
description: 'Manage ChRIS plugin instances (jobs)',
|
|
1517
|
-
options: [
|
|
1518
|
-
...RESOURCE_LIST_OPTIONS,
|
|
1519
|
-
'',
|
|
1520
|
-
'RESOURCE-SPECIFIC SUBCOMMANDS:',
|
|
1521
|
-
' cancel <id> Cancel a running job',
|
|
1522
|
-
' delete <id> Remove a job',
|
|
1523
|
-
' output <id> Show output folder path',
|
|
1524
|
-
' parameters <id> List job parameters',
|
|
1525
|
-
],
|
|
1526
|
-
examples: ['jobs list', 'jobs list --all', 'jobs search status:started', 'jobs inspect', 'job cancel 42', 'job output 42'],
|
|
1527
|
-
},
|
|
1528
|
-
plugininstances: {
|
|
1529
|
-
usage: 'plugininstances <subcommand> [options]',
|
|
1530
|
-
description: 'Manage ChRIS plugin instances (jobs)',
|
|
1531
|
-
options: [
|
|
1532
|
-
...RESOURCE_LIST_OPTIONS,
|
|
1533
|
-
'',
|
|
1534
|
-
'RESOURCE-SPECIFIC SUBCOMMANDS:',
|
|
1535
|
-
' cancel <id> Cancel a running job',
|
|
1536
|
-
' delete <id> Remove a job',
|
|
1537
|
-
' output <id> Show output folder path',
|
|
1538
|
-
' parameters <id> List job parameters',
|
|
1539
|
-
],
|
|
1540
|
-
examples: ['jobs list', 'jobs list --all', 'jobs search status:started', 'jobs inspect', 'job cancel 42', 'job output 42'],
|
|
1541
|
-
},
|
|
1542
|
-
workflow: {
|
|
1543
|
-
usage: 'workflows <subcommand> [options]',
|
|
1544
|
-
description: 'Manage ChRIS workflows (pipeline executions)',
|
|
1545
|
-
options: [
|
|
1546
|
-
...RESOURCE_LIST_OPTIONS,
|
|
1547
|
-
'',
|
|
1548
|
-
'RESOURCE-SPECIFIC SUBCOMMANDS:',
|
|
1549
|
-
' run Run a pipeline (alias: pipeline run)',
|
|
1550
|
-
' jobs <id> List plugin instances created by this workflow',
|
|
1551
|
-
' rename <id> <title> Rename a workflow',
|
|
1552
|
-
' delete <id> Remove a workflow',
|
|
1553
|
-
],
|
|
1554
|
-
examples: ['workflows list', 'workflows list --all', 'workflows inspect', 'workflow jobs 7', 'workflow delete 7'],
|
|
1555
|
-
},
|
|
1556
|
-
workflows: {
|
|
1557
|
-
usage: 'workflows <subcommand> [options]',
|
|
1558
|
-
description: 'Manage ChRIS workflows (pipeline executions)',
|
|
1559
|
-
options: [
|
|
1560
|
-
...RESOURCE_LIST_OPTIONS,
|
|
1561
|
-
'',
|
|
1562
|
-
'RESOURCE-SPECIFIC SUBCOMMANDS:',
|
|
1563
|
-
' run Run a pipeline (alias: pipeline run)',
|
|
1564
|
-
' jobs <id> List plugin instances created by this workflow',
|
|
1565
|
-
' rename <id> <title> Rename a workflow',
|
|
1566
|
-
' delete <id> Remove a workflow',
|
|
1567
|
-
],
|
|
1568
|
-
examples: ['workflows list', 'workflows list --all', 'workflows inspect', 'workflow jobs 7', 'workflow delete 7'],
|
|
1569
|
-
},
|
|
1570
|
-
meta: { usage: 'pluginmetas <subcommand> [options]', description: 'Alias for pluginmeta/pluginmetas', options: [...RESOURCE_LIST_OPTIONS], examples: ['metas list', 'meta inspect'] },
|
|
1571
|
-
metas: { usage: 'pluginmetas <subcommand> [options]', description: 'Alias for pluginmeta/pluginmetas', options: [...RESOURCE_LIST_OPTIONS], examples: ['metas list', 'meta inspect'] },
|
|
1572
|
-
instance: { usage: 'plugininstances <subcommand> [options]', description: 'Alias for plugininstance/plugininstances/job/jobs', options: [...RESOURCE_LIST_OPTIONS], examples: ['instances list', 'instance cancel 42'] },
|
|
1573
|
-
instances: { usage: 'plugininstances <subcommand> [options]', description: 'Alias for plugininstance/plugininstances/job/jobs', options: [...RESOURCE_LIST_OPTIONS], examples: ['instances list', 'instance cancel 42'] },
|
|
1574
|
-
job: { usage: 'plugininstances <subcommand> [options]', description: 'Alias for plugininstance/plugininstances', options: [...RESOURCE_LIST_OPTIONS], examples: ['jobs list', 'job cancel 42', 'job output 42'] },
|
|
1575
|
-
jobs: { usage: 'plugininstances <subcommand> [options]', description: 'Alias for plugininstance/plugininstances', options: [...RESOURCE_LIST_OPTIONS], examples: ['jobs list', 'job cancel 42', 'job output 42'] },
|
|
1576
522
|
help: {
|
|
1577
523
|
usage: 'help [command]',
|
|
1578
524
|
description: 'Display help information',
|
|
@@ -1594,140 +540,10 @@ export const helpText = {
|
|
|
1594
540
|
'! echo "test" > /tmp/file.txt # Write to host file',
|
|
1595
541
|
],
|
|
1596
542
|
},
|
|
1597
|
-
dcm: {
|
|
1598
|
-
usage: 'dcm <series|tags> <path> [options]',
|
|
1599
|
-
summary: 'DICOM as the kernel sees it: a folder as a series, a file or folder as tags',
|
|
1600
|
-
description: 'Read DICOM without leaving the session. `dcm series` answers what a folder is as a series: '
|
|
1601
|
-
+ 'identity, modality, instance count, stack order, geometry, transfer syntax, bytes, and any '
|
|
1602
|
-
+ 'annotations saved for its UID. `dcm tags` lists every element of a file, or what a folder\'s '
|
|
1603
|
-
+ 'files share against what changes across them. Identifying tags are marked PHI and shown; '
|
|
1604
|
-
+ 'a shared surface redacts them by that mark.',
|
|
1605
|
-
options: [
|
|
1606
|
-
'SUBCOMMANDS:',
|
|
1607
|
-
' series <folder> The folder as a series (one header read, order from file names)',
|
|
1608
|
-
' tags <file|folder> Every tag of a file; constant versus varying across a folder',
|
|
1609
|
-
'',
|
|
1610
|
-
'OPTIONS (tags):',
|
|
1611
|
-
' --all Show meta and private groups too',
|
|
1612
|
-
' --filter <text> Only tags whose tag, name, value or decoding contains <text>',
|
|
1613
|
-
'',
|
|
1614
|
-
'A folder\'s tags are read from every file up to 512, then from an even sample; the listing says '
|
|
1615
|
-
+ 'how many were read of how many there are.',
|
|
1616
|
-
],
|
|
1617
|
-
examples: [
|
|
1618
|
-
'dcm series . # This folder as a series',
|
|
1619
|
-
'dcm series /SERVICES/PACS/PACSDCM/patient/study/00005-T1-abcdef0',
|
|
1620
|
-
'dcm tags 0001-1.2.840.113619.2.55.3.1.dcm # One file, grouped by module',
|
|
1621
|
-
'dcm tags . --filter Position # Position tags across the folder',
|
|
1622
|
-
'dcm tags . --all # Meta and private groups included',
|
|
1623
|
-
],
|
|
1624
|
-
},
|
|
1625
|
-
image: {
|
|
1626
|
-
usage: 'image [--force] <path>',
|
|
1627
|
-
summary: 'Show a DICOM series or a volume — a browser draws it, a terminal reflects it',
|
|
1628
|
-
description: 'Open an image as the kernel sees it. `image <path>` resolves what the path is — a series '
|
|
1629
|
-
+ 'folder, a `.dcm` file (its folder is the series), or a NIfTI/MGZ volume — and emits an image.view '
|
|
1630
|
-
+ 'intent every attached surface renders in its own way: a graphical surface (ARGUS) opens a rendered '
|
|
1631
|
-
+ 'pane; a text surface (a shared TTY) prints a reflection — the same facts `dcm series` shows, under an '
|
|
1632
|
-
+ '`image` line, with a small ASCII or truecolour thumbnail of the middle slice. So the same `image` line '
|
|
1633
|
-
+ 'works from a browser and from a terminal sharing one CALYPSO session.',
|
|
1634
|
-
options: [
|
|
1635
|
-
'OPTIONS:',
|
|
1636
|
-
' --force Ride through the volume-size guard a graphical surface would hold at',
|
|
1637
|
-
],
|
|
1638
|
-
examples: [
|
|
1639
|
-
'image ~/uploads/sag-anon # A series folder',
|
|
1640
|
-
'image /SERVICES/PACS/PACSDCM/patient/study/00005-T1-abcdef0',
|
|
1641
|
-
'image scan.dcm # A single file; its folder is the series',
|
|
1642
|
-
'image brain.nii.gz --force # A volume, past the size guard',
|
|
1643
|
-
],
|
|
1644
|
-
},
|
|
1645
|
-
cubepath: {
|
|
1646
|
-
usage: 'cubepath <vfs-path> [--pacsserver <id>]',
|
|
1647
|
-
description: 'Show CUBE FS path and file count for each series under a PACS VFS path. Zero files = not pulled.',
|
|
1648
|
-
options: [
|
|
1649
|
-
'--pacsserver <id> Override PACS server (default: context PACSserver)',
|
|
1650
|
-
'--help Show this help',
|
|
1651
|
-
],
|
|
1652
|
-
examples: [
|
|
1653
|
-
'# All series under a query',
|
|
1654
|
-
'cubepath /net/pacs/queries/AccessionNumber:12345678_qid:2661',
|
|
1655
|
-
'',
|
|
1656
|
-
'# All series under a study',
|
|
1657
|
-
'cubepath /net/pacs/queries/AccessionNumber:12345678_qid:2661/Study_1.2.3_Brain_MRI',
|
|
1658
|
-
'',
|
|
1659
|
-
'# Single series',
|
|
1660
|
-
'cubepath /net/pacs/queries/AccessionNumber:12345678_qid:2661/Study_1.2.3/Series_1.2.3.4_AX_T2',
|
|
1661
|
-
],
|
|
1662
|
-
},
|
|
1663
|
-
query: {
|
|
1664
|
-
usage: 'query <Key:Value[,Key:Value...]> [--patients <list|@cfs-file>] [--title <title>] [--pacsserver <id>] [--fresh]',
|
|
1665
|
-
description: 'Create a PACS query, wait for results, and print the VFS path',
|
|
1666
|
-
options: [
|
|
1667
|
-
'--title <title> Title for the query record (default: Query <timestamp>)',
|
|
1668
|
-
'--pacsserver <id> Override PACS server (default: context PACSserver)',
|
|
1669
|
-
'--table Render results as a table instead of the default list',
|
|
1670
|
-
'--fresh Ask the PACS even if this question was answered before',
|
|
1671
|
-
'--help Show this help',
|
|
1672
|
-
],
|
|
1673
|
-
examples: [
|
|
1674
|
-
'query PatientID:1234',
|
|
1675
|
-
'query PatientID:1234 --fresh # ignore the stored answer',
|
|
1676
|
-
'query AccessionNumber:12345678 --title "Hip DDH workup"',
|
|
1677
|
-
'query PatientID:1234,StudyDate:20240101',
|
|
1678
|
-
'',
|
|
1679
|
-
'# A PACS matches one patient at a time, so several MRNs is several queries',
|
|
1680
|
-
'query PatientID:1234,4532,6654 # three questions, one table',
|
|
1681
|
-
'query --patients @~/cohorts/ddh.txt # a cohort from a file in ChRIS',
|
|
1682
|
-
'query StudyDate:20240101 --patients 1234,4532 # narrowed, per patient',
|
|
1683
|
-
'query PatientID:1234 --pacsserver PACSDCM,ORTHANC # ask both, one listing',
|
|
1684
|
-
'',
|
|
1685
|
-
'# A cohort audit, as a table a spreadsheet reads',
|
|
1686
|
-
'query --patients @~/cohorts/ddh.txt --csv > audit.csv # a local terminal',
|
|
1687
|
-
'query --patients @~/cohorts/ddh.txt --csv-to ~/audits/ddh.csv # any surface',
|
|
1688
|
-
'',
|
|
1689
|
-
'# Use output path directly with pull',
|
|
1690
|
-
'pull $(query PatientID:1234 | grep "VFS path" | awk \'{print $3}\')',
|
|
1691
|
-
],
|
|
1692
|
-
},
|
|
1693
|
-
pull: {
|
|
1694
|
-
usage: 'pull [--detach] [--retry N] [--new-feed <title> [--plugin <selector>|--pipeline <selector>] [-- <args...>]] <vfs-path|query-expr> [...]',
|
|
1695
|
-
description: 'Pull PACS series into ChRIS storage; accepts VFS paths or query expressions (blocking)',
|
|
1696
|
-
options: [
|
|
1697
|
-
'--detach Fire retrieves and return the handles at once; prints <seriesUID> <retrieveId> per line',
|
|
1698
|
-
' (--nowait is the older spelling of the same flag)',
|
|
1699
|
-
'--retry N Re-fire retrieves for [NO LONK] series up to N additional times',
|
|
1700
|
-
'--new-feed <title> Create one named feed from the complete retrieved selection',
|
|
1701
|
-
'--plugin <selector> Attach one plugin to the new Feed root',
|
|
1702
|
-
'--pipeline <selector> Attach one pipeline to the new Feed root',
|
|
1703
|
-
'-- <args...> Forward remaining tokens to the selected analysis',
|
|
1704
|
-
' (cannot be combined with --detach)',
|
|
1705
|
-
'--help Show this help',
|
|
1706
|
-
],
|
|
1707
|
-
examples: [
|
|
1708
|
-
'# Pull all series in a query (blocking)',
|
|
1709
|
-
'pull /net/pacs/queries/42_AccessionNumber:12345678',
|
|
1710
|
-
'',
|
|
1711
|
-
'# Pull a single study',
|
|
1712
|
-
'pull /net/pacs/queries/42_AccessionNumber:12345678/Study_1.2.3_US-Hips_DDH',
|
|
1713
|
-
'',
|
|
1714
|
-
'# Pull a specific series',
|
|
1715
|
-
'pull /net/pacs/queries/42_AccessionNumber:12345678/Study_1.2.3_US-Hips_DDH/Series_1.2.3.4_XR',
|
|
1716
|
-
'',
|
|
1717
|
-
'# Pull multiple paths in one blocking call',
|
|
1718
|
-
'pull /net/pacs/queries/42_AccessionNumber:12345678 /net/pacs/queries/43_PatientID:P001',
|
|
1719
|
-
'',
|
|
1720
|
-
'# Pull directly from a query expression (creates query, waits, then pulls)',
|
|
1721
|
-
'pull PatientID:1234',
|
|
1722
|
-
'pull AccessionNumber:12345678',
|
|
1723
|
-
'pull AccessionNumber:12345678 --new-feed "Brain MRI"',
|
|
1724
|
-
'',
|
|
1725
|
-
'# Detached: take the handles and carry on',
|
|
1726
|
-
'pull --detach /net/pacs/queries/42_AccessionNumber:12345678',
|
|
1727
|
-
'# Output: <seriesUID> <retrieveId> (one per series, in tree-walk order)',
|
|
1728
|
-
],
|
|
1729
|
-
},
|
|
1730
543
|
};
|
|
544
|
+
// The help is registered with the engine's commands; every reader below goes
|
|
545
|
+
// through the registry, never this record.
|
|
546
|
+
commands_register({ help: helpText });
|
|
1731
547
|
/**
|
|
1732
548
|
* Displays help text for a command.
|
|
1733
549
|
*
|
|
@@ -1850,7 +666,7 @@ function commandHelp_render(command, help) {
|
|
|
1850
666
|
* @returns The formatted help text string, or undefined if no help exists.
|
|
1851
667
|
*/
|
|
1852
668
|
export function commandHelp_get(command) {
|
|
1853
|
-
const help =
|
|
669
|
+
const help = commandHelpEntry_get(command);
|
|
1854
670
|
return help ? commandHelp_render(command, help) : undefined;
|
|
1855
671
|
}
|
|
1856
672
|
/**
|
|
@@ -1931,8 +747,35 @@ export function help_render(command) {
|
|
|
1931
747
|
if (helpStr !== undefined) {
|
|
1932
748
|
return `${helpStr}\n`;
|
|
1933
749
|
}
|
|
750
|
+
return helpMissing_render(command);
|
|
751
|
+
}
|
|
752
|
+
/**
|
|
753
|
+
* The page for a name with no help in this session.
|
|
754
|
+
*
|
|
755
|
+
* @param command - The name asked about.
|
|
756
|
+
* @returns The page.
|
|
757
|
+
*/
|
|
758
|
+
export function helpMissing_render(command) {
|
|
1934
759
|
return `${chalk.yellow(`No help available for '${command}'`)}\n${chalk.gray('Type "help" to see all available commands.')}\n`;
|
|
1935
760
|
}
|
|
761
|
+
/** Words the shell or its surface answers itself, with no handler in the registry. */
|
|
762
|
+
const SHELL_WORDS = ['exit', '!', 'help', 'prompt'];
|
|
763
|
+
/**
|
|
764
|
+
* Whether this session can run a verb (or a verb's subcommand, `pacs query`):
|
|
765
|
+
* its handler is registered (the core's, or its backend's), or the shell
|
|
766
|
+
* answers it. Help is shown only for what can be run.
|
|
767
|
+
*
|
|
768
|
+
* @param name - The command, perhaps with a subcommand.
|
|
769
|
+
* @returns True when the session has it.
|
|
770
|
+
*/
|
|
771
|
+
export function verb_available(name) {
|
|
772
|
+
const verb = name.split(' ')[0] ?? '';
|
|
773
|
+
if (SHELL_WORDS.includes(verb))
|
|
774
|
+
return true;
|
|
775
|
+
if (verb === 'sudo')
|
|
776
|
+
return backendInstalled_get()?.elevate !== undefined;
|
|
777
|
+
return builtinCommand_has(verb);
|
|
778
|
+
}
|
|
1936
779
|
/**
|
|
1937
780
|
* Checks if arguments contain --help flag.
|
|
1938
781
|
* -h is treated as help unless the command uses it for "human-readable" (ls, du).
|
|
@@ -1974,11 +817,14 @@ export async function builtin_help(args) {
|
|
|
1974
817
|
return builtin_notes([]);
|
|
1975
818
|
}
|
|
1976
819
|
// If a specific command is requested, return its help
|
|
820
|
+
// A verb this session has; else whatever its backend answers for (ChRIS:
|
|
821
|
+
// a plugin or pipeline executable); else no help, never a page for a verb
|
|
822
|
+
// the session cannot run.
|
|
1977
823
|
if (commandName) {
|
|
1978
|
-
if (
|
|
1979
|
-
return { status: 'ok', rendered:
|
|
1980
|
-
|
|
1981
|
-
return { status: 'ok', rendered:
|
|
824
|
+
if (verb_available(commandName))
|
|
825
|
+
return { status: 'ok', rendered: help_render(commandName) };
|
|
826
|
+
const backendHelp = (await backendInstalled_get()?.fallback?.help?.(commandName)) ?? null;
|
|
827
|
+
return { status: 'ok', rendered: backendHelp ?? helpMissing_render(commandName) };
|
|
1982
828
|
}
|
|
1983
829
|
// Otherwise, list all available commands
|
|
1984
830
|
let rendered = '';
|
|
@@ -2004,9 +850,12 @@ export async function builtin_help(args) {
|
|
|
2004
850
|
};
|
|
2005
851
|
// Display commands by category
|
|
2006
852
|
for (const [category, commands] of Object.entries(categories)) {
|
|
853
|
+
const runnable = commands.filter((cmd) => verb_available(cmd) && commandHelpEntry_get(cmd) !== undefined);
|
|
854
|
+
if (runnable.length === 0 && category !== 'Games and utilities')
|
|
855
|
+
continue;
|
|
2007
856
|
rendered += `${chalk.bold.yellow(category)}\n`;
|
|
2008
|
-
|
|
2009
|
-
const help =
|
|
857
|
+
runnable.forEach((cmd) => {
|
|
858
|
+
const help = commandHelpEntry_get(cmd);
|
|
2010
859
|
if (help) {
|
|
2011
860
|
rendered += ` ${chalk.cyan(cmd.padEnd(20))} ${chalk.gray(help.summary ?? help.description)}\n`;
|
|
2012
861
|
}
|
|
@@ -2014,7 +863,7 @@ export async function builtin_help(args) {
|
|
|
2014
863
|
// The four above are the shelf's best known; the rest of /usr/games is
|
|
2015
864
|
// its own page, and the count is read from the shelf so it never goes stale.
|
|
2016
865
|
if (category === 'Games and utilities') {
|
|
2017
|
-
const more = gamesShelf_names(commandSummary_get).length -
|
|
866
|
+
const more = gamesShelf_names(commandSummary_get).length - runnable.length;
|
|
2018
867
|
rendered += ` ${chalk.cyan('help games'.padEnd(20))} ${chalk.gray(`The /usr/games shelf by category: ${more} more small tools and games`)}\n`;
|
|
2019
868
|
}
|
|
2020
869
|
rendered += '\n';
|
|
@@ -2036,7 +885,9 @@ export async function builtin_help(args) {
|
|
|
2036
885
|
* @returns Array of builtin command names.
|
|
2037
886
|
*/
|
|
2038
887
|
export function builtinCommands_list() {
|
|
2039
|
-
|
|
888
|
+
// `/usr/bin` and completion offer what this session can run, never a
|
|
889
|
+
// backend's verbs it does not have.
|
|
890
|
+
return helpTopic_names().filter((name) => verb_available(name));
|
|
2040
891
|
}
|
|
2041
892
|
/**
|
|
2042
893
|
* A command's one-line summary (its `summary`, else its description), for
|
|
@@ -2046,7 +897,7 @@ export function builtinCommands_list() {
|
|
|
2046
897
|
* @returns The line, or undefined for a command with no help entry.
|
|
2047
898
|
*/
|
|
2048
899
|
export function commandSummary_get(command) {
|
|
2049
|
-
const help =
|
|
900
|
+
const help = commandHelpEntry_get(command);
|
|
2050
901
|
return help === undefined ? undefined : (help.summary ?? help.description);
|
|
2051
902
|
}
|
|
2052
903
|
/**
|
|
@@ -2056,6 +907,6 @@ export function commandSummary_get(command) {
|
|
|
2056
907
|
* @returns The command description, or undefined if not found.
|
|
2057
908
|
*/
|
|
2058
909
|
export function builtinCommand_descriptionGet(command) {
|
|
2059
|
-
return
|
|
910
|
+
return commandHelpEntry_get(command)?.description;
|
|
2060
911
|
}
|
|
2061
912
|
//# sourceMappingURL=help.js.map
|