{"_id":"@asyncify-hq/cli","_rev":"4-816caca522e50e09b967294bed49aca2","name":"@asyncify-hq/cli","dist-tags":{"latest":"0.3.0"},"versions":{"0.0.0":{"name":"@asyncify-hq/cli","version":"0.0.0","author":{"name":"Shubam Patil"},"license":"MIT","_id":"@asyncify-hq/cli@0.0.0","maintainers":[{"name":"shubam14dec","email":"shubamp981@gmail.com"}],"homepage":"https://asyncify.org","bugs":{"url":"https://github.com/shubam14dec/Scalable-Notification-System/issues"},"bin":{"asyncify":"dist/index.js"},"dist":{"shasum":"ae4433f37789403db3a6137f4089337b64a60687","tarball":"https://registry.npmjs.org/@asyncify-hq/cli/-/cli-0.0.0.tgz","fileCount":3,"integrity":"sha512-2wWMKo7fiLjQ3ULB5YMaY500KxNfFR8Rr/5uNx1g2nn3i6hTfAobbfosvlZaQ7BxaBISBS7QibYt2OfBtYACDQ==","signatures":[{"sig":"MEUCIQD1VAPhIzmoif8L+X13iQXLPUA2CxBq0LW+N3/UeZBmiwIgAqXakCw2TVy6YfBMYu/Gw576RxYd1zRNAbUzJcMOpbA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32186},"type":"module","engines":{"node":">=20.6"},"gitHead":"5e3c047ee1eafe3610671de6ce93c6cc3dbc7517","scripts":{"build":"tsup src/index.ts --format esm --clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"shubam14dec","email":"shubamp981@gmail.com"},"repository":{"url":"git+https://github.com/shubam14dec/Scalable-Notification-System.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.6.2","description":"Asyncify dev CLI — managed tunnel with automatic webhook rewiring, and an agent scaffolder","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","typescript":"^5.7.2","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.0.0_1783886486907_0.7035524979171806","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@asyncify-hq/cli","version":"0.1.0","author":{"name":"Shubam Patil"},"license":"MIT","_id":"@asyncify-hq/cli@0.1.0","maintainers":[{"name":"shubam14dec","email":"shubamp981@gmail.com"}],"homepage":"https://asyncify.org","bugs":{"url":"https://github.com/shubam14dec/Scalable-Notification-System/issues"},"bin":{"asyncify":"dist/index.js"},"dist":{"shasum":"3d896a3eb2b83eaa4a45bd9cebb670d19ed4e151","tarball":"https://registry.npmjs.org/@asyncify-hq/cli/-/cli-0.1.0.tgz","fileCount":3,"integrity":"sha512-7TJxPObol1YZBE4C0+W3sRvGIjds/LzJjmQYZ4CfvRC7G8KMtoRMOwPU1lXf3D3nEd7WAHTGXkM70cQIL1HJSg==","signatures":[{"sig":"MEUCIQCD31aj8NkTEQYwWzGCOpwMZOyAk+aYPtIrvlC/6NLzEAIgDj1UlYI6ZWgGKA5k0uNHV5DvYetynCFvCmEvAh8qp2g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@asyncify-hq%2fcli@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":32075},"type":"module","engines":{"node":">=20.6"},"gitHead":"5ce0d9bf258538c363c06b2fff5bc2024ef75139","scripts":{"build":"tsup src/index.ts --format esm --clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b2685e9d-d808-42f2-ac55-41ac067b7a81"}},"repository":{"url":"git+https://github.com/shubam14dec/Scalable-Notification-System.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.16.0","description":"Asyncify dev CLI — managed tunnel with automatic webhook rewiring, and an agent scaffolder","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","typescript":"^5.7.2","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.0_1783886801976_0.6182262283267219","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@asyncify-hq/cli","version":"0.2.0","author":{"name":"Shubam Patil"},"license":"MIT","_id":"@asyncify-hq/cli@0.2.0","maintainers":[{"name":"shubam14dec","email":"shubamp981@gmail.com"}],"homepage":"https://asyncify.org","bugs":{"url":"https://github.com/shubam14dec/Scalable-Notification-System/issues"},"bin":{"asyncify":"dist/index.js"},"dist":{"shasum":"c4fae9a3702a522a00c69eba8790ab938cef47a1","tarball":"https://registry.npmjs.org/@asyncify-hq/cli/-/cli-0.2.0.tgz","fileCount":3,"integrity":"sha512-AMPUwM1DiljA47g35tpt7b1YPcSEGLZzbjoy3Rm1T4b0Z/kuLS7vYXK6IL8R7dRxT/XJD4yqlYUjDTVGJsCPYw==","signatures":[{"sig":"MEUCIE0rub3Qz5F3po1vZiRe3/kHXht3lxMB81nQORkXbILRAiEA5vdU1XVdCuRM34crgczCOlmmBhlOkCSXFwaZgMjRrw0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@asyncify-hq%2fcli@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":33997},"type":"module","engines":{"node":">=20.6"},"gitHead":"12e59714f010596ab0b81ef2b667c1c2e2a24627","scripts":{"build":"tsup src/index.ts --format esm --clean","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b2685e9d-d808-42f2-ac55-41ac067b7a81"}},"repository":{"url":"git+https://github.com/shubam14dec/Scalable-Notification-System.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.16.0","description":"Asyncify dev CLI — managed tunnel with automatic webhook rewiring, and an agent scaffolder","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","typescript":"^5.7.2","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.0_1784039486118_0.825516382141811","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@asyncify-hq/cli","version":"0.3.0","description":"Asyncify dev CLI — managed tunnel with automatic webhook rewiring, and an agent scaffolder","homepage":"https://asyncify.org","repository":{"type":"git","url":"git+https://github.com/shubam14dec/Scalable-Notification-System.git","directory":"packages/cli"},"license":"MIT","author":{"name":"Shubam Patil"},"type":"module","bin":{"asyncify":"dist/index.js"},"sideEffects":false,"publishConfig":{"access":"public"},"engines":{"node":">=20.6"},"scripts":{"build":"tsup src/index.ts --format esm --clean","prepublishOnly":"npm run build"},"devDependencies":{"@types/node":"^20","tsup":"^8.3.5","typescript":"^5.7.2"},"gitHead":"bc0cfdefefd5fed0a167a8b500e9d5fc1d10900d","_id":"@asyncify-hq/cli@0.3.0","bugs":{"url":"https://github.com/shubam14dec/Scalable-Notification-System/issues"},"_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-7lMb+aknW7rOI9Wg6HJ16COorkeo5Y9XyOGbgUnt8KTWyI0z+7R8mfbIklgRXdsSNhegwsXOGmcLi3SVDFEdxw==","shasum":"d7edb927e4eda798aeab23087c386d4793fe5236","tarball":"https://registry.npmjs.org/@asyncify-hq/cli/-/cli-0.3.0.tgz","fileCount":3,"unpackedSize":41570,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@asyncify-hq%2fcli@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIC+AolQK/wttdQqyigwqr7eqQ1r345c9qh4iyz3iY/ZbAiEA+M19jRQCWnOQuyjcxHqQTfWYiIztbk/NaNQ7U4qrrHY="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b2685e9d-d808-42f2-ac55-41ac067b7a81"}},"directories":{},"maintainers":[{"name":"shubam14dec","email":"shubamp981@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cli_0.3.0_1788037318966_0.0912844964226105"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-12T20:01:26.663Z","modified":"2026-08-29T21:01:59.468Z","0.0.0":"2026-07-12T20:01:27.044Z","0.1.0":"2026-07-12T20:06:42.120Z","0.2.0":"2026-07-14T14:31:26.265Z","0.3.0":"2026-08-29T21:01:59.097Z"},"bugs":{"url":"https://github.com/shubam14dec/Scalable-Notification-System/issues"},"author":{"name":"Shubam Patil"},"license":"MIT","homepage":"https://asyncify.org","repository":{"type":"git","url":"git+https://github.com/shubam14dec/Scalable-Notification-System.git","directory":"packages/cli"},"description":"Asyncify dev CLI — managed tunnel with automatic webhook rewiring, and an agent scaffolder","maintainers":[{"name":"shubam14dec","email":"shubamp981@gmail.com"}],"readme":"# @asyncify-hq/cli\n\nDev tooling for [Asyncify](https://asyncify.org) agents. Two commands, zero\nruntime dependencies:\n\n- **`asyncify dev`** — runs a managed [cloudflared](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/)\n  tunnel, publishes its public URL to your local Asyncify stack, rewires every\n  channel webhook, and keeps the tunnel healthy — auto-rotating and re-wiring\n  when cloudflared drops.\n- **`asyncify create-agent <dir>`** — scaffolds a runnable bridge-agent starter.\n\n```bash\nnpx @asyncify-hq/cli dev\nnpx @asyncify-hq/cli create-agent my-bot\n```\n\n## `asyncify dev`\n\n```bash\nasyncify dev [--port 3000] [--api-url http://localhost:3000] [--api-key <key>] [--wait 300] [--no-env-write]\n```\n\n| Flag | Default | Meaning |\n|------|---------|---------|\n| `--port` | `3000` | Local port your Asyncify stack listens on (tunnel target). |\n| `--api-url` | `http://localhost:3000` | Asyncify API base URL. |\n| `--api-key` | `$ASYNCIFY_API_KEY`, else the dev seed `dev-api-key-123` | Tenant API key. |\n| `--wait` | `$ASYNCIFY_WAIT`, else `300` | Seconds to wait for the new tunnel address to go live (5–3600). |\n| `--no-env-write` | off | Do not rewrite `PUBLIC_URL` in `./.env`. |\n\nWhen the dev seed key is used (no env var, no flag), `dev` prints a notice so\nyou know which tenant you are targeting.\n\n### Waiting for the address to go live\n\nA brand-new tunnel address does not exist in DNS the moment cloudflared prints\nit. Registering it with Telegram too early makes Telegram cache \"no such host\"\nfor minutes, so `dev` waits until the tunnel answers `/health` **from the public\ninternet's point of view**: it looks the address up on a public resolver\n(`1.1.1.1`, falling back to `8.8.8.8`) and then calls `/health` straight at that\nIP. Your own machine's DNS is deliberately not the judge — on some networks it\nis minutes behind, which used to fail the check on tunnels the rest of the world\ncould already reach. If no public resolver is reachable at all (some corporate\nnetworks block it), `dev` says so and falls back to a normal request.\n\nIt waits up to five minutes by default and prints a line whenever something\nchanges; raise it with `--wait 600` on a slow network. Once webhooks are live,\n`dev` warns you if *your* machine still cannot look the address up — the browser\nfailing to open the URL then means your network is catching up, not that the\ntunnel is down.\n\n### What it automates\n\n- Publishes the tunnel URL via `PUT /v1/ops/public-url`.\n- Updates `PUBLIC_URL` in `./.env` (if the file exists; skip with `--no-env-write`).\n- **Telegram**: reconnects each active connection automatically and verifies\n  the new webhook took (one retry if Telegram reports a stale URL).\n- Health-checks the tunnel every 20s (through the same public-resolver path) and\n  **rotates** it on failure (3 strikes) or if cloudflared exits — re-running the\n  full rewire against the new URL.\n\n### What still needs a human paste\n\nSlack and email webhooks live in third-party consoles, so `dev` prints a table\nof the exact URLs and where to paste them (● marks a row that changed since the\nlast run):\n\n- **Slack Events** → Slack app config → Event Subscriptions → Request URL.\n- **Slack Interactivity** → Slack app config → Interactivity & Shortcuts → Request URL.\n- **Email** → Postmark → Servers → Default Inbound Stream → Settings → Webhook.\n\n### Prerequisite\n\n`cloudflared` must be on PATH. `dev` checks at startup and prints install\ninstructions (winget / brew / apt) if it is missing.\n\n## `asyncify create-agent`\n\n```bash\nasyncify create-agent my-bot [--identifier my-bot]\n```\n\nScaffolds `package.json`, a self-registering `agent.ts`, `.env.example`,\n`README.md`, and `.gitignore` into the target directory (which must be empty).\nThe agent registers itself with Asyncify on first run and serves a signed\nbridge; edit `agent.ts` to build your brain.\n\n`--identifier` defaults to the slugified directory basename (`[a-z0-9-]`).\n\n> The scaffolded project runs with `tsx --env-file=.env`, which needs\n> **Node >= 20.6**.\n\n## Engines\n\nRequires **Node >= 20.6**.\n","readmeFilename":"README.md"}