{"_id":"@bekindlabs/mitte-beat-reporter","_rev":"6-f35b2b2962ca5854fc4268ea3af6a9e8","name":"@bekindlabs/mitte-beat-reporter","dist-tags":{"latest":"0.3.5"},"versions":{"0.1.0":{"name":"@bekindlabs/mitte-beat-reporter","version":"0.1.0","keywords":["vitest","reporter","mitte-beat","tdd"],"license":"MIT","_id":"@bekindlabs/mitte-beat-reporter@0.1.0","maintainers":[{"name":"bigchoi77","email":"heewon@bekindlabs.com"}],"homepage":"https://github.com/bigchoi77/mitte-beat#readme","bugs":{"url":"https://github.com/bigchoi77/mitte-beat/issues"},"dist":{"shasum":"e588a6dadc065e4a992ee90051c22bb284324ba7","tarball":"https://registry.npmjs.org/@bekindlabs/mitte-beat-reporter/-/mitte-beat-reporter-0.1.0.tgz","fileCount":3,"integrity":"sha512-SR791Oa/7GapEZX1qTmqfunaJKcEIrS6ZsUs4lEt4gT71n59hwsn8Wp8puPHURKzrL9DmrWhW6+GOPBO3AyZWg==","signatures":[{"sig":"MEYCIQDo2hJv3rA1m6xSChb0wTe4DfxsDfM9CP3+MP7u8qwAOQIhAKrXRzkPAIvHNR/+GLh35YkrZ5iuJR8AbhEtu+6ynTyX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13054},"main":"index.js","type":"module","exports":"./index.js","gitHead":"583b2e37793c59700e710220d7e79e0a918cbc9a","_npmUser":{"name":"bigchoi77","email":"heewon@bekindlabs.com"},"repository":{"url":"git+https://github.com/bigchoi77/mitte-beat.git","type":"git","directory":"packages/mitte-beat-reporter"},"_npmVersion":"11.12.1","description":"Vitest reporter that streams your test cycle (red/green) to a Mitte!Beat tenant as making beats.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"vitest":">=1"},"_npmOperationalInternal":{"tmp":"tmp/mitte-beat-reporter_0.1.0_1781763755775_0.33051410930710934","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bekindlabs/mitte-beat-reporter","version":"0.2.0","keywords":["vitest","reporter","mitte-beat","tdd"],"license":"MIT","_id":"@bekindlabs/mitte-beat-reporter@0.2.0","maintainers":[{"name":"bigchoi77","email":"heewon@bekindlabs.com"}],"homepage":"https://github.com/bigchoi77/mitte-beat#readme","bugs":{"url":"https://github.com/bigchoi77/mitte-beat/issues"},"bin":{"mitte-beat-init":"bin/init.js"},"dist":{"shasum":"4bbc5694710c3e873c24681f67844fd111e8600a","tarball":"https://registry.npmjs.org/@bekindlabs/mitte-beat-reporter/-/mitte-beat-reporter-0.2.0.tgz","fileCount":5,"integrity":"sha512-w2vU2qo2lnIiMZvl4wr2pTUsV687oX6YQGKWm5isB3oR2rs6uUX+ZhSoMXBLDac8VkQ+W9w5xTVqiVAK5RbTUw==","signatures":[{"sig":"MEUCIQC+Zb4S49pTrj+lckkXjHgQXFtXguF5JaqzVfdn4i+E6gIga4cKFTY5UFPOlu+yvJlDDptwUUA5iCveHp8YbndyDxQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21809},"main":"index.js","type":"module","exports":{".":"./index.js","./init":"./init.js"},"gitHead":"1dcb12dba9fa8cef9eb1b2e72748cbfb944b2040","_npmUser":{"name":"bigchoi77","email":"heewon@bekindlabs.com"},"repository":{"url":"git+https://github.com/bigchoi77/mitte-beat.git","type":"git","directory":"packages/mitte-beat-reporter"},"_npmVersion":"11.12.1","description":"Vitest reporter that streams your test cycle (red/green) to a Mitte!Beat tenant as making beats.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"vitest":">=1"},"_npmOperationalInternal":{"tmp":"tmp/mitte-beat-reporter_0.2.0_1781823726180_0.1923353286908429","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bekindlabs/mitte-beat-reporter","version":"0.3.0","keywords":["vitest","reporter","mitte-beat","tdd"],"license":"MIT","_id":"@bekindlabs/mitte-beat-reporter@0.3.0","maintainers":[{"name":"bigchoi77","email":"heewon@bekindlabs.com"}],"homepage":"https://github.com/bigchoi77/mitte-beat#readme","bugs":{"url":"https://github.com/bigchoi77/mitte-beat/issues"},"bin":{"mitte-beat-init":"bin/init.js"},"dist":{"shasum":"063979d054201892514c9e475d8b81e31b339e35","tarball":"https://registry.npmjs.org/@bekindlabs/mitte-beat-reporter/-/mitte-beat-reporter-0.3.0.tgz","fileCount":6,"integrity":"sha512-7BakhRLbaKtBy9bdzvVCLJcA+Tj9iLZfDy9NPZJDkUv4OoKwmJyTmYcopbaDl0RGlU57OcTny934f6vJbfNHCQ==","signatures":[{"sig":"MEUCIQCj3+LO7ZgGjrb+CM3Vx/Yaq72ppV03hNXPxcwRbQlZrAIgMUEIjCY9SdFR22emModNdEdyHlQc/nMt72thubswDAU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30548},"main":"index.js","type":"module","exports":{".":"./index.js","./init":"./init.js"},"_npmUser":{"name":"bigchoi77","email":"heewon@bekindlabs.com"},"repository":{"url":"git+https://github.com/bigchoi77/mitte-beat.git","type":"git","directory":"packages/mitte-beat-reporter"},"_npmVersion":"11.12.1","description":"Vitest reporter that streams your test cycle (red/green) to a Mitte!Beat tenant as making beats.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"vitest":">=1"},"_npmOperationalInternal":{"tmp":"tmp/mitte-beat-reporter_0.3.0_1781903793146_0.7493100635778305","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@bekindlabs/mitte-beat-reporter","version":"0.3.3","keywords":["vitest","reporter","mitte-beat","tdd"],"license":"MIT","_id":"@bekindlabs/mitte-beat-reporter@0.3.3","maintainers":[{"name":"bigchoi77","email":"heewon@bekindlabs.com"}],"homepage":"https://github.com/bigchoi77/mitte-beat#readme","bugs":{"url":"https://github.com/bigchoi77/mitte-beat/issues"},"bin":{"mitte-beat-init":"bin/init.js"},"dist":{"shasum":"e2794b3f609338f46227504c73268cda7bf7a079","tarball":"https://registry.npmjs.org/@bekindlabs/mitte-beat-reporter/-/mitte-beat-reporter-0.3.3.tgz","fileCount":7,"integrity":"sha512-myUZ91fkuobSZgR+8C7DJHyGTmmwtuCUcG1EERtImluk4+3/7P1d7wfhRWPCifEEhcNBI78RdKwNdv2XuvPgWA==","signatures":[{"sig":"MEQCICdpa1j/quJDHVNH7vvsG+hcj285E5SpAg+i6+oihr19AiAgPCF5d9739hhcWsEz++O20EjmAKgj1d81NlyHDxERUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36800},"main":"index.js","type":"module","exports":{".":"./index.js","./init":"./init.js"},"gitHead":"b4d072fd0befeebd9573fa71b4d8109e0daee66e","_npmUser":{"name":"bigchoi77","email":"heewon@bekindlabs.com"},"repository":{"url":"git+https://github.com/bigchoi77/mitte-beat.git","type":"git","directory":"packages/mitte-beat-reporter"},"_npmVersion":"11.12.1","description":"Vitest reporter that streams your test cycle (red/green) to a Mitte!Beat tenant as making beats.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"vitest":">=1"},"_npmOperationalInternal":{"tmp":"tmp/mitte-beat-reporter_0.3.3_1782087264338_0.04394327921580232","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@bekindlabs/mitte-beat-reporter","version":"0.3.4","keywords":["vitest","reporter","mitte-beat","tdd"],"license":"MIT","_id":"@bekindlabs/mitte-beat-reporter@0.3.4","maintainers":[{"name":"bigchoi77","email":"heewon@bekindlabs.com"}],"homepage":"https://github.com/bigchoi77/mitte-beat#readme","bugs":{"url":"https://github.com/bigchoi77/mitte-beat/issues"},"bin":{"mitte-beat-init":"bin/init.js"},"dist":{"shasum":"794ed5854b429a1a4749940f6022f0a035175bae","tarball":"https://registry.npmjs.org/@bekindlabs/mitte-beat-reporter/-/mitte-beat-reporter-0.3.4.tgz","fileCount":8,"integrity":"sha512-ldZWje0td9xD4q4zeVbvwceaZLQ0oWlRqGRg1P4gijNw4tfhF8tkUaG/UDfc27zKzufGU4zF8QkiiWM9JojHOQ==","signatures":[{"sig":"MEUCIDv4wiJbdnwKItu0J+phSWyimS9k/b/GxHdEWYIUXimOAiEAhNmy7XlNfRYPSjy7Xj4aCDH++s3B5qJHTtfLmV/4Fmc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41757},"main":"index.js","type":"module","exports":{".":"./index.js","./init":"./init.js"},"_npmUser":{"name":"bigchoi77","email":"heewon@bekindlabs.com"},"repository":{"url":"git+https://github.com/bigchoi77/mitte-beat.git","type":"git","directory":"packages/mitte-beat-reporter"},"_npmVersion":"11.12.1","description":"Vitest reporter that streams your test cycle (red/green) to a Mitte!Beat tenant as making beats.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"vitest":">=1"},"_npmOperationalInternal":{"tmp":"tmp/mitte-beat-reporter_0.3.4_1782123239961_0.9654998288230119","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@bekindlabs/mitte-beat-reporter","version":"0.3.5","description":"Vitest reporter that streams your test cycle (red/green) to a Mitte!Beat tenant as making beats.","type":"module","main":"index.js","exports":{".":"./index.js","./init":"./init.js","./e2e":"./e2e.js"},"bin":{"mitte-beat-init":"bin/init.js"},"keywords":["vitest","reporter","mitte-beat","tdd"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigchoi77/mitte-beat.git","directory":"packages/mitte-beat-reporter"},"peerDependencies":{"vitest":">=1"},"publishConfig":{"access":"public"},"gitHead":"1c1d863d93b1cb63ce00c67ddb41bf9934202d33","_id":"@bekindlabs/mitte-beat-reporter@0.3.5","bugs":{"url":"https://github.com/bigchoi77/mitte-beat/issues"},"homepage":"https://github.com/bigchoi77/mitte-beat#readme","_nodeVersion":"24.15.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-wp+dkJbTclBGDBENROXamVncn6weNI03b24cHYnMUv0ZMJPW4hma9cO+C4p10lFYcXqultxzKZZjmpav8xCp5w==","shasum":"21baa4b9d123b223513de554f495a2df3023e732","tarball":"https://registry.npmjs.org/@bekindlabs/mitte-beat-reporter/-/mitte-beat-reporter-0.3.5.tgz","fileCount":9,"unpackedSize":45426,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGBOW9raiqGIhwZQKlRJhehQ+2wy4tae2ekHa3ou9MrfAiEA/txsNKHUBgRMqDyyNEd+99L/z9gpbXCCGtPoVQwyYjU="}]},"_npmUser":{"name":"bigchoi77","email":"heewon@bekindlabs.com"},"directories":{},"maintainers":[{"name":"bigchoi77","email":"heewon@bekindlabs.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mitte-beat-reporter_0.3.5_1782866246574_0.4036786544915387"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-18T06:22:35.583Z","modified":"2026-07-01T00:37:26.874Z","0.1.0":"2026-06-18T06:22:35.928Z","0.2.0":"2026-06-18T23:02:06.316Z","0.3.0":"2026-06-19T21:16:33.354Z","0.3.3":"2026-06-22T00:14:24.488Z","0.3.4":"2026-06-22T10:14:00.142Z","0.3.5":"2026-07-01T00:37:26.735Z"},"bugs":{"url":"https://github.com/bigchoi77/mitte-beat/issues"},"license":"MIT","homepage":"https://github.com/bigchoi77/mitte-beat#readme","keywords":["vitest","reporter","mitte-beat","tdd"],"repository":{"type":"git","url":"git+https://github.com/bigchoi77/mitte-beat.git","directory":"packages/mitte-beat-reporter"},"description":"Vitest reporter that streams your test cycle (red/green) to a Mitte!Beat tenant as making beats.","maintainers":[{"name":"bigchoi77","email":"heewon@bekindlabs.com"}],"readme":"# @bekindlabs/mitte-beat-reporter\n\nA [Vitest](https://vitest.dev) reporter that streams your test cycle to a\n[Mitte!Beat](https://github.com/bigchoi77/mitte-beat) tenant as **making beats** —\na failing test is a red cube, the passing test that follows turns it green. It is\nthe write half of the beat: your TDD rhythm becomes a live signal on the board.\n\n## Install\n\n```sh\nnpm i -D @bekindlabs/mitte-beat-reporter\nnpx mitte-beat-init --url https://<your-project>.supabase.co/functions/v1/ingest-event --secret <your ingest secret> --track <your track>\n```\n\n`init` wires the reporter into your Vitest config, writes the ingest creds to\n`.env`, and makes sure `.env` is gitignored. Re-running is safe — it leaves an\nalready-wired config untouched, and a `.env` key already holding the same value\nis left as is. A value you pass that differs from what's in `.env` replaces it\n(`MITTE_BEAT_*` are mitte-beat-only keys), and a key you don't pass is left\nalone. `--track <track>` sets `MITTE_BEAT_TRACK`, which the reporter needs to\nattribute your beats to a lane (see below).\n\n`npm test` now sends a making beat per test cycle.\n\n### Or wire it by hand\n\n`init` only edits a config that has a `reporters` array or a `test {}` block; for\nanything else add the reporter as an **instance** — an import plus a\n`new MitteBeatReporter()` entry, no options object:\n\n```js\n// vite.config.js / vitest.config.js\nimport MitteBeatReporter from '@bekindlabs/mitte-beat-reporter'\n\nexport default {\n  test: {\n    reporters: ['default', new MitteBeatReporter()],\n  },\n}\n```\n\n> **Use the instance form, not the string form.** `reporters: ['default',\n> '@bekindlabs/mitte-beat-reporter']` works in many setups but is resolved through\n> vite's `ServerModuleRunner`, which silently fails to instantiate the reporter in\n> some projects (certain monorepo / vite setups) — no beats, no error. The instance\n> form is loaded by the config's native Node ESM and works on every version and\n> host tested (spike #200027061).\n\n…and set the env the reporter self-configures from:\n\n```sh\nMITTE_BEAT_INGEST_URL=https://<your-project>.supabase.co/functions/v1/ingest-event\nMITTE_BEAT_INGEST_SECRET=<your ingest secret>\nMITTE_BEAT_TRACK=<your track>   # optional — auto-derived from a dev-<track> branch\nMITTE_BEAT_STORY=200026812      # optional — attributes cubes to a delivery\n```\n\n`MITTE_BEAT_TRACK` names **which lane** made the beat and must match one of your\ntenant's configured lanes. The reporter resolves it in order: an explicit\n`MITTE_BEAT_TRACK` wins; otherwise it extracts the lane from a `dev-<track>` git\nbranch (so a Strike Trio worktree needs no per-session config); off such a branch\nwith no env set, it warns and broadcasts nothing rather than guessing a lane that\ndoesn't exist. Set `MITTE_BEAT_TRACK` only if your branches don't follow the\n`dev-<track>` convention.\n\n## What it sends\n\nOn each run the reporter sends one append-only event per leaf test to **your own\ningest endpoint, authenticated with your own secret**. Each event carries:\n\n| field    | value                                                              |\n| -------- | ----------------------------------------------------------------- |\n| `cycle`  | a stable id: repo-relative file path + describe suite + test name |\n| `state`  | `red` (failing) or `green` (passing)                              |\n| `module` | the test file basename (e.g. `eventToCube`)                       |\n| `track`  | `MITTE_BEAT_TRACK`                                                 |\n| `story`  | `MITTE_BEAT_STORY`, when set                                       |\n| `ts`     | the run timestamp                                                  |\n| `kind`   | always `test`                                                     |\n\nThis is a **self-report**: your data, your token, your Beat tenant — not\nthird-party collection. The reporter never reads your source code; it only walks\nVitest's task tree. It never holds a privileged key — the ingest function alone\nruns as `service_role`.\n\n## Safe by default\n\n- **Missing config → no-op.** Missing `MITTE_BEAT_INGEST_URL`,\n  `MITTE_BEAT_INGEST_SECRET`, or `MITTE_BEAT_TRACK` and the reporter warns once\n  (naming what's missing) and does nothing. CI and unconfigured runs are never\n  affected.\n- **Never blocks your tests.** The ingest call is wrapped in an abort timeout\n  (default 3s). A hung or unreachable endpoint is aborted and degrades to a\n  warning — your test results and exit are untouched.\n\n> **Don't install in a dev-omit shell.** If `NODE_ENV=production` is set (or npm\n> is configured with `omit=dev` / `production=true`), `npm i -D` prunes **every**\n> devDependency — vitest, jsdom and the rest — and `npm test` then runs zero\n> tests. This is npm's behavior, not the reporter's. Install in a normal shell. If\n> it already happened, `npm install` restores your test deps; `mitte-beat-init`\n> also detects the missing deps and prints this same recovery hint.\n\n## Options\n\nThe no-args form needs none, but every field can be passed explicitly to the\nconstructor (explicit wins over env):\n\n```js\nimport MitteBeatReporter from '@bekindlabs/mitte-beat-reporter'\n\nreporters: ['default', new MitteBeatReporter({ track: 'sosuke', timeoutMs: 5000 })]\n```\n\n| option         | env                        | default         |\n| -------------- | -------------------------- | --------------- |\n| `ingestUrl`    | `MITTE_BEAT_INGEST_URL`    | — (required)    |\n| `ingestSecret` | `MITTE_BEAT_INGEST_SECRET` | — (required)    |\n| `track`        | `MITTE_BEAT_TRACK`         | `dev-<track>` branch |\n| `story`        | `MITTE_BEAT_STORY`         | —               |\n| `timeoutMs`    | —                          | `3000`          |\n| `repoRoot`     | —                          | `process.cwd()` |\n\n## License\n\nMIT\n","readmeFilename":"README.md"}