@fnndsc/brasa 0.56.2 → 0.56.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/dist/buildinfo.json +1 -1
  2. package/dist/builtins/berth/berthCube.d.ts +3 -2
  3. package/dist/builtins/berth/berthCube.js +5 -10
  4. package/dist/builtins/berth/berthCube.js.map +1 -1
  5. package/dist/builtins/debug.d.ts +24 -3
  6. package/dist/builtins/debug.js +66 -13
  7. package/dist/builtins/debug.js.map +1 -1
  8. package/dist/builtins/fs/acl.args.d.ts +5 -38
  9. package/dist/builtins/fs/acl.args.js +6 -72
  10. package/dist/builtins/fs/acl.args.js.map +1 -1
  11. package/dist/builtins/fs/acl.d.ts +100 -10
  12. package/dist/builtins/fs/acl.js +222 -68
  13. package/dist/builtins/fs/acl.js.map +1 -1
  14. package/dist/builtins/fs/cat.args.d.ts +14 -15
  15. package/dist/builtins/fs/cat.args.js +13 -40
  16. package/dist/builtins/fs/cat.args.js.map +1 -1
  17. package/dist/builtins/fs/cat.d.ts +40 -3
  18. package/dist/builtins/fs/cat.js +89 -10
  19. package/dist/builtins/fs/cat.js.map +1 -1
  20. package/dist/builtins/fs/cd.d.ts +24 -6
  21. package/dist/builtins/fs/cd.js +71 -18
  22. package/dist/builtins/fs/cd.js.map +1 -1
  23. package/dist/builtins/fs/configWrite.d.ts +24 -8
  24. package/dist/builtins/fs/configWrite.js +77 -36
  25. package/dist/builtins/fs/configWrite.js.map +1 -1
  26. package/dist/builtins/fs/cp.d.ts +39 -4
  27. package/dist/builtins/fs/cp.js +120 -55
  28. package/dist/builtins/fs/cp.js.map +1 -1
  29. package/dist/builtins/fs/du.d.ts +59 -33
  30. package/dist/builtins/fs/du.js +111 -79
  31. package/dist/builtins/fs/du.js.map +1 -1
  32. package/dist/builtins/fs/edit.d.ts +19 -4
  33. package/dist/builtins/fs/edit.js +77 -16
  34. package/dist/builtins/fs/edit.js.map +1 -1
  35. package/dist/builtins/fs/find.d.ts +25 -0
  36. package/dist/builtins/fs/find.js +76 -5
  37. package/dist/builtins/fs/find.js.map +1 -1
  38. package/dist/builtins/fs/mkdir.d.ts +28 -18
  39. package/dist/builtins/fs/mkdir.js +95 -66
  40. package/dist/builtins/fs/mkdir.js.map +1 -1
  41. package/dist/builtins/fs/mv.d.ts +34 -4
  42. package/dist/builtins/fs/mv.js +129 -64
  43. package/dist/builtins/fs/mv.js.map +1 -1
  44. package/dist/builtins/fs/pull.args.d.ts +56 -17
  45. package/dist/builtins/fs/pull.args.js +16 -66
  46. package/dist/builtins/fs/pull.args.js.map +1 -1
  47. package/dist/builtins/fs/pull.d.ts +62 -0
  48. package/dist/builtins/fs/pull.js +86 -22
  49. package/dist/builtins/fs/pull.js.map +1 -1
  50. package/dist/builtins/fs/pwd.d.ts +19 -5
  51. package/dist/builtins/fs/pwd.js +62 -8
  52. package/dist/builtins/fs/pwd.js.map +1 -1
  53. package/dist/builtins/fs/rm.d.ts +58 -21
  54. package/dist/builtins/fs/rm.js +99 -82
  55. package/dist/builtins/fs/rm.js.map +1 -1
  56. package/dist/builtins/fs/rmdir.d.ts +29 -11
  57. package/dist/builtins/fs/rmdir.js +87 -36
  58. package/dist/builtins/fs/rmdir.js.map +1 -1
  59. package/dist/builtins/fs/touch.d.ts +44 -9
  60. package/dist/builtins/fs/touch.js +91 -27
  61. package/dist/builtins/fs/touch.js.map +1 -1
  62. package/dist/builtins/fs/tree.d.ts +36 -9
  63. package/dist/builtins/fs/tree.js +126 -36
  64. package/dist/builtins/fs/tree.js.map +1 -1
  65. package/dist/builtins/fs/upload.d.ts +22 -3
  66. package/dist/builtins/fs/upload.js +82 -14
  67. package/dist/builtins/fs/upload.js.map +1 -1
  68. package/dist/builtins/fs/xattr.args.d.ts +12 -33
  69. package/dist/builtins/fs/xattr.args.js +17 -95
  70. package/dist/builtins/fs/xattr.args.js.map +1 -1
  71. package/dist/builtins/fs/xattr.d.ts +98 -8
  72. package/dist/builtins/fs/xattr.js +163 -24
  73. package/dist/builtins/fs/xattr.js.map +1 -1
  74. package/dist/builtins/games/bytes.d.ts +201 -5
  75. package/dist/builtins/games/bytes.js +255 -54
  76. package/dist/builtins/games/bytes.js.map +1 -1
  77. package/dist/builtins/games/chimes.d.ts +180 -3
  78. package/dist/builtins/games/chimes.js +203 -26
  79. package/dist/builtins/games/chimes.js.map +1 -1
  80. package/dist/builtins/games/chrislab.d.ts +101 -3
  81. package/dist/builtins/games/chrislab.js +117 -17
  82. package/dist/builtins/games/chrislab.js.map +1 -1
  83. package/dist/builtins/games/cowsay.d.ts +93 -2
  84. package/dist/builtins/games/cowsay.js +90 -31
  85. package/dist/builtins/games/cowsay.js.map +1 -1
  86. package/dist/builtins/games/figlet.d.ts +70 -2
  87. package/dist/builtins/games/figlet.js +83 -6
  88. package/dist/builtins/games/figlet.js.map +1 -1
  89. package/dist/builtins/games/lab.d.ts +104 -5
  90. package/dist/builtins/games/lab.js +144 -6
  91. package/dist/builtins/games/lab.js.map +1 -1
  92. package/dist/builtins/games/lolcat.d.ts +61 -1
  93. package/dist/builtins/games/lolcat.js +59 -24
  94. package/dist/builtins/games/lolcat.js.map +1 -1
  95. package/dist/builtins/games/morse.d.ts +36 -1
  96. package/dist/builtins/games/morse.js +50 -2
  97. package/dist/builtins/games/morse.js.map +1 -1
  98. package/dist/builtins/games/numbers.d.ts +241 -5
  99. package/dist/builtins/games/numbers.js +298 -23
  100. package/dist/builtins/games/numbers.js.map +1 -1
  101. package/dist/builtins/games/play.d.ts +96 -6
  102. package/dist/builtins/games/play.js +137 -6
  103. package/dist/builtins/games/play.js.map +1 -1
  104. package/dist/builtins/games/qr.d.ts +40 -1
  105. package/dist/builtins/games/qr.js +51 -2
  106. package/dist/builtins/games/qr.js.map +1 -1
  107. package/dist/builtins/games/show.d.ts +131 -6
  108. package/dist/builtins/games/show.js +208 -20
  109. package/dist/builtins/games/show.js.map +1 -1
  110. package/dist/builtins/games/sky.d.ts +178 -4
  111. package/dist/builtins/games/sky.js +228 -12
  112. package/dist/builtins/games/sky.js.map +1 -1
  113. package/dist/builtins/games/text.d.ts +258 -7
  114. package/dist/builtins/games/text.js +310 -29
  115. package/dist/builtins/games/text.js.map +1 -1
  116. package/dist/builtins/games/trek.d.ts +67 -3
  117. package/dist/builtins/games/trek.js +63 -10
  118. package/dist/builtins/games/trek.js.map +1 -1
  119. package/dist/builtins/games/wtf.d.ts +58 -1
  120. package/dist/builtins/games/wtf.js +67 -6
  121. package/dist/builtins/games/wtf.js.map +1 -1
  122. package/dist/builtins/help.d.ts +38 -2
  123. package/dist/builtins/help.js +76 -769
  124. package/dist/builtins/help.js.map +1 -1
  125. package/dist/builtins/net/connect.d.ts +36 -3
  126. package/dist/builtins/net/connect.js +84 -26
  127. package/dist/builtins/net/connect.js.map +1 -1
  128. package/dist/builtins/net/cubepath.d.ts +49 -5
  129. package/dist/builtins/net/cubepath.js +69 -27
  130. package/dist/builtins/net/cubepath.js.map +1 -1
  131. package/dist/builtins/net/logout.d.ts +13 -4
  132. package/dist/builtins/net/logout.js +49 -3
  133. package/dist/builtins/net/logout.js.map +1 -1
  134. package/dist/builtins/net/netstat.d.ts +29 -4
  135. package/dist/builtins/net/netstat.js +64 -23
  136. package/dist/builtins/net/netstat.js.map +1 -1
  137. package/dist/builtins/net/pacs.d.ts +169 -15
  138. package/dist/builtins/net/pacs.js +92 -33
  139. package/dist/builtins/net/pacs.js.map +1 -1
  140. package/dist/builtins/net/query.args.d.ts +95 -0
  141. package/dist/builtins/net/query.args.js +26 -0
  142. package/dist/builtins/net/query.args.js.map +1 -0
  143. package/dist/builtins/net/query.d.ts +98 -5
  144. package/dist/builtins/net/query.js +89 -83
  145. package/dist/builtins/net/query.js.map +1 -1
  146. package/dist/builtins/net/status.d.ts +5 -3
  147. package/dist/builtins/net/status.js +5 -12
  148. package/dist/builtins/net/status.js.map +1 -1
  149. package/dist/builtins/parametersofplugin.d.ts +82 -3
  150. package/dist/builtins/parametersofplugin.js +79 -23
  151. package/dist/builtins/parametersofplugin.js.map +1 -1
  152. package/dist/builtins/proc.d.ts +210 -3
  153. package/dist/builtins/proc.js +210 -119
  154. package/dist/builtins/proc.js.map +1 -1
  155. package/dist/builtins/res/compute.d.ts +67 -3
  156. package/dist/builtins/res/compute.js +121 -35
  157. package/dist/builtins/res/compute.js.map +1 -1
  158. package/dist/builtins/res/dicom.d.ts +52 -3
  159. package/dist/builtins/res/dicom.js +82 -34
  160. package/dist/builtins/res/dicom.js.map +1 -1
  161. package/dist/builtins/res/expect.d.ts +52 -3
  162. package/dist/builtins/res/expect.js +92 -29
  163. package/dist/builtins/res/expect.js.map +1 -1
  164. package/dist/builtins/res/feed.d.ts +475 -3
  165. package/dist/builtins/res/feed.js +253 -158
  166. package/dist/builtins/res/feed.js.map +1 -1
  167. package/dist/builtins/res/files.d.ts +517 -3
  168. package/dist/builtins/res/files.js +124 -44
  169. package/dist/builtins/res/files.js.map +1 -1
  170. package/dist/builtins/res/gather.d.ts +113 -3
  171. package/dist/builtins/res/gather.js +153 -44
  172. package/dist/builtins/res/gather.js.map +1 -1
  173. package/dist/builtins/res/gather.process.d.ts +27 -19
  174. package/dist/builtins/res/gather.process.js +29 -59
  175. package/dist/builtins/res/gather.process.js.map +1 -1
  176. package/dist/builtins/res/group.d.ts +284 -3
  177. package/dist/builtins/res/group.js +147 -76
  178. package/dist/builtins/res/group.js.map +1 -1
  179. package/dist/builtins/res/image.d.ts +30 -2
  180. package/dist/builtins/res/image.js +62 -10
  181. package/dist/builtins/res/image.js.map +1 -1
  182. package/dist/builtins/res/play.d.ts +71 -9
  183. package/dist/builtins/res/play.js +124 -82
  184. package/dist/builtins/res/play.js.map +1 -1
  185. package/dist/builtins/res/plugininstance.d.ts +307 -2
  186. package/dist/builtins/res/plugininstance.js +122 -50
  187. package/dist/builtins/res/plugininstance.js.map +1 -1
  188. package/dist/builtins/res/pluginmeta.d.ts +244 -2
  189. package/dist/builtins/res/pluginmeta.js +98 -40
  190. package/dist/builtins/res/pluginmeta.js.map +1 -1
  191. package/dist/builtins/res/record.d.ts +37 -3
  192. package/dist/builtins/res/record.js +127 -57
  193. package/dist/builtins/res/record.js.map +1 -1
  194. package/dist/builtins/res/resourceList.d.ts +136 -0
  195. package/dist/builtins/res/resourceList.js +51 -0
  196. package/dist/builtins/res/resourceList.js.map +1 -0
  197. package/dist/builtins/res/tag.d.ts +244 -3
  198. package/dist/builtins/res/tag.js +97 -41
  199. package/dist/builtins/res/tag.js.map +1 -1
  200. package/dist/builtins/res/user.d.ts +122 -3
  201. package/dist/builtins/res/user.js +83 -21
  202. package/dist/builtins/res/user.js.map +1 -1
  203. package/dist/builtins/res/workflow.d.ts +244 -2
  204. package/dist/builtins/res/workflow.js +97 -40
  205. package/dist/builtins/res/workflow.js.map +1 -1
  206. package/dist/builtins/store.d.ts +85 -3
  207. package/dist/builtins/store.js +135 -68
  208. package/dist/builtins/store.js.map +1 -1
  209. package/dist/builtins/sys/apropos.d.ts +80 -5
  210. package/dist/builtins/sys/apropos.js +121 -15
  211. package/dist/builtins/sys/apropos.js.map +1 -1
  212. package/dist/builtins/sys/cal.d.ts +44 -5
  213. package/dist/builtins/sys/cal.js +57 -10
  214. package/dist/builtins/sys/cal.js.map +1 -1
  215. package/dist/builtins/sys/command.d.ts +20 -0
  216. package/dist/builtins/sys/command.js +31 -0
  217. package/dist/builtins/sys/command.js.map +1 -1
  218. package/dist/builtins/sys/context.d.ts +13 -3
  219. package/dist/builtins/sys/context.js +51 -4
  220. package/dist/builtins/sys/context.js.map +1 -1
  221. package/dist/builtins/sys/date.d.ts +56 -5
  222. package/dist/builtins/sys/date.js +63 -9
  223. package/dist/builtins/sys/date.js.map +1 -1
  224. package/dist/builtins/sys/echo.d.ts +63 -2
  225. package/dist/builtins/sys/echo.js +87 -8
  226. package/dist/builtins/sys/echo.js.map +1 -1
  227. package/dist/builtins/sys/fortune.d.ts +27 -2
  228. package/dist/builtins/sys/fortune.js +44 -2
  229. package/dist/builtins/sys/fortune.js.map +1 -1
  230. package/dist/builtins/sys/grep.d.ts +245 -11
  231. package/dist/builtins/sys/grep.js +418 -131
  232. package/dist/builtins/sys/grep.js.map +1 -1
  233. package/dist/builtins/sys/joblets.d.ts +66 -7
  234. package/dist/builtins/sys/joblets.js +101 -14
  235. package/dist/builtins/sys/joblets.js.map +1 -1
  236. package/dist/builtins/sys/motd.d.ts +37 -3
  237. package/dist/builtins/sys/motd.js +49 -8
  238. package/dist/builtins/sys/motd.js.map +1 -1
  239. package/dist/builtins/sys/notes.d.ts +75 -3
  240. package/dist/builtins/sys/notes.js +90 -29
  241. package/dist/builtins/sys/notes.js.map +1 -1
  242. package/dist/builtins/sys/physicalmode.d.ts +24 -3
  243. package/dist/builtins/sys/physicalmode.js +68 -14
  244. package/dist/builtins/sys/physicalmode.js.map +1 -1
  245. package/dist/builtins/sys/tasks.d.ts +74 -5
  246. package/dist/builtins/sys/tasks.js +102 -14
  247. package/dist/builtins/sys/tasks.js.map +1 -1
  248. package/dist/builtins/sys/textFilters.d.ts +673 -41
  249. package/dist/builtins/sys/textFilters.js +718 -263
  250. package/dist/builtins/sys/textFilters.js.map +1 -1
  251. package/dist/builtins/sys/timing.d.ts +24 -3
  252. package/dist/builtins/sys/timing.js +67 -14
  253. package/dist/builtins/sys/timing.js.map +1 -1
  254. package/dist/builtins/sys/variables.d.ts +70 -4
  255. package/dist/builtins/sys/variables.js +103 -31
  256. package/dist/builtins/sys/variables.js.map +1 -1
  257. package/dist/builtins/sys/version.d.ts +27 -2
  258. package/dist/builtins/sys/version.js +48 -3
  259. package/dist/builtins/sys/version.js.map +1 -1
  260. package/dist/builtins/sys/weather.d.ts +92 -15
  261. package/dist/builtins/sys/weather.js +71 -45
  262. package/dist/builtins/sys/weather.js.map +1 -1
  263. package/dist/builtins/sys/whoami.d.ts +38 -18
  264. package/dist/builtins/sys/whoami.js +112 -8
  265. package/dist/builtins/sys/whoami.js.map +1 -1
  266. package/dist/builtins/utils.d.ts +0 -37
  267. package/dist/builtins/utils.js +0 -86
  268. package/dist/builtins/utils.js.map +1 -1
  269. package/dist/chris/chrisCommands.js +58 -152
  270. package/dist/chris/chrisCommands.js.map +1 -1
  271. package/dist/chris/commandFallback.d.ts +12 -0
  272. package/dist/chris/commandFallback.js +47 -0
  273. package/dist/chris/commandFallback.js.map +1 -1
  274. package/dist/chris/filesystem.js +7 -5
  275. package/dist/chris/filesystem.js.map +1 -1
  276. package/dist/chris/help.js +0 -1018
  277. package/dist/chris/help.js.map +1 -1
  278. package/dist/chris/kinds.d.ts +21 -0
  279. package/dist/chris/kinds.js +114 -2
  280. package/dist/chris/kinds.js.map +1 -1
  281. package/dist/chris/mounts.d.ts +4 -4
  282. package/dist/chris/mounts.js +9 -16
  283. package/dist/chris/mounts.js.map +1 -1
  284. package/dist/chris/navigation.d.ts +2 -3
  285. package/dist/chris/navigation.js +6 -20
  286. package/dist/chris/navigation.js.map +1 -1
  287. package/dist/chris/pacsResources.d.ts +259 -0
  288. package/dist/chris/pacsResources.js +168 -0
  289. package/dist/chris/pacsResources.js.map +1 -0
  290. package/dist/core/commandDeclaration.d.ts +97 -7
  291. package/dist/core/commandDeclaration.js +21 -0
  292. package/dist/core/commandDeclaration.js.map +1 -1
  293. package/dist/core/commandParse.js +65 -17
  294. package/dist/core/commandParse.js.map +1 -1
  295. package/dist/core/commandRegistry.d.ts +4 -3
  296. package/dist/core/commandRegistry.js +36 -8
  297. package/dist/core/commandRegistry.js.map +1 -1
  298. package/dist/core/commandSchema.js +5 -2
  299. package/dist/core/commandSchema.js.map +1 -1
  300. package/dist/core/commandUsage.d.ts +15 -0
  301. package/dist/core/commandUsage.js +59 -7
  302. package/dist/core/commandUsage.js.map +1 -1
  303. package/dist/core/coreCommands.js +63 -212
  304. package/dist/core/coreCommands.js.map +1 -1
  305. package/dist/core/paths.d.ts +29 -1
  306. package/dist/core/paths.js +15 -2
  307. package/dist/core/paths.js.map +1 -1
  308. package/dist/core/preprocess.d.ts +3 -4
  309. package/dist/core/preprocess.js +4 -5
  310. package/dist/core/preprocess.js.map +1 -1
  311. package/dist/lib/completer/declared.js +7 -4
  312. package/dist/lib/completer/declared.js.map +1 -1
  313. package/dist/lib/completer/index.js +2 -7
  314. package/dist/lib/completer/index.js.map +1 -1
  315. package/dist/lib/parser.d.ts +0 -8
  316. package/dist/lib/parser.js +0 -11
  317. package/dist/lib/parser.js.map +1 -1
  318. package/dist/lib/vfs/vfs.d.ts +2 -1
  319. package/dist/lib/vfs/vfs.js +5 -4
  320. package/dist/lib/vfs/vfs.js.map +1 -1
  321. package/dist/notes.json +1 -1
  322. package/package.json +3 -3
