aboutsummaryrefslogtreecommitdiff
path: root/modules/core/terminal.js
diff options
context:
space:
mode:
Diffstat (limited to 'modules/core/terminal.js')
-rw-r--r--modules/core/terminal.js37
1 files changed, 30 insertions, 7 deletions
diff --git a/modules/core/terminal.js b/modules/core/terminal.js
index 1fb44aa..3651713 100644
--- a/modules/core/terminal.js
+++ b/modules/core/terminal.js
@@ -896,6 +896,25 @@
.filter(e => e.name.startsWith(filterPrefix))
.map(e => e.type === 'dir' ? prefix + e.name + '/' : prefix + e.name);
}
+
+ // ── Enum autocomplete from commandsMeta ──
+
+ _tryEnumAutocomplete(cmdName) {
+ this.suggestions = [];
+ for (const modName in this.moduleManager.modules) {
+ const mod = this.moduleManager.modules[modName];
+ const meta = mod.commandsMeta && mod.commandsMeta[cmdName];
+ if (meta && meta.argType === 'enum' && meta.enumFn && typeof mod[meta.enumFn] === 'function') {
+ const values = mod[meta.enumFn]();
+ if (Array.isArray(values) && values.length > 0) {
+ this.suggestions.push(...values);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
showAutocomplete() {
if (!this.moduleManager || !this.security) return;
const input = this.inputField.value;
@@ -919,8 +938,8 @@
const lowerInput = input.toLowerCase();
// Expanded command lists for autocomplete
- const fileArgCommands = ['cat', 'preview', 'rm', 'rmdir', 'edit', 'view', 'cp', 'mv', 'touch', 'put', 'run', 'chmod', 'gzip', 'gunzip', 'encrypt', 'decrypt', 'download', 'webdav-backup', 'webdav-restore', 'webdav-upload', 'webdav-download', 'webdav-list'];
- const dirArgCommands = ['ls', 'cd', 'mkdir', 'rmdir'];
+ const fileArgCommands = ['cat', 'preview', 'rm', 'rmdir', 'edit', 'view', 'cp', 'mv', 'touch', 'put', 'run', 'chmod', 'gzip', 'gunzip', 'encrypt', 'decrypt', 'download', 'webdav-backup', 'webdav-restore', 'webdav-upload', 'webdav-download', 'webdav-list', 'trash', 'ls-trash', 'upload', 'vfs-export', 'vfs-import', 'files', 'preview', 'skill-list', 'skill-view', 'skill-create', 'skill-patch', 'skill-delete', 'skill-sync', 'webdav-ls', 'webdav-push', 'webdav-pull', 'webdav-rm', 'webdav-mkdir', 'webdav-rename', 'webdav-move', 'webdav-config', 'nvfs-index', 'nvfs-resolve', 'nvfs-tree', 'nvfs-alias', 'nvfs-sync'];
+ const dirArgCommands = ['ls', 'cd', 'mkdir', 'rmdir', 'upload', 'webdav-ls', 'webdav-mkdir', 'vfs-export', 'vfs-import', 'skill-list', 'skill-create'];
const sessionArgCommands = ['session-load', 'session-delete', 'session-export', 'session-save', 'session-list', 'session-import'];
const pathArgCommands = ['cat', 'preview', 'rm', 'edit', 'view', 'cp', 'mv', 'touch', 'put', 'run', 'chmod', 'gzip', 'gunzip', 'encrypt', 'decrypt', 'download', 'webdav-backup', 'webdav-restore', 'webdav-upload', 'webdav-download', 'webdav-list', 'ls', 'cd', 'mkdir', 'rmdir', 'cat', 'preview'];
@@ -954,9 +973,11 @@
this._isCdAutocomplete = true;
} else if (fileArgCommands.includes(cmdPart) || extFileCmds.has(cmdPart)) {
this.suggestions = this._getPathSuggestions(partialTrimmed, 'file');
+ } else if (this._tryEnumAutocomplete(cmdPart)) {
+ this.suggestions = this.suggestions.filter(s => s.startsWith(partialTrimmed));
} else {
- this.hideAutocomplete();
- return;
+ // Fallback: show files anyway
+ this.suggestions = this._getPathSuggestions(partialTrimmed, 'file');
}
this._autocompletePrefix = cmdPart + ' ';
@@ -977,9 +998,11 @@
this._isCdAutocomplete = true;
} else if (fileArgCommands.includes(cmdPart) || extFileCmds.has(cmdPart)) {
this.suggestions = this._getPathSuggestions('', 'file');
+ } else if (this._tryEnumAutocomplete(cmdPart)) {
+ // suggestions already populated
} else {
- this.hideAutocomplete();
- return;
+ // Fallback: show files
+ this.suggestions = this._getPathSuggestions('', 'file');
}
this._autocompletePrefix = cmdPart + ' ';
if (this.suggestions.length > 0) {
@@ -2048,7 +2071,7 @@
const foundation = ['virtual-fs.js','module-manager.js','ollama-manager.js','terminal.js'];
const builtin = [
- 'module-system.js','module-fs.js','module-modmgr.js','module-ollama.js',
+ 'module-system.js','module-fs.js','module-ollama.js',
'module-my.js','module-searxng.js','module-servermon.js','module-ollamamodels.js',
'module-config.js','module-simplegui.js','module-io.js','module-dynamicprompts.js',
'module-aiassist.js','module-aiasm.js','module-smartctx.js','module-duckduckgo.js',