{"_id":"@afaeid/auto-updater","_rev":"7-5f695df144257f5286b036b967576222","name":"@afaeid/auto-updater","dist-tags":{"latest":"2.1.1"},"versions":{"1.0.0":{"name":"@afaeid/auto-updater","version":"1.0.0","keywords":["Auto Update"],"author":{"name":"afaeid"},"license":"MIT","_id":"@afaeid/auto-updater@1.0.0","maintainers":[{"name":"afaeid","email":"liksonbrother082527@gmail.com"}],"dist":{"shasum":"dc3068c8ba4b718b2c60262f68dfe414c7467560","tarball":"https://registry.npmjs.org/@afaeid/auto-updater/-/auto-updater-1.0.0.tgz","fileCount":4,"integrity":"sha512-HUGiYz9RCG58ES9RDvw/udPn5xud34qqLbxxtZJiIUrGGYXTNb8S4UtJHw1LQ451HIZZO+Ay3+nucDZ+zNLbLw==","signatures":[{"sig":"MEUCIQDhRstdmiUWzkUhC1owYVEoh2Nch/4nZ7qtv5z9IVtrZAIgIYZET6BAR/+YZ3yrFdJlbZBMvAUdZQeJaAkOO8WOaEI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1654},"main":"maintainer.js","type":"module","gitHead":"d83424ebb0ff775e8538428381346533ca0d8616","_npmUser":{"name":"afaeid","email":"liksonbrother082527@gmail.com"},"_npmVersion":"11.15.0","description":"Using this package you can directly copy and paste a directory while writing code.","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/auto-updater_1.0.0_1780254399634_0.8970735800771925","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@afaeid/auto-updater","version":"1.0.1","keywords":["Auto Update"],"author":{"name":"afaeid"},"license":"MIT","_id":"@afaeid/auto-updater@1.0.1","maintainers":[{"name":"afaeid","email":"liksonbrother082527@gmail.com"}],"bin":{"auto-updater":"cli.js"},"dist":{"shasum":"02748253f6d314a28f577f885a3b5a3f881ca81b","tarball":"https://registry.npmjs.org/@afaeid/auto-updater/-/auto-updater-1.0.1.tgz","fileCount":5,"integrity":"sha512-KMLK7MfLTj9u23Gles7p4IqK2cownY7k7EgYROaLT+y/YeaQuBiL5RPPjoaev4LNdoA4/FNuZNB1wLXJhsi+yw==","signatures":[{"sig":"MEUCIBaSovy5jgQ15FYYR21e++WGjTBJr8Ap2d7hEA/CtfCeAiEAwPKidnMoqNBjsziXSLyIuNqA7haN1dJr+qakMzBUKTg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2950},"main":"maintainer.js","type":"module","_npmUser":{"name":"afaeid","email":"liksonbrother082527@gmail.com"},"_npmVersion":"11.15.0","description":"Using this package you can directly copy and paste a directory while writing code.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"inquirer":"^14.0.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/auto-updater_1.0.1_1780286522718_0.3493809931398384","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@afaeid/auto-updater","version":"2.0.0","keywords":["Auto Update"],"author":{"name":"afaeid"},"license":"MIT","_id":"@afaeid/auto-updater@2.0.0","maintainers":[{"name":"afaeid","email":"liksonbrother082527@gmail.com"}],"bin":{"auto-updater":"cli.js"},"dist":{"shasum":"1e9f4c1022f4c4f497a92ebcd966cc368b8734b2","tarball":"https://registry.npmjs.org/@afaeid/auto-updater/-/auto-updater-2.0.0.tgz","fileCount":10,"integrity":"sha512-VBrratMFMQEARArw5fAA5HX4Q0Luc/4n4ZnJbFl9kE4TglLDoIPdGNHiB648o179DNx3yihLTBTGNM2LV6+tUQ==","signatures":[{"sig":"MEQCIDmpgstY1wqTzm5+WUbsBlBdrfZpSgkT4uv9SgKF28rdAiANCK6LSzPBxy/tsevGyKxBHNusOqtU6bs2+W4GtNMtHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14653},"main":"./cli.js","type":"module","gitHead":"2cd325acec5d62e0305381a5207b066093823211","_npmUser":{"name":"afaeid","email":"liksonbrother082527@gmail.com"},"_npmVersion":"11.16.0","description":"Using this package you can directly copy and paste a directory while writing code.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"chalk":"^5.6.2","inquirer":"^14.0.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/auto-updater_2.0.0_1781003033782_0.6981083359020559","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@afaeid/auto-updater","version":"2.0.1","keywords":["Auto Update"],"author":{"name":"afaeid"},"license":"MIT","_id":"@afaeid/auto-updater@2.0.1","maintainers":[{"name":"afaeid","email":"liksonbrother082527@gmail.com"}],"bin":{"auto-updater":"cli.js"},"dist":{"shasum":"ae5f37d5eb675584a6ba15e04c6cb6f12d24f35d","tarball":"https://registry.npmjs.org/@afaeid/auto-updater/-/auto-updater-2.0.1.tgz","fileCount":10,"integrity":"sha512-Uckga2fEQeoqzJcZiyV8dlUwlIJ1Smee97L1twjm1fZ2xYbL8i4G0LPCvN8dZXeAX5VpGJZJc2V1i6KJvA4HnA==","signatures":[{"sig":"MEYCIQCrBbhrRTwbTlRj9oCSN/jNE6dfXKjc4rwuS+znxZ7P6AIhAIf983yqZHeHhZUafGrk4CWQTX5fKxS7dcMmpC3gZzZG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14677},"main":"./cli.js","type":"module","gitHead":"8e13ca4b71a736f9932e900deb77c4255a022354","_npmUser":{"name":"afaeid","email":"liksonbrother082527@gmail.com"},"_npmVersion":"11.9.0","description":"Using this package you can directly copy and paste a directory while writing code.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.6.2","inquirer":"^14.0.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/auto-updater_2.0.1_1781008474877_0.8902600711573982","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@afaeid/auto-updater","version":"2.0.2","keywords":["Auto Update"],"author":{"name":"afaeid"},"license":"MIT","_id":"@afaeid/auto-updater@2.0.2","maintainers":[{"name":"afaeid","email":"liksonbrother082527@gmail.com"}],"bin":{"auto-updater":"cli.js"},"dist":{"shasum":"f6df958510bd479c6fc3d67d4e050a04bd849936","tarball":"https://registry.npmjs.org/@afaeid/auto-updater/-/auto-updater-2.0.2.tgz","fileCount":10,"integrity":"sha512-D7gl3s3qpDRQrzYDWgYMQTw9ECOia0IMS+Bv/CbZD7veoiguPt/ybRYYSWGHNYf2zvlzfHJA0WP2pXRz4S+KrQ==","signatures":[{"sig":"MEUCIDrp15AuHNR+cV4v1HznA2X0HFXK4DbVG6S9xFDmb96JAiEA0MohqTsDeTkEvjqZiRawxCqGhsb6bWa+XUneMU5iUBY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14771},"main":"./cli.js","type":"module","gitHead":"b9c03eff932c9e4d13ee063ad4e5b5172d2789d7","_npmUser":{"name":"afaeid","email":"liksonbrother082527@gmail.com"},"_npmVersion":"11.9.0","description":"Using this package you can directly copy and paste a directory while writing code.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.6.2","inquirer":"^14.0.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/auto-updater_2.0.2_1781013632557_0.3737583736627861","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@afaeid/auto-updater","version":"2.1.0","keywords":["Auto Update"],"author":{"name":"afaeid"},"license":"MIT","_id":"@afaeid/auto-updater@2.1.0","maintainers":[{"name":"afaeid","email":"liksonbrother082527@gmail.com"}],"bin":{"auto-updater":"cli.js"},"dist":{"shasum":"fd0f8f4ce45387ece5eaa295b3323245b418035a","tarball":"https://registry.npmjs.org/@afaeid/auto-updater/-/auto-updater-2.1.0.tgz","fileCount":13,"integrity":"sha512-NDwIVpU0BgVJ1GLYxQSRrYmGp2afvCe9QD1WaBoPar6d69toTX64IgKkvlhfr8VjJwSCqnvnoTw43xmC1HNImQ==","signatures":[{"sig":"MEUCIQDCexcWLvmrJnGAJDi5uAwqDuWfAcJhiklW0NPdlC/a5gIgWZer1M5Bts1hWd0YjCrTCn6uVwoMPqU8gSYUYCV1lsQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24865},"main":"./cli.js","type":"module","gitHead":"07a94b0ddfcbc61918c63635c84a7765e258ee81","_npmUser":{"name":"afaeid","email":"liksonbrother082527@gmail.com"},"_npmVersion":"11.9.0","description":"Using this package you can directly copy and paste a directory while writing code.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.6.2","inquirer":"^14.0.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/auto-updater_2.1.0_1781174089766_0.8740643034381699","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@afaeid/auto-updater","version":"2.1.1","description":"Using this package you can directly copy and paste a directory while writing code.","main":"./cli.js","keywords":["Auto Update"],"author":{"name":"afaeid"},"license":"MIT","type":"module","bin":{"auto-updater":"cli.js"},"dependencies":{"chalk":"^5.6.2","inquirer":"^14.0.2"},"gitHead":"956bb7e6fd63b27624af86e31675c378d7ad6c17","_id":"@afaeid/auto-updater@2.1.1","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-dJHeXEDSNZmiZw9h+Tlv2574S+Q0Z2n6o/FoDPTgxdwnuIfHeiPG7h29KgbDAdcyyQt8ZwAXI1PDDQlZPIFnTg==","shasum":"c2fc4088b4acdab086edc1e31df1cec6c549d00c","tarball":"https://registry.npmjs.org/@afaeid/auto-updater/-/auto-updater-2.1.1.tgz","fileCount":13,"unpackedSize":24859,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEEL3rWeTGZ6nzYpckpWBHeEXbKppmDRxQzV/g0mSjDkAiEA1zX66Yuknq/jvT0Dfm4XdLLdwQzYU6KAQxSSv7Wnbt0="}]},"_npmUser":{"name":"afaeid","email":"liksonbrother082527@gmail.com"},"directories":{},"maintainers":[{"name":"afaeid","email":"liksonbrother082527@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/auto-updater_2.1.1_1781174706819_0.08789541188182626"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-31T19:06:39.434Z","modified":"2026-06-11T10:45:07.093Z","1.0.0":"2026-05-31T19:06:39.793Z","1.0.1":"2026-06-01T04:02:02.895Z","2.0.0":"2026-06-09T11:03:53.937Z","2.0.1":"2026-06-09T12:34:35.040Z","2.0.2":"2026-06-09T14:00:32.704Z","2.1.0":"2026-06-11T10:34:49.924Z","2.1.1":"2026-06-11T10:45:06.987Z"},"author":{"name":"afaeid"},"license":"MIT","keywords":["Auto Update"],"description":"Using this package you can directly copy and paste a directory while writing code.","maintainers":[{"name":"afaeid","email":"liksonbrother082527@gmail.com"}],"readme":"# `@afaeid/auto-updater`\n\n> **Real-time file-mirroring CLI** — write code in one directory, execute it in another, automatically.\n\n![npm](https://img.shields.io/badge/npm-%40afaeid%2Fauto--updater-00ff9d?style=flat-square&logo=npm&logoColor=black)\n![license](https://img.shields.io/badge/license-MIT-00cfff?style=flat-square)\n![platform](https://img.shields.io/badge/platform-Node.js%20CLI-a855f7?style=flat-square&logo=nodedotjs&logoColor=white)\n![platform](https://img.shields.io/badge/runs%20on-Windows%20%7C%20macOS%20%7C%20Linux-00ff9d?style=flat-square)\n\n---\n\n## Table of Contents\n\n- [Features](#features)\n- [Installation](#installation)\n- [Usage](#usage)\n  - [init](#-init)\n  - [run](#-run)\n  - [reset](#-reset)\n- [Typical Workflow](#typical-workflow)\n- [Origin](#origin)\n- [AI-Assisted Development](#ai-assisted-development)\n- [License](#license)\n\n---\n\n## Features\n\n### ⚡ Autonomous Synchronization\nOnce the `run` command is dispatched, the executing directory is updated **automatically and continuously** — no manual intervention required. The daemon persists indefinitely until you choose to terminate it.\n\n**Interactive controls during `run`:**\n\n| Key | Action |\n|---|---|\n| `i` | Print current configuration details to the terminal |\n| `e` | Gracefully shut down the daemon |\n| `Ctrl+C` | Gracefully shut down the daemon |\n\n### 🚀 High-Throughput Delta Propagation\nAuto-Updater does not blindly re-copy entire trees. It detects **only the modified portions** of your source directory and propagates those targeted deltas to the mirror destination — making synchronization near-instantaneous even in large projects.\n\n### 🎨 Chromatic Log Output\nEvery runtime event is rendered with **color-coded terminal output**. Info, warnings, sync events, and errors each carry a distinct visual signature — making it effortless to scan log streams at a glance rather than parsing monochrome walls of text.\n\n### 📁 Selective Exclusion Patterns\nDefine comma-separated exclusion patterns at initialization time. Auto-Updater performs **substring-level pattern matching** — any file or directory whose name contains a matched token (e.g. `.git`, `node_modules`) is silently skipped, keeping your mirror lean.\n\n### 🛡️ Idempotent Bootstrap\nRunning `init` on an already-initialized directory is safe. Configuration artifacts are generated deterministically, and the **first full mirror snapshot** is produced immediately on init — so your executing directory is in sync from the very first moment.\n\n### 🔄 Configurable Watch Interval\nDial in the polling frequency to balance responsiveness against system resource consumption. The watch interval is persisted in the config file and can be tuned per-project without re-running init from scratch.\n\n---\n\n## Installation\n\nAuto-Updater runs on **any operating system** that supports Node.js — Windows, macOS, and Linux are all fully supported.\n\nInstall as a **local project dependency**:\n\n```bash\nnpm install @afaeid/auto-updater\n```\n\nOr install **globally** to invoke from any directory without `npx`:\n\n```bash\nnpm i -g @afaeid/auto-updater\n```\n\n---\n\n## Usage\n\n```bash\n# Local installation\nnpx auto-updater <command> [options]\n\n# Global installation\nauto-updater <command> [options]\n```\n\n---\n\n### ▶ `init`\n\nBootstraps Auto-Updater in the **current working directory**. The directory from which you invoke `init` is automatically designated as the **mirror source** — ensure you are inside the directory you intend to replicate before running this command.\n\n```bash\nnpx auto-updater init\n\n# Global\nauto-updater init\n```\n\n> **⚠ Important:** Always run `init` from *inside* the source directory you want to mirror.\n\nDuring initialization, you will be interactively prompted for the following parameters:\n\n| Parameter | Description | Default |\n|---|---|---|\n| **Executing directory** | Destination path where files are mirrored. Accepts a relative path (resolved from the source) or an absolute path. | _(required)_ |\n| **Exclude patterns** | Comma-separated names or substrings to omit from mirroring (e.g. `.git,node_modules`). Matches partial names. | _(optional)_ |\n| **Watch interval (ms)** | Polling delay in milliseconds between synchronization cycles. | `2000` |\n\n**Artifacts generated on init:**\n\n```\n.auto-updater.config.json   ← serialized configuration\n.auto-updater.records.json  ← file-state registry for delta detection\n<executing-directory>/      ← initial full mirror snapshot\n```\n\n---\n\n### ▶ `run`\n\nDispatches the **synchronization daemon** — continuously polls the source directory, detects mutations, and propagates deltas to the mirror destination. The process remains alive until terminated.\n\n```bash\nnpx auto-updater run\n\n# Global\nauto-updater run\n```\n\n**Interactive controls:**\n\n| Key | Action |\n|---|---|\n| `i` | Display current configuration details |\n| `e` | Graceful shutdown |\n| `Ctrl+C` | Graceful shutdown |\n\n> Requires a valid `.auto-updater.config.json` produced by `init`.\n\n---\n\n### ▶ `reset`\n\nTears down the Auto-Updater configuration. Two teardown modes are available:\n\n```bash\nnpx auto-updater reset --s   # Soft teardown  — preserve mirror, remove config\nnpx auto-updater reset --d   # Full purge     — remove config and destroy mirror\n\n# Global\nauto-updater reset [--s | --d]\n```\n\n| Flag | Behaviour |\n|---|---|\n| `--s` _(default)_ | Removes `.auto-updater.config.json` and `.auto-updater.records.json`. The mirrored directory and its contents are **preserved**. |\n| `--d` | Removes config, records, **and permanently deletes** the mirror directory. |\n\n---\n\n## Typical Workflow\n\n```\n1.  cd into your source directory\n2.  npx auto-updater init       ← configure mirror target & generate snapshot\n3.  npx auto-updater run        ← start the sync daemon\n        │\n        │  [ write code in SPCK / any editor ]\n        │  [ changes propagate automatically  ]\n        │\n4.  Press e or Ctrl+C           ← terminate the daemon\n5.  npx auto-updater reset --s  ← soft teardown (or --d for full purge)\n```\n\n---\n\n## Origin\n\nThe requirement for this tool emerged from a concrete constraint: during an attempt to scaffold an Angular project, installation collapsed because **SPCK Editor** — the local mobile editor in use — does not support symbolic links. This rendered the standard `node_modules` resolution mechanism non-functional within the editor's sandboxed filesystem.\n\nThe desired development loop was:\n\n```\n[ Write code in SPCK Editor ]       ← no node_modules present\n          │\n          │  auto-updater mirrors changes in real time\n          ▼\n[ Project directory in terminal ]   ← node_modules intact, deps resolved\n          │\n          ▼\n[ Execute & test from terminal ]    ← runtime environment is separate\n```\n\nAuto-Updater was built precisely to bridge that gap — decoupling the **authoring environment** from the **execution environment** without any manual file transfer.\n\n---\n\n## AI-Assisted Development\n\nAI tooling was used as a development accelerator — not as a primary author. All logic, architecture, and design decisions were made by the developer.\n\n| Tool | Role |\n|---|---|\n| **Claude** | Diagnosing unexpected runtime errors and edge-case bugs |\n| **Claude** | Supplying technical context on unfamiliar Node.js APIs required during implementation |\n| **GitHub Copilot** | Drafting the initial *Usage* section of this README — subsequently reviewed and revised by the author |\n| **Claude** | Designing and authoring the final README layout, structure, and documentation |\n\n---\n\n## License\n\n```\nMIT License — free to use, modify, and distribute.\n```\n\n---\n\n<div align=\"center\">\n\n`@afaeid/auto-updater` &nbsp;·&nbsp; works on any OS &nbsp;·&nbsp; MIT\n\n</div>\n","readmeFilename":"README.md"}