924ec49796
A unified virtual filesystem for AI agents. Mount S3, Google Drive, Slack, Gmail, GitHub, Linear, Notion, Postgres, MongoDB, SSH, and more behind one filesystem so agents read, write, and pipe across services with familiar shell commands. Ships Python (mirage-ai) and TypeScript (@struktoai/mirage-*) SDKs, a CLI, FUSE mounts, and adapters for OpenAI Agents SDK, Vercel AI SDK, LangChain deepagents, Pydantic AI, CAMEL, OpenHands, Mastra, Pi Coding Agent, plus FUSE-based integration with Claude Code and Codex. Apache 2.0 licensed.
95 lines
2.8 KiB
Python
95 lines
2.8 KiB
Python
# ========= 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. =========
|
|
|
|
|
|
def test_semicolon(shell):
|
|
assert shell.mirage("echo hello; echo world") == shell.native(
|
|
"echo hello; echo world")
|
|
|
|
|
|
def test_and_success(shell):
|
|
assert shell.mirage("true && echo yes") == shell.native("true && echo yes")
|
|
|
|
|
|
def test_and_failure(shell):
|
|
assert shell.mirage("false && echo yes") == shell.native(
|
|
"false && echo yes")
|
|
|
|
|
|
def test_or_success(shell):
|
|
assert shell.mirage("true || echo fallback") == shell.native(
|
|
"true || echo fallback")
|
|
|
|
|
|
def test_or_failure(shell):
|
|
assert shell.mirage("false || echo fallback") == shell.native(
|
|
"false || echo fallback")
|
|
|
|
|
|
def test_and_or_chain(shell):
|
|
assert shell.mirage("true && echo a || echo b") == shell.native(
|
|
"true && echo a || echo b")
|
|
|
|
|
|
def test_and_or_chain_fail(shell):
|
|
assert shell.mirage("false && echo a || echo b") == shell.native(
|
|
"false && echo a || echo b")
|
|
|
|
|
|
def test_semicolon_continues_after_failure(shell):
|
|
assert shell.mirage("false; echo still") == shell.native(
|
|
"false; echo still")
|
|
|
|
|
|
def test_exit_code_true(shell):
|
|
assert shell.mirage_exit("true") == 0
|
|
|
|
|
|
def test_exit_code_false(shell):
|
|
assert shell.mirage_exit("false") == 1
|
|
|
|
|
|
def test_and_chain_three(shell):
|
|
cmd = "true && true && echo all_true"
|
|
assert shell.mirage(cmd) == shell.native(cmd)
|
|
|
|
|
|
def test_or_chain_three(shell):
|
|
cmd = "false || false || echo last_resort"
|
|
assert shell.mirage(cmd) == shell.native(cmd)
|
|
|
|
|
|
def test_mixed_and_or_semi(shell):
|
|
cmd = "echo a; false && echo b; echo c"
|
|
assert shell.mirage(cmd) == shell.native(cmd)
|
|
|
|
|
|
def test_semicolon_three(shell):
|
|
cmd = "echo a; echo b; echo c"
|
|
assert shell.mirage(cmd) == shell.native(cmd)
|
|
|
|
|
|
def test_and_with_grep(shell):
|
|
shell.create_file("f.txt", b"hello\n")
|
|
m = shell.mirage("grep hello /data/f.txt && echo found")
|
|
n = shell.native("grep hello f.txt && echo found")
|
|
assert m == n
|
|
|
|
|
|
def test_or_with_grep(shell):
|
|
shell.create_file("f.txt", b"hello\n")
|
|
m = shell.mirage("grep nope /data/f.txt || echo missing")
|
|
n = shell.native("grep nope f.txt || echo missing")
|
|
assert m == n
|