{"_id":"@asimov-collective/calvin","_rev":"6-f0b3d67feb4f705d02ccdd127bded61f","name":"@asimov-collective/calvin","dist-tags":{"latest":"1.0.0"},"versions":{"0.1.1":{"name":"@asimov-collective/calvin","version":"0.1.1","license":"MIT","_id":"@asimov-collective/calvin@0.1.1","maintainers":[{"name":"connorrothschild","email":"connor@asimovcollective.com"}],"homepage":"https://github.com/asimov-collective/calvin#readme","bugs":{"url":"https://github.com/asimov-collective/calvin/issues"},"bin":{"agentation-pull":"bin/agentation-pull.mjs"},"dist":{"shasum":"406bd72f433573cbafad795b0672eb78a52ec491","tarball":"https://registry.npmjs.org/@asimov-collective/calvin/-/calvin-0.1.1.tgz","fileCount":16,"integrity":"sha512-+wDzxpEwgwRgYnxPIJMOFMVuh+ubRdp947/p7yfc8pendxICzqV6ufp77HrzfcqZcLmy2DQCrVol60iRi5L9kg==","signatures":[{"sig":"MEUCIQDx3xXECd7bhagElODJUIzkXvJwYyo6IJISK4BO6xvquQIgE1ZcGoJwjrdJcWeMWWrrD2jLmsVvqjnBmnvX2HQ+UgA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40541},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","default":"./dist/react.js"},"./next-routes":{"types":"./dist/next-routes.d.ts","default":"./dist/next-routes.js"}},"gitHead":"ec7be8340128a4928c6639fe74d4d397245cba16","private":false,"scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"pnpm build"},"_npmUser":{"name":"connorrothschild","email":"connor@asimovcollective.com"},"repository":{"url":"git+https://github.com/asimov-collective/calvin.git","type":"git"},"_npmVersion":"11.16.0","description":"Client package for the shared, durable client-feedback annotation system built on [`agentation`](https://www.npmjs.com/package/agentation) and the [`calvin-worker`](https://github.com/asimov-collective/calvin-worker) Cloudflare Worker.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"next":"^16.2.6","react":"^19","react-dom":"^19","agentation":"^3.0.2","typescript":"^5","@types/node":"^22","@types/react":"^19","@types/react-dom":"^19"},"peerDependencies":{"next":"^15 || ^16","react":"^18 || ^19","react-dom":"^18 || ^19","agentation":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/calvin_0.1.1_1786468699741_0.6879101123831846","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@asimov-collective/calvin","version":"0.1.2","license":"MIT","_id":"@asimov-collective/calvin@0.1.2","maintainers":[{"name":"connorrothschild","email":"connor@asimovcollective.com"}],"homepage":"https://github.com/asimov-collective/calvin#readme","bugs":{"url":"https://github.com/asimov-collective/calvin/issues"},"bin":{"agentation-pull":"bin/agentation-pull.mjs"},"dist":{"shasum":"3b9f1134b01aa96cff91a4856b9b8791e9dc17ab","tarball":"https://registry.npmjs.org/@asimov-collective/calvin/-/calvin-0.1.2.tgz","fileCount":16,"integrity":"sha512-Ue1AbYMEmy9dwI+GZoj4lkTdmd89T8ZZ7i+k0xFjCMhYdcuhPG80wWR8SBphkPhZakJbYDsjdEGvmKFeGIhUSA==","signatures":[{"sig":"MEYCIQDBcb0A6O4YA+seEnPf1avwsWQtKE25+WT0BuxRxzkENQIhAICvcKpGxgEJcnRDJ9B4dimoiz2dKR40MDoLuE450Z9q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40595},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","default":"./dist/react.js"},"./next-routes":{"types":"./dist/next-routes.d.ts","default":"./dist/next-routes.js"}},"gitHead":"aa43329d3a130316a9c45eda25d29199a1bd44bc","private":false,"scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"pnpm build"},"_npmUser":{"name":"connorrothschild","email":"connor@asimovcollective.com"},"repository":{"url":"git+https://github.com/asimov-collective/calvin.git","type":"git"},"_npmVersion":"11.16.0","description":"Client package for the shared, durable client-feedback annotation system built on [`agentation`](https://www.npmjs.com/package/agentation) and the [`calvin-worker`](https://github.com/asimov-collective/calvin-worker) Cloudflare Worker.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"next":"^16.2.6","react":"^19","react-dom":"^19","agentation":"^3.0.2","typescript":"^5","@types/node":"^22","@types/react":"^19","@types/react-dom":"^19"},"peerDependencies":{"next":"^15 || ^16","react":"^18 || ^19","react-dom":"^18 || ^19","agentation":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/calvin_0.1.2_1786469918495_0.9616957187475033","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@asimov-collective/calvin","version":"0.2.0","license":"MIT","_id":"@asimov-collective/calvin@0.2.0","maintainers":[{"name":"connorrothschild","email":"connor@asimovcollective.com"}],"homepage":"https://github.com/asimov-collective/calvin#readme","bugs":{"url":"https://github.com/asimov-collective/calvin/issues"},"bin":{"agentation-pull":"bin/agentation-pull.mjs"},"dist":{"shasum":"9728605b0a1e1f904e3d7b5e1b226dd499d3e8e2","tarball":"https://registry.npmjs.org/@asimov-collective/calvin/-/calvin-0.2.0.tgz","fileCount":16,"integrity":"sha512-RLG0lVPSj+tRUFgBQ9YpUmzxCLp18dhm8U/M+VkHEqYYvP9EoN/vLL+uHyXv91DXtoaNabciM6j/Nu8x1RQZOA==","signatures":[{"sig":"MEUCIQDK6EGBF1BB4d5jkDTq1aA8625T87od75ZhsQEPi8yeJwIgGytggT2Y1Xa4Cj2ui66fMkbMH6c4/KPomYh8xqyCjBs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42814},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","default":"./dist/react.js"},"./next-routes":{"types":"./dist/next-routes.d.ts","default":"./dist/next-routes.js"}},"gitHead":"4ab5a2d412aae2cf41e8cc0514f12c0c3b48ac59","private":false,"scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"pnpm build"},"_npmUser":{"name":"connorrothschild","email":"connor@asimovcollective.com"},"repository":{"url":"git+https://github.com/asimov-collective/calvin.git","type":"git"},"_npmVersion":"11.16.0","description":"Client package for the shared, durable client-feedback annotation system built on [`agentation`](https://www.npmjs.com/package/agentation) and the [`calvin-worker`](https://github.com/asimov-collective/calvin-worker) Cloudflare Worker.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"next":"^16.2.6","react":"^19","react-dom":"^19","agentation":"^3.0.2","typescript":"^5","@types/node":"^22","@types/react":"^19","@types/react-dom":"^19"},"peerDependencies":{"next":"^15 || ^16","react":"^18 || ^19","react-dom":"^18 || ^19","agentation":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/calvin_0.2.0_1786471302072_0.339191362407987","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@asimov-collective/calvin","version":"0.3.0","license":"MIT","_id":"@asimov-collective/calvin@0.3.0","maintainers":[{"name":"connorrothschild","email":"connor@asimovcollective.com"}],"homepage":"https://github.com/asimov-collective/calvin#readme","bugs":{"url":"https://github.com/asimov-collective/calvin/issues"},"bin":{"agentation-pull":"bin/agentation-pull.mjs"},"dist":{"shasum":"33520391d182f2449d675df0bbc16646cf9cd023","tarball":"https://registry.npmjs.org/@asimov-collective/calvin/-/calvin-0.3.0.tgz","fileCount":16,"integrity":"sha512-HG1kS7C0JpYDjhsrfBi7jChraANaIC3ROdo2fP3LVciUnCMfQ6jpXVYdtrxOotRKaYK6ei2czOBcaaUr3vdwNw==","signatures":[{"sig":"MEQCIBoc94ebCfIw8ExFlcggQMMWXOAy30Qr8k4i73YhDL2ZAiA4rnQpcNq8dNjtUfyz1J0Yq++MmxuE90SlV2VM42AR5w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37766},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","default":"./dist/react.js"},"./next-routes":{"types":"./dist/next-routes.d.ts","default":"./dist/next-routes.js"}},"gitHead":"304a84bbafb9ec4ee589aff20c5e3853d78869f1","private":false,"scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"pnpm build"},"_npmUser":{"name":"connorrothschild","email":"connor@asimovcollective.com"},"repository":{"url":"git+https://github.com/asimov-collective/calvin.git","type":"git"},"_npmVersion":"11.16.0","description":"Client package for the shared, durable client-feedback annotation system built on [`agentation`](https://www.npmjs.com/package/agentation) and the [`calvin-worker`](https://github.com/asimov-collective/calvin-worker) Cloudflare Worker.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"next":"^16.2.6","react":"^19","react-dom":"^19","agentation":"^3.0.2","typescript":"^5","@types/node":"^22","@types/react":"^19","@types/react-dom":"^19"},"peerDependencies":{"next":"^15 || ^16","react":"^18 || ^19","react-dom":"^18 || ^19","agentation":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/calvin_0.3.0_1786473169964_0.34031044210031314","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@asimov-collective/calvin","version":"0.3.1","license":"MIT","_id":"@asimov-collective/calvin@0.3.1","maintainers":[{"name":"connorrothschild","email":"connor@asimovcollective.com"}],"homepage":"https://github.com/asimov-collective/calvin#readme","bugs":{"url":"https://github.com/asimov-collective/calvin/issues"},"bin":{"agentation-pull":"bin/agentation-pull.mjs"},"dist":{"shasum":"1fefc3e76121e3109e52da97bd8082b4c349ba5a","tarball":"https://registry.npmjs.org/@asimov-collective/calvin/-/calvin-0.3.1.tgz","fileCount":16,"integrity":"sha512-vDOui9onCDvqkijP+8NVO8b3ekqEzaGnV1sMraJ7zlcK40BPbSf+fiXME4xqGQ13fKM6U9mLC8V9gaVozI/D/A==","signatures":[{"sig":"MEUCIQDtAwgfgo7zh1pDAbn2zcJUUE21/z94/dg9xjFjVRIxhwIgEYv5oEGAFA5/dFsLzOFyrwUpdJ6p4nOfKtMN80FDnz4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39380},"type":"module","_from":"file:asimov-collective-calvin-0.3.1.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","default":"./dist/react.js"},"./next-routes":{"types":"./dist/next-routes.d.ts","default":"./dist/next-routes.js"}},"private":false,"scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"connorrothschild","email":"connor@asimovcollective.com"},"_resolved":"/private/var/folders/h7/n3k2fpg93wbf7mdh9q298ksr0000gn/T/9f6dd20b3322fc398c8c77f0a2079839/asimov-collective-calvin-0.3.1.tgz","_integrity":"sha512-vDOui9onCDvqkijP+8NVO8b3ekqEzaGnV1sMraJ7zlcK40BPbSf+fiXME4xqGQ13fKM6U9mLC8V9gaVozI/D/A==","repository":{"url":"git+https://github.com/asimov-collective/calvin.git","type":"git"},"_npmVersion":"11.16.0","description":"Client package for the shared, durable client-feedback annotation system built on [`agentation`](https://www.npmjs.com/package/agentation) and the [`calvin-worker`](https://github.com/asimov-collective/calvin-worker) Cloudflare Worker.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"next":"^16.2.6","react":"^19","react-dom":"^19","agentation":"^3.0.2","typescript":"^5","@types/node":"^22","@types/react":"^19","@types/react-dom":"^19"},"peerDependencies":{"next":"^15 || ^16","react":"^18 || ^19","react-dom":"^18 || ^19","agentation":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/calvin_0.3.1_1786566500962_0.71399333332382","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"_id":"@asimov-collective/calvin@1.0.0","bin":{"calvin":"bin/calvin.mjs"},"bugs":{"url":"https://github.com/asimov-collective/calvin/issues"},"dist":{"shasum":"e4c6056d89c2fb50e9a175a2c2c913e9119223d4","tarball":"https://registry.npmjs.org/@asimov-collective/calvin/-/calvin-1.0.0.tgz","fileCount":8,"integrity":"sha512-L2WJbPtIyNn3J0SMN0n0HF4P+nmrE6vzkAlSJtDtDB4RkaPdI6qG/PZbhS6tjGQaLjr1wHA7yNRQqApC6RdfkQ==","signatures":[{"sig":"MEYCIQD2iBlhxT2TwgMLHuaPIRY97EeLjceEzmzDXQuQQiMTcwIhAPa/oUmlHre6ao9j3Eqx//ClVBjbkbGSv53WCG/OpXVZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICaKZ2daP2nNjGlRUlkIRunWWTi+LceKZ/HklxG/tkFdAiBxex62wJz6gOHpig44vV9lLMTq+6a8qTDYNgO0QhV4Hg=="}],"unpackedSize":12051},"name":"@asimov-collective/calvin","type":"module","engines":{"node":">=22.12"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","default":"./dist/react.js"}},"gitHead":"1c69475087bcb805f844891e76a7aceda2110a84","license":"MIT","private":false,"scripts":{"build":"rm -rf dist && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","prepublishOnly":"pnpm build"},"version":"1.0.0","_npmUser":{"name":"connorrothschild","email":"connor@asimovcollective.com"},"homepage":"https://github.com/asimov-collective/calvin#readme","repository":{"url":"git+https://github.com/asimov-collective/calvin.git","type":"git"},"_npmVersion":"11.16.0","description":"Asimov staging-site feedback: a thin wrapper around a self-hosted komo.","directories":{},"maintainers":[{"name":"connorrothschild","email":"connor@asimovcollective.com"}],"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"react":"^19","react-dom":"^19","typescript":"^5","@types/node":"^22","@types/react":"^19","@tjcages/komo":"^0.5.0","@types/react-dom":"^19"},"peerDependencies":{"react":"^18.2 || ^19","react-dom":"^18.2 || ^19","@tjcages/komo":"^0.5.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/calvin_1.0.0_1790625755639_0.5200355901571858"}}},"time":{"created":"2026-08-11T17:18:19.637Z","modified":"2026-09-28T20:02:35.983Z","0.1.1":"2026-08-11T17:18:19.874Z","0.1.2":"2026-08-11T17:38:38.692Z","0.2.0":"2026-08-11T18:01:42.210Z","0.3.0":"2026-08-11T18:32:50.121Z","0.3.1":"2026-08-12T20:28:21.127Z","1.0.0":"2026-09-28T20:02:35.736Z"},"bugs":{"url":"https://github.com/asimov-collective/calvin/issues"},"license":"MIT","homepage":"https://github.com/asimov-collective/calvin#readme","repository":{"url":"git+https://github.com/asimov-collective/calvin.git","type":"git"},"description":"Asimov staging-site feedback: a thin wrapper around a self-hosted komo.","maintainers":[{"name":"connorrothschild","email":"connor@asimovcollective.com"}],"readme":"# @asimov-collective/calvin\n\nPoint-and-comment feedback for Asimov staging sites. Reviewers (clients or the team)\nclick an element, leave a comment, reply, and resolve; coding agents read the same\nthreads from the CLI, fix them, reply with evidence, and resolve.\n\nCalvin is a thin wrapper around [komo](https://github.com/tjcages/komo) (MIT), talking to\nour own self-hosted komo Worker —\n[`calvin-worker`](https://github.com/asimov-collective/calvin-worker), deployed at\n`https://calvin.asimov-collective.workers.dev`. It adds Asimov defaults (endpoint,\n`NEXT_PUBLIC_CALVIN_*` env vars, off-unless-enabled) and a one-command agent setup.\nEverything else — UI, anchoring, identity, threads — is komo.\n\nNamed for Susan Calvin, Asimov's robopsychologist — the one who reads what's actually\ngoing on and turns it into something actionable.\n\n## What you get\n\n- Point and area comments anchored to page elements (they follow layout changes).\n- Threads with replies, reactions, resolve/reopen, a searchable sidebar with a\n  resolved view.\n- Named guest reviewers (no account needed); Asimov team members can sign in with\n  Google (`@asimovcollective.com` only).\n- **Copy all comments for agent** in the toolbar, and a CLI (`komo comments …`) so an\n  agent can list, reply to, and resolve threads directly.\n\n## Adding Calvin to a site\n\n**1. Register the project** in `calvin-worker` (one per client site):\n\n```bash\ncd calvin-worker\npnpm project add acme-site --repo asimov-collective/acme \\\n  --origin https://acme-staging.vercel.app --origin 'http://localhost:*'\npnpm run deploy\n```\n\nOpen the owner-claim link it prints and sign in with Google once. Guests can't comment\nuntil a project has an owner.\n\n**2. Install** in the site:\n\n```bash\npnpm add @asimov-collective/calvin @tjcages/komo\n```\n\n**3. Env vars:**\n\n| Variable | Purpose |\n|---|---|\n| `NEXT_PUBLIC_ENABLE_CALVIN` | `\"true\"` to mount the UI. Set it on staging only, never production. |\n| `NEXT_PUBLIC_CALVIN_PROJECT` | The project key from step 1, e.g. `acme-site`. |\n| `NEXT_PUBLIC_CALVIN_REPO` | The `--repo` from step 1, if you passed one. Must match the Worker's config. |\n| `NEXT_PUBLIC_CALVIN_ENDPOINT` | Optional. Defaults to the shared Worker. |\n\nNone of these are secrets.\n\n**4. Mount** once, e.g. in the root layout:\n\n```tsx\nimport { Calvin } from \"@asimov-collective/calvin/react\";\n\nexport default function RootLayout({ children }: { children: React.ReactNode }) {\n  return (\n    <html lang=\"en\">\n      <body>\n        {children}\n        <Calvin />\n      </body>\n    </html>\n  );\n}\n```\n\n`<Calvin />` accepts any [komo option](https://github.com/tjcages/komo#client-options)\nas a prop (e.g. `pageRoot`, `source`). For non-React sites, call\n`initCalvin()` from `@asimov-collective/calvin` after the page loads.\n\n**5. Agent setup** (once per repo):\n\n```bash\nnpx calvin setup --origin https://acme-staging.vercel.app\n```\n\nThis writes `.komo/project.json` from your env vars and adds komo's comment workflow to\n`AGENTS.md`. Commit both. Then:\n\n```bash\nnpx komo login              # Google, once per machine\nnpx komo comments list      # open threads as JSON\nnpx komo comments prompt    # open threads as an agent-ready Markdown prompt\nnpx komo comments reply THREAD_ID --body \"Fixed; verified on mobile.\"\nnpx komo comments resolve THREAD_ID\n```\n\n## Good to know\n\n- **Stable anchors:** pins attach to elements by selector and verify them against the\n  element's text and nearby text. If nearby copy changes, a pin detaches and shows\n  faded at its original position instead of guessing. Add\n  `data-comment-anchor=\"pricing\"` to important sections to make selectors stable, and\n  `data-comment-source=\"src/components/Pricing.tsx\"` to tell agents which file to edit.\n- **Localhost is a separate channel:** comments left on `localhost` go to komo's\n  `local` channel, apart from staging comments. CLI commands for them need\n  `--branch local`.\n- **Per-branch comments** are opt-in: pass `scope=\"branch\"` and `branch` to `<Calvin />`.\n","readmeFilename":"README.md"}