@@ -9,10 +9,35 @@ import { type CommandEnvelope } from '@fnndsc/menu';
9
9
  */
10
10
  export declare function netstat_render(snapshot: LedgerSnapshot, last: number): string;
11
11
  /**
12
- * `netstat [-n <count>] [-r]`
12
+ * `netstat [-r] [-n <count>]`: the declaration.
13
13
  *
14
- * @param args - `-n <count>` lists that many recent requests; `-r` / `--reset`
15
- * forgets the count (the readout then shows what was forgotten).
16
- * @returns The ledger as text and as the `net.stats` model.
14
+ * @example
15
+ * ```ts
16
+ * commands_register({ declarations: [netstatCommand] }, 'backend');
17
+ * ```
18
+ */
19
+ export declare const netstatCommand: import("../../core/commandDeclaration.js").CommandDeclaration<{
20
+ readonly options: {
21
+ readonly reset: {
22
+ readonly short: "r";
23
+ readonly long: "reset";
24
+ readonly summary: "Forget the count after showing it";
25
+ };
26
+ readonly count: {
27
+ readonly short: "n";
28
+ readonly summary: `List that many recent requests (default ${number})`;
29
+ readonly value: {
30
+ readonly name: "count";
31
+ readonly kind: "int";
32
+ readonly min: 0;
33
+ };
34
+ };
35
+ };
36
+ }>;
37
+ /**
38
+ * `netstat` over words already split: the declaration's parse and handler.
39
+ *
40
+ * @param args - The words after `netstat`.
41
+ * @returns The ledger, or the refusal of a bad line.
17
42
  */
