@fnndsc/chell 4.2.8

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 (231) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +325 -0
  3. package/dist/builtins/debug.d.ts +6 -0
  4. package/dist/builtins/debug.js +47 -0
  5. package/dist/builtins/debug.js.map +1 -0
  6. package/dist/builtins/executable.d.ts +22 -0
  7. package/dist/builtins/executable.js +115 -0
  8. package/dist/builtins/executable.js.map +1 -0
  9. package/dist/builtins/fs/cat.d.ts +16 -0
  10. package/dist/builtins/fs/cat.js +249 -0
  11. package/dist/builtins/fs/cat.js.map +1 -0
  12. package/dist/builtins/fs/cd.d.ts +41 -0
  13. package/dist/builtins/fs/cd.js +178 -0
  14. package/dist/builtins/fs/cd.js.map +1 -0
  15. package/dist/builtins/fs/cp.d.ts +7 -0
  16. package/dist/builtins/fs/cp.js +73 -0
  17. package/dist/builtins/fs/cp.js.map +1 -0
  18. package/dist/builtins/fs/download.d.ts +6 -0
  19. package/dist/builtins/fs/download.js +41 -0
  20. package/dist/builtins/fs/download.js.map +1 -0
  21. package/dist/builtins/fs/du.d.ts +58 -0
  22. package/dist/builtins/fs/du.js +210 -0
  23. package/dist/builtins/fs/du.js.map +1 -0
  24. package/dist/builtins/fs/edit.d.ts +7 -0
  25. package/dist/builtins/fs/edit.js +86 -0
  26. package/dist/builtins/fs/edit.js.map +1 -0
  27. package/dist/builtins/fs/ls.d.ts +8 -0
  28. package/dist/builtins/fs/ls.js +68 -0
  29. package/dist/builtins/fs/ls.js.map +1 -0
  30. package/dist/builtins/fs/mkdir.d.ts +6 -0
  31. package/dist/builtins/fs/mkdir.js +38 -0
  32. package/dist/builtins/fs/mkdir.js.map +1 -0
  33. package/dist/builtins/fs/mv.d.ts +7 -0
  34. package/dist/builtins/fs/mv.js +75 -0
  35. package/dist/builtins/fs/mv.js.map +1 -0
  36. package/dist/builtins/fs/pull.args.d.ts +22 -0
  37. package/dist/builtins/fs/pull.args.js +30 -0
  38. package/dist/builtins/fs/pull.args.js.map +1 -0
  39. package/dist/builtins/fs/pull.d.ts +26 -0
  40. package/dist/builtins/fs/pull.js +413 -0
  41. package/dist/builtins/fs/pull.js.map +1 -0
  42. package/dist/builtins/fs/pwd.d.ts +7 -0
  43. package/dist/builtins/fs/pwd.js +75 -0
  44. package/dist/builtins/fs/pwd.js.map +1 -0
  45. package/dist/builtins/fs/rm.d.ts +31 -0
  46. package/dist/builtins/fs/rm.js +148 -0
  47. package/dist/builtins/fs/rm.js.map +1 -0
  48. package/dist/builtins/fs/touch.d.ts +6 -0
  49. package/dist/builtins/fs/touch.js +64 -0
  50. package/dist/builtins/fs/touch.js.map +1 -0
  51. package/dist/builtins/fs/tree.d.ts +15 -0
  52. package/dist/builtins/fs/tree.js +84 -0
  53. package/dist/builtins/fs/tree.js.map +1 -0
  54. package/dist/builtins/fs/upload.d.ts +6 -0
  55. package/dist/builtins/fs/upload.js +45 -0
  56. package/dist/builtins/fs/upload.js.map +1 -0
  57. package/dist/builtins/help.d.ts +74 -0
  58. package/dist/builtins/help.js +1217 -0
  59. package/dist/builtins/help.js.map +1 -0
  60. package/dist/builtins/index.d.ts +45 -0
  61. package/dist/builtins/index.js +45 -0
  62. package/dist/builtins/index.js.map +1 -0
  63. package/dist/builtins/net/connect.d.ts +7 -0
  64. package/dist/builtins/net/connect.js +42 -0
  65. package/dist/builtins/net/connect.js.map +1 -0
  66. package/dist/builtins/net/cubepath.d.ts +18 -0
  67. package/dist/builtins/net/cubepath.js +102 -0
  68. package/dist/builtins/net/cubepath.js.map +1 -0
  69. package/dist/builtins/net/logout.d.ts +6 -0
  70. package/dist/builtins/net/logout.js +24 -0
  71. package/dist/builtins/net/logout.js.map +1 -0
  72. package/dist/builtins/net/pacs.d.ts +24 -0
  73. package/dist/builtins/net/pacs.js +121 -0
  74. package/dist/builtins/net/pacs.js.map +1 -0
  75. package/dist/builtins/net/pacsUtils.d.ts +85 -0
  76. package/dist/builtins/net/pacsUtils.js +184 -0
  77. package/dist/builtins/net/pacsUtils.js.map +1 -0
  78. package/dist/builtins/net/query.d.ts +60 -0
  79. package/dist/builtins/net/query.js +304 -0
  80. package/dist/builtins/net/query.js.map +1 -0
  81. package/dist/builtins/parametersofplugin.d.ts +13 -0
  82. package/dist/builtins/parametersofplugin.js +43 -0
  83. package/dist/builtins/parametersofplugin.js.map +1 -0
  84. package/dist/builtins/pluginExecute.d.ts +27 -0
  85. package/dist/builtins/pluginExecute.js +165 -0
  86. package/dist/builtins/pluginExecute.js.map +1 -0
  87. package/dist/builtins/proc.d.ts +6 -0
  88. package/dist/builtins/proc.helpers.d.ts +68 -0
  89. package/dist/builtins/proc.helpers.js +102 -0
  90. package/dist/builtins/proc.helpers.js.map +1 -0
  91. package/dist/builtins/proc.js +289 -0
  92. package/dist/builtins/proc.js.map +1 -0
  93. package/dist/builtins/res/compute.d.ts +6 -0
  94. package/dist/builtins/res/compute.js +55 -0
  95. package/dist/builtins/res/compute.js.map +1 -0
  96. package/dist/builtins/res/feed.d.ts +6 -0
  97. package/dist/builtins/res/feed.js +244 -0
  98. package/dist/builtins/res/feed.js.map +1 -0
  99. package/dist/builtins/res/feed.notes.d.ts +28 -0
  100. package/dist/builtins/res/feed.notes.js +24 -0
  101. package/dist/builtins/res/feed.notes.js.map +1 -0
  102. package/dist/builtins/res/files.d.ts +18 -0
  103. package/dist/builtins/res/files.js +85 -0
  104. package/dist/builtins/res/files.js.map +1 -0
  105. package/dist/builtins/res/group.d.ts +6 -0
  106. package/dist/builtins/res/group.js +54 -0
  107. package/dist/builtins/res/group.js.map +1 -0
  108. package/dist/builtins/res/pipeline.args.d.ts +22 -0
  109. package/dist/builtins/res/pipeline.args.js +28 -0
  110. package/dist/builtins/res/pipeline.args.js.map +1 -0
  111. package/dist/builtins/res/pipeline.d.ts +20 -0
  112. package/dist/builtins/res/pipeline.js +252 -0
  113. package/dist/builtins/res/pipeline.js.map +1 -0
  114. package/dist/builtins/res/plugin.d.ts +13 -0
  115. package/dist/builtins/res/plugin.js +140 -0
  116. package/dist/builtins/res/plugin.js.map +1 -0
  117. package/dist/builtins/res/plugininstance.d.ts +6 -0
  118. package/dist/builtins/res/plugininstance.js +53 -0
  119. package/dist/builtins/res/plugininstance.js.map +1 -0
  120. package/dist/builtins/res/pluginmeta.d.ts +6 -0
  121. package/dist/builtins/res/pluginmeta.js +53 -0
  122. package/dist/builtins/res/pluginmeta.js.map +1 -0
  123. package/dist/builtins/res/tag.d.ts +6 -0
  124. package/dist/builtins/res/tag.js +53 -0
  125. package/dist/builtins/res/tag.js.map +1 -0
  126. package/dist/builtins/res/workflow.d.ts +6 -0
  127. package/dist/builtins/res/workflow.js +53 -0
  128. package/dist/builtins/res/workflow.js.map +1 -0
  129. package/dist/builtins/store.d.ts +6 -0
  130. package/dist/builtins/store.js +108 -0
  131. package/dist/builtins/store.js.map +1 -0
  132. package/dist/builtins/sys/context.d.ts +6 -0
  133. package/dist/builtins/sys/context.js +50 -0
  134. package/dist/builtins/sys/context.js.map +1 -0
  135. package/dist/builtins/sys/physicalmode.d.ts +6 -0
  136. package/dist/builtins/sys/physicalmode.js +41 -0
  137. package/dist/builtins/sys/physicalmode.js.map +1 -0
  138. package/dist/builtins/sys/prompt.d.ts +13 -0
  139. package/dist/builtins/sys/prompt.helpers.d.ts +31 -0
  140. package/dist/builtins/sys/prompt.helpers.js +36 -0
  141. package/dist/builtins/sys/prompt.helpers.js.map +1 -0
  142. package/dist/builtins/sys/prompt.js +182 -0
  143. package/dist/builtins/sys/prompt.js.map +1 -0
  144. package/dist/builtins/sys/timing.d.ts +6 -0
  145. package/dist/builtins/sys/timing.js +41 -0
  146. package/dist/builtins/sys/timing.js.map +1 -0
  147. package/dist/builtins/sys/whoami.d.ts +12 -0
  148. package/dist/builtins/sys/whoami.js +37 -0
  149. package/dist/builtins/sys/whoami.js.map +1 -0
  150. package/dist/builtins/utils.d.ts +55 -0
  151. package/dist/builtins/utils.js +145 -0
  152. package/dist/builtins/utils.js.map +1 -0
  153. package/dist/builtins/wildcard.d.ts +26 -0
  154. package/dist/builtins/wildcard.js +120 -0
  155. package/dist/builtins/wildcard.js.map +1 -0
  156. package/dist/chell.d.ts +16 -0
  157. package/dist/chell.js +1193 -0
  158. package/dist/chell.js.map +1 -0
  159. package/dist/command-keys.d.ts +8 -0
  160. package/dist/command-keys.js +32 -0
  161. package/dist/command-keys.js.map +1 -0
  162. package/dist/config/settings.d.ts +39 -0
  163. package/dist/config/settings.js +93 -0
  164. package/dist/config/settings.js.map +1 -0
  165. package/dist/core/bootFlags.d.ts +32 -0
  166. package/dist/core/bootFlags.js +25 -0
  167. package/dist/core/bootFlags.js.map +1 -0
  168. package/dist/core/cli.d.ts +58 -0
  169. package/dist/core/cli.js +251 -0
  170. package/dist/core/cli.js.map +1 -0
  171. package/dist/core/prompt/index.d.ts +80 -0
  172. package/dist/core/prompt/index.js +29 -0
  173. package/dist/core/prompt/index.js.map +1 -0
  174. package/dist/core/prompt/theme_default.d.ts +19 -0
  175. package/dist/core/prompt/theme_default.js +47 -0
  176. package/dist/core/prompt/theme_default.js.map +1 -0
  177. package/dist/core/prompt/theme_p10k.d.ts +22 -0
  178. package/dist/core/prompt/theme_p10k.js +164 -0
  179. package/dist/core/prompt/theme_p10k.js.map +1 -0
  180. package/dist/core/prompt/utils.d.ts +23 -0
  181. package/dist/core/prompt/utils.js +40 -0
  182. package/dist/core/prompt/utils.js.map +1 -0
  183. package/dist/core/question.d.ts +34 -0
  184. package/dist/core/question.js +76 -0
  185. package/dist/core/question.js.map +1 -0
  186. package/dist/core/repl.d.ts +31 -0
  187. package/dist/core/repl.js +146 -0
  188. package/dist/core/repl.js.map +1 -0
  189. package/dist/index.d.ts +7 -0
  190. package/dist/index.js +34 -0
  191. package/dist/index.js.map +1 -0
  192. package/dist/lib/bootsequence.d.ts +62 -0
  193. package/dist/lib/bootsequence.js +222 -0
  194. package/dist/lib/bootsequence.js.map +1 -0
  195. package/dist/lib/completer/index.d.ts +15 -0
  196. package/dist/lib/completer/index.js +212 -0
  197. package/dist/lib/completer/index.js.map +1 -0
  198. package/dist/lib/completer/pathComplete.helpers.d.ts +22 -0
  199. package/dist/lib/completer/pathComplete.helpers.js +49 -0
  200. package/dist/lib/completer/pathComplete.helpers.js.map +1 -0
  201. package/dist/lib/logo.d.ts +47 -0
  202. package/dist/lib/logo.js +313 -0
  203. package/dist/lib/logo.js.map +1 -0
  204. package/dist/lib/parser.d.ts +13 -0
  205. package/dist/lib/parser.js +52 -0
  206. package/dist/lib/parser.js.map +1 -0
  207. package/dist/lib/pipe.d.ts +11 -0
  208. package/dist/lib/pipe.js +90 -0
  209. package/dist/lib/pipe.js.map +1 -0
  210. package/dist/lib/prefetch.d.ts +25 -0
  211. package/dist/lib/prefetch.js +64 -0
  212. package/dist/lib/prefetch.js.map +1 -0
  213. package/dist/lib/semicolonParser.d.ts +22 -0
  214. package/dist/lib/semicolonParser.js +53 -0
  215. package/dist/lib/semicolonParser.js.map +1 -0
  216. package/dist/lib/spinner.d.ts +23 -0
  217. package/dist/lib/spinner.js +68 -0
  218. package/dist/lib/spinner.js.map +1 -0
  219. package/dist/lib/vfs/providers/static.d.ts +65 -0
  220. package/dist/lib/vfs/providers/static.js +164 -0
  221. package/dist/lib/vfs/providers/static.js.map +1 -0
  222. package/dist/lib/vfs/providers/static_content.d.ts +27 -0
  223. package/dist/lib/vfs/providers/static_content.js +180 -0
  224. package/dist/lib/vfs/providers/static_content.js.map +1 -0
  225. package/dist/lib/vfs/vfs.d.ts +59 -0
  226. package/dist/lib/vfs/vfs.js +198 -0
  227. package/dist/lib/vfs/vfs.js.map +1 -0
  228. package/dist/session/index.d.ts +76 -0
  229. package/dist/session/index.js +120 -0
  230. package/dist/session/index.js.map +1 -0
  231. package/package.json +65 -0
