@struktoai/mirage-core
Version:
A Unified Virtual Filesystem For AI Agents
245 lines • 11.7 kB
JavaScript
// ========= 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, TEXTS_OPERAND, TEXT_OPERAND } from "../constants.js";
const OWNERSHIP = new CommandSpec({
arguments: [
new Argument(['-c', '--changes'], { action: 'store_true' }),
new Argument(['-f', '--silent'], { action: 'store_true' }),
new Argument('--quiet', { action: 'store_true' }),
new Argument(['-v', '--verbose'], { action: 'store_true' }),
new Argument('--dereference', { action: 'store_true' }),
new Argument(['-h', '--no-dereference'], { action: 'store_true' }),
new Argument(['-R', '--recursive'], { action: 'store_true' }),
TEXT_OPERAND,
PATHS_OPERAND,
],
});
const OVERWRITE_OPTIONS = [
new Argument(['-f', '--force'], { action: 'store_true' }),
new Argument(['-i', '--interactive'], { action: 'store_true' }),
new Argument(['-n', '--no-clobber'], { action: 'store_true' }),
new Argument(['-v', '--verbose'], { action: 'store_true' }),
new Argument(['-u', '--update'], { nargs: '?', attachedOnly: true, shortValue: false }),
new Argument(['-b', '--backup'], { nargs: '?', attachedOnly: true, shortValue: false }),
new Argument('--strip-trailing-slashes', { action: 'store_true' }),
new Argument(['-t', '--target-directory'], { type: 'path' }),
];
export const SPECS = {
basename: new CommandSpec({
arguments: [
new Argument(['-a', '--multiple'], { action: 'store_true' }),
new Argument(['-s', '--suffix']),
new Argument(['-z', '--zero'], { action: 'store_true' }),
TEXTS_OPERAND,
],
}),
chgrp: OWNERSHIP,
chmod: new CommandSpec({
arguments: [
new Argument(['-c', '--changes'], { action: 'store_true' }),
new Argument(['-f', '--silent'], { action: 'store_true' }),
new Argument('--quiet', { action: 'store_true' }),
new Argument(['-v', '--verbose'], { action: 'store_true' }),
new Argument(['-R', '--recursive'], { action: 'store_true' }),
TEXT_OPERAND,
PATHS_OPERAND,
],
}),
chown: OWNERSHIP,
cp: new CommandSpec({
arguments: [
new Argument('-r', { action: 'store_true' }),
new Argument(['-R', '--recursive'], { action: 'store_true' }),
new Argument(['-a', '--archive'], { action: 'store_true' }),
new Argument(['-L', '--dereference'], { action: 'store_true' }),
new Argument(['-P', '--no-dereference'], { action: 'store_true' }),
new Argument('-H', { action: 'store_true' }),
new Argument('-d', { action: 'store_true' }),
...OVERWRITE_OPTIONS,
new Argument(['-T', '--no-target-directory'], { action: 'store_true' }),
new Argument(['-S', '--suffix']),
new Argument(['-x', '--one-file-system'], { action: 'store_true' }),
PATHS_OPERAND,
],
}),
dirname: new CommandSpec({
arguments: [new Argument(['-z', '--zero'], { action: 'store_true' }), TEXTS_OPERAND],
}),
// getfattr and setfattr run in the executor over the dispatcher's attribute
// ops, like readlink and ln, so these specs are their grammar and no
// builder binds them. Pinned against Debian's attr 2.5.2;
// --one-file-system, --restore and --raw are not offered.
getfattr: new CommandSpec({
arguments: [
new Argument(['-n', '--name'], { help: 'get the named extended attribute value' }),
new Argument(['-d', '--dump'], {
action: 'store_true',
help: 'get all extended attribute values',
}),
new Argument(['-e', '--encoding'], { help: "encode values (as 'text', 'hex' or 'base64')" }),
new Argument(['-m', '--match'], { help: 'only get attributes with names matching pattern' }),
new Argument('--only-values', { action: 'store_true', help: 'print the bare values only' }),
new Argument(['-h', '--no-dereference'], {
action: 'store_true',
help: 'do not dereference symbolic links',
}),
new Argument('--absolute-names', {
action: 'store_true',
help: "don't strip leading '/' in pathnames",
}),
new Argument(['-R', '--recursive'], {
action: 'store_true',
help: 'recurse into subdirectories',
}),
new Argument(['-L', '--logical'], {
action: 'store_true',
help: 'logical walk, follow symbolic links',
}),
new Argument(['-P', '--physical'], {
action: 'store_true',
help: 'physical walk, do not follow symbolic links',
}),
PATHS_OPERAND,
],
}),
// ln runs in the executor for both link kinds (a symlink is namespace
// state, a "hard link" is a byte copy through the dispatcher), so this spec
// is its grammar authority and no builder binds it.
ln: new CommandSpec({
arguments: [
new Argument(['-S', '--suffix']),
new Argument(['-f', '--force'], { action: 'store_true' }),
new Argument(['-n', '--no-dereference'], { action: 'store_true' }),
new Argument(['-v', '--verbose'], { action: 'store_true' }),
new Argument(['-r', '--relative'], { action: 'store_true' }),
new Argument(['-L', '--logical'], { action: 'store_true' }),
new Argument(['-P', '--physical'], { action: 'store_true' }),
new Argument(['-d', '--directory'], { action: 'store_true' }),
new Argument('-F', { action: 'store_true' }),
new Argument(['-b', '--backup'], { nargs: '?', attachedOnly: true, shortValue: false }),
new Argument(['-s', '--symbolic'], { action: 'store_true' }),
new Argument(['-t', '--target-directory'], { type: 'path' }),
new Argument(['-T', '--no-target-directory'], { action: 'store_true' }),
PATHS_OPERAND,
],
}),
mkdir: new CommandSpec({
arguments: [
new Argument(['-p', '--parents'], { action: 'store_true' }),
new Argument(['-v', '--verbose'], { action: 'store_true' }),
new Argument(['-m', '--mode']),
new Argument(['-Z', '--context'], { nargs: '?', attachedOnly: true, shortValue: false }),
PATHS_OPERAND,
],
}),
mv: new CommandSpec({
arguments: [
...OVERWRITE_OPTIONS,
new Argument('--no-copy', { action: 'store_true' }),
new Argument('--exchange', { action: 'store_true' }),
new Argument(['-T', '--no-target-directory'], { action: 'store_true' }),
new Argument(['-S', '--suffix']),
PATHS_OPERAND,
],
}),
readlink: new CommandSpec({
arguments: [
new Argument(['-f', '--canonicalize'], { action: 'store_true' }),
new Argument(['-e', '--canonicalize-existing'], { action: 'store_true' }),
new Argument(['-m', '--canonicalize-missing'], { action: 'store_true' }),
new Argument(['-n', '--no-newline'], { action: 'store_true' }),
new Argument(['-q', '--quiet'], { action: 'store_true' }),
new Argument(['-s', '--silent'], { action: 'store_true' }),
new Argument(['-v', '--verbose'], { action: 'store_true' }),
new Argument(['-z', '--zero'], { action: 'store_true' }),
PATHS_OPERAND,
],
}),
realpath: new CommandSpec({
arguments: [
new Argument(['-e', '--canonicalize-existing'], { action: 'store_true' }),
new Argument(['-m', '--canonicalize-missing'], { action: 'store_true' }),
new Argument(['-L', '--logical'], { action: 'store_true' }),
new Argument(['-P', '--physical'], { action: 'store_true' }),
new Argument(['-q', '--quiet'], { action: 'store_true' }),
new Argument('--relative-to'),
new Argument('--relative-base'),
new Argument(['-s', '--strip'], { action: 'store_true' }),
new Argument('--no-symlinks', { action: 'store_true' }),
new Argument(['-z', '--zero'], { action: 'store_true' }),
PATHS_OPERAND,
],
}),
rm: new CommandSpec({
arguments: [
new Argument('-r', { action: 'store_true' }),
new Argument('-R', { action: 'store_true' }),
new Argument('-f', { action: 'store_true' }),
new Argument('-v', { action: 'store_true' }),
new Argument('-d', { action: 'store_true' }),
new Argument('-i', { action: 'store_true' }),
new Argument('-I', { action: 'store_true' }),
new Argument('--preserve-root', { action: 'store_true' }),
new Argument('--no-preserve-root', { action: 'store_true' }),
new Argument('--one-file-system', { action: 'store_true' }),
PATHS_OPERAND,
],
}),
rmdir: new CommandSpec({
arguments: [
new Argument('--ignore-fail-on-non-empty', { action: 'store_true' }),
new Argument(['-p', '--parents'], { action: 'store_true' }),
new Argument(['-v', '--verbose'], { action: 'store_true' }),
PATHS_OPERAND,
],
}),
setfattr: new CommandSpec({
arguments: [
new Argument(['-n', '--name'], { help: 'set the value of the named extended attribute' }),
new Argument(['-x', '--remove'], { help: 'remove the named extended attribute' }),
new Argument(['-v', '--value'], { help: 'use value as the attribute value' }),
new Argument(['-h', '--no-dereference'], {
action: 'store_true',
help: 'do not dereference symbolic links',
}),
PATHS_OPERAND,
],
}),
touch: new CommandSpec({
arguments: [
new Argument('-a', { action: 'store_true' }),
new Argument(['-c', '--no-create'], { action: 'store_true' }),
new Argument(['-d', '--date']),
new Argument('-f', { action: 'store_true' }),
new Argument(['-h', '--no-dereference'], { action: 'store_true' }),
new Argument('-m', { action: 'store_true' }),
new Argument(['-r', '--reference'], { type: 'path' }),
new Argument('-t'),
new Argument('--time'),
PATHS_OPERAND,
],
}),
truncate: new CommandSpec({
arguments: [
new Argument(['-c', '--no-create'], { action: 'store_true' }),
new Argument(['-s', '--size']),
PATHS_OPERAND,
],
}),
unlink: new CommandSpec({
arguments: [PATHS_OPERAND],
}),
};
//# sourceMappingURL=fs_mutate.js.map