18
43
  export declare function builtin_netstat(args?: string[]): Promise<CommandEnvelope>;
@@ -7,13 +7,32 @@
7
7
  * `netstat -r`), by endpoint family with the time spent, and the last few
8
8
  * timed. Smoke asserts budgets against the same model; an operator on a
9
9
  * slow day asks it before guessing where the time went.
10
+ *
11
+ * Declared in one record (`netstatCommand`): how many recent requests to
12
+ * list, and whether to reset the count.
13
+ *
14
+ * Key components:
15
+ * - netstatCommand: the declaration.
16
+ * - builtin_netstat: the declaration run over words already split.
17
+ * - netstat_render: the ledger as text.
18
+ *
19
+ * Typical usage:
20
+ * ```ts
21
+ * await builtin_netstat(['-n', '30']);
22
+ * ```
23
+ *
24
+ * Dependencies: cumin's request ledger.
25
+ *
26
+ * @module
10
27
  */
11
28
  import chalk from 'chalk';
29
+ import { command_declare } from '../../core/commandDeclaration.js';
30
+ import { declaredCommand_run } from '../../core/commandParse.js';
12
31
  // The ledger by its own door: a jest ESM test importing a name from the
13
32
  // cumin ROOT overflows cjs-module-lexer on that index and sees none of
