98fcdcb2e2
python's GenericResource wires the whole generic command set, the glob resolver and the VFS/FUSE ops from one table, and TypeScript had every ingredient but no class that assembled them, so a custom backend there was still written out by hand. Adds GenericResource<A>, generic over the accessor so the table is checked against the core functions it holds rather than against Accessor. It keeps TypeScript's own wiring style: commands() and ops() return arrays instead of python's register() loop mutating state in the constructor. And there is no sdk.ts, because core's barrel is 99 lines and gated in both directions while the ./* exports map already makes every module importable, so the five names the new example and doc reach for are the only additions to it. Both classes gained sizes_always_known and supports_snapshot. Without the first, no user-written backend could be mounted on FSKit at all, since resolve_backend refuses a resource that cannot size its files. The two one-file examples answer one shared truth file, so the two SDKs cannot drift without a red build. docs/typescript/resource/new.mdx is the twin of the python page, whose stale du_total/du_all is corrected to du. The layout baseline drops to 255: resource/generic was one of the counted divergences.
663 lines
20 KiB
JSON
663 lines
20 KiB
JSON
{
|
|
"$schema": "https://mintlify.com/docs.json",
|
|
"theme": "mint",
|
|
"name": "Mirage",
|
|
"description": "Mirage gives AI agents one virtual filesystem for S3, Google Drive, Slack, GitHub, Notion, Postgres, and SSH, so shell commands work across services.",
|
|
"colors": {
|
|
"primary": "#0C0C0C",
|
|
"light": "#FAFAFA",
|
|
"dark": "#000000"
|
|
},
|
|
"logo": {
|
|
"light": "/logo/light.svg",
|
|
"dark": "/logo/dark.svg"
|
|
},
|
|
"favicon": "/favicon.svg",
|
|
"contextual": {
|
|
"options": [
|
|
"copy",
|
|
"view",
|
|
"chatgpt",
|
|
"claude",
|
|
"perplexity",
|
|
"mcp",
|
|
"cursor",
|
|
"vscode"
|
|
]
|
|
},
|
|
"seo": {
|
|
"metatags": {
|
|
"keywords": "Mirage, filesystem for AI agents, virtual filesystem, AI agent tools, agent infrastructure, MCP alternative, bash for agents, S3 filesystem, Google Drive filesystem, Slack filesystem, GitHub filesystem, agent sandbox, Strukto",
|
|
"author": "Strukto",
|
|
"robots": "index, follow",
|
|
"googlebot": "index, follow",
|
|
"canonical": "https://docs.mirage.strukto.ai",
|
|
"theme-color": "#0C0C0C",
|
|
"color-scheme": "light dark",
|
|
"language": "en",
|
|
"category": "Technology",
|
|
"target": "developers",
|
|
"apple-mobile-web-app-capable": "yes",
|
|
"apple-mobile-web-app-status-bar-style": "black-translucent",
|
|
"og:type": "website",
|
|
"og:url": "https://docs.mirage.strukto.ai",
|
|
"og:image": "https://raw.githubusercontent.com/strukto-ai/mirage/main/assets/mirage-og-light.png",
|
|
"og:image:alt": "Mirage virtual filesystem for AI agents",
|
|
"og:site_name": "Mirage",
|
|
"og:locale": "en_US",
|
|
"twitter:card": "summary_large_image",
|
|
"twitter:site": "@struktoai",
|
|
"twitter:creator": "@struktoai",
|
|
"twitter:image": "https://raw.githubusercontent.com/strukto-ai/mirage/main/assets/mirage-og-light.png",
|
|
"twitter:image:alt": "Mirage \u00b7 Unified Virtual Filesystem for AI Agents | Strukto"
|
|
}
|
|
},
|
|
"navigation": {
|
|
"tabs": [
|
|
{
|
|
"tab": "Home",
|
|
"icon": "/images/mirage-icon-light.svg",
|
|
"groups": [
|
|
{
|
|
"group": "Getting Started",
|
|
"pages": [
|
|
"home/introduction",
|
|
"home/install",
|
|
"home/cli"
|
|
]
|
|
},
|
|
{
|
|
"group": "Learn",
|
|
"pages": [
|
|
"home/architecture",
|
|
"home/bash",
|
|
"home/resource-matrix",
|
|
"home/cache",
|
|
"home/snapshot",
|
|
"home/observer",
|
|
"home/policy-engine",
|
|
"home/auth"
|
|
]
|
|
},
|
|
{
|
|
"group": "Help",
|
|
"pages": [
|
|
"home/troubleshooting"
|
|
]
|
|
},
|
|
{
|
|
"group": "Setup",
|
|
"pages": [
|
|
{
|
|
"group": "Object Storage",
|
|
"icon": "cloud",
|
|
"pages": [
|
|
"home/setup/s3",
|
|
"home/setup/r2",
|
|
"home/setup/gcs",
|
|
"home/setup/oci",
|
|
"home/setup/supabase",
|
|
"home/setup/minio",
|
|
"home/setup/ceph",
|
|
"home/setup/seaweedfs",
|
|
"home/setup/wasabi",
|
|
"home/setup/backblaze",
|
|
"home/setup/digitalocean",
|
|
"home/setup/tencent",
|
|
"home/setup/aliyun",
|
|
"home/setup/scaleway",
|
|
"home/setup/qingstor"
|
|
]
|
|
},
|
|
{
|
|
"group": "Hugging Face",
|
|
"icon": "/images/huggingface-logo.svg",
|
|
"pages": [
|
|
"home/setup/hf_buckets",
|
|
"home/setup/hf_datasets",
|
|
"home/setup/hf_models",
|
|
"home/setup/hf_spaces"
|
|
]
|
|
},
|
|
{
|
|
"group": "Google Workspace",
|
|
"icon": "google",
|
|
"pages": [
|
|
"home/setup/google"
|
|
]
|
|
},
|
|
{
|
|
"group": "Microsoft",
|
|
"icon": "microsoft",
|
|
"pages": [
|
|
"home/setup/onedrive",
|
|
"home/setup/sharepoint"
|
|
]
|
|
},
|
|
{
|
|
"group": "Cloud Files",
|
|
"icon": "folder-open",
|
|
"pages": [
|
|
"home/setup/dropbox",
|
|
"home/setup/box",
|
|
"home/setup/nextcloud",
|
|
"home/setup/databricks"
|
|
]
|
|
},
|
|
{
|
|
"group": "Code & DevOps",
|
|
"icon": "code",
|
|
"pages": [
|
|
"home/setup/github",
|
|
"home/setup/linear",
|
|
"home/setup/langfuse"
|
|
]
|
|
},
|
|
{
|
|
"group": "Messaging",
|
|
"icon": "comments",
|
|
"pages": [
|
|
"home/setup/slack",
|
|
"home/setup/discord",
|
|
"home/setup/email"
|
|
]
|
|
},
|
|
{
|
|
"group": "Database",
|
|
"icon": "database",
|
|
"pages": [
|
|
"home/setup/mongodb",
|
|
"home/setup/gridfs",
|
|
"home/setup/postgres",
|
|
"home/setup/chroma",
|
|
"home/setup/lancedb",
|
|
"home/setup/qdrant"
|
|
]
|
|
},
|
|
{
|
|
"group": "Knowledge",
|
|
"icon": "brain",
|
|
"pages": [
|
|
"home/setup/dify"
|
|
]
|
|
},
|
|
{
|
|
"group": "Memory",
|
|
"icon": "/images/mem0.svg",
|
|
"pages": [
|
|
"home/setup/mem0"
|
|
]
|
|
},
|
|
{
|
|
"group": "Notes",
|
|
"icon": "book",
|
|
"pages": [
|
|
"home/setup/notion"
|
|
]
|
|
},
|
|
{
|
|
"group": "Others",
|
|
"icon": "ellipsis",
|
|
"pages": [
|
|
"home/setup/trello"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"group": "FUSE",
|
|
"icon": "hard-drive",
|
|
"pages": [
|
|
"home/setup/fuse",
|
|
"home/setup/macos",
|
|
"home/setup/linux",
|
|
"home/setup/windows"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"tab": "Python",
|
|
"icon": "/images/python-logo.svg",
|
|
"groups": [
|
|
{
|
|
"group": "Getting Started",
|
|
"pages": [
|
|
"python/install",
|
|
"python/quickstart",
|
|
"python/setup/fuse"
|
|
]
|
|
},
|
|
{
|
|
"group": "Agents",
|
|
"icon": "robot",
|
|
"pages": [
|
|
"python/agents/index",
|
|
"python/agents/openai-agents",
|
|
"python/agents/langchain",
|
|
"python/agents/openhands",
|
|
"python/agents/pydantic-ai",
|
|
"python/agents/camel",
|
|
"python/agents/agno",
|
|
"python/agents/haystack",
|
|
"python/agents/claude-code",
|
|
"python/agents/claude-agent-sdk",
|
|
"python/agents/codex",
|
|
"python/agents/grok-build"
|
|
]
|
|
},
|
|
{
|
|
"group": "Resources",
|
|
"pages": [
|
|
"python/resource/index",
|
|
{
|
|
"group": "Infrastructure",
|
|
"icon": "server",
|
|
"pages": [
|
|
"python/resource/disk",
|
|
"python/resource/ram",
|
|
"python/resource/redis",
|
|
"python/resource/ssh"
|
|
]
|
|
},
|
|
{
|
|
"group": "Object Storage",
|
|
"icon": "cloud",
|
|
"pages": [
|
|
"python/resource/s3",
|
|
"python/resource/r2",
|
|
"python/resource/gcs",
|
|
"python/resource/supabase",
|
|
"python/resource/oci",
|
|
"python/resource/minio",
|
|
"python/resource/ceph",
|
|
"python/resource/seaweedfs",
|
|
"python/resource/wasabi",
|
|
"python/resource/backblaze",
|
|
"python/resource/digitalocean",
|
|
"python/resource/tencent",
|
|
"python/resource/aliyun",
|
|
"python/resource/scaleway",
|
|
"python/resource/qingstor"
|
|
]
|
|
},
|
|
{
|
|
"group": "Hugging Face",
|
|
"icon": "/images/huggingface-logo.svg",
|
|
"pages": [
|
|
"python/resource/hf_buckets",
|
|
"python/resource/hf_datasets",
|
|
"python/resource/hf_models",
|
|
"python/resource/hf_spaces"
|
|
]
|
|
},
|
|
{
|
|
"group": "Google Workspace",
|
|
"icon": "google",
|
|
"pages": [
|
|
"python/resource/gmail",
|
|
"python/resource/gdrive",
|
|
"python/resource/gdocs",
|
|
"python/resource/gsheets",
|
|
"python/resource/gslides"
|
|
]
|
|
},
|
|
{
|
|
"group": "Microsoft",
|
|
"icon": "microsoft",
|
|
"pages": [
|
|
"python/resource/onedrive",
|
|
"python/resource/sharepoint"
|
|
]
|
|
},
|
|
{
|
|
"group": "Cloud Files",
|
|
"icon": "folder-open",
|
|
"pages": [
|
|
"python/resource/box",
|
|
"python/resource/dropbox",
|
|
"python/resource/nextcloud",
|
|
"python/resource/databricks_volume"
|
|
]
|
|
},
|
|
{
|
|
"group": "Code & DevOps",
|
|
"icon": "code",
|
|
"pages": [
|
|
"python/resource/github",
|
|
"python/resource/linear",
|
|
"python/resource/langfuse"
|
|
]
|
|
},
|
|
{
|
|
"group": "Messaging",
|
|
"icon": "comments",
|
|
"pages": [
|
|
"python/resource/slack",
|
|
"python/resource/discord",
|
|
"python/resource/email"
|
|
]
|
|
},
|
|
{
|
|
"group": "Database",
|
|
"icon": "database",
|
|
"pages": [
|
|
"python/resource/mongodb",
|
|
"python/resource/gridfs",
|
|
"python/resource/postgres",
|
|
"python/resource/chroma",
|
|
"python/resource/lancedb",
|
|
"python/resource/qdrant"
|
|
]
|
|
},
|
|
{
|
|
"group": "Knowledge",
|
|
"icon": "brain",
|
|
"pages": [
|
|
"python/resource/dify"
|
|
]
|
|
},
|
|
{
|
|
"group": "Memory",
|
|
"icon": "/images/mem0.svg",
|
|
"pages": [
|
|
"python/resource/mem0"
|
|
]
|
|
},
|
|
{
|
|
"group": "Notes",
|
|
"icon": "book",
|
|
"pages": [
|
|
"python/resource/notion"
|
|
]
|
|
},
|
|
{
|
|
"group": "Others",
|
|
"icon": "ellipsis",
|
|
"pages": [
|
|
"python/resource/trello"
|
|
]
|
|
},
|
|
"python/resource/new"
|
|
]
|
|
},
|
|
{
|
|
"group": "CLIs",
|
|
"pages": [
|
|
"python/cli/index",
|
|
"python/cli/himalaya",
|
|
"python/cli/gws",
|
|
"python/cli/slack",
|
|
"python/cli/discord",
|
|
"python/cli/ntn",
|
|
"python/cli/linear",
|
|
"python/cli/gh",
|
|
"python/cli/git"
|
|
]
|
|
},
|
|
{
|
|
"group": "Watch",
|
|
"icon": "bell",
|
|
"pages": [
|
|
"python/watch",
|
|
"python/watch-matrix"
|
|
]
|
|
},
|
|
{
|
|
"group": "Runtimes",
|
|
"pages": [
|
|
"python/runtime/python",
|
|
"python/runtime/javascript",
|
|
{
|
|
"group": "Sandbox",
|
|
"icon": "server",
|
|
"pages": [
|
|
"python/runtime/sandbox",
|
|
"python/runtime/sandbox/sandlock",
|
|
"python/runtime/sandbox/docker",
|
|
"python/runtime/sandbox/smolvm",
|
|
"python/runtime/sandbox/daytona",
|
|
"python/runtime/sandbox/e2b",
|
|
"python/runtime/sandbox/ssh"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"tab": "TS",
|
|
"icon": "/images/typescript-logo.svg",
|
|
"groups": [
|
|
{
|
|
"group": "Getting Started",
|
|
"pages": [
|
|
"typescript/install",
|
|
"typescript/quickstart",
|
|
"typescript/server-and-cli",
|
|
"typescript/setup/fuse",
|
|
"typescript/python",
|
|
"typescript/python-fs",
|
|
"typescript/limitations"
|
|
]
|
|
},
|
|
{
|
|
"group": "Agents",
|
|
"icon": "robot",
|
|
"pages": [
|
|
"typescript/agents/index",
|
|
"typescript/agents/openai",
|
|
"typescript/agents/langchain",
|
|
"typescript/agents/pi",
|
|
"typescript/agents/vercel",
|
|
"typescript/agents/mastra",
|
|
"typescript/agents/opencode",
|
|
"typescript/agents/claude-code",
|
|
"typescript/agents/claude-agent-sdk",
|
|
"typescript/agents/codex",
|
|
"typescript/agents/grok-build",
|
|
"typescript/agents/dsh"
|
|
]
|
|
},
|
|
{
|
|
"group": "Resources",
|
|
"pages": [
|
|
{
|
|
"group": "Infrastructure",
|
|
"icon": "server",
|
|
"pages": [
|
|
"typescript/setup/disk",
|
|
"typescript/setup/opfs",
|
|
"typescript/setup/redis",
|
|
"typescript/setup/ssh"
|
|
]
|
|
},
|
|
{
|
|
"group": "Object Storage",
|
|
"icon": "cloud",
|
|
"pages": [
|
|
"typescript/setup/s3",
|
|
"typescript/setup/r2",
|
|
"typescript/setup/gcs",
|
|
"typescript/setup/oci",
|
|
"typescript/setup/supabase",
|
|
"typescript/setup/minio",
|
|
"typescript/setup/ceph",
|
|
"typescript/setup/seaweedfs",
|
|
"typescript/setup/wasabi",
|
|
"typescript/setup/backblaze",
|
|
"typescript/setup/digitalocean",
|
|
"typescript/setup/tencent",
|
|
"typescript/setup/aliyun",
|
|
"typescript/setup/scaleway",
|
|
"typescript/setup/qingstor"
|
|
]
|
|
},
|
|
{
|
|
"group": "Hugging Face",
|
|
"icon": "/images/huggingface-logo.svg",
|
|
"pages": [
|
|
"typescript/setup/hf_buckets",
|
|
"typescript/setup/hf_datasets",
|
|
"typescript/setup/hf_models",
|
|
"typescript/setup/hf_spaces"
|
|
]
|
|
},
|
|
{
|
|
"group": "Google Workspace",
|
|
"icon": "google",
|
|
"pages": [
|
|
"typescript/setup/gmail",
|
|
"typescript/setup/gdrive",
|
|
"typescript/setup/gdocs",
|
|
"typescript/setup/gsheets",
|
|
"typescript/setup/gslides"
|
|
]
|
|
},
|
|
{
|
|
"group": "Microsoft",
|
|
"icon": "microsoft",
|
|
"pages": [
|
|
"typescript/setup/onedrive",
|
|
"typescript/setup/sharepoint"
|
|
]
|
|
},
|
|
{
|
|
"group": "Cloud Files",
|
|
"icon": "folder-open",
|
|
"pages": [
|
|
"typescript/dropbox",
|
|
"typescript/box",
|
|
"typescript/setup/databricks_volume"
|
|
]
|
|
},
|
|
{
|
|
"group": "Code & DevOps",
|
|
"icon": "code",
|
|
"pages": [
|
|
"typescript/setup/github",
|
|
"typescript/setup/linear",
|
|
"typescript/setup/langfuse"
|
|
]
|
|
},
|
|
{
|
|
"group": "Messaging",
|
|
"icon": "comments",
|
|
"pages": [
|
|
"typescript/slack",
|
|
"typescript/discord",
|
|
"typescript/setup/email"
|
|
]
|
|
},
|
|
{
|
|
"group": "Database",
|
|
"icon": "database",
|
|
"pages": [
|
|
"typescript/setup/mongodb",
|
|
"typescript/setup/gridfs",
|
|
"typescript/setup/postgres",
|
|
"typescript/setup/chroma",
|
|
"typescript/setup/lancedb",
|
|
"typescript/setup/qdrant"
|
|
]
|
|
},
|
|
{
|
|
"group": "Memory",
|
|
"icon": "/images/mem0.svg",
|
|
"pages": [
|
|
"typescript/setup/mem0"
|
|
]
|
|
},
|
|
{
|
|
"group": "Notes",
|
|
"icon": "book",
|
|
"pages": [
|
|
"typescript/setup/notion"
|
|
]
|
|
},
|
|
{
|
|
"group": "Others",
|
|
"icon": "ellipsis",
|
|
"pages": [
|
|
"typescript/setup/trello"
|
|
]
|
|
},
|
|
"typescript/resource/new"
|
|
]
|
|
},
|
|
{
|
|
"group": "CLIs",
|
|
"pages": [
|
|
"typescript/cli/index",
|
|
"typescript/cli/himalaya",
|
|
"typescript/cli/gws",
|
|
"typescript/cli/slack",
|
|
"typescript/cli/discord",
|
|
"typescript/cli/ntn",
|
|
"typescript/cli/linear",
|
|
"typescript/cli/gh",
|
|
"typescript/cli/git"
|
|
]
|
|
},
|
|
{
|
|
"group": "Watch",
|
|
"icon": "bell",
|
|
"pages": [
|
|
"typescript/watch",
|
|
"typescript/watch-matrix"
|
|
]
|
|
},
|
|
{
|
|
"group": "Runtimes",
|
|
"pages": [
|
|
"typescript/runtime/python",
|
|
"typescript/runtime/javascript",
|
|
{
|
|
"group": "Sandbox",
|
|
"icon": "server",
|
|
"pages": [
|
|
"typescript/runtime/sandbox",
|
|
"typescript/runtime/sandbox/docker",
|
|
"typescript/runtime/sandbox/smolvm",
|
|
"typescript/runtime/sandbox/daytona",
|
|
"typescript/runtime/sandbox/e2b",
|
|
"typescript/runtime/sandbox/ssh"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"navbar": {
|
|
"links": [
|
|
{
|
|
"label": "mirage",
|
|
"icon": "globe",
|
|
"href": "https://www.strukto.ai/mirage"
|
|
},
|
|
{
|
|
"label": "Discord",
|
|
"icon": "discord",
|
|
"href": "https://discord.gg/u8BPQ65KsS"
|
|
},
|
|
{
|
|
"label": "",
|
|
"icon": "x-twitter",
|
|
"href": "https://x.com/struktoai"
|
|
},
|
|
{
|
|
"label": "strukto-ai/mirage",
|
|
"icon": "github",
|
|
"href": "https://github.com/strukto-ai/mirage"
|
|
}
|
|
]
|
|
},
|
|
"footer": {
|
|
"socials": {
|
|
"github": "https://github.com/strukto-ai/mirage"
|
|
}
|
|
}
|
|
}
|