@@ -0,0 +1,212 @@
1
+ /**
2
+ * @file REPL Autocompletion.
3
+ *
4
+ * Provides tab-completion logic for the REPL, including built-in commands
5
+ * and path completion.
6
+ *
7
+ * @module
8
+ */
9
+ import { session } from '../../session/index.js';
10
+ import { plugins_listAll, vfsDispatcher, context_getSingle } from '@fnndsc/salsa';
11
+ import { partialPath_split, completions_build } from './pathComplete.helpers.js';
12
+ import { listCache_get } from '@fnndsc/cumin';
13
+ import * as path from 'path';
14
+ import { builtinCommands_list } from '../../builtins/help.js';
15
+ import { args_tokenize } from '../parser.js';
16
+ function completionWord_get(line) {
17
+ let start = 0;
18
+ let quote = null;
19
+ let escapeNext = false;
20
+ for (let index = 0; index < line.length; index++) {
21
+ const char = line[index];
22
+ if (escapeNext) {
23
+ escapeNext = false;
24
+ continue;
25
+ }
26
+ if (char === '\\' && quote !== "'") {
27
+ escapeNext = true;
28
+ continue;
29
+ }
30
+ if ((char === "'" || char === '"') && (!quote || quote === char)) {
31
+ quote = quote ? null : char;
32
+ continue;
33
+ }
34
+ if (!quote && /\s/.test(char)) {
35
+ start = index + 1;
36
+ }
37
+ }
38
+ const raw = line.substring(start);
39
+ const tokens = args_tokenize(raw);
40
+ const value = tokens.length > 0 ? tokens[0] : '';
41
+ const openingQuote = raw.startsWith("'") ? "'" : raw.startsWith('"') ? '"' : null;
42
+ return { raw, value, quote: openingQuote };
43
+ }
44
+ function completion_format(completion, word) {
45
+ if (word.quote === "'") {
46
+ return `'${completion.replace(/'/g, `'\\''`)}`;
47
+ }
48
+ if (word.quote === '"') {
49
+ return `"${completion.replace(/(["\\])/g, '\\$1')}`;
50
+ }
51
+ return completion.replace(/([\\\s'"`])/g, '\\$1');
52
+ }
53
+ /**
54
+ * Fetches available plugin names from /bin in the format: name-vVersion.
55
+ * This matches the display format used in /bin listings.
56
+ * Uses cache first for fast completion.
57
+ * @returns Array of plugin names with version suffixes.
58
+ */
59
+ async function plugins_getNames() {
60
+ try {
61
+ // Check cache first for /bin
62
+ const listCache = listCache_get();
63
+ const cached = listCache.cache_get('/bin');
64
+ if (cached && cached.data) {
65
+ // Return cached plugin names immediately
66
+ return cached.data.map((item) => item.name);
67
+ }
68
+ // Cache miss - fetch from API (only on first tab completion)
69
+ const plugins = await plugins_listAll({});
70
+ if (plugins && plugins.tableData) {
71
+ const pluginNames = plugins.tableData.map((p) => {
72
+ const name = typeof p.name === 'string' ? p.name : String(p.name ?? '');
73
+ const version = typeof p.version === 'string' ? p.version : String(p.version ?? '');
74
+ // Format as name-vVersion to match /bin display format
75
+ return version ? `${name}-v${version}` : name;
76
+ });
77
+ // Cache it for next time
78
+ const lsItems = plugins.tableData.map((p) => {
79
+ const name = typeof p.name === 'string' ? p.name : String(p.name ?? '');
80
+ const version = typeof p.version === 'string' ? p.version : String(p.version ?? '');
81
+ return {
82
+ name: version ? `${name}-v${version}` : name,
83
+ type: 'plugin',
84
+ size: 0,
85
+ owner: 'system',
86
+ date: p.creation_date ? String(p.creation_date) : '',
87
+ };
88
+ });
89
+ listCache.cache_set('/bin', lsItems);
90
+ return pluginNames;
91
+ }
92
+ }
93
+ catch (e) {
94
+ // Silently fail if plugins cannot be fetched
95
+ }
96
+ return [];
97
+ }
98
+ /**
99
+ * Computes autocomplete suggestions for a given input line.
100
+ * Uses the callback style to support asynchronous operations (fetching files).
101
+ *
102
+ * @param line - The current input line.
103
+ * @param callback - The callback function to return results.
104
+ */
105
+ export function input_complete(line, callback) {
106
+ const trimmed = line.trimStart();
107
+ const args = args_tokenize(trimmed);
108
+ // Case 1: Command Completion (First word)
109
+ // If we have only one token and the line doesn't end with space, we are typing the command
110
+ // Or if line is empty
111
+ const isCommandCompletion = args.length === 0 || (args.length === 1 && !line.endsWith(' '));
112
+ if (isCommandCompletion) {
113
+ // Check builtins first (instant, no async)
114
+ const builtinHits = builtinCommands_list().filter((c) => c.startsWith(trimmed));
115
+ // Always check plugins and combine results
116
+ plugins_getNames().then((pluginNames) => {
117
+ const pluginHits = pluginNames.filter((c) => c.startsWith(trimmed));
118
+ // Combine both builtins and plugins
119
+ const allHits = [...builtinHits, ...pluginHits];
120
+ callback(null, [allHits, trimmed]);
121
+ }).catch(() => {
122
+ // On error, return only builtin matches
123
+ callback(null, [builtinHits, trimmed]);
124
+ });
125
+ return;
126
+ }
127
+ // Case 2: Path Completion (Argument to specific commands)
128
+ const cmd = args[0];
129
+ if (['cd', 'ls', 'mkdir', 'touch', 'cat', 'edit', 'cp', 'mv', 'rm', 'upload', 'download', 'du', 'tree', 'pull', 'cubepath', 'query'].includes(cmd)) {
130
+ const word = completionWord_get(line);
131
+ path_complete(word.value).then((matches) => {
132
+ callback(null, [matches.map((match) => completion_format(match, word)), word.raw]);
133
+ }).catch((err) => {
134
+ // On error, return no matches, don't crash REPL
135
+ callback(null, [[], word.raw]);
136
+ });
137
+ return;
138
+ }
139
+ // Default: no completion
140
+ callback(null, [[], line]);
141
+ }
142
+ /**
143
+ * Resolves directory contents for completion.
144
+ * @param partial - The partial path string typed so far.
145
+ */
146
+ async function path_complete(partial) {
147
+ // 1. Handle ~ expansion for the partial path base
148
+ let effectivePartial = partial;
149
+ if (partial.startsWith('~')) {
150
+ const context = await context_getSingle();
151
+ const user = context.user;
152
+ const home = user ? `/home/${user}` : '/';
153
+ if (partial === '~' || partial === '~/') {
154
+ effectivePartial = home + (partial.endsWith('/') ? '/' : '');
155
+ }
156
+ else if (partial.startsWith('~/')) {
157
+ effectivePartial = path.posix.join(home, partial.substring(2));
158
+ }
159
+ }
160
+ // Resolve the directory to list and the prefix to match
161
+ const { dirToList, prefix } = partialPath_split(effectivePartial);
162
+ // 2. Resolve absolute path for listing
163
+ let absDirToList;
164
+ if (dirToList.startsWith('/')) {
165
+ absDirToList = dirToList;
166
+ }
167
+ else {
168
+ const cwd = await session.getCWD();
169
+ absDirToList = dirToList ? path.posix.resolve(cwd, dirToList) : cwd;
170
+ }
171
+ // 3. Fetch contents (check cache first)
172
+ let items = [];
173
+ const listCache = listCache_get();
174
+ // Check cache first
175
+ const cached = listCache.cache_get(absDirToList);
176
+ if (cached) {
177
+ items = cached.data;
178
+ }
179
+ else {
180
+ try {
181
+ // Use vfsDispatcher for all path types — handles /pacs, /bin, native, etc.
182
+ const vfsResult = await vfsDispatcher.list(absDirToList);
183
+ if (vfsResult.ok) {
184
+ items = vfsResult.value;
185
+ }
186
+ // Inject virtual directories at root if missing
187
+ if (absDirToList === '/' || absDirToList === '') {
188
+ const hasItem = (name) => items.some((i) => i.name === name);
189
+ if (!hasItem('bin')) {
190
+ items.push({ name: 'bin', type: 'vfs', size: 0, owner: 'root', date: new Date().toISOString() });
191
+ }
192
+ if (!hasItem('usr')) {
193
+ items.push({ name: 'usr', type: 'vfs', size: 0, owner: 'root', date: new Date().toISOString() });
194
+ }
195
+ if (!hasItem('pacs')) {
196
+ items.push({ name: 'pacs', type: 'vfs', size: 0, owner: 'root', date: new Date().toISOString() });
197
+ }
198
+ }
199
+ // Cache the results
200
+ if (items.length > 0) {
201
+ listCache.cache_set(absDirToList, items);
202
+ }
203
+ }
204
+ catch (e) {
205
+ // Ignore errors (e.g., perms, not a dir)
206
+ }
207
+ }
208
+ // 4. Filter and format matches, preserving the original partial's style
209
+ // (tilde/relative) and appending "/" to directory-like entries.
210
+ return completions_build(items, prefix, partial);
211
+ }
212
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/completer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { ListingItem } from '@fnndsc/chili/models/listing.js';
2
+ /**
3
+ * Splits an (already tilde-expanded) partial path into the directory to list
4
+ * and the basename prefix to match against.
5
+ *
6
+ * @param effectivePartial - The tilde-expanded partial path.
7
+ * @returns The directory to list (empty = cwd) and the prefix.
8
+ */
9
+ export declare function partialPath_split(effectivePartial: string): {
10
+ dirToList: string;
11
+ prefix: string;
12
+ };
13
+ /**
14
+ * Builds completion strings from listing items, preserving the original
15
+ * partial's style (tilde/relative) and appending `/` to directory-like entries.
16
+ *
17
+ * @param items - The listing items in the target directory.
18
+ * @param prefix - The basename prefix being completed.
19
+ * @param partial - The original (unexpanded) partial the user typed.
20
+ * @returns The completion strings for matching items.
21
+ */
22
+ export declare function completions_build(items: ListingItem[], prefix: string, partial: string): string[];
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @file Pure helpers for filesystem path tab-completion.
3
+ *
4
+ * Splits a partial path into the directory to list and the prefix to match, and
5
+ * reconstructs completion strings from matching listing items. Dependency-free
6
+ * (path module only) for easy unit testing.
7
+ *
8
+ * @module
9
+ */
10
+ import path from 'path';
11
+ /**
12
+ * Splits an (already tilde-expanded) partial path into the directory to list
13
+ * and the basename prefix to match against.
14
+ *
15
+ * @param effectivePartial - The tilde-expanded partial path.
16
+ * @returns The directory to list (empty = cwd) and the prefix.
17
+ */
18
+ export function partialPath_split(effectivePartial) {
19
+ if (effectivePartial.endsWith('/')) {
20
+ return { dirToList: effectivePartial, prefix: '' };
21
+ }
22
+ let dirToList = path.posix.dirname(effectivePartial);
23
+ const prefix = path.posix.basename(effectivePartial);
24
+ if (dirToList === '.')
25
+ dirToList = ''; // Relative current dir
26
+ return { dirToList, prefix };
27
+ }
28
+ /**
29
+ * Builds completion strings from listing items, preserving the original
30
+ * partial's style (tilde/relative) and appending `/` to directory-like entries.
31
+ *
32
+ * @param items - The listing items in the target directory.
33
+ * @param prefix - The basename prefix being completed.
34
+ * @param partial - The original (unexpanded) partial the user typed.
35
+ * @returns The completion strings for matching items.
36
+ */
37
+ export function completions_build(items, prefix, partial) {
38
+ return items
39
+ .filter((i) => i.name.startsWith(prefix))
40
+ .map((hit) => {
41
+ const remainingSegment = hit.name.substring(prefix.length);
42
+ let completion = partial + remainingSegment;
43
+ if (hit.type === 'dir' || hit.type === 'vfs' || hit.type === 'link') {
44
+ completion += '/';
45
+ }
46
+ return completion;
47
+ });
48
+ }
49
+ //# sourceMappingURL=pathComplete.helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathComplete.helpers.js","sourceRoot":"","sources":["../../../src/lib/completer/pathComplete.helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,gBAAwB;IACxD,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACrD,CAAC;IACD,IAAI,SAAS,GAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAW,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC7D,IAAI,SAAS,KAAK,GAAG;QAAE,SAAS,GAAG,EAAE,CAAC,CAAC,uBAAuB;IAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAoB,EAAE,MAAc,EAAE,OAAe;IACrF,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;SACrD,GAAG,CAAC,CAAC,GAAgB,EAAE,EAAE;QACxB,MAAM,gBAAgB,GAAW,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,UAAU,GAAW,OAAO,GAAG,gBAAgB,CAAC;QACpD,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACpE,UAAU,IAAI,GAAG,CAAC;QACpB,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @file ASCII logo rendering and animation frames.
3
+ *
4
+ * Pre-rendered ChRIS/CheLL logo captured with ascii-image-converter.
5
+ * The colored variant uses embedded ANSI 24-bit codes; the plain variant strips them.
6
+ */
7
+ /**
8
+ * Renders the ASCII logo as an array of lines.
9
+ *
10
+ * @param colorize - Whether to apply color.
11
+ * @param reverse - Whether to reverse the gradient.
12
+ * @returns The rendered logo lines.
13
+ */
14
+ export declare function logo_linesRender(colorize: boolean, reverse?: boolean): string[];
15
+ /**
16
+ * Renders a single frame of the brain activity animation, where the core brain
17
+ * structure retains its original hue'd color gradient, and only the inner spaces
18
+ * (stylized nodes) pulse, grow, and fade physically as spatial blooms.
19
+ *
20
+ * @param frameIndex - The index of the animation frame.
21
+ * @param isStaticEndState - If true, renders the final steady state where holes are blank.
22
+ * @returns Array of rendered lines with color codes.
23
+ */
24
+ export declare function logo_frameRender(frameIndex: number, isStaticEndState?: boolean): string[];
25
+ /**
26
+ * Prints the static logo and begins tracking subsequent stdout lines.
27
+ * Call this at boot to show the brain art; follow with logo_animatePulse() after login.
28
+ *
29
+ * @param useColor - True to enable colored rendering and prepare for pulsing.
30
+ */
31
+ export declare function logo_print(useColor: boolean): void;
32
+ /**
33
+ * Starts the pulsing brain activity animation in-place above already-printed output.
34
+ * Must be called after logo_print(true); no-op if already running or non-TTY.
35
+ */
36
+ export declare function logo_animatePulse(): void;
37
+ /**
38
+ * Starts the brain activity pulsing node animation on the console.
39
+ * Falls back to static plain rendering if non-TTY or color is disabled.
40
+ *
41
+ * @param useColor - True to enable colored pulsing, false for static plain rendering.
42
+ */
43
+ export declare function logo_animateStart(useColor: boolean): void;
44
+ /**
45
+ * Stops the brain activity pulsing animation, rendering the final steady state.
46
+ */
47
+ export declare function logo_animateStop(): void;