@fnndsc/brasa 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/dist/builtins/debug.d.ts +8 -0
  2. package/dist/builtins/debug.js +39 -0
  3. package/dist/builtins/debug.js.map +1 -0
  4. package/dist/builtins/executable.d.ts +22 -0
  5. package/dist/builtins/executable.js +115 -0
  6. package/dist/builtins/executable.js.map +1 -0
  7. package/dist/builtins/fs/cat.d.ts +16 -0
  8. package/dist/builtins/fs/cat.js +266 -0
  9. package/dist/builtins/fs/cat.js.map +1 -0
  10. package/dist/builtins/fs/cd.d.ts +42 -0
  11. package/dist/builtins/fs/cd.js +193 -0
  12. package/dist/builtins/fs/cd.js.map +1 -0
  13. package/dist/builtins/fs/cp.d.ts +10 -0
  14. package/dist/builtins/fs/cp.js +86 -0
  15. package/dist/builtins/fs/cp.js.map +1 -0
  16. package/dist/builtins/fs/download.d.ts +6 -0
  17. package/dist/builtins/fs/download.js +45 -0
  18. package/dist/builtins/fs/download.js.map +1 -0
  19. package/dist/builtins/fs/du.d.ts +58 -0
  20. package/dist/builtins/fs/du.js +210 -0
  21. package/dist/builtins/fs/du.js.map +1 -0
  22. package/dist/builtins/fs/edit.d.ts +7 -0
  23. package/dist/builtins/fs/edit.js +104 -0
  24. package/dist/builtins/fs/edit.js.map +1 -0
  25. package/dist/builtins/fs/ls.d.ts +8 -0
  26. package/dist/builtins/fs/ls.js +68 -0
  27. package/dist/builtins/fs/ls.js.map +1 -0
  28. package/dist/builtins/fs/mkdir.d.ts +9 -0
  29. package/dist/builtins/fs/mkdir.js +52 -0
  30. package/dist/builtins/fs/mkdir.js.map +1 -0
  31. package/dist/builtins/fs/mv.d.ts +10 -0
  32. package/dist/builtins/fs/mv.js +88 -0
  33. package/dist/builtins/fs/mv.js.map +1 -0
  34. package/dist/builtins/fs/pull.args.d.ts +22 -0
  35. package/dist/builtins/fs/pull.args.js +30 -0
  36. package/dist/builtins/fs/pull.args.js.map +1 -0
  37. package/dist/builtins/fs/pull.d.ts +26 -0
  38. package/dist/builtins/fs/pull.js +445 -0
  39. package/dist/builtins/fs/pull.js.map +1 -0
  40. package/dist/builtins/fs/pwd.d.ts +10 -0
  41. package/dist/builtins/fs/pwd.js +73 -0
  42. package/dist/builtins/fs/pwd.js.map +1 -0
  43. package/dist/builtins/fs/rm.d.ts +37 -0
  44. package/dist/builtins/fs/rm.js +197 -0
  45. package/dist/builtins/fs/rm.js.map +1 -0
  46. package/dist/builtins/fs/touch.d.ts +9 -0
  47. package/dist/builtins/fs/touch.js +76 -0
  48. package/dist/builtins/fs/touch.js.map +1 -0
  49. package/dist/builtins/fs/tree.d.ts +15 -0
  50. package/dist/builtins/fs/tree.js +84 -0
  51. package/dist/builtins/fs/tree.js.map +1 -0
  52. package/dist/builtins/fs/upload.d.ts +6 -0
  53. package/dist/builtins/fs/upload.js +48 -0
  54. package/dist/builtins/fs/upload.js.map +1 -0
  55. package/dist/builtins/help.d.ts +74 -0
  56. package/dist/builtins/help.js +1217 -0
  57. package/dist/builtins/help.js.map +1 -0
  58. package/dist/builtins/index.d.ts +45 -0
  59. package/dist/builtins/index.js +45 -0
  60. package/dist/builtins/index.js.map +1 -0
  61. package/dist/builtins/net/connect.d.ts +7 -0
  62. package/dist/builtins/net/connect.js +42 -0
  63. package/dist/builtins/net/connect.js.map +1 -0
  64. package/dist/builtins/net/cubepath.d.ts +18 -0
  65. package/dist/builtins/net/cubepath.js +102 -0
  66. package/dist/builtins/net/cubepath.js.map +1 -0
  67. package/dist/builtins/net/logout.d.ts +6 -0
  68. package/dist/builtins/net/logout.js +24 -0
  69. package/dist/builtins/net/logout.js.map +1 -0
  70. package/dist/builtins/net/pacs.d.ts +24 -0
  71. package/dist/builtins/net/pacs.js +121 -0
  72. package/dist/builtins/net/pacs.js.map +1 -0
  73. package/dist/builtins/net/pacsUtils.d.ts +85 -0
  74. package/dist/builtins/net/pacsUtils.js +184 -0
  75. package/dist/builtins/net/pacsUtils.js.map +1 -0
  76. package/dist/builtins/net/query.d.ts +60 -0
  77. package/dist/builtins/net/query.js +324 -0
  78. package/dist/builtins/net/query.js.map +1 -0
  79. package/dist/builtins/parametersofplugin.d.ts +13 -0
  80. package/dist/builtins/parametersofplugin.js +43 -0
  81. package/dist/builtins/parametersofplugin.js.map +1 -0
  82. package/dist/builtins/pluginExecute.d.ts +27 -0
  83. package/dist/builtins/pluginExecute.js +165 -0
  84. package/dist/builtins/pluginExecute.js.map +1 -0
  85. package/dist/builtins/proc.d.ts +6 -0
  86. package/dist/builtins/proc.helpers.d.ts +68 -0
  87. package/dist/builtins/proc.helpers.js +102 -0
  88. package/dist/builtins/proc.helpers.js.map +1 -0
  89. package/dist/builtins/proc.js +289 -0
  90. package/dist/builtins/proc.js.map +1 -0
  91. package/dist/builtins/res/compute.d.ts +6 -0
  92. package/dist/builtins/res/compute.js +55 -0
  93. package/dist/builtins/res/compute.js.map +1 -0
  94. package/dist/builtins/res/feed.d.ts +6 -0
  95. package/dist/builtins/res/feed.js +244 -0
  96. package/dist/builtins/res/feed.js.map +1 -0
  97. package/dist/builtins/res/feed.notes.d.ts +28 -0
  98. package/dist/builtins/res/feed.notes.js +24 -0
  99. package/dist/builtins/res/feed.notes.js.map +1 -0
  100. package/dist/builtins/res/files.d.ts +18 -0
  101. package/dist/builtins/res/files.js +85 -0
  102. package/dist/builtins/res/files.js.map +1 -0
  103. package/dist/builtins/res/group.d.ts +6 -0
  104. package/dist/builtins/res/group.js +54 -0
  105. package/dist/builtins/res/group.js.map +1 -0
  106. package/dist/builtins/res/pipeline.args.d.ts +22 -0
  107. package/dist/builtins/res/pipeline.args.js +28 -0
  108. package/dist/builtins/res/pipeline.args.js.map +1 -0
  109. package/dist/builtins/res/pipeline.d.ts +20 -0
  110. package/dist/builtins/res/pipeline.js +252 -0
  111. package/dist/builtins/res/pipeline.js.map +1 -0
  112. package/dist/builtins/res/plugin.d.ts +13 -0
  113. package/dist/builtins/res/plugin.js +140 -0
  114. package/dist/builtins/res/plugin.js.map +1 -0
  115. package/dist/builtins/res/plugininstance.d.ts +6 -0
  116. package/dist/builtins/res/plugininstance.js +53 -0
  117. package/dist/builtins/res/plugininstance.js.map +1 -0
  118. package/dist/builtins/res/pluginmeta.d.ts +6 -0
  119. package/dist/builtins/res/pluginmeta.js +53 -0
  120. package/dist/builtins/res/pluginmeta.js.map +1 -0
  121. package/dist/builtins/res/tag.d.ts +6 -0
  122. package/dist/builtins/res/tag.js +53 -0
  123. package/dist/builtins/res/tag.js.map +1 -0
  124. package/dist/builtins/res/workflow.d.ts +6 -0
  125. package/dist/builtins/res/workflow.js +53 -0
  126. package/dist/builtins/res/workflow.js.map +1 -0
  127. package/dist/builtins/store.d.ts +6 -0
  128. package/dist/builtins/store.js +107 -0
  129. package/dist/builtins/store.js.map +1 -0
  130. package/dist/builtins/sys/context.d.ts +6 -0
  131. package/dist/builtins/sys/context.js +50 -0
  132. package/dist/builtins/sys/context.js.map +1 -0
  133. package/dist/builtins/sys/physicalmode.d.ts +8 -0
  134. package/dist/builtins/sys/physicalmode.js +34 -0
  135. package/dist/builtins/sys/physicalmode.js.map +1 -0
  136. package/dist/builtins/sys/timing.d.ts +8 -0
  137. package/dist/builtins/sys/timing.js +34 -0
  138. package/dist/builtins/sys/timing.js.map +1 -0
  139. package/dist/builtins/sys/version.d.ts +15 -0
  140. package/dist/builtins/sys/version.js +23 -0
  141. package/dist/builtins/sys/version.js.map +1 -0
  142. package/dist/builtins/sys/whoami.d.ts +17 -0
  143. package/dist/builtins/sys/whoami.js +44 -0
  144. package/dist/builtins/sys/whoami.js.map +1 -0
  145. package/dist/builtins/utils.d.ts +55 -0
  146. package/dist/builtins/utils.js +145 -0
  147. package/dist/builtins/utils.js.map +1 -0
  148. package/dist/builtins/wildcard.d.ts +26 -0
  149. package/dist/builtins/wildcard.js +120 -0
  150. package/dist/builtins/wildcard.js.map +1 -0
  151. package/dist/command-keys.d.ts +8 -0
  152. package/dist/command-keys.js +32 -0
  153. package/dist/command-keys.js.map +1 -0
  154. package/dist/config/storeConfig.d.ts +57 -0
  155. package/dist/config/storeConfig.js +78 -0
  156. package/dist/config/storeConfig.js.map +1 -0
  157. package/dist/core/chiliDelegate.d.ts +21 -0
  158. package/dist/core/chiliDelegate.js +32 -0
  159. package/dist/core/chiliDelegate.js.map +1 -0
  160. package/dist/core/connect.d.ts +38 -0
  161. package/dist/core/connect.js +46 -0
  162. package/dist/core/connect.js.map +1 -0
  163. package/dist/core/dispatch.d.ts +95 -0
  164. package/dist/core/dispatch.js +618 -0
  165. package/dist/core/dispatch.js.map +1 -0
  166. package/dist/core/engine.d.ts +91 -0
  167. package/dist/core/engine.js +222 -0
  168. package/dist/core/engine.js.map +1 -0
  169. package/dist/core/preprocess.d.ts +46 -0
  170. package/dist/core/preprocess.js +146 -0
  171. package/dist/core/preprocess.js.map +1 -0
  172. package/dist/core/progress.d.ts +50 -0
  173. package/dist/core/progress.js +21 -0
  174. package/dist/core/progress.js.map +1 -0
  175. package/dist/core/promptContext.d.ts +49 -0
  176. package/dist/core/promptContext.js +39 -0
  177. package/dist/core/promptContext.js.map +1 -0
  178. package/dist/core/question.d.ts +27 -0
  179. package/dist/core/question.js +33 -0
  180. package/dist/core/question.js.map +1 -0
  181. package/dist/core/sink.d.ts +207 -0
  182. package/dist/core/sink.js +329 -0
  183. package/dist/core/sink.js.map +1 -0
  184. package/dist/core/surface.d.ts +172 -0
  185. package/dist/core/surface.js +105 -0
  186. package/dist/core/surface.js.map +1 -0
  187. package/dist/core/version.d.ts +20 -0
  188. package/dist/core/version.js +82 -0
  189. package/dist/core/version.js.map +1 -0
  190. package/dist/index.d.ts +31 -0
  191. package/dist/index.js +32 -0
  192. package/dist/index.js.map +1 -0
  193. package/dist/lib/completer/index.d.ts +15 -0
  194. package/dist/lib/completer/index.js +212 -0
  195. package/dist/lib/completer/index.js.map +1 -0
  196. package/dist/lib/completer/pathComplete.helpers.d.ts +22 -0
  197. package/dist/lib/completer/pathComplete.helpers.js +49 -0
  198. package/dist/lib/completer/pathComplete.helpers.js.map +1 -0
  199. package/dist/lib/parser.d.ts +13 -0
  200. package/dist/lib/parser.js +52 -0
  201. package/dist/lib/parser.js.map +1 -0
  202. package/dist/lib/pipe.d.ts +11 -0
  203. package/dist/lib/pipe.js +90 -0
  204. package/dist/lib/pipe.js.map +1 -0
  205. package/dist/lib/prefetch.d.ts +25 -0
  206. package/dist/lib/prefetch.js +64 -0
  207. package/dist/lib/prefetch.js.map +1 -0
  208. package/dist/lib/semicolonParser.d.ts +22 -0
  209. package/dist/lib/semicolonParser.js +53 -0
  210. package/dist/lib/semicolonParser.js.map +1 -0
  211. package/dist/lib/spinner.d.ts +23 -0
  212. package/dist/lib/spinner.js +71 -0
  213. package/dist/lib/spinner.js.map +1 -0
  214. package/dist/lib/vfs/providers/static.d.ts +65 -0
  215. package/dist/lib/vfs/providers/static.js +164 -0
  216. package/dist/lib/vfs/providers/static.js.map +1 -0
  217. package/dist/lib/vfs/providers/static_content.d.ts +27 -0
  218. package/dist/lib/vfs/providers/static_content.js +180 -0
  219. package/dist/lib/vfs/providers/static_content.js.map +1 -0
  220. package/dist/lib/vfs/vfs.d.ts +59 -0
  221. package/dist/lib/vfs/vfs.js +202 -0
  222. package/dist/lib/vfs/vfs.js.map +1 -0
  223. package/dist/session/index.d.ts +76 -0
  224. package/dist/session/index.js +120 -0
  225. package/dist/session/index.js.map +1 -0
  226. package/package.json +58 -0
