@fnndsc/brasa 0.9.2 → 0.10.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 (153) hide show
  1. package/dist/buildinfo.json +1 -0
  2. package/dist/builtins/argumentTokens.d.ts +18 -0
  3. package/dist/builtins/argumentTokens.js +58 -0
  4. package/dist/builtins/argumentTokens.js.map +1 -0
  5. package/dist/builtins/executable.d.ts +3 -7
  6. package/dist/builtins/executable.js +32 -29
  7. package/dist/builtins/executable.js.map +1 -1
  8. package/dist/builtins/feedCreation.d.ts +23 -0
  9. package/dist/builtins/feedCreation.js +45 -0
  10. package/dist/builtins/feedCreation.js.map +1 -0
  11. package/dist/builtins/fs/cat.args.d.ts +36 -0
  12. package/dist/builtins/fs/cat.args.js +63 -0
  13. package/dist/builtins/fs/cat.args.js.map +1 -0
  14. package/dist/builtins/fs/cat.d.ts +2 -2
  15. package/dist/builtins/fs/cat.js +222 -101
  16. package/dist/builtins/fs/cat.js.map +1 -1
  17. package/dist/builtins/fs/cd.js +41 -5
  18. package/dist/builtins/fs/cd.js.map +1 -1
  19. package/dist/builtins/fs/cp.js +3 -2
  20. package/dist/builtins/fs/cp.js.map +1 -1
  21. package/dist/builtins/fs/download.d.ts +1 -1
  22. package/dist/builtins/fs/download.js +52 -13
  23. package/dist/builtins/fs/download.js.map +1 -1
  24. package/dist/builtins/fs/du.js +15 -1
  25. package/dist/builtins/fs/du.js.map +1 -1
  26. package/dist/builtins/fs/ls.js +10 -1
  27. package/dist/builtins/fs/ls.js.map +1 -1
  28. package/dist/builtins/fs/mv.js +7 -3
  29. package/dist/builtins/fs/mv.js.map +1 -1
  30. package/dist/builtins/fs/pull.args.d.ts +14 -1
  31. package/dist/builtins/fs/pull.args.js +72 -9
  32. package/dist/builtins/fs/pull.args.js.map +1 -1
  33. package/dist/builtins/fs/pull.d.ts +1 -0
  34. package/dist/builtins/fs/pull.js +191 -259
  35. package/dist/builtins/fs/pull.js.map +1 -1
  36. package/dist/builtins/fs/rm.js +4 -0
  37. package/dist/builtins/fs/rm.js.map +1 -1
  38. package/dist/builtins/fs/tree.js +7 -3
  39. package/dist/builtins/fs/tree.js.map +1 -1
  40. package/dist/builtins/fs/upload.js +29 -2
  41. package/dist/builtins/fs/upload.js.map +1 -1
  42. package/dist/builtins/help.d.ts +7 -0
  43. package/dist/builtins/help.js +144 -36
  44. package/dist/builtins/help.js.map +1 -1
  45. package/dist/builtins/index.d.ts +1 -0
  46. package/dist/builtins/index.js +1 -0
  47. package/dist/builtins/index.js.map +1 -1
  48. package/dist/builtins/net/pacs.d.ts +1 -0
  49. package/dist/builtins/net/pacs.js +5 -1
  50. package/dist/builtins/net/pacs.js.map +1 -1
  51. package/dist/builtins/net/pacsUtils.d.ts +5 -4
  52. package/dist/builtins/net/pacsUtils.js +12 -32
  53. package/dist/builtins/net/pacsUtils.js.map +1 -1
  54. package/dist/builtins/net/query.js +4 -1
  55. package/dist/builtins/net/query.js.map +1 -1
  56. package/dist/builtins/net/status.d.ts +14 -0
  57. package/dist/builtins/net/status.js +210 -0
  58. package/dist/builtins/net/status.js.map +1 -0
  59. package/dist/builtins/pluginExecute.d.ts +3 -2
  60. package/dist/builtins/pluginExecute.js +41 -70
  61. package/dist/builtins/pluginExecute.js.map +1 -1
  62. package/dist/builtins/pluginSelector.d.ts +15 -0
  63. package/dist/builtins/pluginSelector.js +21 -0
  64. package/dist/builtins/pluginSelector.js.map +1 -0
  65. package/dist/builtins/proc.js +106 -4
  66. package/dist/builtins/proc.js.map +1 -1
  67. package/dist/builtins/res/compute.js +8 -3
  68. package/dist/builtins/res/compute.js.map +1 -1
  69. package/dist/builtins/res/group.d.ts +1 -1
  70. package/dist/builtins/res/group.js +122 -5
  71. package/dist/builtins/res/group.js.map +1 -1
  72. package/dist/builtins/res/pipeline.args.d.ts +4 -0
  73. package/dist/builtins/res/pipeline.args.js +63 -12
  74. package/dist/builtins/res/pipeline.args.js.map +1 -1
  75. package/dist/builtins/res/pipeline.d.ts +3 -1
  76. package/dist/builtins/res/pipeline.js +155 -60
  77. package/dist/builtins/res/pipeline.js.map +1 -1
  78. package/dist/builtins/res/pipeline.manifest.d.ts +15 -0
  79. package/dist/builtins/res/pipeline.manifest.js +93 -0
  80. package/dist/builtins/res/pipeline.manifest.js.map +1 -0
  81. package/dist/builtins/res/plugin.js +14 -7
  82. package/dist/builtins/res/plugin.js.map +1 -1
  83. package/dist/builtins/res/user.d.ts +8 -0
  84. package/dist/builtins/res/user.js +87 -0
  85. package/dist/builtins/res/user.js.map +1 -0
  86. package/dist/builtins/store.js +24 -3
  87. package/dist/builtins/store.js.map +1 -1
  88. package/dist/builtins/sys/fortune.d.ts +9 -0
  89. package/dist/builtins/sys/fortune.js +16 -1
  90. package/dist/builtins/sys/fortune.js.map +1 -1
  91. package/dist/builtins/sys/whoami.d.ts +13 -1
  92. package/dist/builtins/sys/whoami.js +47 -2
  93. package/dist/builtins/sys/whoami.js.map +1 -1
  94. package/dist/builtins/utils.d.ts +14 -1
  95. package/dist/builtins/utils.js +13 -3
  96. package/dist/builtins/utils.js.map +1 -1
  97. package/dist/builtins/wildcard.d.ts +31 -0
  98. package/dist/builtins/wildcard.js +112 -50
  99. package/dist/builtins/wildcard.js.map +1 -1
  100. package/dist/command-keys.js +2 -1
  101. package/dist/command-keys.js.map +1 -1
  102. package/dist/core/cancellation.d.ts +28 -0
  103. package/dist/core/cancellation.js +70 -0
  104. package/dist/core/cancellation.js.map +1 -0
  105. package/dist/core/dispatch.d.ts +1 -8
  106. package/dist/core/dispatch.js +82 -82
  107. package/dist/core/dispatch.js.map +1 -1
  108. package/dist/core/elevation.d.ts +35 -0
  109. package/dist/core/elevation.js +77 -0
  110. package/dist/core/elevation.js.map +1 -0
  111. package/dist/core/engine.d.ts +12 -0
  112. package/dist/core/engine.js +35 -8
  113. package/dist/core/engine.js.map +1 -1
  114. package/dist/core/preprocess.d.ts +11 -4
  115. package/dist/core/preprocess.js +43 -10
  116. package/dist/core/preprocess.js.map +1 -1
  117. package/dist/core/progress.d.ts +15 -5
  118. package/dist/core/progress.js +14 -0
  119. package/dist/core/progress.js.map +1 -1
  120. package/dist/core/promptContext.d.ts +3 -5
  121. package/dist/core/promptContext.js +9 -2
  122. package/dist/core/promptContext.js.map +1 -1
  123. package/dist/core/sink.d.ts +9 -0
  124. package/dist/core/sink.js +23 -3
  125. package/dist/core/sink.js.map +1 -1
  126. package/dist/core/surface.d.ts +14 -0
  127. package/dist/core/surface.js +5 -0
  128. package/dist/core/surface.js.map +1 -1
  129. package/dist/core/version.d.ts +34 -0
  130. package/dist/core/version.js +51 -0
  131. package/dist/core/version.js.map +1 -1
  132. package/dist/index.d.ts +1 -0
  133. package/dist/index.js +1 -0
  134. package/dist/index.js.map +1 -1
  135. package/dist/lib/completer/index.js +39 -1
  136. package/dist/lib/completer/index.js.map +1 -1
  137. package/dist/lib/parser.d.ts +75 -2
  138. package/dist/lib/parser.js +158 -15
  139. package/dist/lib/parser.js.map +1 -1
  140. package/dist/lib/vfs/providers/binEntry.d.ts +20 -0
  141. package/dist/lib/vfs/providers/binEntry.js +47 -0
  142. package/dist/lib/vfs/providers/binEntry.js.map +1 -0
  143. package/dist/lib/vfs/providers/static.js +1 -0
  144. package/dist/lib/vfs/providers/static.js.map +1 -1
  145. package/dist/lib/vfs/providers/static_content.js +5 -36
  146. package/dist/lib/vfs/providers/static_content.js.map +1 -1
  147. package/dist/lib/vfs/vfs.d.ts +7 -0
  148. package/dist/lib/vfs/vfs.js +25 -0
  149. package/dist/lib/vfs/vfs.js.map +1 -1
  150. package/dist/session/index.d.ts +18 -0
  151. package/dist/session/index.js +29 -1
  152. package/dist/session/index.js.map +1 -1
  153. package/package.json +10 -5
