UNPKG

@struktoai/mirage-core

Version:

A Unified Virtual Filesystem For AI Agents

420 lines • 23.9 kB
// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. ========= // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ========= Copyright 2026 @ Strukto.AI All Rights Reserved. ========= import { CommandSpec, Argument } from "../types.js"; import { PATHS_OPERAND } from "../constants.js"; export const SPECS = { awk: new CommandSpec({ arguments: [ new Argument('-F'), new Argument('-v', { action: 'append' }), new Argument('-f', { action: 'append', type: 'path' }), new Argument('text', { metavar: '', nargs: '?', providedBy: ['-f'] }), PATHS_OPERAND, ], }), grep: new CommandSpec({ arguments: [ new Argument(['-r', '--recursive'], { action: 'store_true' }), new Argument(['-R', '--dereference-recursive'], { action: 'store_true' }), // -r and -R are --directories=recurse; the last of the three on the // line wins. new Argument(['-d', '--directories']), // A device is read only when named; a walk never opens one. new Argument(['-D', '--devices']), // -y is GNU's obsolete spelling of -i. new Argument(['-i', '-y', '--ignore-case'], { action: 'store_true' }), new Argument('--no-ignore-case', { action: 'store_true' }), new Argument('-I', { action: 'store_true' }), new Argument(['-v', '--invert-match'], { action: 'store_true' }), new Argument(['-n', '--line-number'], { action: 'store_true' }), new Argument('--binary-files'), new Argument(['-c', '--count'], { action: 'store_true' }), new Argument(['-l', '--files-with-matches'], { action: 'store_true' }), new Argument(['-L', '--files-without-match'], { action: 'store_true' }), new Argument(['-w', '--word-regexp'], { action: 'store_true' }), new Argument(['-x', '--line-regexp'], { action: 'store_true' }), // --fixed-regexp is GNU's older name for --fixed-strings. new Argument(['-F', '--fixed-strings', '--fixed-regexp'], { action: 'store_true' }), new Argument(['-E', '--extended-regexp'], { action: 'store_true' }), new Argument(['-G', '--basic-regexp'], { action: 'store_true' }), new Argument(['-P', '--perl-regexp'], { action: 'store_true' }), new Argument(['-z', '--null-data'], { action: 'store_true' }), new Argument(['-o', '--only-matching'], { action: 'store_true' }), new Argument(['-q', '--quiet', '--silent'], { action: 'store_true' }), new Argument(['-s', '--no-messages'], { action: 'store_true' }), new Argument(['-H', '--with-filename'], { action: 'store_true' }), new Argument(['-h', '--no-filename'], { action: 'store_true' }), new Argument('--label'), new Argument(['-Z', '--null'], { action: 'store_true' }), new Argument(['-T', '--initial-tab'], { action: 'store_true' }), new Argument(['-m', '--max-count']), new Argument(['-A', '--after-context']), new Argument(['-B', '--before-context']), // -NUM is -C NUM. new Argument(['-C', '--context'], { numericShorthand: true }), new Argument('--group-separator'), new Argument('--no-group-separator', { action: 'store_true' }), new Argument(['-e', '--regexp'], { action: 'append' }), new Argument(['-f', '--file'], { action: 'append', type: 'path' }), new Argument(['-a', '--text'], { action: 'store_true' }), new Argument(['-b', '--byte-offset'], { action: 'store_true' }), new Argument('--include', { action: 'append' }), new Argument('--exclude', { action: 'append' }), new Argument('--exclude-from', { action: 'append', type: 'path' }), new Argument('--exclude-dir', { action: 'append' }), // The version, like the --version registration supplies. new Argument('-V', { action: 'store_true' }), // Accepted no-ops: output is never a tty, so plain output is exactly // what GNU produces with --color=auto (#471); -U only matters where a // line can end in CR LF, and -u is obsolete (GNU warns and ignores it). new Argument('--color', { nargs: '?', attachedOnly: true }), new Argument('--colour', { nargs: '?', attachedOnly: true }), new Argument('--line-buffered', { action: 'store_true' }), new Argument(['-U', '--binary'], { action: 'store_true' }), new Argument(['-u', '--unix-byte-offsets'], { action: 'store_true' }), new Argument('text', { metavar: '', nargs: '?', providedBy: ['-e', '-f'] }), PATHS_OPERAND, ], }), jq: new CommandSpec({ arguments: [ new Argument(['-n', '--null-input'], { action: 'store_true', help: 'Use null as the single input value', }), new Argument(['-R', '--raw-input'], { action: 'store_true', help: 'Read each line as a string instead of JSON', }), new Argument(['-s', '--slurp'], { action: 'store_true', help: 'Read all inputs into one array', }), new Argument(['-c', '--compact-output'], { action: 'store_true', help: 'Compact instead of pretty-printed output', }), new Argument(['-r', '--raw-output'], { action: 'store_true', help: 'Output strings without quotes or escapes', }), new Argument('--raw-output0', { action: 'store_true', help: 'Implies -r and writes NUL after each output', }), new Argument(['-j', '--join-output'], { action: 'store_true', help: 'Implies -r and writes no trailing newline', }), new Argument(['-a', '--ascii-output'], { action: 'store_true', help: 'Escape non-ASCII characters in output', }), new Argument(['-S', '--sort-keys'], { action: 'store_true', help: 'Sort object keys on output', }), new Argument(['-e', '--exit-status'], { action: 'store_true', help: 'Set the exit status from the last output', }), new Argument('--tab', { action: 'store_true', help: 'Indent with tabs' }), new Argument('--indent', { help: 'Indent with n spaces (max 7)' }), new Argument(['-M', '--monochrome-output'], { action: 'store_true', help: 'Disable colored output (already the default)', }), new Argument('--unbuffered', { action: 'store_true', help: 'Accepted for compatibility; output is one buffer', }), new Argument(['-f', '--from-file'], { type: 'path', help: 'Read the filter from a file' }), new Argument('--stream', { action: 'store_true', help: 'Read each input as its [path, leaf] events', }), new Argument('--seq', { action: 'store_true', help: 'Read and write RS-delimited JSON text sequences', }), new Argument('--arg', { action: 'extend', nargs: 2, valueTypes: ['str', 'str'], help: 'Set $name to a string value', }), new Argument('--argjson', { action: 'extend', nargs: 2, valueTypes: ['str', 'str'], help: 'Set $name to a JSON value', }), new Argument('--rawfile', { action: 'extend', nargs: 2, type: 'path', valueTypes: ['str', 'path'], help: "Set $name to a file's contents", }), new Argument('--slurpfile', { action: 'extend', nargs: 2, type: 'path', valueTypes: ['str', 'path'], help: "Set $name to a file's documents, as an array", }), new Argument('--args', { action: 'store_true', help: 'Read the remaining operands as positional string values', }), new Argument('--jsonargs', { action: 'store_true', help: 'Read the remaining operands as positional JSON values', }), new Argument(['-h', '--help'], { action: 'store_true', help: 'Show this help and exit' }), new Argument(['-V', '--version'], { action: 'store_true', help: 'Show version information and exit', }), new Argument('text', { metavar: '', nargs: '?', providedBy: ['-f'] }), new Argument('paths', { metavar: '', type: 'path', nargs: '*', textWhen: ['--args', '--jsonargs'], }), ], allowAbbrev: false, }), rg: new CommandSpec({ arguments: [ new Argument(['-e', '--regexp'], { action: 'append' }), new Argument(['-f', '--file'], { action: 'append', type: 'path' }), new Argument(['-i', '--ignore-case'], { action: 'store_true' }), new Argument(['-s', '--case-sensitive'], { action: 'store_true' }), new Argument(['-S', '--smart-case'], { action: 'store_true' }), new Argument(['-v', '--invert-match'], { action: 'store_true' }), new Argument('--no-invert-match', { action: 'store_true' }), new Argument(['-w', '--word-regexp'], { action: 'store_true' }), new Argument(['-x', '--line-regexp'], { action: 'store_true' }), new Argument(['-F', '--fixed-strings'], { action: 'store_true' }), new Argument('--no-fixed-strings', { action: 'store_true' }), new Argument(['-m', '--max-count']), new Argument('--stop-on-nonmatch', { action: 'store_true' }), new Argument(['-n', '--line-number'], { action: 'store_true' }), new Argument(['-N', '--no-line-number'], { action: 'store_true' }), new Argument(['-b', '--byte-offset'], { action: 'store_true' }), new Argument('--no-byte-offset', { action: 'store_true' }), new Argument('--column', { action: 'store_true' }), new Argument('--no-column', { action: 'store_true' }), new Argument('--vimgrep', { action: 'store_true' }), new Argument(['-o', '--only-matching'], { action: 'store_true' }), new Argument(['-r', '--replace']), new Argument('--trim', { action: 'store_true' }), new Argument('--no-trim', { action: 'store_true' }), new Argument(['-M', '--max-columns']), new Argument('--max-columns-preview', { action: 'store_true' }), new Argument('--no-max-columns-preview', { action: 'store_true' }), new Argument(['-0', '--null'], { action: 'store_true' }), new Argument('--null-data', { action: 'store_true' }), new Argument('--path-separator'), new Argument(['-q', '--quiet'], { action: 'store_true' }), new Argument(['-c', '--count'], { action: 'store_true' }), new Argument('--count-matches', { action: 'store_true' }), new Argument('--include-zero', { action: 'store_true' }), new Argument('--no-include-zero', { action: 'store_true' }), new Argument(['-l', '--files-with-matches'], { action: 'store_true' }), new Argument('--files-without-match', { action: 'store_true' }), new Argument('--files', { action: 'store_true' }), new Argument('--type-list', { action: 'store_true' }), new Argument(['-H', '--with-filename'], { action: 'store_true' }), new Argument(['-I', '--no-filename'], { action: 'store_true' }), new Argument('--heading', { action: 'store_true' }), new Argument('--no-heading', { action: 'store_true' }), new Argument(['-A', '--after-context']), new Argument(['-B', '--before-context']), new Argument(['-C', '--context']), new Argument('--passthru', { action: 'store_true' }), new Argument('--passthrough', { action: 'store_true' }), new Argument('--context-separator'), new Argument('--no-context-separator', { action: 'store_true' }), new Argument('--field-match-separator'), new Argument('--field-context-separator'), new Argument(['-g', '--glob'], { action: 'append' }), new Argument('--iglob', { action: 'append' }), new Argument('--glob-case-insensitive', { action: 'store_true' }), new Argument('--no-glob-case-insensitive', { action: 'store_true' }), new Argument(['-t', '--type'], { action: 'append' }), new Argument(['-T', '--type-not'], { action: 'append' }), new Argument('--type-add', { action: 'append' }), new Argument('--type-clear', { action: 'append' }), new Argument(['-.', '--hidden'], { action: 'store_true' }), new Argument('--no-hidden', { action: 'store_true' }), new Argument(['-u', '--unrestricted'], { action: 'count' }), new Argument(['-d', '--max-depth', '--maxdepth']), new Argument('--max-filesize'), new Argument(['-L', '--follow'], { action: 'store_true' }), new Argument('--one-file-system', { action: 'store_true' }), new Argument('--no-one-file-system', { action: 'store_true' }), new Argument(['-a', '--text'], { action: 'store_true' }), new Argument('--no-text', { action: 'store_true' }), new Argument('--binary', { action: 'store_true' }), new Argument('--no-binary', { action: 'store_true' }), new Argument('--sort'), new Argument('--sortr'), new Argument('--sort-files', { action: 'store_true' }), new Argument('--no-sort-files', { action: 'store_true' }), new Argument('--no-messages', { action: 'store_true' }), new Argument('--messages', { action: 'store_true' }), new Argument('--no-ignore', { action: 'store_true' }), new Argument('--ignore', { action: 'store_true' }), new Argument('--no-ignore-dot', { action: 'store_true' }), new Argument('--ignore-dot', { action: 'store_true' }), new Argument('--no-ignore-exclude', { action: 'store_true' }), new Argument('--ignore-exclude', { action: 'store_true' }), // --ignore-file's gitignore rules apply to the walk; the negation drops // every one of them, wherever it stands. new Argument('--ignore-file', { action: 'append', type: 'path' }), new Argument('--no-ignore-files', { action: 'store_true' }), new Argument('--ignore-files', { action: 'store_true' }), new Argument('--no-ignore-global', { action: 'store_true' }), new Argument('--ignore-global', { action: 'store_true' }), new Argument('--no-ignore-messages', { action: 'store_true' }), new Argument('--ignore-messages', { action: 'store_true' }), new Argument('--no-ignore-parent', { action: 'store_true' }), new Argument('--ignore-parent', { action: 'store_true' }), new Argument('--no-ignore-vcs', { action: 'store_true' }), new Argument('--ignore-vcs', { action: 'store_true' }), new Argument('--no-require-git', { action: 'store_true' }), new Argument('--require-git', { action: 'store_true' }), new Argument('--ignore-file-case-insensitive', { action: 'store_true' }), new Argument('--no-ignore-file-case-insensitive', { action: 'store_true' }), new Argument('--no-config', { action: 'store_true' }), new Argument(['-j', '--threads']), new Argument('--line-buffered', { action: 'store_true' }), new Argument('--no-line-buffered', { action: 'store_true' }), new Argument('--block-buffered', { action: 'store_true' }), new Argument('--no-block-buffered', { action: 'store_true' }), new Argument('--mmap', { action: 'store_true' }), new Argument('--no-mmap', { action: 'store_true' }), new Argument('--no-follow', { action: 'store_true' }), // --stats ends the output with ripgrep's counts and timings; --json // prints JSON Lines (begin, match, context, end, summary). new Argument('--stats', { action: 'store_true' }), new Argument('--no-stats', { action: 'store_true' }), new Argument('--json', { action: 'store_true' }), // A line may end in CR LF: `$` matches before the CR and every line rg // writes ends in CR LF. new Argument('--crlf', { action: 'store_true' }), new Argument('--no-crlf', { action: 'store_true' }), // A match may span lines: the whole file is searched at once. new Argument(['-U', '--multiline'], { action: 'store_true' }), new Argument('--no-multiline', { action: 'store_true' }), new Argument('--multiline-dotall', { action: 'store_true' }), new Argument('--no-multiline-dotall', { action: 'store_true' }), new Argument(['-P', '--pcre2'], { action: 'store_true' }), new Argument('--no-pcre2', { action: 'store_true' }), new Argument('--engine'), new Argument('--no-json', { action: 'store_true' }), // A .gz or .tgz file is searched decompressed; mirage has gzip and no // other decompressor, which ripgrep leaves raw too when their programs // are missing. new Argument(['-z', '--search-zip'], { action: 'store_true' }), new Argument('--no-search-zip', { action: 'store_true' }), new Argument(['-E', '--encoding']), new Argument('--no-encoding', { action: 'store_true' }), // --pre runs COMMAND PATH for each file, its contents on stdin, and // searches what it prints; --pre-glob picks the files. new Argument('--pre'), new Argument('--pre-glob', { action: 'append' }), new Argument('--no-pre', { action: 'store_true' }), new Argument('--unicode', { action: 'store_true' }), new Argument('--no-unicode', { action: 'store_true' }), new Argument('--pcre2-unicode', { action: 'store_true' }), new Argument('--no-pcre2-unicode', { action: 'store_true' }), new Argument('--auto-hybrid-regex', { action: 'store_true' }), new Argument('--no-auto-hybrid-regex', { action: 'store_true' }), new Argument('--color'), // -p is --heading -n plus colors, which mirage never writes. new Argument(['-p', '--pretty'], { action: 'store_true' }), // Accepted no-ops whose values ripgrep checks, refused in its words: // mirage writes no colors or hyperlinks and compiles no DFA, and logs // nothing for --debug and --trace. new Argument('--colors', { action: 'append' }), new Argument('--hyperlink-format'), new Argument('--hostname-bin'), new Argument('--dfa-size-limit'), new Argument('--regex-size-limit'), new Argument('--debug', { action: 'store_true' }), new Argument('--trace', { action: 'store_true' }), // The help page, the version and the PCRE2 version, answered like the // --help and --version the registration supplies. new Argument('-h', { action: 'store_true' }), new Argument('-V', { action: 'store_true' }), new Argument('--pcre2-version', { action: 'store_true' }), new Argument('text', { metavar: '', nargs: '?', providedBy: ['-e', '-f', '--files', '--type-list'], }), PATHS_OPERAND, ], allowAbbrev: false, }), sed: new CommandSpec({ arguments: [ new Argument('-i', { action: 'store_true' }), new Argument('-e', { action: 'append' }), new Argument('-f', { action: 'append', type: 'path' }), new Argument('-n', { action: 'store_true' }), new Argument('-E', { action: 'store_true' }), new Argument('-r', { action: 'store_true' }), new Argument(['-l', '--line-length']), new Argument(['-s', '--separate'], { action: 'store_true' }), new Argument('text', { metavar: '', nargs: '?', providedBy: ['-e', '-f'] }), PATHS_OPERAND, ], }), strings: new CommandSpec({ arguments: [new Argument('-n'), PATHS_OPERAND], }), zgrep: new CommandSpec({ arguments: [ new Argument(['-i', '--ignore-case'], { action: 'store_true' }), new Argument(['-b', '--byte-offset'], { action: 'store_true' }), new Argument(['-c', '--count'], { action: 'store_true' }), new Argument(['-l', '--files-with-matches'], { action: 'store_true' }), new Argument(['-L', '--files-without-match'], { action: 'store_true' }), new Argument(['-n', '--line-number'], { action: 'store_true' }), new Argument(['-v', '--invert-match'], { action: 'store_true' }), new Argument(['-e', '--regexp'], { action: 'append' }), new Argument(['-f', '--file'], { action: 'append', type: 'path' }), new Argument(['-E', '--extended-regexp'], { action: 'store_true' }), new Argument(['-G', '--basic-regexp'], { action: 'store_true' }), new Argument(['-F', '--fixed-strings', '--fixed-regexp'], { action: 'store_true' }), new Argument(['-P', '--perl-regexp'], { action: 'store_true' }), new Argument(['-H', '--with-filename'], { action: 'store_true' }), new Argument(['-h', '--no-filename'], { action: 'store_true' }), new Argument(['-m', '--max-count']), new Argument(['-o', '--only-matching'], { action: 'store_true' }), new Argument(['-q', '--quiet', '--silent'], { action: 'store_true' }), new Argument(['-s', '--no-messages'], { action: 'store_true' }), new Argument(['-w', '--word-regexp'], { action: 'store_true' }), new Argument(['-x', '--line-regexp'], { action: 'store_true' }), new Argument('text', { metavar: '', nargs: '?', providedBy: ['-e', '-f'] }), PATHS_OPERAND, ], }), }; //# sourceMappingURL=search.js.map