@@ -0,0 +1,289 @@
1
+ /**
2
+ * @file Builtin proc command.
3
+ * Manages the /proc VFS cache (job monitoring).
4
+ */
5
+ import chalk from 'chalk';
6
+ import { procCache_refresh, procFeed_ensureLoaded, jobs_find } from '@fnndsc/salsa';
7
+ import { procCache_get } from '@fnndsc/cumin';
8
+ import { spinner } from '../lib/spinner.js';
9
+ import { commandArgs_process } from './utils.js';
10
+ import { list_applySort } from '@fnndsc/chili/utils/sort.js';
11
+ import { screen, table_display } from '@fnndsc/chili/screen/screen.js';
12
+ import { ALL_JOB_FIELDS, feedStatus_derive, statusColor, jobFields_select, procEntries_filterBySearch, procCsv_render, feedId_parse, } from './proc.helpers.js';
13
+ // ── proc jobs ─────────────────────────────────────────────────────────────────
14
+ /**
15
+ * Builds flat job entries from the proc cache.
16
+ *
17
+ * @param cache - The proc cache.
18
+ * @returns One entry per known feed.
19
+ */
20
+ function procEntries_fromCache(cache) {
21
+ return cache.feedIDs_get().map((feedID) => {
22
+ const feed = cache.feed_get(feedID);
23
+ const topoLoaded = cache.topologyLoaded_has(feedID);
24
+ return {
25
+ id: feed.id,
26
+ title: feed.title,
27
+ status: feedStatus_derive(feed),
28
+ finishedJobs: feed.finishedJobs,
29
+ erroredJobs: feed.erroredJobs,
30
+ startedJobs: feed.startedJobs,
31
+ scheduledJobs: feed.scheduledJobs,
32
+ cancelledJobs: feed.cancelledJobs,
33
+ createdJobs: feed.createdJobs,
34
+ creationDate: feed.creationDate ? feed.creationDate.substring(0, 10) : '',
35
+ instances: topoLoaded ? cache.instancesForFeed_count(feedID) : '-',
36
+ };
37
+ });
38
+ }
39
+ /**
40
+ * Renders job entries as a bordered table.
41
+ *
42
+ * @param page - The entries to render.
43
+ * @param selectedFields - The columns to show.
44
+ */
45
+ function procJobs_renderTable(page, selectedFields) {
46
+ const tableData = page.map((e) => {
47
+ const row = {};
48
+ selectedFields.forEach((f) => { row[f] = e[f] ?? ''; });
49
+ return row;
50
+ });
51
+ console.log(screen.table_output(tableData, {
52
+ head: selectedFields,
53
+ title: { title: 'proc jobs', justification: 'center' },
54
+ typeColors: { string: 'green', number: 'yellow', boolean: 'cyan', object: 'magenta' },
55
+ }));
56
+ }
57
+ /**
58
+ * Renders job entries as colorized, tab-separated lines.
59
+ *
60
+ * @param page - The entries to render.
61
+ * @param selectedFields - The columns to show.
62
+ */
63
+ function procJobs_renderLines(page, selectedFields) {
64
+ for (const e of page) {
65
+ const cols = selectedFields.map((f) => {
66
+ const val = String(e[f] ?? '');
67
+ if (f === 'id')
68
+ return chalk.bold(val);
69
+ if (f === 'title')
70
+ return chalk.cyan(val);
71
+ if (f === 'status')
72
+ return statusColor(val);
73
+ if (f === 'erroredJobs' && e.erroredJobs > 0)
74
+ return chalk.red(val);
75
+ return val;
76
+ });
77
+ console.log(cols.join('\t'));
78
+ }
79
+ }
80
+ /**
81
+ * Handles `proc jobs [inspect|list]`: lists cached feed jobs with optional
82
+ * search, sort, paging, field selection, and CSV/table output.
83
+ *
84
+ * @param args - Arguments following `proc jobs`.
85
+ */
86
+ async function jobs_subcmd(args) {
87
+ const second = args[0];
88
+ if (second === 'inspect') {
89
+ table_display([...ALL_JOB_FIELDS].map((f) => ({ field: f })), ['field'], { title: { title: 'proc jobs fields', justification: 'center' } });
90
+ return;
91
+ }
92
+ const listArgs = second === 'list' ? args.slice(1) : args;
93
+ const parsed = commandArgs_process(listArgs);
94
+ let entries = procEntries_fromCache(procCache_get());
95
+ entries = procEntries_filterBySearch(entries, String(parsed['search'] ?? ''));
96
+ if (entries.length === 0) {
97
+ console.log(chalk.gray('No feeds in cache.'));
98
+ return;
99
+ }
100
+ const sortField = String(parsed['sort'] ?? '');
101
+ if (sortField)
102
+ entries = list_applySort(entries, sortField, !!parsed['reverse']);
103
+ const showAll = !!parsed['all'];
104
+ const limit = showAll ? entries.length : Math.max(1, Number(parsed['limit'] ?? 20));
105
+ const page = entries.slice(0, limit);
106
+ const selectedFields = jobFields_select(String(parsed['fields'] ?? ''));
107
+ if (parsed['csv']) {
108
+ console.log(procCsv_render(page, selectedFields));
109
+ return;
110
+ }
111
+ if (parsed['table']) {
112
+ procJobs_renderTable(page, selectedFields);
113
+ return;
114
+ }
115
+ procJobs_renderLines(page, selectedFields);
116
+ if (!showAll && entries.length > limit) {
117
+ console.log(chalk.gray(` … ${entries.length - limit} more. Use --all or --limit <n>.`));
118
+ }
119
+ }
120
+ // ── proc subcommand handlers ────────────────────────────────────────────────
121
+ /**
122
+ * Handles `proc refresh [feed]`: refreshes the cache for one feed or all.
123
+ *
124
+ * @param args - Full command args (`args[1]` is the optional feed).
125
+ */
126
+ async function procRefresh_handle(args) {
127
+ const feedArg = args[1];
128
+ let feedID;
129
+ if (feedArg) {
130
+ const parsedId = feedId_parse(feedArg);
131
+ if (parsedId === null) {
132
+ console.error(chalk.red(`proc refresh: invalid feed ID '${feedArg}'`));
133
+ return;
134
+ }
135
+ feedID = parsedId;
136
+ }
137
+ const scope = feedID !== undefined ? `feed_${feedID}` : 'all feeds';
138
+ spinner.start(`Refreshing /proc cache (${scope})...`);
139
+ try {
140
+ await procCache_refresh(feedID);
141
+ spinner.stop();
142
+ console.log(chalk.green(`/proc cache refreshed (${scope})`));
143
+ }
144
+ catch (error) {
145
+ spinner.stop();
146
+ const msg = error instanceof Error ? error.message : String(error);
147
+ console.error(chalk.red(`proc refresh failed: ${msg}`));
148
+ }
149
+ }
150
+ /**
151
+ * Handles `proc find <query>`: locates instances by id/plugin-name and prints
152
+ * their /proc paths.
153
+ *
154
+ * @param args - Full command args (`args[1]` is the query).
155
+ */
156
+ async function procFind_handle(args) {
157
+ const query = args[1];
158
+ if (!query) {
159
+ console.error(chalk.red('Usage: proc find <instance_id | plugin_name_substring>'));
160
+ return;
161
+ }
162
+ spinner.start(`Finding "${query}"...`);
163
+ try {
164
+ const cache = procCache_get();
165
+ const result = await jobs_find(query);
166
+ if (!result.ok) {
167
+ spinner.stop();
168
+ console.error(chalk.red(`Search failed.`));
169
+ return;
170
+ }
171
+ const matches = result.value;
172
+ if (matches.length === 0) {
173
+ spinner.stop();
174
+ console.error(chalk.yellow(`No instances found matching "${query}".`));
175
+ return;
176
+ }
177
+ const feedIDs = [...new Set(matches.map((m) => m.feedID))];
178
+ await Promise.all(feedIDs.map((feedID) => procFeed_ensureLoaded(feedID)));
179
+ spinner.stop();
180
+ for (const m of matches) {
181
+ const path = cache.path_build(m.id);
182
+ if (path)
183
+ console.log(path);
184
+ }
185
+ }
186
+ catch (error) {
187
+ spinner.stop();
188
+ const msg = error instanceof Error ? error.message : String(error);
189
+ console.error(chalk.red(`proc find failed: ${msg}`));
190
+ }
191
+ }
192
+ /**
193
+ * Handles `proc feeds <query>`: lists cached feeds whose title matches.
194
+ *
195
+ * @param args - Full command args (`args[1]` is the query).
196
+ */
197
+ async function procFeeds_handle(args) {
198
+ const query = args[1];
199
+ if (!query) {
200
+ console.error(chalk.red('Usage: proc feeds <title_substring>'));
201
+ return;
202
+ }
203
+ const cache = procCache_get();
204
+ const matches = cache.feeds_find(query);
205
+ if (matches.length === 0) {
206
+ console.error(chalk.yellow(`No feeds found with title containing "${query}".`));
207
+ return;
208
+ }
209
+ for (const feed of matches) {
210
+ const status = feedStatus_derive(feed);
211
+ console.log(`/proc/jobs/feed_${feed.id} ${statusColor(status)} ${chalk.dim(feed.title)}`);
212
+ }
213
+ }
214
+ /**
215
+ * Handles `proc stat [feed]`: prints a cache summary or a single feed's detail.
216
+ *
217
+ * @param args - Full command args (`args[1]` is the optional feed).
218
+ */
219
+ async function procStat_handle(args) {
220
+ const cache = procCache_get();
221
+ const feedArg = args[1];
222
+ if (!feedArg) {
223
+ const warmup = cache.warmupProgress_get();
224
+ const warmupLine = warmup.active
225
+ ? chalk.yellow(`in progress (${warmup.loaded} instances loaded)`)
226
+ : cache.warmupComplete
227
+ ? chalk.green('complete')
228
+ : chalk.dim('not started');
229
+ console.log(chalk.bold('proc cache summary'));
230
+ console.log(` feeds known : ${chalk.cyan(String(cache.feedIDs_get().length))}`);
231
+ console.log(` instances : ${chalk.cyan(String(cache.instances_count()))}`);
232
+ console.log(` topology sweep : ${warmupLine}`);
233
+ return;
234
+ }
235
+ const feedID = feedId_parse(feedArg);
236
+ if (feedID === null) {
237
+ console.error(chalk.red(`proc stat: invalid feed ID '${feedArg}'`));
238
+ return;
239
+ }
240
+ const feed = cache.feed_get(feedID);
241
+ if (!feed) {
242
+ console.error(chalk.yellow(`proc stat: feed_${feedID} not in cache`));
243
+ return;
244
+ }
245
+ const topoLoaded = cache.topologyLoaded_has(feedID);
246
+ const instCount = topoLoaded ? cache.instancesForFeed_count(feedID) : -1;
247
+ const status = feedStatus_derive(feed);
248
+ console.log(chalk.bold(`feed_${feedID}`));
249
+ console.log(` title : ${chalk.cyan(feed.title)}`);
250
+ console.log(` status : ${statusColor(status)}`);
251
+ console.log(` finishedJobs : ${feed.finishedJobs}`);
252
+ console.log(` erroredJobs : ${chalk[feed.erroredJobs > 0 ? 'red' : 'white'](String(feed.erroredJobs))}`);
253
+ console.log(` startedJobs : ${feed.startedJobs}`);
254
+ console.log(` scheduledJobs : ${feed.scheduledJobs}`);
255
+ console.log(` cancelledJobs : ${feed.cancelledJobs}`);
256
+ console.log(` createdJobs : ${feed.createdJobs}`);
257
+ console.log(` topology : ${topoLoaded ? chalk.green(`loaded (${instCount} instances)`) : chalk.dim('not loaded')}`);
258
+ }
259
+ // ── Main dispatcher ───────────────────────────────────────────────────────────
260
+ /**
261
+ * Handles proc commands.
262
+ *
263
+ * @param args - command arguments.
264
+ */
265
+ export async function builtin_proc(args) {
266
+ const subcommand = args[0];
267
+ if (!subcommand || subcommand === 'refresh') {
268
+ await procRefresh_handle(args);
269
+ return;
270
+ }
271
+ if (subcommand === 'jobs') {
272
+ await jobs_subcmd(args.slice(1));
273
+ return;
274
+ }
275
+ if (subcommand === 'find') {
276
+ await procFind_handle(args);
277
+ return;
278
+ }
279
+ if (subcommand === 'feeds') {
280
+ await procFeeds_handle(args);
281
+ return;
282
+ }
283
+ if (subcommand === 'stat') {
284
+ await procStat_handle(args);
285
+ return;
286
+ }
287
+ console.error(chalk.red(`proc: unknown subcommand '${subcommand}'. Use proc --help.`));
288
+ }
289
+ //# sourceMappingURL=proc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proc.js","sourceRoot":"","sources":["../../src/builtins/proc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Handles compute commands.
3
+ *
4
+ * @param args - Command arguments.
5
+ */
6
+ export declare function builtin_compute(args: string[]): Promise<void>;
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @file Builtin compute command.
3
+ *
4
+ * Lists compute resources registered with ChRIS CUBE.
5
+ * Subcommands:
6
+ * - `list` — display all available compute resources
7
+ *
8
+ * `compute` and `computes` are both registered in COMMAND_HANDLERS.
9
+ *
10
+ * @module
11
+ */
12
+ import chalk from 'chalk';
13
+ import { commandArgs_process } from '../utils.js';
14
+ import { computeResources_fetchList } from '@fnndsc/chili/commands/compute/list.js';
15
+ import { computeFields_fetch } from '@fnndsc/chili/commands/compute/fields.js';
16
+ import { computeList_render } from '@fnndsc/chili/views/compute.js';
17
+ import { table_display } from '@fnndsc/chili/screen/screen.js';
18
+ /**
19
+ * Handles compute commands.
20
+ *
21
+ * @param args - Command arguments.
22
+ */
23
+ export async function builtin_compute(args) {
24
+ const parsed = commandArgs_process(args);
25
+ const subcommand = parsed._[0];
26
+ if (!subcommand || subcommand === 'list') {
27
+ try {
28
+ const { resources } = await computeResources_fetchList();
29
+ console.log(computeList_render(resources, { table: !!parsed.table, csv: !!parsed.csv }));
30
+ }
31
+ catch (e) {
32
+ const msg = e instanceof Error ? e.message : String(e);
33
+ process.exitCode = 1;
34
+ console.error(chalk.red(`compute error: ${msg}`));
35
+ }
36
+ return;
37
+ }
38
+ if (subcommand === 'inspect') {
39
+ const fields = await computeFields_fetch();
40
+ if (fields && fields.length > 0) {
41
+ table_display(fields.map((f) => ({ field: f })), ['field'], { title: { title: 'Compute fields', justification: 'center' } });
42
+ }
43
+ else {
44
+ console.log(chalk.gray('No fields found.'));
45
+ }
46
+ return;
47
+ }
48
+ if (subcommand === 'search') {
49
+ await builtin_compute(['list', '--search', parsed._[1] ?? '']);
50
+ return;
51
+ }
52
+ process.exitCode = 1;
53
+ console.log(chalk.red(`Unknown subcommand: ${subcommand}. Usage: compute <list|search|inspect>`));
54
+ }
55
+ //# sourceMappingURL=compute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute.js","sourceRoot":"","sources":["../../../src/builtins/res/compute.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAc,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAqB,MAAM,wCAAwC,CAAC;AACvG,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAc;IAClD,MAAM,MAAM,GAAe,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,UAAU,GAAuB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnD,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,GAAsB,MAAM,0BAA0B,EAAE,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC3F,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,GAAG,GAAW,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAoB,MAAM,mBAAmB,EAAE,CAAC;QAC5D,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACvI,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,eAAe,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,UAAU,wCAAwC,CAAC,CAAC,CAAC;AACpG,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Handles feed commands.
3
+ *
4
+ * @param args - command arguments.
5
+ */
6
+ export declare function builtin_feed(args: string[]): Promise<void>;
@@ -0,0 +1,244 @@
1
+ /**
2
+ * @file Builtin feed command.
3
+ * Manages feeds (list, create, inspect, note, comments).
4
+ */
5
+ import chalk from 'chalk';
6
+ import { commandArgs_process } from '../utils.js';
7
+ import { feeds_fetchList } from '@fnndsc/chili/commands/feeds/list.js';
8
+ import { feedFields_fetch } from '@fnndsc/chili/commands/feeds/fields.js';
9
+ import { feed_create } from '@fnndsc/chili/commands/feed/create.js';
10
+ import { spawnSync } from 'child_process';
11
+ import { writeFileSync, readFileSync, unlinkSync, existsSync } from 'fs';
12
+ import { tmpdir } from 'os';
13
+ import { join } from 'path';
14
+ import { feed_noteGet, feed_noteUpdate } from '@fnndsc/chili/commands/feed/note.js';
15
+ import { feed_commentsList, feed_commentCreate, feed_commentDelete, feed_commentUpdate } from '@fnndsc/chili/commands/feed/comments.js';
16
+ import { feedList_render, feedCreate_render, feedNote_render, feedComments_render } from '@fnndsc/chili/views/feed.js';
17
+ import { chiliCommand_run } from '../../core/chiliDelegate.js';
18
+ import { table_display } from '@fnndsc/chili/screen/screen.js';
19
+ import { noteEditBody_format, noteEditBody_parse } from './feed.notes.js';
20
+ /**
21
+ * Handles `feed list`: fetches and renders the feed table.
22
+ *
23
+ * @param parsed - The parsed command arguments.
24
+ */
25
+ async function feedList_handle(parsed) {
26
+ const { feeds, selectedFields, totalCount } = await feeds_fetchList(parsed);
27
+ console.log(feedList_render(feeds, selectedFields, { table: !!parsed.table, csv: !!parsed.csv }));
28
+ if (totalCount !== undefined && feeds.length < totalCount) {
29
+ console.log(chalk.dim(` ↓ showing ${feeds.length} of ${totalCount} · --all to fetch all · --limit <n> for page size`));
30
+ }
31
+ }
32
+ /**
33
+ * Handles `feed inspect`: lists the available feed fields.
34
+ */
35
+ async function feedInspect_handle() {
36
+ const fields = await feedFields_fetch();
37
+ if (fields && fields.length > 0) {
38
+ table_display(fields.map((f) => ({ field: f })), ['field'], { title: { title: 'Feed fields', justification: 'center' } });
39
+ }
40
+ else {
41
+ console.log(chalk.gray('No fields found.'));
42
+ }
43
+ }
44
+ /**
45
+ * Edits a feed note interactively via `$EDITOR`.
46
+ *
47
+ * @param feedId - The feed whose note is edited.
48
+ */
49
+ async function feedNote_edit(feedId) {
50
+ const getResult = await feed_noteGet(feedId);
51
+ if (!getResult.ok) {
52
+ process.exitCode = 1;
53
+ console.error(chalk.red(`Failed to get note for feed ${feedId}.`));
54
+ return;
55
+ }
56
+ const note = getResult.value;
57
+ const tmpPath = join(tmpdir(), `chell-note-${feedId}-${Date.now()}.txt`);
58
+ const body = noteEditBody_format(note);
59
+ writeFileSync(tmpPath, body, 'utf8');
60
+ const editor = process.env.EDITOR || process.env.VISUAL || 'vi';
61
+ spawnSync(editor, [tmpPath], { stdio: 'inherit' });
62
+ const edited = readFileSync(tmpPath, 'utf8');
63
+ if (existsSync(tmpPath))
64
+ try {
65
+ unlinkSync(tmpPath);
66
+ }
67
+ catch { /* ignore */ }
68
+ if (edited === body) {
69
+ console.log(chalk.gray('(no changes)'));
70
+ return;
71
+ }
72
+ const { title, content } = noteEditBody_parse(edited, note.title);
73
+ const updateResult = await feed_noteUpdate(feedId, { title, content });
74
+ if (updateResult.ok)
75
+ console.log(chalk.green(`Note updated on feed ${feedId}.`));
76
+ else {
77
+ process.exitCode = 1;
78
+ console.error(chalk.red('Failed to save note.'));
79
+ }
80
+ }
81
+ /**
82
+ * Handles `feed note ...`: interactive edit, direct update, or display.
83
+ *
84
+ * @param parsed - The parsed command arguments.
85
+ */
86
+ async function feedNote_handle(parsed) {
87
+ const second = String(parsed._[1] ?? '');
88
+ if (second === 'edit') {
89
+ const feedId = parseInt(String(parsed._[2]), 10);
90
+ if (isNaN(feedId)) {
91
+ console.error(chalk.red('Usage: feed note edit <feedId>'));
92
+ return;
93
+ }
94
+ await feedNote_edit(feedId);
95
+ return;
96
+ }
97
+ const feedId = parseInt(second, 10);
98
+ if (isNaN(feedId)) {
99
+ console.error(chalk.red('Usage: feed note <feedId> [--title <t>] [--content <c>] | feed note edit <feedId>'));
100
+ return;
101
+ }
102
+ const hasUpdate = !!(parsed.title || parsed.content);
103
+ if (hasUpdate) {
104
+ const result = await feed_noteUpdate(feedId, {
105
+ title: parsed.title,
106
+ content: parsed.content,
107
+ });
108
+ if (result.ok)
109
+ console.log(chalk.green(`Note updated on feed ${feedId}.`));
110
+ else {
111
+ process.exitCode = 1;
112
+ console.error(chalk.red('Failed to update note.'));
113
+ }
114
+ }
115
+ else {
116
+ const result = await feed_noteGet(feedId);
117
+ if (result.ok)
118
+ console.log(feedNote_render(result.value, feedId));
119
+ else {
120
+ process.exitCode = 1;
121
+ console.error(chalk.red(`Failed to get note for feed ${feedId}.`));
122
+ }
123
+ }
124
+ }
125
+ /**
126
+ * Handles `feed comment <add|delete|edit> ...`.
127
+ *
128
+ * @param parsed - The parsed command arguments.
129
+ */
130
+ async function feedComment_handle(parsed) {
131
+ const op = parsed._[1] ?? '';
132
+ const feedId = parseInt(String(parsed._[2]), 10);
133
+ if (!op || isNaN(feedId)) {
134
+ console.error(chalk.red('Usage: feed comment <add|delete|edit> <feedId> [commentId] [--title <t>] [--content <c>]'));
135
+ return;
136
+ }
137
+ if (op === 'add') {
138
+ const result = await feed_commentCreate(feedId, {
139
+ title: parsed.title,
140
+ content: parsed.content,
141
+ });
142
+ if (result.ok)
143
+ console.log(chalk.green(`Comment added (id: ${result.value.id}) on feed ${feedId}.`));
144
+ else {
145
+ process.exitCode = 1;
146
+ console.error(chalk.red('Failed to add comment.'));
147
+ }
148
+ }
149
+ else if (op === 'delete') {
150
+ const commentId = parseInt(String(parsed._[3]), 10);
151
+ if (isNaN(commentId)) {
152
+ console.error(chalk.red('Usage: feed comment delete <feedId> <commentId>'));
153
+ return;
154
+ }
155
+ const result = await feed_commentDelete(feedId, commentId);
156
+ if (result.ok)
157
+ console.log(chalk.green(`Comment ${commentId} deleted.`));
158
+ else {
159
+ process.exitCode = 1;
160
+ console.error(chalk.red('Failed to delete comment.'));
161
+ }
162
+ }
163
+ else if (op === 'edit') {
164
+ const commentId = parseInt(String(parsed._[3]), 10);
165
+ if (isNaN(commentId)) {
166
+ console.error(chalk.red('Usage: feed comment edit <feedId> <commentId> [--title <t>] [--content <c>]'));
167
+ return;
168
+ }
169
+ const result = await feed_commentUpdate(feedId, commentId, {
170
+ title: parsed.title,
171
+ content: parsed.content,
172
+ });
173
+ if (result.ok)
174
+ console.log(chalk.green(`Comment ${commentId} updated.`));
175
+ else {
176
+ process.exitCode = 1;
177
+ console.error(chalk.red('Failed to update comment.'));
178
+ }
179
+ }
180
+ else {
181
+ console.error(chalk.red(`Unknown comment op: ${op}. Use add, delete, or edit.`));
182
+ process.exitCode = 1;
183
+ }
184
+ }
185
+ /**
186
+ * Handles feed commands.
187
+ *
188
+ * @param args - command arguments.
189
+ */
190
+ export async function builtin_feed(args) {
191
+ const parsed = commandArgs_process(args);
192
+ const subcommand = parsed._[0];
193
+ if (!subcommand) {
194
+ console.log(chalk.red("Usage: feed <list|create> ..."));
195
+ return;
196
+ }
197
+ try {
198
+ if (subcommand === 'list') {
199
+ await feedList_handle(parsed);
200
+ }
201
+ else if (subcommand === 'create') {
202
+ const feed = await feed_create(parsed);
203
+ if (feed) {
204
+ console.log(feedCreate_render(feed));
205
+ }
206
+ }
207
+ else if (subcommand === 'inspect') {
208
+ await feedInspect_handle();
209
+ }
210
+ else if (subcommand === 'search') {
211
+ const query = parsed._[1] ?? '';
212
+ await builtin_feed(['list', '--search', query]);
213
+ }
214
+ else if (subcommand === 'note') {
215
+ await feedNote_handle(parsed);
216
+ }
217
+ else if (subcommand === 'comments') {
218
+ const feedId = parseInt(String(parsed._[1]), 10);
219
+ if (isNaN(feedId)) {
220
+ console.error(chalk.red('Usage: feed comments <feedId>'));
221
+ return;
222
+ }
223
+ const result = await feed_commentsList(feedId);
224
+ if (result.ok)
225
+ console.log(feedComments_render(result.value, feedId));
226
+ else {
227
+ process.exitCode = 1;
228
+ console.error(chalk.red(`Failed to list comments for feed ${feedId}.`));
229
+ }
230
+ }
231
+ else if (subcommand === 'comment') {
232
+ await feedComment_handle(parsed);
233
+ }
234
+ else {
235
+ console.log(chalk.yellow('Directive not handled by chell... spawning chili directly'));
236
+ await chiliCommand_run('feeds', ['-s', ...args]);
237
+ }
238
+ }
239
+ catch (e) {
240
+ const msg = e instanceof Error ? e.message : String(e);
241
+ console.error(chalk.red(`Feed error: ${msg}`));
242
+ }
243
+ }
244
+ //# sourceMappingURL=feed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed.js","sourceRoot":"","sources":["../../../src/builtins/res/feed.ts"],"names":[],"mappings":"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"}