14
33
  // the names added after the overflow — the subpath is small and seen whole.
15
34
  import { requestLedger_snapshot, requestLedger_reset } from '@fnndsc/cumin/request-ledger';
16
- import { NET_STATS_MODEL_KIND, envelope_ok, envelope_error } from '@fnndsc/menu';
35
+ import { NET_STATS_MODEL_KIND, envelope_ok } from '@fnndsc/menu';
17
36
  /** How many recent requests the table shows unless asked otherwise. */
18
37
  const LAST_SHOWN = 10;
19
38
  /**
@@ -42,32 +61,54 @@ export function netstat_render(snapshot, last) {
42
61
  }
43
62
  return `${lines.join('\n')}\n`;
44
63
  }
64
+ /** What a `netstat` line may hold. */
65
+ const NETSTAT_GRAMMAR = {
66
+ options: {
67
+ reset: { short: 'r', long: 'reset', summary: 'Forget the count after showing it' },
68
+ count: { short: 'n', summary: `List that many recent requests (default ${LAST_SHOWN})`, value: { name: 'count', kind: 'int', min: 0 } },
69
+ },
70
+ };
45
71
  /**
46
- * `netstat [-n <count>] [-r]`
72
+ * `netstat [-r] [-n <count>]`: the declaration.
47
73
  *
48
- * @param args - `-n <count>` lists that many recent requests; `-r` / `--reset`
49
- * forgets the count (the readout then shows what was forgotten).
50
- * @returns The ledger as text and as the `net.stats` model.
74
+ * @example
75
+ * ```ts
76
+ * commands_register({ declarations: [netstatCommand] }, 'backend');
77
+ * ```
78
+ */
79
+ export const netstatCommand = command_declare({
80
+ name: 'netstat',
81
+ grammar: NETSTAT_GRAMMAR,
82
+ help: {
83
+ summary: 'What the session has asked of CUBE',
84
+ 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',
85
+ category: 'Connection',
86
+ examples: [
87
+ 'netstat # the count, by family, the last 10',
88
+ 'netstat -n 30 # the last 30 requests, timed',
89
+ 'netstat -r; cd ~/feeds; netstat # what one navigation costs',
90
+ ],
91
+ },
92
+ handler: async (args) => netstat_run(args.options.count ?? LAST_SHOWN, args.options.reset),
93
+ });
94
+ /**
95
+ * `netstat` over words already split: the declaration's parse and handler.
96
+ *
97
+ * @param args - The words after `netstat`.
98
+ * @returns The ledger, or the refusal of a bad line.
51
99
  */
