{"_id":"@aliasgarbootwala/aligator","_rev":"7-163c5e1187d96739881e5669a2a944d2","name":"@aliasgarbootwala/aligator","dist-tags":{"latest":"2.1.1"},"versions":{"2.0.1":{"name":"@aliasgarbootwala/aligator","version":"2.0.1","keywords":["mongodb","migration","mongoose","cli","ai","database"],"author":{"name":"Aliasgar"},"license":"MIT","_id":"@aliasgarbootwala/aligator@2.0.1","maintainers":[{"name":"aliasgarbootwala","email":"aliasgarbootwala3@gmail.com"}],"bin":{"aligator":"index.js"},"dist":{"shasum":"20a192942204d5410d578192af1b64bfc68e6686","tarball":"https://registry.npmjs.org/@aliasgarbootwala/aligator/-/aligator-2.0.1.tgz","fileCount":35,"integrity":"sha512-OjZMcwLmelvezcPvJhw3F893yJOJ6JhvdMIKGKCEwLhEgHLe7DT/JgOIW4UGedgrFoK851Rkx+IsGUdnWaLFWA==","signatures":[{"sig":"MEYCIQCuuxy86rZsXvwmdkDkGNxIg+WFlz1vnhvB8tPGE1jpTQIhAPjh7emLirONCcspTLAVGwbxZVOxwCwuQmBU9DtQA++O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45603},"main":"src/sdk/index.js","type":"module","exports":{".":{"import":"./src/sdk/index.js","require":"./src/sdk/index.cjs"}},"gitHead":"5cccc349f059ab6f33c095bd49ce48d1e3d02fde","scripts":{"start":"node src/cli/index.js"},"_npmUser":{"name":"aliasgarbootwala","email":"aliasgarbootwala3@gmail.com"},"_npmVersion":"11.3.0","description":"Aligator is a production-ready MongoDB migration system with a developer-friendly CLI and a programmable SDK. It uses deterministic schema diffing first, and AI only as an assistant for rename detection and migration generation.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"ora":"^8.0.1","pino":"^9.5.0","axios":"^1.14.0","chalk":"^4.1.2","dotenv":"^17.3.1","mongodb":"^7.1.1","mongoose":"^9.3.3","commander":"^14.0.3","cli-table3":"^0.6.5","pino-pretty":"^11.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/aligator_2.0.1_1774771994982_0.14829251020753897","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@aliasgarbootwala/aligator","version":"2.0.2","keywords":["mongodb","migration","mongoose","cli","ai","database"],"author":{"name":"Aliasgar"},"license":"MIT","_id":"@aliasgarbootwala/aligator@2.0.2","maintainers":[{"name":"aliasgarbootwala","email":"aliasgarbootwala3@gmail.com"}],"bin":{"aligator":"index.js"},"dist":{"shasum":"9c11f3b7aa73341f87b54d8123d12904d367bfb9","tarball":"https://registry.npmjs.org/@aliasgarbootwala/aligator/-/aligator-2.0.2.tgz","fileCount":37,"integrity":"sha512-Yki2ZMprdkDlcCcs97mGebSUUgSqdcy7NWNDc0pLnMlZy4lIzL1Es/DmzqDxaqXKYI3q5VP/enbtjvlaprZIVg==","signatures":[{"sig":"MEUCIEZM3jKCAIYZCIj0RRF4Ee557cv1eV+v20EkdreN0YCuAiEAtn16NCQhcvK9NBbTwLMxeX1HYMv14Z7YoHLeaz6AvyA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50176},"main":"src/sdk/index.js","type":"module","exports":{".":{"import":"./src/sdk/index.js","require":"./src/sdk/index.cjs"}},"gitHead":"71e6ba3ca38c927dc3f6febc3cfc853f257e9179","scripts":{"start":"node src/cli/index.js"},"_npmUser":{"name":"aliasgarbootwala","email":"aliasgarbootwala3@gmail.com"},"_npmVersion":"11.3.0","description":"Aligator is a production-ready MongoDB migration system with a developer-friendly CLI and a programmable SDK. It uses deterministic schema diffing first, and AI only as an assistant for rename detection and migration generation.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"ora":"^8.0.1","pino":"^9.5.0","axios":"^1.14.0","chalk":"^4.1.2","dotenv":"^17.3.1","mongodb":"^7.1.1","mongoose":"^9.3.3","commander":"^14.0.3","cli-table3":"^0.6.5","pino-pretty":"^11.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/aligator_2.0.2_1774773488114_0.49812060682684733","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"@aliasgarbootwala/aligator","version":"2.0.3","keywords":["mongodb","migration","mongoose","cli","ai","database"],"author":{"name":"Aliasgar"},"license":"MIT","_id":"@aliasgarbootwala/aligator@2.0.3","maintainers":[{"name":"aliasgarbootwala","email":"aliasgarbootwala3@gmail.com"}],"bin":{"aligator":"index.js"},"dist":{"shasum":"c9cfd18c7ee3a8cb4be2a4d7a197735463f27347","tarball":"https://registry.npmjs.org/@aliasgarbootwala/aligator/-/aligator-2.0.3.tgz","fileCount":38,"integrity":"sha512-DoMpN1OAnchmZl9atVRJQK/+PcUA6HxRCWt0M7ErP7/EcEQejA1JY1sLyBwtQEz+xUtx0zfMLQyAog2+4SNdAQ==","signatures":[{"sig":"MEQCIFPdX4526M9/69FXqWBMMQiwbGtpXJlp8bwnBtzacLmkAiAyUjaxuy6sow+xOAQ1uAQeVM06JayTNZYFc1STSTAGFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54986},"main":"src/sdk/index.js","type":"module","exports":{".":{"import":"./src/sdk/index.js","require":"./src/sdk/index.cjs"}},"gitHead":"768bd2bbe4d170d43e8bd0dd71f2444050da9178","scripts":{"start":"node src/cli/index.js"},"_npmUser":{"name":"aliasgarbootwala","email":"aliasgarbootwala3@gmail.com"},"_npmVersion":"11.3.0","description":"Aligator is a production-ready MongoDB migration system with a developer-friendly CLI and a programmable SDK. It uses deterministic schema diffing first, and AI only as an assistant for rename detection and migration generation.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"ora":"^8.0.1","pino":"^9.5.0","axios":"^1.14.0","chalk":"^4.1.2","dotenv":"^17.3.1","mongodb":"^7.1.1","mongoose":"^9.3.3","commander":"^14.0.3","cli-table3":"^0.6.5","pino-pretty":"^11.3.0","@babel/parser":"^7.25.9","@babel/traverse":"^7.25.9"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/aligator_2.0.3_1774779125159_0.49628150974392726","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"@aliasgarbootwala/aligator","version":"2.0.4","keywords":["mongodb","migration","mongoose","cli","ai","database"],"author":{"name":"Aliasgar"},"license":"MIT","_id":"@aliasgarbootwala/aligator@2.0.4","maintainers":[{"name":"aliasgarbootwala","email":"aliasgarbootwala3@gmail.com"}],"bin":{"aligator":"index.js"},"dist":{"shasum":"d1ae7cfda5d211e38817dee2adf18f3faca6c838","tarball":"https://registry.npmjs.org/@aliasgarbootwala/aligator/-/aligator-2.0.4.tgz","fileCount":40,"integrity":"sha512-xvZjK1etwEDNPq1qaCt6unGMbLijVObrXmmx3pbHMwV4RmptO7Iy/X0dnSh0blTTGNSJIN/fhnkOw6jkBwAhGQ==","signatures":[{"sig":"MEUCIQCO2e4xySRfOHzUNs66qJiqbImvai8bBVQ7+JRgh9S6RgIgWzk+nhvFcZL+84BcnC8XfzF4L4y9sVzm+Y/F146OIz8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61292},"main":"src/sdk/index.js","type":"module","exports":{".":{"import":"./src/sdk/index.js","require":"./src/sdk/index.cjs"}},"gitHead":"6b1a1bdfc720747eed94de875ba5e27e734509e6","scripts":{"start":"node src/cli/index.js"},"_npmUser":{"name":"aliasgarbootwala","email":"aliasgarbootwala3@gmail.com"},"_npmVersion":"11.3.0","description":"Aligator is a production-ready MongoDB migration system with a developer-friendly CLI and a programmable SDK. It uses deterministic schema diffing first, and AI only as an assistant for rename detection and migration generation.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"ora":"^8.0.1","pino":"^9.5.0","axios":"^1.14.0","chalk":"^4.1.2","dotenv":"^17.3.1","mongodb":"^7.1.1","mongoose":"^9.3.3","commander":"^14.0.3","fast-glob":"^3.3.3","cli-table3":"^0.6.5","pino-pretty":"^11.3.0","@babel/parser":"^7.25.9","@babel/traverse":"^7.25.9"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/aligator_2.0.4_1774780294049_0.9503207950061998","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"@aliasgarbootwala/aligator","version":"2.0.5","keywords":["mongodb","migration","mongoose","cli","ai","database"],"author":{"name":"Aliasgar"},"license":"MIT","_id":"@aliasgarbootwala/aligator@2.0.5","maintainers":[{"name":"aliasgarbootwala","email":"aliasgarbootwala3@gmail.com"}],"bin":{"aligator":"index.js"},"dist":{"shasum":"9c3a9fd9a46d18292107a986c36ac3472747870d","tarball":"https://registry.npmjs.org/@aliasgarbootwala/aligator/-/aligator-2.0.5.tgz","fileCount":40,"integrity":"sha512-lSvOS17V7YQgmYkdZ8F4nR/dkT370N+/o9io7oYa1O6gvfLRkuxhytT3Oo5gZnY1OUGB8CGi0mEByP7+p8c/TQ==","signatures":[{"sig":"MEYCIQCzqKIxjMc30vjnTCVxOJ5wHDy1DKXb3S3l8OMiXuZXpAIhAP5p9EXvD7vHpSJqxJ0S+ziRZ2r9xTZweqhQ/7LNfOhl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61338},"main":"src/sdk/index.js","type":"module","exports":{".":{"import":"./src/sdk/index.js","require":"./src/sdk/index.cjs"}},"gitHead":"1496b08bf01367cbef4758e6a82a37bf8d16f48a","scripts":{"start":"node src/cli/index.js"},"_npmUser":{"name":"aliasgarbootwala","email":"aliasgarbootwala3@gmail.com"},"_npmVersion":"11.3.0","description":"Aligator is a production-ready MongoDB migration system with a developer-friendly CLI and a programmable SDK. It uses deterministic schema diffing first, and AI only as an assistant for rename detection and migration generation.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"ora":"^8.0.1","pino":"^9.5.0","axios":"^1.14.0","chalk":"^4.1.2","dotenv":"^17.3.1","mongodb":"^7.1.1","mongoose":"^9.3.3","commander":"^14.0.3","fast-glob":"^3.3.3","cli-table3":"^0.6.5","pino-pretty":"^11.3.0","@babel/parser":"^7.25.9","@babel/traverse":"^7.29.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/aligator_2.0.5_1774781280977_0.8548470599701696","host":"s3://npm-registry-packages-npm-production"}},"2.0.6":{"name":"@aliasgarbootwala/aligator","version":"2.0.6","keywords":["mongodb","migration","mongoose","cli","ai","database"],"author":{"name":"Aliasgar"},"license":"MIT","_id":"@aliasgarbootwala/aligator@2.0.6","maintainers":[{"name":"aliasgarbootwala","email":"aliasgarbootwala3@gmail.com"}],"bin":{"aligator":"index.js"},"dist":{"shasum":"051cb13e1d4b3696bedae18264b1ce4cb7f440da","tarball":"https://registry.npmjs.org/@aliasgarbootwala/aligator/-/aligator-2.0.6.tgz","fileCount":39,"integrity":"sha512-2MakvoZyqk2Ku1zS09dx5jvAumoVy3pYUtiej2b0PiWb9yq8Ox4tJA3v7oYnH5XrbiZjLJ/wOZNWlGFON6Vo2w==","signatures":[{"sig":"MEQCID7vjUmSPE4YoIZtOqwIej/mvsxsm+Btgq4PKLlsx+kbAiA5SshboD/PCJvo5UIvQw2JQODqUhqiMt/C9P8hmmXJmQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66571},"main":"src/sdk/index.js","type":"module","exports":{".":{"import":"./src/sdk/index.js","require":"./src/sdk/index.cjs"}},"gitHead":"9c02c9e54280d752e6da5fc2095aeb5fc17c6730","scripts":{"start":"node src/cli/index.js"},"_npmUser":{"name":"aliasgarbootwala","email":"aliasgarbootwala3@gmail.com"},"_npmVersion":"11.3.0","description":"Aligator is a production-ready MongoDB migration system with a developer-friendly CLI and a programmable SDK. It uses deterministic schema diffing first, and AI only as an assistant for rename detection and migration generation.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"ora":"^8.0.1","pino":"^9.5.0","axios":"^1.14.0","chalk":"^4.1.2","dotenv":"^17.3.1","mongodb":"^7.1.1","mongoose":"^9.3.3","commander":"^14.0.3","fast-glob":"^3.3.3","cli-table3":"^0.6.5","pino-pretty":"^11.3.0","@babel/parser":"^7.25.9","@babel/traverse":"^7.29.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/aligator_2.0.6_1774782731495_0.2073149125954885","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@aliasgarbootwala/aligator","version":"2.1.1","description":"<h1 align=\"center\">🐊 Aligator</h1>","main":"src/sdk/index.js","type":"module","bin":{"aligator":"index.js"},"exports":{".":{"import":"./src/sdk/index.js","require":"./src/sdk/index.cjs"}},"scripts":{"start":"node src/cli/index.js"},"keywords":["mongodb","migration","mongoose","cli","ai","database"],"author":{"name":"Aliasgar"},"license":"MIT","dependencies":{"@babel/parser":"^7.25.9","@babel/traverse":"^7.29.0","axios":"^1.14.0","boxen":"^7.1.1","chalk":"^4.1.2","cli-table3":"^0.6.5","commander":"^14.0.3","dotenv":"^17.3.1","fast-glob":"^3.3.3","inquirer":"^9.3.8","mongodb":"^7.1.1","mongoose":"^9.3.3","ora":"^8.0.1","pino":"^9.5.0","pino-pretty":"^11.3.0"},"gitHead":"7678da263f30a71d68db06ff5e8efd85c6f19756","_id":"@aliasgarbootwala/aligator@2.1.1","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-JtXO6GA39ViTB4idMvrTp6MltJwkumw50YYobOzP+2c2aemFMcMT034SV6aB5CwN6cV8d6hNHBWH8cMAtuoBXA==","shasum":"8b3d75c0e8af60907989242bb5a06b18f31f6ef2","tarball":"https://registry.npmjs.org/@aliasgarbootwala/aligator/-/aligator-2.1.1.tgz","fileCount":52,"unpackedSize":113355,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIENzsNSsRFZPpyHnemArJME4Dma0ju21BAhmD5F99LznAiEAlSNkenudjxrGZVe1s0H/enKz0cwdFnYJASr055kPd8E="}]},"_npmUser":{"name":"aliasgarbootwala","email":"aliasgarbootwala3@gmail.com"},"directories":{},"maintainers":[{"name":"aliasgarbootwala","email":"aliasgarbootwala3@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/aligator_2.1.1_1775930544055_0.859707717371319"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-29T08:13:14.887Z","modified":"2026-04-11T18:02:24.374Z","2.0.1":"2026-03-29T08:13:15.115Z","2.0.2":"2026-03-29T08:38:08.289Z","2.0.3":"2026-03-29T10:12:05.323Z","2.0.4":"2026-03-29T10:31:34.202Z","2.0.5":"2026-03-29T10:48:01.136Z","2.0.6":"2026-03-29T11:12:11.657Z","2.1.1":"2026-04-11T18:02:24.249Z"},"author":{"name":"Aliasgar"},"license":"MIT","keywords":["mongodb","migration","mongoose","cli","ai","database"],"description":"<h1 align=\"center\">🐊 Aligator</h1>","maintainers":[{"name":"aliasgarbootwala","email":"aliasgarbootwala3@gmail.com"}],"readme":"<h1 align=\"center\">🐊 Aligator</h1>\n\n<p align=\"center\">\n  <img src=\"https://img.shields.io/badge/OpenAI-412991?logo=openai&logoColor=white\" />\n  <img src=\"https://img.shields.io/badge/MongoDB-47A248?logo=mongodb&logoColor=white\" />\n  <img src=\"https://img.shields.io/badge/Mongoose-880000?logo=mongoose&logoColor=white\" />\n  <img src=\"https://img.shields.io/badge/Node.js-339933?logo=node.js&logoColor=white\" />\n  <img src=\"https://img.shields.io/badge/Babel-F9DC3E?logo=babel&logoColor=black\" />\n  <img src=\"https://img.shields.io/badge/Axios-5A29E4?logo=axios&logoColor=white\" />\n  <img src=\"https://img.shields.io/badge/Dotenv-ECD53F?logo=dotenv&logoColor=black\" />\n  <img src=\"https://img.shields.io/badge/CLI-000000?logo=gnubash&logoColor=white\" />\n  <img src=\"https://img.shields.io/badge/Logger-Pino-FF6600\" />\n</p>\n\n# Aligator — MongoDB migration SDK + CLI\n\nAligator is a production-ready MongoDB migration system with a guided CLI and a programmable SDK. It uses **deterministic schema diffing first**; AI is optional and only assists with rename detection and script scaffolding—never as the source of truth.\n\n## Highlights\n\n- SDK + CLI hybrid architecture\n- Deterministic diff engine (code vs database)\n- Guided CLI: migration plan summary, interactive rename review, streaming backups\n- Structured migration files: `MIG_0001_YYYY_MM_DD_slug.js`\n- Migration history, rollback, restore, and **streaming** per-version backups (cursor + batch size, not full in-memory loads)\n- Config-driven: backup defaults, `cli.interactive`, `ai.enableRenameDetection`\n- Logging via Pino (e.g. `logs/aligator.log`)\n\n## Installation\n\nFrom a clone of this repo:\n\n```bash\nnpm install\nnpm link   # optional: global `aligator` command\n```\n\nFrom npm (when published):\n\n```bash\nnpm install @aliasgarbootwala/aligator\nnpx aligator --help\n```\n\n## Configuration\n\nCreate `aligator.config.js` in the project root or run:\n\n```bash\naligator init\n```\n\nExample:\n\n```js\nexport default {\n  uri: process.env.MONGO_URI,\n  modelsPath: \"./models\",\n  migrationsPath: \"./migrations\",\n  includePaths: [],\n  excludePaths: [],\n  projects: [],\n  autoRun: false,\n  backup: {\n    enabled: true,\n    defaultBatchSize: 100,\n  },\n  ignoreFields: [\"__v\", \"_id\"],\n  strictMode: true,\n  ai: {\n    enabled: true,\n    enableRenameDetection: true,\n  },\n  cli: {\n    interactive: true,\n  },\n};\n```\n\nLegacy `backup: true` (boolean) is still supported and normalized to `{ enabled: true, defaultBatchSize: 100 }`.\n\nSupported config files:\n\n- `aligator.config.js` (preferred)\n- `aligator.config.cjs`\n- `aligator.config.json`\n\nEnvironment variables (see `example.env` if present):\n\n```env\nMONGO_URI=mongodb://localhost:27017/<dbname>\n# Optional — only if you use remote AI rename detection (enabled + endpoint):\nAI_API_KEY=...\nOPENROUTER_API_KEY=...\nBASE_AI_ENDPOINT=https://openrouter.ai/api/v1/chat/completions\nAI_MODEL=...\nMAX_TOKEN=2000\nLOG_LEVEL=info\nNODE_ENV=development\n```\n\n## CLI commands\n\n| Command | Purpose |\n|--------|---------|\n| `aligator init` | Create a default config file |\n| `aligator scan` | Scan code-defined schemas vs database |\n| `aligator diff` | Show schema differences (table output) |\n| `aligator generate` | Diff → optional rename review → write migration file |\n| `aligator migrate` | Run latest migration (optional interactive backup wizard) |\n| `aligator backup` | Standalone streamed backup to `backups/snapshot-*` |\n| `aligator history` | Show applied migrations |\n| `aligator restore <id>` | Restore from backup for a migration id |\n| `aligator rollback` | Roll back last migration |\n| `aligator forget <id>` | Remove old migration |\n\n```bash\naligator --help\naligator scan\naligator diff\naligator generate --name add_user_fields\naligator generate --non-interactive --accept-renames   # CI-style\naligator migrate\naligator migrate --dry\naligator migrate --force --non-interactive\naligator backup\naligator history\n```\n\n### CLI behavior notes\n\n- **`MONGO_URI`** is required for commands that connect to MongoDB.\n- **`generate`**: `AI_API_KEY` (or config `ai.apiKey`) is required **only** when remote AI rename detection will run (`ai.enabled` + `ai.endpoint` + `ai.enableRenameDetection` not disabled). Heuristic-only rename detection does not need an API key.\n- **`migrate`** does not require an AI key.\n- **`--force`**: skips confirmation and interactive backup prompts (migrate / restore / rollback); backups still use config defaults when enabled.\n- **`generate --non-interactive`**: skips prompts; use **`--accept-renames`** to apply detected renames without review.\n- Output uses **chalk**, **ora**, **boxen**, and **cli-table3** for readable tables and summaries.\n- Renames in generated scripts use MongoDB **`$rename`** where applicable; interactive flow never applies renames without your confirmation.\n\n## SDK usage\n\n```js\nimport aligator from \"@aliasgarbootwala/aligator\";\n\nawait aligator.init({\n  uri: process.env.MONGO_URI,\n  autoRun: true,\n});\n```\n\nSDK flow: load config → load models → scan DB → diff → generate migration if needed → optionally `autoRun` migration.\n\n## Folder layout\n\n```\nsrc/\n  core/\n    backup/           # streaming backup helpers\n    diff/\n    scanner/\n    schema/\n    ai/\n    migration/\n  cli/\n    commands/\n    flows.js          # high-level migrate / generate / backup flows\n    prompts.js        # interactive prompts (Inquirer)\n    ui/\n    utils/\n  sdk/\n  utils/\n  config/\n\nmigrations/\nbackups/\n```\n\n## Safety\n\n- `_id` and configured `ignoreFields` are excluded from destructive suggestions by default.\n- Prefer reviewing generated migration files before production.\n- Backups are written per migration id under `backups/<migrationId>/` using streamed JSON array files compatible with restore.\n- If AI is unavailable, heuristics and deterministic diff still apply.\n\n## Example workflow\n\n```bash\naligator init\naligator diff\naligator generate --name add_user_fields\naligator migrate\naligator history\n```\n\n## Troubleshooting\n\n### `aligator` prints nothing (no help, no errors)\n\nThis was caused by the entry script detecting “direct run” incorrectly when the global command is a **symlink** (e.g. `bin/aligator` → `index.js`). **Use v2.1.0+**, which resolves real paths so the CLI always loads. As a workaround you can run `node ./node_modules/@aliasgarbootwala/aligator/index.js diff` or `node index.js diff` from the package folder.\n\n### Connection / config errors\n\nEnsure `aligator.config.js` exists, `MONGO_URI` is set, and models path matches your Mongoose models.\n\n## Production tips\n\n- Set `NODE_ENV=production` to reduce noisy log formatting where applicable.\n- Run `generate` in CI with `--non-interactive` and explicit flags; review artifacts before `migrate`.\n","readmeFilename":"README.md"}