@@ -1,100 +1,176 @@
1
1
  /**
2
- * @file Builtin cat command.
3
- * Displays file contents, reported as a command envelope.
2
+ * @file Text and binary implementation of the `cat` builtin.
3
+ *
4
+ * Reads ChRIS files through ChILI, streams binary bytes through the active
5
+ * output sink, and returns text in command envelopes. Text highlighting uses
6
+ * cli-highlight with a forced-color theme only after argument/TTY policy has
7
+ * allowed ANSI; ordinary pipe and redirect sinks strip ANSI downstream.
8
+ *
9
+ * @module
4
10
  */
11
+ import * as path from 'path';
5
12
  import chalk from 'chalk';
6
- import { path_resolve, error_stripDebugPrefix } from '../utils.js';
13
+ import { highlight, supportsLanguage } from 'cli-highlight';
7
14
  import { files_cat as chefs_cat_cmd, files_catBinary as chefs_catBinary_cmd } from '@fnndsc/chili/commands/fs/cat.js';
8
15
  import { cat_render } from '@fnndsc/chili/views/fs.js';
9
16
  import { errorStack, envelope_ok, envelope_error } from '@fnndsc/cumin';
17
+ import { path_resolve, error_stripDebugPrefix } from '../utils.js';
10
18
  import { sink_get } from '../../core/sink.js';