52
100
  export async function builtin_netstat(args = []) {
53
- let last = LAST_SHOWN;
54
- let reset = false;
55
- for (let index = 0; index < args.length; index++) {
56
- const arg = args[index];
57
- if (arg === '-r' || arg === '--reset') {
58
- reset = true;
59
- continue;
60
- }
61
- if (arg === '-n') {
62
- const value = Number(args[index + 1]);
63
- if (!Number.isInteger(value) || value < 0)
64
- return envelope_error('', undefined, `${chalk.red('netstat: -n takes a count')}\n`);
65
- last = value;
66
- index += 1;
67
- continue;
68
- }
69
- return envelope_error('', undefined, `${chalk.red(`netstat: unknown option ${arg}`)}\n`);
70
- }
101
+ return declaredCommand_run(netstatCommand, args);
102
+ }
103
+ /**
104
+ * Reads the ledger, and resets it when asked; the readout then shows what
105
+ * was forgotten.
106
+ *
107
+ * @param last - How many recent requests to list.
108
+ * @param reset - Forget the count after reading it.
109
+ * @returns The ledger as text and as the `net.stats` model.
110
+ */
111
+ function netstat_run(last, reset) {
71
112
  const snapshot = requestLedger_snapshot({ last: Math.max(last, LAST_SHOWN) });
72
113
  if (reset)
73
114
  requestLedger_reset();
@@ -1 +1 @@
1
- {"version":3,"file":"netstat.js","sourceRoot":"","sources":["../../../src/builtins/net/netstat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"netstat.js","sourceRoot":"","sources":["../../../src/builtins/net/netstat.ts"],"names":[],"mappings":"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"}
@@ -2,27 +2,181 @@
2
2
  * @file Compound `pacs` command.
3
3
  *
4
4
  * Entry point for all PACS operations: server context management, querying,
5
- * and series retrieval. `pacs query` and `pacs pull` delegate to the standalone
6
- * builtins, which remain registered as permanent top-level aliases.
5
+ * and series retrieval. Declared in one record (`pacsCommand`) with a
6
+ * subcommand each; `pacs query` and `pacs pull` take the very lines of the
7
+ * standalone `query` and `pull` (one grammar each) and run their handlers.
8
+ *
9
+ * Key components:
10
+ * - pacsCommand: the declaration.
11
+ * - builtin_pacs: the declaration run over words already split.
12
+ *
13
+ * Typical usage:
14
+ * ```ts
15
+ * await builtin_pacs(['connect', 'PACSDCM']);
16
+ * ```
17
+ *
18
+ * Dependencies: cumin's context and server listing; the query, pull and
19
+ * status verbs.
7
20
  *
8
21
  * @module
9
22
  */
10
23
  import { type CommandEnvelope } from '@fnndsc/menu';
11
24
  /**
12
- * PACS subsystem command — server context management, query, and pull.
13
- *
14
- * Subcommands:
15
- * pacs — show active server
16
- * pacs connect — list servers with active marked
17
- * pacs connect <name|id> — set active PACS server
18
- * pacs disconnect — clear active PACS server
19
- * pacs list — list servers (alias for: pacs connect)
20
- * pacs query <Key:Value...> — create PACS query and wait for results
21
- * pacs pull <vfs-path...> — pull DICOM series into ChRIS storage
22
- * pacs status <target> — per-series pulled/pending report with CUBE paths
23
- *
24
- * @param args - Command arguments (subcommand + its own args).
25
+ * `pacs [connect [server] | disconnect | list | query … | pull … | status <target>]`: the declaration.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * commands_register({ declarations: [pacsCommand] }, 'backend');
30
+ * ```
31
+ */
32
+ export declare const pacsCommand: import("../../core/commandDeclaration.js").CommandDeclaration<{
33
+ readonly bare: {
34
+ readonly summary: "Show the active PACS server";
35
+ };
36
+ readonly subcommands: {
37
+ readonly connect: {
38
+ readonly summary: "List the registered PACS servers with the active one marked; given one, make it active";
39
+ readonly operands: readonly [{
40
+ readonly name: "server";
41
+ readonly kind: "word";
42
+ readonly optional: true;
43
+ readonly summary: "The server, by identifier or by id";
44
+ }];
45
+ };
46
+ readonly disconnect: {
47
+ readonly summary: "Clear the active PACS server";
48
+ };
49
+ readonly list: {
50
+ readonly summary: "List the registered PACS servers with the active one marked";
51
+ };
52
+ readonly query: {
53
+ readonly summary: "Create a PACS query and wait for its answer, as query does (help query)";
54
+ readonly operands: readonly [{
55
+ readonly name: "expression";
56
+ readonly kind: "word";
57
+ readonly optional: true;
58
+ readonly repeat: true;
59
+ readonly summary: "The question: Key:Value[,Key:Value…] (Key:a,b,c asks for each), or a JSON object";
60
+ }];
61
+ readonly options: {
62
+ readonly title: {
63
+ readonly long: "title";
64
+ readonly summary: "Title for the query record (default: Query <timestamp>)";
65
+ readonly value: {
66
+ readonly name: "title";
67
+ readonly kind: "word";
68
+ };
69
+ };
70
+ readonly pacsserver: {
71
+ readonly long: "pacsserver";
72
+ readonly summary: "Override the PACS server (default: the context's); a comma-separated list asks each";
73
+ readonly value: {
74
+ readonly name: "id";
75
+ readonly kind: "word";
76
+ };
77
+ };
78
+ readonly patients: {
79
+ readonly long: "patients";
80
+ readonly summary: "Ask after several patients: MRNs comma-separated, or @<cfs-file> (one per line)";
81
+ readonly value: {
82
+ readonly name: "list";
83
+ readonly kind: "word";
84
+ };
85
+ };
86
+ readonly csv: {
87
+ readonly long: "csv";
88
+ readonly summary: "Render the answer as CSV (a row per study, and one per patient with none)";
89
+ };
90
+ readonly csvTo: {
91
+ readonly long: "csv-to";
92
+ readonly asks: true;
93
+ readonly summary: "Write that CSV into ChRIS storage; given no path, the destination is asked for";
94
+ readonly value: {
95
+ readonly name: "cfs-path";
96
+ readonly kind: "cfsPath";
97
+ };
98
+ };
99
+ readonly force: {
100
+ readonly long: "force";
101
+ readonly summary: "Overwrite the table at that path; without it, an existing file is kept";
102
+ };
103
+ readonly table: {
104
+ readonly long: "table";
105
+ readonly summary: "Show the answer's rows as an aligned table: the CSV's columns, for a screen";
106
+ };
107
+ readonly series: {
108
+ readonly long: "series";
109
+ readonly summary: "One row per series instead of per study; alone, it shows the series table";
110
+ };
111
+ readonly anon: {
112
+ readonly long: "anon";
113
+ readonly summary: "Stand in for names and record numbers (for demonstrating on a live PACS)";
114
+ };
115
+ readonly fresh: {
116
+ readonly long: "fresh";
117
+ readonly summary: "Ask the PACS even if this question was answered before";
118
+ };
119
+ };
120
+ };
121
+ readonly pull: {
122
+ readonly summary: "Pull DICOM series into ChRIS storage, as pull does (help pull)";
123
+ readonly operands: readonly [{
124
+ readonly name: "target";
125
+ readonly kind: "pacsQuery";
126
+ readonly repeat: true;
127
+ readonly glob: true;
128
+ readonly summary: "A /net/pacs/queries/… path (a query, a study or a series), or a Key:Value question asked first";
129
+ }];
130
+ readonly options: {
131
+ readonly detach: {
132
+ readonly long: "detach";
133
+ readonly summary: "Fire the retrieves and return the handles at once: <seriesUID> <retrieveId> per line";
134
+ };
135
+ readonly nowait: {
136
+ readonly long: "nowait";
137
+ readonly summary: "The older spelling of --detach";
138
+ };
139
+ readonly retry: {
140
+ readonly long: "retry";
141
+ readonly summary: "Re-fire retrieves for [NO LONK] series up to N more times";
142
+ readonly value: {
143
+ readonly name: "N";
144
+ readonly kind: "int";
145
+ readonly min: 0;
146
+ };
147
+ };
148
+ readonly newFeed: {
149
+ readonly long: "new-feed";
150
+ readonly repeat: true;
151
+ readonly summary: "Create one named feed from the complete retrieved selection";
152
+ readonly value: {
153
+ readonly name: "title";
154
+ readonly kind: "word";
155
+ };
156
+ };
157
+ };
158
+ };
159
+ readonly status: {
160
+ readonly summary: "Per series, what has landed in CUBE and what is missing, with in-CUBE paths";
161
+ readonly operands: readonly [{
162
+ readonly name: "target";
163
+ readonly kind: "pacsQuery";
164
+ readonly glob: true;
165
+ readonly summary: "A query id, a /net/pacs/queries/… path, or a Key:Value question";
166
+ }];
167
+ };
168
+ };
169
+ }>;
170
+ /**
171
+ * `pacs` over words already split: the declaration's parse and handler.
172
+ *
173
+ * @param args - The subcommand and its words.
25
174
  * @returns An envelope; streaming subcommands carry empty rendered text and
26
175
  * emit their output live, while query/pull return their own envelopes.
176
+ *
177
+ * @example
178
+ * ```ts
179
+ * await builtin_pacs(['list']);
180
+ * ```
27
181
  */
28
182
  export declare function builtin_pacs(args: string[]): Promise<CommandEnvelope>;
@@ -2,22 +2,38 @@
2
2
  * @file Compound `pacs` command.
3
3
  *
4
4
  * Entry point for all PACS operations: server context management, querying,
5
- * and series retrieval. `pacs query` and `pacs pull` delegate to the standalone
6
- * builtins, which remain registered as permanent top-level aliases.
5
+ * and series retrieval. Declared in one record (`pacsCommand`) with a
6
+ * subcommand each; `pacs query` and `pacs pull` take the very lines of the
7
+ * standalone `query` and `pull` (one grammar each) and run their handlers.
8
+ *
9
+ * Key components:
10
+ * - pacsCommand: the declaration.
11
+ * - builtin_pacs: the declaration run over words already split.
12
+ *
13
+ * Typical usage:
14
+ * ```ts
15
+ * await builtin_pacs(['connect', 'PACSDCM']);
16
+ * ```
17
+ *
18
+ * Dependencies: cumin's context and server listing; the query, pull and
19
+ * status verbs.
7
20
  *
8
21
  * @module
9
22
  */
10
23
  import chalk from 'chalk';
11
24
  import { chrisContext, pacsServers_list } from '@fnndsc/cumin';
12
25
  import { PACS_SERVERS_MODEL_KIND, envelope_ok, envelope_error } from '@fnndsc/menu';
13
- import { builtin_query } from './query.js';
26
+ import { queryLine_run } from './query.js';
27
+ import { QUERY_GRAMMAR } from './query.args.js';
14
28
  import { pacsRefusal_hint, pacsRefusal_is } from './pacsAccess.js';
15
- import { builtin_pacsStatus } from './status.js';
16
- import { builtin_pull } from '../fs/pull.js';
17
- import { args_checkHasHelpFlag, help_render } from '../help.js';
29
+ import { pacsStatus_run } from './status.js';
30
+ import { pullLine_run } from '../fs/pull.js';
31
+ import { PULL_GRAMMAR } from '../fs/pull.args.js';
18
32
  import { sink_dataLine, sink_errLine } from '../../core/sink.js';
19
33
  import { errorStack } from '@fnndsc/fond';
20
34
  import { exitCode_set } from '../../core/handlerRun.js';
35
+ import { command_declare } from '../../core/commandDeclaration.js';
36
+ import { declaredCommand_run } from '../../core/commandParse.js';
21
37
  /**
22
38
  * Streams the list of registered PACS servers, marking the active one.
23
39
  *
@@ -84,30 +100,79 @@ async function serversModel_build(active) {
84
100
  }
85
101
  return servers.length > 0 ? { servers } : null;
86
102
  }
103
+ /** What a `pacs` line may hold: a subcommand, or none for the active server. */
104
+ const PACS_GRAMMAR = {
105
+ bare: { summary: 'Show the active PACS server' },
106
+ subcommands: {
107
+ connect: {
108
+ summary: 'List the registered PACS servers with the active one marked; given one, make it active',
109
+ operands: [{ name: 'server', kind: 'word', optional: true, summary: 'The server, by identifier or by id' }],
110
+ },
111
+ disconnect: { summary: 'Clear the active PACS server' },
112
+ list: { summary: 'List the registered PACS servers with the active one marked' },
113
+ query: { summary: 'Create a PACS query and wait for its answer, as query does (help query)', operands: QUERY_GRAMMAR.operands, options: QUERY_GRAMMAR.options },
114
+ pull: { summary: 'Pull DICOM series into ChRIS storage, as pull does (help pull)', operands: PULL_GRAMMAR.operands, options: PULL_GRAMMAR.options },
115
+ status: {
116
+ summary: 'Per series, what has landed in CUBE and what is missing, with in-CUBE paths',
117
+ operands: [{ name: 'target', kind: 'pacsQuery', glob: true, summary: 'A query id, a /net/pacs/queries/… path, or a Key:Value question' }],
118
+ },
119
+ },
120
+ };
87
121
  /**
88
- * PACS subsystem command — server context management, query, and pull.
122
+ * `pacs [connect [server] | disconnect | list | query … | pull … | status <target>]`: the declaration.
89
123
  *
90
- * Subcommands:
91
- * pacs — show active server
92
- * pacs connect — list servers with active marked
93
- * pacs connect <name|id> — set active PACS server
94
- * pacs disconnect — clear active PACS server
95
- * pacs list — list servers (alias for: pacs connect)
96
- * pacs query <Key:Value...> — create PACS query and wait for results
97
- * pacs pull <vfs-path...> — pull DICOM series into ChRIS storage
98
- * pacs status <target> — per-series pulled/pending report with CUBE paths
124
+ * @example
125
+ * ```ts
126
+ * commands_register({ declarations: [pacsCommand] }, 'backend');
127
+ * ```
128
+ */
129
+ export const pacsCommand = command_declare({
130
+ name: 'pacs',
131
+ grammar: PACS_GRAMMAR,
132
+ help: {
133
+ summary: 'PACS subsystem — server context, query, and series retrieval',
134
+ description: 'PACS subsystem — server context, query, and series retrieval. Bare, it names the active server. '
135
+ + 'pacs query and pacs pull take the lines query and pull take; their pages say more.',
136
+ category: 'PACS',
137
+ examples: [
138
+ 'pacs # Show active server',
139
+ 'pacs connect # List all servers',
140
+ 'pacs connect PACSDCM # Set active server by identifier',
141
+ 'pacs connect 1 # Set active server by numeric ID',
142
+ 'pacs disconnect # Clear active server',
143
+ 'pacs list # List all servers',
144
+ 'pacs query PatientID:1234 # Query PACS',
145
+ 'pacs pull /net/pacs/queries/42_AccessionNumber:12345678',
146
+ 'pacs status AccessionNumber:22119730 # What has landed in CUBE, what is missing',
147
+ ],
148
+ },
149
+ handler: pacs_run,
150
+ });
151
+ /**
152
+ * `pacs` over words already split: the declaration's parse and handler.
99
153
  *
100
- * @param args - Command arguments (subcommand + its own args).
154
+ * @param args - The subcommand and its words.
101
155
  * @returns An envelope; streaming subcommands carry empty rendered text and
102
156
  * emit their output live, while query/pull return their own envelopes.
157
+ *
158
+ * @example
159
+ * ```ts
160
+ * await builtin_pacs(['list']);
161
+ * ```
103
162
  */
104
163
  export async function builtin_pacs(args) {
105
- if (args_checkHasHelpFlag(args, 'pacs')) {
106
- return envelope_ok(help_render('pacs'));
107
- }
108
- const subcommand = args[0];
164
+ return declaredCommand_run(pacsCommand, args);
165
+ }
166
+ /**
167
+ * PACS subsystem command — server context management, query, and pull.
168
+ *
169
+ * @param args - The line, parsed.
170
+ * @returns An envelope; streaming subcommands carry empty rendered text and
171
+ * emit their output live, while query/pull return their own envelopes.
172
+ */
173
+ async function pacs_run(args) {
109
174
  // No subcommand — show active server
110
- if (!subcommand) {
175
+ if (args.subcommand === null) {
111
176
  const active = await chrisContext.PACSserver_get();
112
177
  if (active) {
113
178
  sink_dataLine(`Active PACS server: ${chalk.cyan(active)}`);
@@ -121,9 +186,9 @@ export async function builtin_pacs(args) {
121
186
  }
122
187
  return envelope_ok('');
123
188
  }
124
- switch (subcommand) {
189
+ switch (args.subcommand) {
125
190
  case 'connect': {
126
- const target = args[1];
191
+ const target = args.operands.server;
127
192
  if (!target) {
128
193
  const active = await chrisContext.PACSserver_get();
129
194
  if (!(await servers_print(active))) {
@@ -168,17 +233,11 @@ export async function builtin_pacs(args) {
168
233
  return envelope_ok('', { kind: PACS_SERVERS_MODEL_KIND, data: model });
169
234
  }
170
235
  case 'query':
171
- return builtin_query(args.slice(1));
236
+ return queryLine_run(args);
172
237
  case 'pull':
173
- return builtin_pull(args.slice(1));
238
+ return pullLine_run(args);
174
239
  case 'status':
175
- return builtin_pacsStatus(args.slice(1));
176
- default:
177
- sink_errLine(chalk.red(`pacs: Unknown subcommand '${subcommand}'`));
178
- sink_dataLine(chalk.gray(' Subcommands: connect, disconnect, list, query, pull, status'));
179
- sink_dataLine(chalk.gray(' Try: help pacs'));
180
- exitCode_set(1);
181
- return envelope_error('');
240
+ return pacsStatus_run(args.operands.target);
182
241
  }
183
242
  }
184
243
  //# sourceMappingURL=pacs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pacs.js","sourceRoot":"","sources":["../../../src/builtins/net/pacs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pacs.js","sourceRoot":"","sources":["../../../src/builtins/net/pacs.ts"],"names":[],"mappings":"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"}