{"_id":"@cardstack/workspace-sync-cli","_rev":"6-f341b6cb816c616bdf3f7cd50cb44b24","name":"@cardstack/workspace-sync-cli","dist-tags":{"latest":"1.0.1"},"versions":{"0.1.0":{"name":"@cardstack/workspace-sync-cli","version":"0.1.0","keywords":["boxel","workspace","sync","cli","cardstack"],"author":{"name":"Cardstack"},"license":"MIT","_id":"@cardstack/workspace-sync-cli@0.1.0","maintainers":[{"name":"burcunoyan","email":"burcu.noyan@cardstack.com"},{"name":"ef4","email":"edward@eaf4.com"},{"name":"habdelra","email":"hassan.abdelrahman@gmail.com"},{"name":"lukemelia","email":"luke@lukemelia.com"},{"name":"jurgen","email":"matic@jurglic.si"},{"name":"pcjun97","email":"pcjun97@gmail.com"},{"name":"backspace","email":"b@chromatin.ca"},{"name":"tintinthong","email":"justinthong93@gmail.com"},{"name":"iancalcardstack","email":"ian.calvert@cardstack.com"}],"homepage":"https://github.com/cardstack/boxel#readme","bugs":{"url":"https://github.com/cardstack/boxel/issues"},"bin":{"workspace-pull":"dist/pull.js","workspace-push":"dist/push.js"},"dist":{"shasum":"d7e283afbd3f5b71efb99e3213702d5cd60af49d","tarball":"https://registry.npmjs.org/@cardstack/workspace-sync-cli/-/workspace-sync-cli-0.1.0.tgz","fileCount":5,"integrity":"sha512-uxGtQZwaSkB6+d2CrKeCp0FGiIFvWiA5R47udSfdLSZAMoevh61mbwfEA4Y03NQWimBuu8UbxBpMhA0bNrSqCw==","signatures":[{"sig":"MEYCIQCw8R3NUy49DswNX9xY3VexfSVmB9cU2Si1Iupa41yoDAIhAKdOXjoLzKCuDvO/P6vyO+FNQjda2SNWO6L2T3OCwLbR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6863185},"main":"./dist/index.js","volta":{"extends":"../../package.json"},"engines":{"node":">=18.0.0"},"gitHead":"d7e769b60aec671450288f4f97f0f60622bfbb56","scripts":{"lint":"concurrently \"pnpm:lint:*(!fix)\" --names \"lint:\"","pull":"NODE_NO_WARNINGS=1 ts-node --transpileOnly src/pull.ts","push":"NODE_NO_WARNINGS=1 ts-node --transpileOnly src/push.ts","build":"pnpm clean && tsx scripts/build.ts","clean":"rm -rf dist/*","lint:js":"eslint . --report-unused-disable-directives --cache","lint:fix":"concurrently \"pnpm:lint:*:fix\" --names \"fix:\"","lint:js:fix":"eslint . --report-unused-disable-directives --fix","publish:dry":"npm publish --dry-run","publish:npm":"npm publish","version:major":"npm version major","version:minor":"npm version minor","version:patch":"npm version patch"},"_npmUser":{"name":"iancalcardstack","actor":{"name":"iancalcardstack","type":"user","email":"ian.calvert@cardstack.com"},"email":"ian.calvert@cardstack.com"},"repository":{"url":"git+https://github.com/cardstack/boxel.git","type":"git","directory":"packages/realm-sync-cli"},"_npmVersion":"10.8.2","description":"CLI tools for syncing files between local directories and Boxel workspaces","directories":{},"_nodeVersion":"20.19.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","ignore":"^5.3.0","esbuild":"^0.19.0","ts-node":"^10.9.1","typescript":"~5.1.6","@types/node":"^18.18.5","concurrently":"catalog:","@cardstack/runtime-common":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/workspace-sync-cli_0.1.0_1750955779366_0.14115196341006797","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Deprecated. Use @cardstack/boxel-cli: 'boxel realm push|pull|sync'. See https://github.com/cardstack/boxel/tree/main/packages/boxel-cli"},"0.3.0":{"name":"@cardstack/workspace-sync-cli","version":"0.3.0","keywords":["boxel","workspace","sync","cli","cardstack"],"author":{"name":"Cardstack"},"license":"MIT","_id":"@cardstack/workspace-sync-cli@0.3.0","maintainers":[{"name":"burcunoyan","email":"burcu.noyan@cardstack.com"},{"name":"ef4","email":"edward@eaf4.com"},{"name":"habdelra","email":"hassan.abdelrahman@gmail.com"},{"name":"lukemelia","email":"luke@lukemelia.com"},{"name":"jurgen","email":"matic@jurglic.si"},{"name":"pcjun97","email":"pcjun97@gmail.com"},{"name":"backspace","email":"b@chromatin.ca"},{"name":"tintinthong","email":"justinthong93@gmail.com"},{"name":"iancalcardstack","email":"ian.calvert@cardstack.com"}],"homepage":"https://github.com/cardstack/boxel#readme","bugs":{"url":"https://github.com/cardstack/boxel/issues"},"bin":{"workspace-pull":"dist/pull.js","workspace-push":"dist/push.js"},"dist":{"shasum":"6c5009e1c63faa742bb99da5107a660df454d543","tarball":"https://registry.npmjs.org/@cardstack/workspace-sync-cli/-/workspace-sync-cli-0.3.0.tgz","fileCount":5,"integrity":"sha512-VgROcrupPI8pE+9Ts6fe2voK5wfz8P52JiyllLPwt1b+VFLTfe/iUrF4TVVqrQmVEP3knv/L+T3ajLuZJI5J2Q==","signatures":[{"sig":"MEUCIQCVe9W2hzlfME282K5HUanxdxDRQh6cX7K40j2u6QFfOgIgKTvnOPDkWHGW8ax7RMDnlQ0VgFQBxuXEbGfcjqZXy3o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6867520},"main":"./dist/index.js","volta":{"extends":"../../package.json"},"engines":{"node":">=18.0.0"},"gitHead":"f4e65b4b333c5c6b911300df62153252b80855e1","scripts":{"lint":"concurrently \"pnpm:lint:*(!fix)\" --names \"lint:\"","pull":"NODE_NO_WARNINGS=1 ts-node --transpileOnly src/pull.ts","push":"NODE_NO_WARNINGS=1 ts-node --transpileOnly src/push.ts","test":"NODE_NO_WARNINGS=1 qunit --require ts-node/register/transpile-only tests/index.ts","build":"pnpm clean && tsx scripts/build.ts","clean":"rm -rf dist/*","lint:js":"eslint . --report-unused-disable-directives --cache","lint:fix":"concurrently \"pnpm:lint:*:fix\" --names \"fix:\"","lint:js:fix":"eslint . --report-unused-disable-directives --fix","publish:dry":"npm publish --dry-run","publish:npm":"npm publish","version:major":"npm version major","version:minor":"npm version minor","version:patch":"npm version patch"},"_npmUser":{"name":"iancalcardstack","email":"ian.calvert@cardstack.com"},"repository":{"url":"git+https://github.com/cardstack/boxel.git","type":"git","directory":"packages/realm-sync-cli"},"_npmVersion":"10.8.2","description":"CLI tools for syncing files between local directories and Boxel workspaces","directories":{},"_nodeVersion":"20.19.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","qunit":"^2.24.1","ignore":"^5.3.0","esbuild":"^0.19.0","ts-node":"^10.9.1","typescript":"~5.1.6","@types/node":"^18.18.5","@types/qunit":"catalog:","concurrently":"catalog:","@cardstack/runtime-common":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/workspace-sync-cli_0.3.0_1752604225794_0.8344604541763152","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Deprecated. Use @cardstack/boxel-cli: 'boxel realm push|pull|sync'. See https://github.com/cardstack/boxel/tree/main/packages/boxel-cli"},"1.0.0":{"name":"@cardstack/workspace-sync-cli","version":"1.0.0","keywords":["boxel","workspace","sync","cli","cardstack"],"author":{"name":"Cardstack"},"license":"MIT","_id":"@cardstack/workspace-sync-cli@1.0.0","maintainers":[{"name":"burcunoyan","email":"burcu.noyan@cardstack.com"},{"name":"ef4","email":"edward@eaf4.com"},{"name":"habdelra","email":"hassan.abdelrahman@gmail.com"},{"name":"lukemelia","email":"luke@lukemelia.com"},{"name":"jurgen","email":"matic@jurglic.si"},{"name":"pcjun97","email":"pcjun97@gmail.com"},{"name":"backspace","email":"b@chromatin.ca"},{"name":"tintinthong","email":"justinthong93@gmail.com"},{"name":"iancalcardstack","email":"ian.calvert@cardstack.com"}],"homepage":"https://github.com/cardstack/boxel#readme","bugs":{"url":"https://github.com/cardstack/boxel/issues"},"bin":{"workspace-pull":"dist/pull.js","workspace-push":"dist/push.js"},"dist":{"shasum":"a8739e4b04131a94afd5360bc287e63545fbb865","tarball":"https://registry.npmjs.org/@cardstack/workspace-sync-cli/-/workspace-sync-cli-1.0.0.tgz","fileCount":5,"integrity":"sha512-n67WSxWHWPTUkjsFMeSzoCz9IKdzuGRSyuhWxokiFUvIh7H5dM1rYp/18ltTjf0JbycVBFLKJ5o5hGxOuQorkg==","signatures":[{"sig":"MEUCIFzI7RAX5hpUCw+ILYExuZzvYdQIG7r23dRBWVdv4uPHAiEA7R8dxKJmWPJythrezWH71DfmnEjLyFEL83jikvIO7EI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19379065},"main":"./dist/index.js","volta":{"extends":"../../package.json"},"engines":{"node":">=18.0.0"},"gitHead":"c2aeb8f0399a6b87e0d831a93a70194d74f40f59","scripts":{"lint":"concurrently \"pnpm:lint:*(!fix)\" --names \"lint:\"","pull":"NODE_NO_WARNINGS=1 ts-node --transpileOnly src/pull.ts","push":"NODE_NO_WARNINGS=1 ts-node --transpileOnly src/push.ts","test":"NODE_NO_WARNINGS=1 qunit --require ts-node/register/transpile-only tests/index.ts","build":"pnpm clean && tsx scripts/build.ts","clean":"rm -rf dist/*","lint:js":"eslint . --report-unused-disable-directives --cache","lint:fix":"concurrently \"pnpm:lint:*:fix\" --names \"fix:\"","lint:js:fix":"eslint . --report-unused-disable-directives --fix","publish:dry":"npm publish --dry-run","publish:npm":"npm publish","version:major":"npm version major","version:minor":"npm version minor","version:patch":"npm version patch"},"_npmUser":{"name":"iancalcardstack","email":"ian.calvert@cardstack.com"},"repository":{"url":"git+https://github.com/cardstack/boxel.git","type":"git","directory":"packages/realm-sync-cli"},"_npmVersion":"10.9.3","description":"CLI tools for syncing files between local directories and Boxel workspaces","directories":{},"_nodeVersion":"22.20.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","qunit":"^2.24.1","ignore":"^5.3.0","esbuild":"^0.19.0","ts-node":"^10.9.1","typescript":"catalog:","@types/node":"catalog:","@types/qunit":"catalog:","concurrently":"catalog:","@cardstack/local-types":"workspace:*","@cardstack/runtime-common":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/workspace-sync-cli_1.0.0_1766504632773_0.9660908188014892","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Deprecated. Use @cardstack/boxel-cli: 'boxel realm push|pull|sync'. See https://github.com/cardstack/boxel/tree/main/packages/boxel-cli"},"1.0.1":{"name":"@cardstack/workspace-sync-cli","version":"1.0.1","keywords":["boxel","workspace","sync","cli","cardstack"],"author":{"name":"Cardstack"},"license":"MIT","_id":"@cardstack/workspace-sync-cli@1.0.1","maintainers":[{"name":"burcunoyan","email":"burcu.noyan@cardstack.com"},{"name":"ef4","email":"edward@eaf4.com"},{"name":"habdelra","email":"hassan.abdelrahman@gmail.com"},{"name":"lukemelia","email":"luke@lukemelia.com"},{"name":"jurgen","email":"matic@jurglic.si"},{"name":"pcjun97","email":"pcjun97@gmail.com"},{"name":"backspace","email":"b@chromatin.ca"},{"name":"tintinthong","email":"justinthong93@gmail.com"},{"name":"iancalcardstack","email":"ian.calvert@cardstack.com"}],"homepage":"https://github.com/cardstack/boxel#readme","bugs":{"url":"https://github.com/cardstack/boxel/issues"},"bin":{"workspace-pull":"dist/pull.js","workspace-push":"dist/push.js"},"dist":{"shasum":"ac4f1930baa64bc5d4e1f8003afebd7bb3767083","tarball":"https://registry.npmjs.org/@cardstack/workspace-sync-cli/-/workspace-sync-cli-1.0.1.tgz","fileCount":8,"integrity":"sha512-Ow83YkelYxsyHuNke/6vGsdc2J4SHsYdFBG1aJWu4I7Z88K9Wpr3YjYKB5QWGue7MMdgEEWG03HeIIX4CXWS8w==","signatures":[{"sig":"MEUCIQC+zjy2AWf72rrUkPc6INcFSTeyW5nPw4cuQ4IH51qXzgIgVpNQLsdqs3rL8h1h9EjUMmlExXCEvL/vJKnQ5F9BJUs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20494759},"main":"./dist/index.js","volta":{"extends":"../../package.json"},"engines":{"node":">=18.0.0"},"gitHead":"cf3abb2d749691426eda5d8db76f4ced09f4bad5","scripts":{"lint":"concurrently \"pnpm:lint:*(!fix)\" --names \"lint:\"","pull":"NODE_NO_WARNINGS=1 ts-node --transpileOnly src/pull.ts","push":"NODE_NO_WARNINGS=1 ts-node --transpileOnly src/push.ts","test":"NODE_NO_WARNINGS=1 qunit --require ts-node/register/transpile-only tests/index.ts","build":"pnpm clean && tsx scripts/build.ts","clean":"rm -rf dist/*","lint:js":"eslint . --report-unused-disable-directives --cache","lint:fix":"concurrently \"pnpm:lint:*:fix\" --names \"fix:\"","lint:js:fix":"eslint . --report-unused-disable-directives --fix","publish:dry":"npm publish --dry-run","publish:npm":"npm publish","version:major":"npm version major","version:minor":"npm version minor","version:patch":"npm version patch"},"_npmUser":{"name":"backspace","email":"b@chromatin.ca"},"repository":{"url":"git+https://github.com/cardstack/boxel.git","type":"git","directory":"packages/realm-sync-cli"},"_npmVersion":"11.6.0","description":"CLI tools for syncing files between local directories and Boxel workspaces","directories":{},"_nodeVersion":"22.20.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","qunit":"^2.24.1","ignore":"^5.3.0","esbuild":"^0.19.0","ts-node":"^10.9.1","typescript":"catalog:","@types/node":"catalog:","@types/qunit":"catalog:","concurrently":"catalog:","@cardstack/local-types":"workspace:*","@cardstack/runtime-common":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/workspace-sync-cli_1.0.1_1770314782472_0.2018312080330471","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Deprecated. Use @cardstack/boxel-cli: 'boxel realm push|pull|sync'. See https://github.com/cardstack/boxel/tree/main/packages/boxel-cli"}},"time":{"created":"2025-06-26T16:36:19.261Z","modified":"2026-05-21T03:39:50.564Z","0.1.0":"2025-06-26T16:36:19.583Z","0.3.0":"2025-07-15T18:30:26.089Z","1.0.0":"2025-12-23T15:43:53.131Z","1.0.1":"2026-02-05T18:06:22.817Z"},"bugs":{"url":"https://github.com/cardstack/boxel/issues"},"author":{"name":"Cardstack"},"license":"MIT","homepage":"https://github.com/cardstack/boxel#readme","keywords":["boxel","workspace","sync","cli","cardstack"],"repository":{"url":"git+https://github.com/cardstack/boxel.git","type":"git","directory":"packages/realm-sync-cli"},"description":"CLI tools for syncing files between local directories and Boxel workspaces","maintainers":[{"name":"backspace","email":"b@chromatin.ca"},{"name":"burcunoyan","email":"burcu.noyan@cardstack.com"},{"name":"ef4","email":"edward@eaf4.com"},{"name":"fadhlanr","email":"fadhlan.ridhwanallah@cardstack.com"},{"name":"habdelra","email":"hassan.abdelrahman@gmail.com"},{"name":"iancalcardstack","email":"ian.calvert@cardstack.com"},{"name":"jurgen","email":"matic@jurglic.si"},{"name":"lukemelia","email":"luke@lukemelia.com"},{"name":"pcjun97","email":"pcjun97@gmail.com"},{"name":"tintinthong","email":"justinthong93@gmail.com"}],"readme":"# Workspace Sync CLI\n\nCLI tools for syncing files between local directories and Boxel workspaces.\n\n## Installation\n\n### Global Installation (Recommended)\n\n```bash\nnpm install -g @cardstack/workspace-sync-cli\n```\n\n### Per-project Installation\n\n```bash\nnpm install @cardstack/workspace-sync-cli\nnpx workspace-push --help\nnpx workspace-pull --help\n```\n\n### Development Installation\n\n```bash\ngit clone https://github.com/cardstack/boxel.git\ncd boxel/packages/realm-sync-cli\npnpm install\npnpm package\nnpm install -g ...\n```\n\n## Authentication\n\nBoth commands require Matrix credentials to authenticate with the workspace:\n\n```bash\nexport MATRIX_URL=\"https://matrix.boxel.ai\"\nexport MATRIX_USERNAME=\"your-username\"\nexport MATRIX_PASSWORD=\"your-password\"\n\n# Optionally you can provide the realm's secret seed and the CLI will derive\n# the matrix credentials from the workspace URL:\n#   /<owner>/<endpoint>/  -> realm/<owner>_<endpoint>\n#   /base/, /skills/, ... -> <slug>_realm\n#   /published/<id>/      -> realm/published_<id>\nexport REALM_SECRET_SEED=\"super-secret-seed\"\n```\n\n## Usage\n\n### Push (Local → Workspace)\n\nUploads files from a local directory to a workspace.\n\n```bash\nworkspace-push <LOCAL_DIR> <WORKSPACE_URL> [OPTIONS]\n```\n\n**Arguments:**\n\n- `LOCAL_DIR` - The local directory containing files to sync\n- `WORKSPACE_URL` - The URL of the target workspace (e.g., https://app.boxel.ai/demo/)\n\n**Options:**\n\n- `--delete` - Delete remote files that don't exist locally\n- `--dry-run` - Show what would be done without making changes\n- `--help, -h` - Show help message\n\n**Examples:**\n\n```bash\nworkspace-push ./my-cards https://app.boxel.ai/demo/\nworkspace-push ./my-cards https://app.boxel.ai/demo/ --delete --dry-run\n```\n\n### Pull (Workspace → Local)\n\nDownloads files from a workspace to a local directory.\n\n```bash\nworkspace-pull <WORKSPACE_URL> <LOCAL_DIR> [OPTIONS]\n```\n\n**Arguments:**\n\n- `WORKSPACE_URL` - The URL of the source workspace (e.g., https://app.boxel.ai/demo/)\n- `LOCAL_DIR` - The local directory to sync files to\n\n**Options:**\n\n- `--delete` - Delete local files that don't exist in the workspace\n- `--dry-run` - Show what would be done without making changes\n- `--help, -h` - Show help message\n\n**Examples:**\n\n```bash\nworkspace-pull https://app.boxel.ai/demo/ ./my-cards\nworkspace-pull https://app.boxel.ai/demo/ ./my-cards --delete --dry-run\n```\n\n## File Filtering\n\nThe sync commands automatically filter files based on several criteria to avoid syncing unwanted content:\n\n### Automatic Filtering\n\n- **Dotfiles**: All files and directories starting with a dot (`.`) are automatically ignored\n  - Examples: `.DS_Store`, `.env`, `.git/`, `.vscode/`\n- **`.gitignore` files**: Standard gitignore patterns are respected\n- **Hierarchical**: Checks for `.gitignore` files in current directory and all parent directories\n- **Standard patterns**: Supports all gitignore pattern syntax (wildcards, negation, etc.)\n\n### Boxelignore Support\n\n- **`.boxelignore` files**: Workspace-specific ignore patterns (same syntax as `.gitignore`)\n- **Use case**: Exclude files from workspace sync while keeping them in git\n- **Priority**: Applied in addition to `.gitignore` patterns\n- **Hierarchical**: Works the same way as `.gitignore` files\n\n### Example Ignore Files\n\n**`.gitignore`** (standard git ignoring):\n\n```\nnode_modules/\n*.log\n.env\n```\n\n**`.boxelignore`** (workspace-specific ignoring):\n\n```\n# Keep in git but exclude from workspace\ndocs/\ntest-data/\n*.draft.gts\ndevelopment-cards/\n```\n\n## Development\n\n### Building\n\n```bash\n# Clean and build bundled executables\npnpm build\n```\n\n### Development Scripts\n\n```bash\npnpm push <LOCAL_DIR> <WORKSPACE_URL> [OPTIONS]\npnpm pull <WORKSPACE_URL> <LOCAL_DIR> [OPTIONS]\n```\n\n### Code Quality\n\n```bash\n# Linting\npnpm lint\npnpm lint:fix\n```\n\n### Publishing\n\n```bash\n# Version bumping\npnpm version:patch  # 0.1.0 -> 0.1.1\npnpm version:minor  # 0.1.0 -> 0.2.0\npnpm version:major  # 0.1.0 -> 1.0.0\n\n# Publishing\npnpm publish:dry    # Dry run to see what would be published\npnpm publish:npm    # Publish to npm registry\n```\n\n### Testing Built Version\n\n```bash\n# Build and test locally\npnpm build\nnode dist/push.js --help\nnode dist/pull.js --help\n\n# Test as installed package\nnpm pack\nnpm install -g ./cardstack-realm-sync-cli-0.1.0.tgz\nworkspace-push --help\n```\n\n## Features\n\n- **Bundled executables** - Single-file binaries with all dependencies included\n- **Recursive directory syncing** - Handles nested folder structures\n- **Smart file filtering** - Respects `.gitignore` and `.boxelignore` patterns, skips dotfiles\n- **Safe authentication** - Tests workspace access before destructive operations\n- **Detailed logging** - Clear feedback on all operations\n- **Dry-run mode** - Preview changes without making them\n\n## Architecture\n\nThe package uses esbuild to create standalone executables that bundle all dependencies:\n\n- **`workspace-push`** - Standalone executable for uploading files to workspaces\n- **`workspace-pull`** - Standalone executable for downloading files from workspaces\n- **Library API** - Programmatic access via `@cardstack/workspace-sync-cli`\n\n### Components\n\n- `WorkspaceSyncBase` - Abstract base class with common sync functionality\n- `WorkspacePusher` - Implements push (local → workspace) synchronization\n- `WorkspacePuller` - Implements pull (workspace → local) synchronization\n\nAuthentication is handled through the bundled `@cardstack/runtime-common` package using Matrix credentials.\n\n## Requirements\n\n- Node.js 18 or higher\n- Matrix account with workspace access permissions\n\n## License\n\nMIT\n","readmeFilename":"README.md"}