11
- import * as path from 'path';
12
- /** File extensions that receive syntax highlighting. */
13
- const HIGHLIGHT_EXTENSIONS = new Set(['.json', '.yaml', '.yml']);
14
- /**
15
- * Applies chalk-based syntax highlighting to JSON content.
16
- * Returns the original string if the content is not valid JSON.
17
- *
18
- * @param content - Raw JSON string.
19
- * @returns Highlighted string, or original on parse failure.
20
- */
21
- function json_highlight(content) {
22
- try {
23
- JSON.parse(content);
24
- }
25
- catch {
26
- return content;
27
- }
28
- return content.replace(/("(?:\\u[0-9a-fA-F]{4}|\\[^u]|[^\\"])*"(\s*:)?|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)/g, (match) => {
29
- if (match.endsWith(':'))
30
- return chalk.cyan(match); // key
31
- if (match.startsWith('"'))
32
- return chalk.green(match); // string value
33
- if (match === 'true' || match === 'false')
34
- return chalk.yellow(match);
35
- if (match === 'null')
36
- return chalk.gray(match);
37
- return chalk.magenta(match); // number
38
- });
39
- }
40
- /**
41
- * Applies chalk-based syntax highlighting to YAML content line by line.
42
- *
43
- * @param content - Raw YAML string.
44
- * @returns Highlighted string.
45
- */
46
- function yaml_highlight(content) {
47
- return content.split('\n').map((line) => {
48
- if (/^\s*#/.test(line))
49
- return chalk.gray(line);
50
- const kv = line.match(/^(\s*)([\w./-]+)(\s*:\s*)(.*)/);
51
- if (kv) {
52
- const [, indent, key, sep, value] = kv;
53
- const coloredValue = value_yamlColor(value);
54
- return `${indent}${chalk.cyan(key)}${chalk.gray(sep)}${coloredValue}`;
55
- }
56
- const listItem = line.match(/^(\s*-\s+)(.*)/);
57
- if (listItem) {
58
- return `${chalk.gray(listItem[1])}${chalk.green(listItem[2])}`;
59
- }
60
- return line;
61
- }).join('\n');
62
- }
19
+ import { CAT_USAGE, catArguments_parse, } from './cat.args.js';
20
+ /** Delay before a slow group projection becomes visible as progress. */
21
+ const GROUP_PROGRESS_DELAY_MS = 300;
22
+ /** User-facing status shown while CUBE group memberships are hydrated. */
23
+ const GROUP_PROGRESS_LABEL = 'Resolving /etc/group memberships…';
24
+ /** cli-highlight language names inferred for commonly viewed text formats. */
25
+ const SOURCE_LANGUAGE_BY_EXTENSION = {
26
+ '.bash': 'bash',
27
+ '.c': 'c',
28
+ '.cc': 'cpp',
29
+ '.cfg': 'ini',
30
+ '.cjs': 'javascript',
31
+ '.conf': 'ini',
32
+ '.cpp': 'cpp',
33
+ '.css': 'css',
34
+ '.cts': 'typescript',
35
+ '.cxx': 'cpp',
36
+ '.diff': 'diff',
37
+ '.dockerfile': 'dockerfile',
38
+ '.go': 'go',
39
+ '.h': 'c',
40
+ '.hh': 'cpp',
41
+ '.hpp': 'cpp',
42
+ '.htm': 'xml',
43
+ '.html': 'xml',
44
+ '.hxx': 'cpp',
45
+ '.ini': 'ini',
46
+ '.java': 'java',
47
+ '.js': 'javascript',
48
+ '.json': 'json',
49
+ '.jsonc': 'json',
50
+ '.jsx': 'jsx',
51
+ '.kt': 'kotlin',
52
+ '.kts': 'kotlin',
53
+ '.less': 'less',
54
+ '.lua': 'lua',
55
+ '.markdown': 'markdown',
56
+ '.md': 'markdown',
57
+ '.mjs': 'javascript',
58
+ '.mts': 'typescript',
59
+ '.patch': 'diff',
60
+ '.php': 'php',
61
+ '.pl': 'perl',
62
+ '.pm': 'perl',
63
+ '.proto': 'protobuf',
64
+ '.py': 'python',
65
+ '.pyw': 'python',
66
+ '.r': 'r',
67
+ '.rb': 'ruby',
68
+ '.rs': 'rust',
69
+ '.sass': 'scss',
70
+ '.scss': 'scss',
71
+ '.sh': 'bash',
72
+ '.sql': 'sql',
73
+ '.svg': 'xml',
74
+ '.swift': 'swift',
75
+ '.toml': 'toml',
76
+ '.ts': 'typescript',
77
+ '.tsx': 'tsx',
78
+ '.xml': 'xml',
79
+ '.yaml': 'yaml',
80
+ '.yml': 'yaml',
81
+ '.zsh': 'bash',
82
+ };
83
+ /** cli-highlight language names inferred from conventional extensionless files. */
84
+ const SOURCE_LANGUAGE_BY_BASENAME = {
85
+ '.env': 'ini',
86
+ 'dockerfile': 'dockerfile',
87
+ 'gnumakefile': 'makefile',
88
+ 'makefile': 'makefile',
89
+ };
90
+ /** Forced-color palette used only after terminal/highlight policy allows ANSI. */
91
+ const HIGHLIGHT_COLOR = new chalk.Instance({ level: 3 });
92
+ /** High-contrast token palette shared by every highlighted language. */
93
+ const HIGHLIGHT_THEME = {
94
+ addition: HIGHLIGHT_COLOR.green,
95
+ attr: HIGHLIGHT_COLOR.yellow,
96
+ attribute: HIGHLIGHT_COLOR.cyan,
97
+ built_in: HIGHLIGHT_COLOR.cyanBright,
98
+ bullet: HIGHLIGHT_COLOR.yellow,
99
+ class: HIGHLIGHT_COLOR.blueBright,
100
+ code: HIGHLIGHT_COLOR.green,
101
+ comment: HIGHLIGHT_COLOR.gray,
102
+ deletion: HIGHLIGHT_COLOR.redBright,
103
+ doctag: HIGHLIGHT_COLOR.gray,
104
+ emphasis: HIGHLIGHT_COLOR.italic,
105
+ function: HIGHLIGHT_COLOR.yellowBright,
106
+ keyword: HIGHLIGHT_COLOR.blueBright,
107
+ link: HIGHLIGHT_COLOR.blueBright.underline,
108
+ literal: HIGHLIGHT_COLOR.yellowBright,
109
+ meta: HIGHLIGHT_COLOR.magenta,
110
+ 'meta-keyword': HIGHLIGHT_COLOR.magentaBright,
111
+ 'meta-string': HIGHLIGHT_COLOR.green,
112
+ name: HIGHLIGHT_COLOR.cyanBright,
113
+ number: HIGHLIGHT_COLOR.magentaBright,
114
+ params: HIGHLIGHT_COLOR.white,
115
+ quote: HIGHLIGHT_COLOR.gray,
116
+ regexp: HIGHLIGHT_COLOR.redBright,
117
+ section: HIGHLIGHT_COLOR.magentaBright.bold,
118
+ 'selector-attr': HIGHLIGHT_COLOR.green,
119
+ 'selector-class': HIGHLIGHT_COLOR.yellow,
120
+ 'selector-id': HIGHLIGHT_COLOR.magentaBright,
121
+ 'selector-pseudo': HIGHLIGHT_COLOR.blueBright,
122
+ 'selector-tag': HIGHLIGHT_COLOR.cyan,
123
+ string: HIGHLIGHT_COLOR.green,
124
+ strong: HIGHLIGHT_COLOR.bold,
125
+ subst: HIGHLIGHT_COLOR.cyan,
126
+ symbol: HIGHLIGHT_COLOR.magentaBright,
127
+ tag: HIGHLIGHT_COLOR.blueBright,
128
+ 'template-tag': HIGHLIGHT_COLOR.magenta,
129
+ 'template-variable': HIGHLIGHT_COLOR.cyan,
130
+ title: HIGHLIGHT_COLOR.cyanBright,
131
+ type: HIGHLIGHT_COLOR.cyan,
132
+ variable: HIGHLIGHT_COLOR.cyanBright,
133
+ };
63
134
  /**
64
- * Colors a scalar YAML value based on its type.
135
+ * Infers a syntax grammar from a file extension or conventional basename.
65
136
  *
66
- * @param value - The raw value string from a YAML key: value line.
67
- * @returns Chalk-colored value string.
137
+ * @param filePath - Resolved source path.
138
+ * @returns cli-highlight language name, or undefined for an unknown format.
68
139
  */
69
- function value_yamlColor(value) {
70
- if (!value)
71
- return value;
72
- if (value === 'true' || value === 'false')
73
- return chalk.yellow(value);
74
- if (value === 'null' || value === '~')
75
- return chalk.gray(value);
76
- if (/^-?\d+(\.\d+)?$/.test(value))
77
- return chalk.magenta(value);
78
- if (/^["']/.test(value))
79
- return chalk.green(value);
80
- return chalk.white(value);
140
+ function sourceLanguage_get(filePath) {
141
+ const basename = path.basename(filePath).toLowerCase();
142
+ return SOURCE_LANGUAGE_BY_BASENAME[basename]
143
+ ?? SOURCE_LANGUAGE_BY_EXTENSION[path.extname(basename).toLowerCase()];
81
144
  }
82
145
  /**
83
- * Applies syntax highlighting to text content based on file extension.
84
- * Returns the original string unchanged when stdout is not a TTY (piping).
146
+ * Applies syntax highlighting according to explicit flags, filename inference,
147
+ * and terminal detection.
85
148
  *
86
149
  * @param content - File content string.
87
150
  * @param filePath - Full path used to determine the file type.
151
+ * @param mode - Automatic terminal policy, forced highlighting, or disabled highlighting.
152
+ * @param language - Explicit language that forces highlighting when provided.
88
153
  * @returns Highlighted or original content.
89
154
  */
90
- function content_highlight(content, filePath) {
91
- if (!process.stdout.isTTY)
155
+ function content_highlight(content, filePath, mode, language) {
156
+ if (mode === 'never')
92
157
  return content;
93
- const ext = path.extname(filePath).toLowerCase();
94
- if (ext === '.json')
95
- return json_highlight(content);
96
- if (ext === '.yaml' || ext === '.yml')
97
- return yaml_highlight(content);
158
+ if (language) {
159
+ return highlight(content, { language, ignoreIllegals: true, theme: HIGHLIGHT_THEME });
160
+ }
161
+ if (mode === 'auto' && !process.stdout.isTTY)
162
+ return content;
163
+ const sourceLanguage = sourceLanguage_get(filePath);
164
+ if (sourceLanguage) {
165
+ return highlight(content, {
166
+ language: sourceLanguage,
167
+ ignoreIllegals: true,
168
+ theme: HIGHLIGHT_THEME,
169
+ });
170
+ }
171
+ if (mode === 'always') {
172
+ return highlight(content, { ignoreIllegals: true, theme: HIGHLIGHT_THEME });
173
+ }
98
174
  return content;
99
175
  }
100
176
  /**
@@ -118,53 +194,98 @@ function extension_isBinary(filePath) {
118
194
  const ext = path.extname(filePath).toLowerCase();
119
195
  return BINARY_EXTENSIONS.has(ext);
120
196
  }
197
+ /**
198
+ * Reads one text target, adding delayed semantic progress for `/etc/group`.
199
+ *
200
+ * Fast cache hits complete before the delay. Inspection progress is ephemeral,
201
+ * so pipe and redirect sinks drop it while interactive surfaces show a spinner.
202
+ *
203
+ * @param target - Resolved VFS path.
204
+ * @returns Text content or the original read failure.
205
+ */
206
+ async function textFile_read(target) {
207
+ if (target !== '/etc/group')
208
+ return chefs_cat_cmd(target);
209
+ let progressStarted = false;
210
+ let progressFailed = false;
211
+ const progressTimer = setTimeout(() => {
212
+ progressStarted = true;
213
+ sink_get().progress_write({
214
+ operation: 'group',
215
+ kind: 'inspection',
216
+ phase: 'reading',
217
+ label: GROUP_PROGRESS_LABEL,
218
+ status: 'running',
219
+ });
220
+ }, GROUP_PROGRESS_DELAY_MS);
221
+ try {
222
+ const result = await chefs_cat_cmd(target);
223
+ progressFailed = !result.ok;
224
+ return result;
225
+ }
226
+ catch (error) {
227
+ progressFailed = true;
228
+ throw error;
229
+ }
230
+ finally {
231
+ clearTimeout(progressTimer);
232
+ if (progressStarted) {
233
+ sink_get().progress_write({
234
+ operation: 'group',
235
+ kind: 'inspection',
236
+ phase: progressFailed ? 'failed' : 'complete',
237
+ label: GROUP_PROGRESS_LABEL,
238
+ status: progressFailed ? 'error' : 'done',
239
+ });
240
+ }
241
+ }
242
+ }
121
243
  /**
122
244
  * Displays the content of one or more files.
123
245
  *
124
246
  * Supports multiple files and concatenates their output. Binary mode is applied
125
- * consistently to all files if any file is detected as binary or --binary is specified.
247
+ * per recognized file, or consistently to all files when `--binary` is specified.
126
248
  * Text content and errors are buffered into the envelope; binary content streams
127
249
  * to the terminal directly with backpressure (raw bytes are not envelope text),
128
250
  * and the binary auto-detection notice is emitted live on the err channel so it
129
251
  * precedes the bytes it describes.
130
252
  *
131
- * @param args - Command line arguments (file paths and optional --binary flag).
253
+ * @param args - File paths plus optional binary/highlight flags.
132
254
  * @returns An envelope whose rendered text carries the (highlighted) file
133
255
  * contents and whose model lists per-file outcomes.
134
256
  */
135
257
  export async function builtin_cat(args) {
136
- let binaryMode = false;
137
- const filePaths = [];
138
- for (const arg of args) {
139
- if (arg === '--binary') {
140
- binaryMode = true;
141
- }
142
- else {
143
- filePaths.push(arg);
144
- }
258
+ const parsed = catArguments_parse(args);
259
+ if (parsed.filePaths.length === 0) {
260
+ return envelope_error('', undefined, `${chalk.red(`Usage: ${CAT_USAGE}`)}\n`);
145
261
  }
146
- if (filePaths.length === 0) {
147
- return envelope_error('', undefined, `${chalk.red('Usage: cat [--binary] <file> [file...]')}\n`);
262
+ const targets = await Promise.all(parsed.filePaths.map(async (pathArg) => {
263
+ const target = await path_resolve(pathArg);
264
+ return { pathArg, target, isBinaryFile: extension_isBinary(target) };
265
+ }));
266
+ const hasTextTarget = !parsed.binaryMode
267
+ && targets.some((target) => !target.isBinaryFile);
268
+ if (hasTextTarget
269
+ && parsed.highlightLanguage !== undefined
270
+ && !supportsLanguage(parsed.highlightLanguage)) {
271
+ return envelope_error('', undefined, `${chalk.red(`cat: unknown highlight language '${parsed.highlightLanguage}'`)}\n`);
148
272
  }
149
273
  let rendered = '';
150
274
  let renderedErr = '';
151
275
  const outcomes = [];
152
276
  let anyFailed = false;
153
- for (let i = 0; i < filePaths.length; i++) {
154
- const pathArg = filePaths[i];
155
- const target = await path_resolve(pathArg);
156
- // Auto-detect binary files
157
- const isBinaryFile = extension_isBinary(target);
277
+ for (let i = 0; i < targets.length; i++) {
278
+ const { pathArg, target, isBinaryFile } = targets[i];
158
279
  // Inform user about auto-detection only if in interactive mode (stdout is TTY).
159
280
  // Emitted live (not buffered) so the notice precedes the raw bytes it announces.
160
281
  // Only show on first file to avoid spam.
161
- if (i === 0 && isBinaryFile && !binaryMode && process.stdout.isTTY) {
282
+ if (i === 0 && isBinaryFile && !parsed.binaryMode && process.stdout.isTTY) {
162
283
  sink_get().err_write(`${chalk.cyan(`Info: ${pathArg} detected as binary file (${path.extname(target)}), using binary mode.`)}\n`);
163
284
  sink_get().err_write(`${chalk.cyan('Tip: Use "cat --binary <file>" to explicitly request binary mode.')}\n`);
164
285
  sink_get().err_write('\n');
165
286
  }
166
287
  // Use binary mode if requested OR if file is detected as binary
167
- if (binaryMode || isBinaryFile) {
288
+ if (parsed.binaryMode || isBinaryFile) {
168
289
  const result = await chefs_catBinary_cmd(target);
169
290
  if (!result.ok) {
170
291
  const error = errorStack.stack_pop();
@@ -180,7 +301,7 @@ export async function builtin_cat(args) {
180
301
  outcomes.push({ path: pathArg, ok: true, binary: true, bytes: result.value.length });
181
302
  }
182
303
  else {
183
- const result = await chefs_cat_cmd(target);
304
+ const result = await textFile_read(target);
184
305
  if (!result.ok) {
185
306
  const error = errorStack.stack_pop();
186
307
  renderedErr += `${chalk.red(`cat: ${pathArg}: ${error ? error_stripDebugPrefix(error.message) : 'Unknown error'}`)}\n`;
@@ -189,7 +310,7 @@ export async function builtin_cat(args) {
189
310
  process.exitCode = 1;
190
311
  continue;
191
312
  }
192
- const highlighted = content_highlight(result.value, target);
313
+ const highlighted = content_highlight(result.value, target, parsed.highlightMode, parsed.highlightLanguage);
193
314
  rendered += `${cat_render(highlighted, pathArg)}\n`;
194
315
  outcomes.push({ path: pathArg, ok: true, binary: false });
195
316
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cat.js","sourceRoot":"","sources":["../../../src/builtins/fs/cat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cat.js","sourceRoot":"","sources":["../../../src/builtins/fs/cat.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  * Changes the current working directory, reported as a command envelope.
4
4
  */
5
5
  import chalk from 'chalk';
6
+ import path from 'path';
6
7
  import { session } from '../../session/index.js';
7
8
  import { path_resolve, path_resolveLinks, error_stripDebugPrefix } from '../utils.js';
8
9
  import { envelope_ok, envelope_error } from '@fnndsc/cumin';
@@ -67,12 +68,37 @@ function cdSuccess_envelope(newCwd, rendered) {
67
68
  */
68
69
  async function cdVirtual_handle(cleanPath, pathArg) {
69
70
  if (vfsPath_isStructural(cleanPath)) {
70
- await session.setCWD(cleanPath);
71
+ await session.directory_change(cleanPath);
71
72
  return cdSuccess_envelope(cleanPath, '');
72
73
  }
73
- // For deeper VFS paths (e.g. /net/pacs/queries/<id>), validate and cache the
74
- // result so a subsequent `ls` doesn't need to re-fetch.
74
+ // Resolve the target from its parent listing before asking the target provider
75
+ // to list its children. Some providers deliberately return a containing-node
76
+ // listing for virtual files such as /proc/.../status; a successful list alone
77
+ // therefore does not establish that `cleanPath` is navigable.
75
78
  const { vfsDispatcher } = await import('@fnndsc/salsa');
79
+ const parentPath = path.posix.dirname(cleanPath);
80
+ const entryName = path.posix.basename(cleanPath);
81
+ const parentResult = await vfsDispatcher.list(parentPath);
82
+ const entry = parentResult.ok
83
+ ? parentResult.value.find((item) => item.name === entryName)
84
+ : undefined;
85
+ if (entry?.type === 'link') {
86
+ let target = entry.target;
87
+ if (!target) {
88
+ const linkResult = await vfsDispatcher.linkTarget_resolve(cleanPath);
89
+ if (linkResult.ok)
90
+ target = linkResult.value;
91
+ }
92
+ if (!target) {
93
+ return envelope_error('', undefined, `${chalk.red(`cd: ${pathArg}: No such file or directory`)}\n`);
94
+ }
95
+ return cdReal_handle(target, pathArg);
96
+ }
97
+ if (entry && !['dir', 'job', 'vfs'].includes(entry.type)) {
98
+ return envelope_error('', undefined, `${chalk.red(`cd: ${pathArg}: Not a directory`)}\n`);
99
+ }
100
+ // A directory-like VFS entry still asks its provider to enumerate children,
101
+ // both as final validation and to prime a subsequent `ls`.
76
102
  const listResult = await vfsDispatcher.list(cleanPath);
77
103
  if (!listResult.ok) {
78
104
  const { errorStack } = await import('@fnndsc/cumin');
@@ -82,7 +108,7 @@ async function cdVirtual_handle(cleanPath, pathArg) {
82
108
  }
83
109
  const { listCache_get } = await import('@fnndsc/cumin');
84
110
  listCache_get().cache_set(cleanPath, listResult.value);
85
- await session.setCWD(cleanPath);
111
+ await session.directory_change(cleanPath);
86
112
  return cdSuccess_envelope(cleanPath, '');
87
113
  }
88
114
  /**
@@ -131,7 +157,7 @@ async function cdReal_handle(logicalPath, pathArg) {
131
157
  try {
132
158
  const folder = (await client.getFileBrowserFolderByPath(validationPath));
133
159
  if (folder_verifyPathMatch(folder, validationPath)) {
134
- await session.setCWD(cwdPath);
160
+ await session.directory_change(cwdPath);
135
161
  return cdSuccess_envelope(cwdPath, rendered);
136
162
  }
137
163
  let renderedErr = `${chalk.red(`cd: ${pathArg}: No such file or directory`)}\n`;
@@ -169,6 +195,16 @@ export async function builtin_cd(args) {
169
195
  if (!pathArg) {
170
196
  return builtin_cd(['~']);
171
197
  }
198
+ if (pathArg === '-') {
199
+ const previousCWD = session.previousCWD_get();
200
+ if (!previousCWD) {
201
+ return envelope_error('', undefined, `${chalk.red('cd: OLDPWD not set')}\n`);
202
+ }
203
+ const result = await builtin_cd([previousCWD]);
204
+ return result.status === 'ok'
205
+ ? { ...result, rendered: `${previousCWD}\n${result.rendered}` }
206
+ : result;
207
+ }
172
208
  try {
173
209
  const logicalPath = await path_resolve(pathArg);
174
210
  const { vfsDispatcher } = await import('@fnndsc/salsa');
@@ -1 +1 @@
1
- {"version":3,"file":"cd.js","sourceRoot":"","sources":["../../../src/builtins/fs/cd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cd.js","sourceRoot":"","sources":["../../../src/builtins/fs/cd.ts"],"names":[],"mappings":"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"}
@@ -62,8 +62,9 @@ export async function builtin_cp(args) {
62
62
  failCount++;
63
63
  }
64
64
  }
65
- // Invalidate destination directory (always, since files copied into it)
66
- listCache.cache_invalidate(destPath);
65
+ // Invalidate the destination subtree (a recursive copy replaces whatever
66
+ // listings were cached beneath it) and its parent.
67
+ listCache.cache_invalidateTree(destPath);
67
68
  const destParent = path.posix.dirname(destPath);
68
69
  listCache.cache_invalidate(destParent);
69
70
  // Summary for multiple files
@@ -1 +1 @@
1
- {"version":3,"file":"cp.js","sourceRoot":"","sources":["../../../src/builtins/fs/cp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cp.js","sourceRoot":"","sources":["../../../src/builtins/fs/cp.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { type CommandEnvelope } from '@fnndsc/cumin';
2
2
  /**
3
3
  * Downloads a remote ChRIS file or directory to the local filesystem.
4
4
  *
5
- * @param args - [remotePath, localPath] plus optional -f/--force to overwrite.
5
+ * @param args - [remotePathOrGlob, localPath] plus optional -f/--force to overwrite.
6
6
  * @returns An envelope carrying the download summary.
7
7
  */
8
8
  export declare function builtin_download(args: string[]): Promise<CommandEnvelope>;