{"_id":"@andie/loopmark","_rev":"8-ec2f4e0fb12a709d1ebdd56bf66cba58","name":"@andie/loopmark","dist-tags":{"latest":"0.0.8"},"versions":{"0.0.1":{"name":"@andie/loopmark","version":"0.0.1","keywords":["ai","agent","human-in-the-loop","cli","local-first","feedback"],"license":"MIT","_id":"@andie/loopmark@0.0.1","maintainers":[{"name":"andie","email":"zchangan@163.com"}],"homepage":"https://github.com/Andiedie/loopmark#readme","bugs":{"url":"https://github.com/Andiedie/loopmark/issues"},"bin":{"loopmark":"dist/cli/index.js"},"dist":{"shasum":"c5842c89a27d4d2da1dad025a6a4fd058c0b911d","tarball":"https://registry.npmjs.org/@andie/loopmark/-/loopmark-0.0.1.tgz","fileCount":9,"integrity":"sha512-b/v3Lrwao0q2arnJ/vhoKtq5ipYii6FGxi7tv8e4w0FYmlTaZX6/rxyXK+Jw61201KYkp0pCI+Oa8U3TcN8KLA==","signatures":[{"sig":"MEYCIQD9nyMrTD5nlYj4c3LTlMyAlnklyQEKLAZi/8nkiBIbOAIhAKNflb39T75t67obfVlt/sHMeDx1wGqu2ffCFm/Rje33","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":519952},"type":"module","gitHead":"95dd9f881e56d960588ed7615e7ba5553b585ef2","scripts":{"dev":"vite --host 127.0.0.1","try":"pnpm try:complex","lint":"eslint . --max-warnings=0","test":"vitest run --coverage","build":"pnpm build:web && pnpm build:cli","start":"node dist/cli/index.js","test:e2e":"pnpm build && playwright test","build:cli":"tsup","build:web":"vite build","try:basic":"node scripts/try-example.mjs examples/basic.json","typecheck":"tsc --noEmit","test:watch":"vitest","try:simple":"node scripts/try-example.mjs examples/simple.json","try:complex":"node scripts/try-example.mjs examples/full.json"},"_npmUser":{"name":"andie","email":"zchangan@163.com"},"repository":{"url":"git+https://github.com/Andiedie/loopmark.git","type":"git"},"_npmVersion":"11.12.1","description":"Local human input gate for AI agents.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"^4.2.0","clsx":"^2.1.1","react":"^19.2.7","react-dom":"^19.2.7","lucide-react":"^0.468.0","@dnd-kit/core":"^6.3.1","tailwind-merge":"^3.4.0","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@radix-ui/react-slot":"^1.2.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.5.2","devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","vite":"^7.2.7","jsdom":"^27.2.0","eslint":"^9.39.2","vitest":"^4.0.15","postcss":"^8.5.6","@eslint/js":"^9.39.2","playwright":"^1.57.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^3.4.18","@types/react":"^19.2.7","autoprefixer":"^10.4.23","@playwright/test":"^1.57.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.50.0","@vitest/coverage-v8":"^4.0.15","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","eslint-plugin-react-hooks":"^7.0.1","@testing-library/user-event":"^14.6.1","eslint-plugin-react-refresh":"^0.4.24"},"_npmOperationalInternal":{"tmp":"tmp/loopmark_0.0.1_1781606639684_0.11901179434224773","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@andie/loopmark","version":"0.0.2","keywords":["ai","agent","human-in-the-loop","cli","local-first","feedback"],"license":"MIT","_id":"@andie/loopmark@0.0.2","maintainers":[{"name":"andie","email":"zchangan@163.com"}],"homepage":"https://github.com/Andiedie/loopmark#readme","bugs":{"url":"https://github.com/Andiedie/loopmark/issues"},"bin":{"loopmark":"dist/cli/index.js"},"dist":{"shasum":"137a2c577d8fd49d914d58f806b124022464bbb1","tarball":"https://registry.npmjs.org/@andie/loopmark/-/loopmark-0.0.2.tgz","fileCount":9,"integrity":"sha512-9yR4Mmb4cIf7gRKLO81PujD8PSdBo/WDZVj4wzY7vC+zuWzr85BNU17GaAzhV6vjgzdX8yqUb0ppVPy7phuHLA==","signatures":[{"sig":"MEUCIF9W5j/HndeGNM9xTvQwEFqoWHzMjLvZC3MNRrOTR2vlAiEAw7lIGFbSNFVZO8Uc1MRHhiT+Gh4jG8AlDoh/gXME0EU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@andie%2floopmark@0.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":519952},"type":"module","gitHead":"399054d913b51e13c4ce7c8670f06e383e0e3cfd","scripts":{"dev":"vite --host 127.0.0.1","try":"pnpm try:complex","lint":"eslint . --max-warnings=0","test":"vitest run --coverage","build":"pnpm build:web && pnpm build:cli","start":"node dist/cli/index.js","test:e2e":"pnpm build && playwright test","build:cli":"tsup","build:web":"vite build","try:basic":"node scripts/try-example.mjs examples/basic.json","typecheck":"tsc --noEmit","test:watch":"vitest","try:simple":"node scripts/try-example.mjs examples/simple.json","try:complex":"node scripts/try-example.mjs examples/full.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:72c502fe-6911-4f2e-9e32-149a0e9b2c83"}},"repository":{"url":"git+https://github.com/Andiedie/loopmark.git","type":"git"},"_npmVersion":"11.13.0","description":"Local human input gate for AI agents.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.2.0","clsx":"^2.1.1","react":"^19.2.7","react-dom":"^19.2.7","lucide-react":"^0.468.0","@dnd-kit/core":"^6.3.1","tailwind-merge":"^3.4.0","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@radix-ui/react-slot":"^1.2.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.5.2","devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","vite":"^7.2.7","jsdom":"^27.2.0","eslint":"^9.39.2","vitest":"^4.0.15","postcss":"^8.5.6","@eslint/js":"^9.39.2","playwright":"^1.57.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^3.4.18","@types/react":"^19.2.7","autoprefixer":"^10.4.23","@playwright/test":"^1.57.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.50.0","@vitest/coverage-v8":"^4.0.15","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","eslint-plugin-react-hooks":"^7.0.1","@testing-library/user-event":"^14.6.1","eslint-plugin-react-refresh":"^0.4.24"},"_npmOperationalInternal":{"tmp":"tmp/loopmark_0.0.2_1781607145028_0.2013060471402519","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@andie/loopmark","version":"0.0.3","keywords":["ai","agent","human-in-the-loop","cli","local-first","feedback"],"license":"MIT","_id":"@andie/loopmark@0.0.3","maintainers":[{"name":"andie","email":"zchangan@163.com"}],"homepage":"https://github.com/Andiedie/loopmark#readme","bugs":{"url":"https://github.com/Andiedie/loopmark/issues"},"bin":{"loopmark":"dist/cli/index.js"},"dist":{"shasum":"0c82ecee45c8741c189641b9d41987712d5c47b0","tarball":"https://registry.npmjs.org/@andie/loopmark/-/loopmark-0.0.3.tgz","fileCount":11,"integrity":"sha512-9hyFtZZkP1ph8QylSCSsBds1WihyM2MRw+o9C7EeNaqPNbJfEpbT5htFvV83W8h6wQRzJUBxl88IbG+9WtN1lg==","signatures":[{"sig":"MEYCIQDQ3W3/eqWgbuwb2tDK4StN2AHXgIO7BGynYkpQNmnskQIhAL2NHZ8Y4Y2YbZYy2GOpD8p0heOKbDyl2LtrGv5xsAB0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@andie%2floopmark@0.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":528811},"type":"module","gitHead":"0987d2510e32f9259ecefffb609eb6319f0778dd","scripts":{"dev":"vite --host 127.0.0.1","try":"pnpm try:complex","lint":"eslint . --max-warnings=0","test":"vitest run --coverage","build":"pnpm build:web && pnpm build:cli","start":"node dist/cli/index.js","test:e2e":"pnpm build && playwright test","build:cli":"tsup","build:web":"vite build","try:basic":"node scripts/try-example.mjs examples/basic.json","typecheck":"tsc --noEmit","test:watch":"vitest","try:simple":"node scripts/try-example.mjs examples/simple.json","try:complex":"node scripts/try-example.mjs examples/full.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:72c502fe-6911-4f2e-9e32-149a0e9b2c83"}},"repository":{"url":"git+https://github.com/Andiedie/loopmark.git","type":"git"},"_npmVersion":"11.13.0","description":"Local human input gate for AI agents.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.2.0","clsx":"^2.1.1","react":"^19.2.7","react-dom":"^19.2.7","lucide-react":"^0.468.0","@dnd-kit/core":"^6.3.1","tailwind-merge":"^3.4.0","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@radix-ui/react-slot":"^1.2.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.5.2","devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","vite":"^7.2.7","jsdom":"^27.2.0","eslint":"^9.39.2","vitest":"^4.0.15","postcss":"^8.5.6","@eslint/js":"^9.39.2","playwright":"^1.57.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^3.4.18","@types/react":"^19.2.7","autoprefixer":"^10.4.23","@playwright/test":"^1.57.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.50.0","@vitest/coverage-v8":"^4.0.15","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","eslint-plugin-react-hooks":"^7.0.1","@testing-library/user-event":"^14.6.1","eslint-plugin-react-refresh":"^0.4.24"},"_npmOperationalInternal":{"tmp":"tmp/loopmark_0.0.3_1781616816578_0.6289526009247226","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@andie/loopmark","version":"0.0.4","keywords":["ai","agent","human-in-the-loop","cli","cloudflare","e2ee","feedback"],"license":"MIT","_id":"@andie/loopmark@0.0.4","maintainers":[{"name":"andie","email":"zchangan@163.com"}],"homepage":"https://github.com/Andiedie/loopmark#readme","bugs":{"url":"https://github.com/Andiedie/loopmark/issues"},"bin":{"loopmark":"dist/cli/index.js"},"dist":{"shasum":"2c17f5d3b2004b8e544339c374fe3e4493ba956c","tarball":"https://registry.npmjs.org/@andie/loopmark/-/loopmark-0.0.4.tgz","fileCount":23,"integrity":"sha512-2cs7UhuAJYvGMB2JzZJDRVgt+NvzW521hs5lX9Mm8aGIG+dq9svaJeIgohbqsq/lqD2FFj7wQ6Qe8zB2iHDB5A==","signatures":[{"sig":"MEUCIQC2L9JihXHCs0vn/jOts3nyXXtnVrsGirCDnCyhaarrKgIgcHZyRAMcoxVhmBmAsCc21fnyZBt5CuidL9hrwPQUkP0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@andie%2floopmark@0.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1482039},"type":"module","gitHead":"823cdf3fd9b89f9ba657a2327d1e465607a3dc5a","scripts":{"dev":"vite --host 127.0.0.1","try":"pnpm try:complex","lint":"eslint . --max-warnings=0","test":"vitest run --coverage","build":"pnpm build:web && pnpm build:cli","start":"node dist/cli/index.js","test:e2e":"pnpm build && playwright test","build:cli":"tsup","build:web":"vite build","try:basic":"node scripts/try-example.mjs examples/basic.json","typecheck":"tsc --noEmit","test:watch":"vitest","try:simple":"node scripts/try-example.mjs examples/simple.json","try:complex":"node scripts/try-example.mjs examples/full.json","dev:cloudflare":"pnpm build:web && wrangler dev","check:cloudflare":"pnpm build:web && wrangler deploy --dry-run","deploy:cloudflare":"pnpm build:web && wrangler deploy"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:72c502fe-6911-4f2e-9e32-149a0e9b2c83"}},"repository":{"url":"git+https://github.com/Andiedie/loopmark.git","type":"git"},"_npmVersion":"11.13.0","description":"Cloud human input handoff for AI agents.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.2.0","clsx":"^2.1.1","react":"^19.2.7","react-dom":"^19.2.7","lucide-react":"^0.468.0","@dnd-kit/core":"^6.3.1","tailwind-merge":"^3.4.0","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@radix-ui/react-slot":"^1.2.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.5.2","devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","vite":"^7.2.7","jsdom":"^27.2.0","eslint":"^9.39.2","vitest":"^4.0.15","postcss":"^8.5.6","wrangler":"^4.100.0","@eslint/js":"^9.39.2","playwright":"^1.57.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^3.4.18","@types/react":"^19.2.7","autoprefixer":"^10.4.23","@playwright/test":"^1.57.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.50.0","@vitest/coverage-v8":"^4.0.15","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@cloudflare/workers-types":"^4.20260616.1","@testing-library/jest-dom":"^6.9.1","eslint-plugin-react-hooks":"^7.0.1","@testing-library/user-event":"^14.6.1","eslint-plugin-react-refresh":"^0.4.24"},"_npmOperationalInternal":{"tmp":"tmp/loopmark_0.0.4_1781683636820_0.3962031217249413","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@andie/loopmark","version":"0.0.5","keywords":["ai","agent","human-in-the-loop","cli","cloudflare","e2ee","feedback"],"license":"MIT","_id":"@andie/loopmark@0.0.5","maintainers":[{"name":"andie","email":"zchangan@163.com"}],"homepage":"https://github.com/Andiedie/loopmark#readme","bugs":{"url":"https://github.com/Andiedie/loopmark/issues"},"bin":{"loopmark":"dist/cli/index.js"},"dist":{"shasum":"14ac2f25dea544fddad899f9fbf1136bb4627bf6","tarball":"https://registry.npmjs.org/@andie/loopmark/-/loopmark-0.0.5.tgz","fileCount":23,"integrity":"sha512-IjSrZVDkAom9KYL525f3bdaqvmhe4rMyKadB7n1e+nlqmCpEmg8e+mF787dORgyug8JIpY7hv+Qf5nLG7bYdQg==","signatures":[{"sig":"MEUCIQDbymqLmRHm3fJmqcR7n8siVr70KIseNYwD6IzUWtjOngIgOqbv8/iDQjyqs5xCMvLY6Qy8sipZire9R7JJVApVdRU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@andie%2floopmark@0.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1502490},"type":"module","gitHead":"3b1f366c130afe05f40c32ce1434b2e8679a8109","scripts":{"dev":"vite --host 127.0.0.1","try":"pnpm try:complex","lint":"eslint . --max-warnings=0","test":"vitest run --coverage","build":"pnpm build:web && pnpm build:cli","start":"node dist/cli/index.js","test:e2e":"pnpm build && playwright test","build:cli":"tsup","build:web":"vite build","try:basic":"tsx scripts/try-example.ts examples/basic.json","typecheck":"tsc --noEmit","test:watch":"vitest","try:simple":"tsx scripts/try-example.ts examples/simple.json","try:complex":"tsx scripts/try-example.ts examples/full.json","dev:cloudflare":"pnpm build:web && wrangler dev","check:cloudflare":"pnpm build:web && wrangler deploy --dry-run","deploy:cloudflare":"pnpm build:web && wrangler deploy"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:72c502fe-6911-4f2e-9e32-149a0e9b2c83"}},"repository":{"url":"git+https://github.com/Andiedie/loopmark.git","type":"git"},"_npmVersion":"11.13.0","description":"Cloud human input handoff for AI agents.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.2.0","clsx":"^2.1.1","react":"^19.2.7","react-dom":"^19.2.7","lucide-react":"^0.468.0","@dnd-kit/core":"^6.3.1","tailwind-merge":"^3.4.0","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@radix-ui/react-slot":"^1.2.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.5.2","devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","vite":"^7.2.7","jsdom":"^27.2.0","eslint":"^9.39.2","vitest":"^4.0.15","postcss":"^8.5.6","wrangler":"^4.100.0","@eslint/js":"^9.39.2","playwright":"^1.57.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^3.4.18","@types/react":"^19.2.7","autoprefixer":"^10.4.23","@playwright/test":"^1.57.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.50.0","@vitest/coverage-v8":"^4.0.15","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@cloudflare/workers-types":"^4.20260616.1","@testing-library/jest-dom":"^6.9.1","eslint-plugin-react-hooks":"^7.0.1","@testing-library/user-event":"^14.6.1","eslint-plugin-react-refresh":"^0.4.24"},"_npmOperationalInternal":{"tmp":"tmp/loopmark_0.0.5_1781804596861_0.9274307498505245","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@andie/loopmark","version":"0.0.6","keywords":["ai","agent","human-in-the-loop","cli","cloudflare","e2ee","feedback"],"license":"MIT","_id":"@andie/loopmark@0.0.6","maintainers":[{"name":"andie","email":"zchangan@163.com"}],"homepage":"https://github.com/Andiedie/loopmark#readme","bugs":{"url":"https://github.com/Andiedie/loopmark/issues"},"bin":{"loopmark":"dist/cli/index.js"},"dist":{"shasum":"610f8cffa138927f42a372409f720599616d4101","tarball":"https://registry.npmjs.org/@andie/loopmark/-/loopmark-0.0.6.tgz","fileCount":23,"integrity":"sha512-SmxqPoBpm7PaQs9vrmabf5I0K3zPl6zaY/OBIAun+5dkcnPt58hEJUOqOZie40ZQhbJMzF+q5TxyPg3c0N0WZg==","signatures":[{"sig":"MEUCIQDIzFnbPWMvhnsi4vHMefIDjI7YsDih+OmQF2ktX+KIuQIgIBZL4upZhSWo4d5rlwd3p6MlGAC11vLLJ3eHAkxyyh0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@andie%2floopmark@0.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1496946},"type":"module","gitHead":"779bbd826189516d58886caf7512bbcbe6d9673a","scripts":{"dev":"vite --host 127.0.0.1","try":"pnpm try:complex","lint":"eslint . --max-warnings=0","test":"vitest run --coverage","build":"pnpm build:web && pnpm build:cli","start":"node dist/cli/index.js","test:e2e":"pnpm build && playwright test","build:cli":"tsup","build:web":"vite build","try:basic":"tsx scripts/try-example.ts examples/basic.json","typecheck":"tsc --noEmit","test:watch":"vitest","try:simple":"tsx scripts/try-example.ts examples/simple.json","try:complex":"tsx scripts/try-example.ts examples/full.json","dev:cloudflare":"pnpm build:web && wrangler dev","check:cloudflare":"pnpm build:web && wrangler deploy --dry-run","deploy:cloudflare":"pnpm build:web && wrangler deploy"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:72c502fe-6911-4f2e-9e32-149a0e9b2c83"}},"repository":{"url":"git+https://github.com/Andiedie/loopmark.git","type":"git"},"_npmVersion":"11.13.0","description":"Cloud human input handoff for AI agents.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.2.0","clsx":"^2.1.1","react":"^19.2.7","react-dom":"^19.2.7","lucide-react":"^0.468.0","@dnd-kit/core":"^6.3.1","tailwind-merge":"^3.4.0","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@radix-ui/react-slot":"^1.2.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.5.2","devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","vite":"^7.2.7","jsdom":"^27.2.0","eslint":"^9.39.2","vitest":"^4.0.15","postcss":"^8.5.6","wrangler":"^4.100.0","@eslint/js":"^9.39.2","playwright":"^1.57.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^3.4.18","@types/react":"^19.2.7","autoprefixer":"^10.4.23","@playwright/test":"^1.57.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.50.0","@vitest/coverage-v8":"^4.0.15","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@cloudflare/workers-types":"^4.20260616.1","@testing-library/jest-dom":"^6.9.1","eslint-plugin-react-hooks":"^7.0.1","@testing-library/user-event":"^14.6.1","eslint-plugin-react-refresh":"^0.4.24"},"_npmOperationalInternal":{"tmp":"tmp/loopmark_0.0.6_1781892655897_0.8280392467417503","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@andie/loopmark","version":"0.0.7","keywords":["ai","agent","human-in-the-loop","cli","cloudflare","e2ee","feedback"],"license":"MIT","_id":"@andie/loopmark@0.0.7","maintainers":[{"name":"andie","email":"zchangan@163.com"}],"homepage":"https://github.com/Andiedie/loopmark#readme","bugs":{"url":"https://github.com/Andiedie/loopmark/issues"},"bin":{"loopmark":"dist/cli/index.js"},"dist":{"shasum":"8101f1e41877feeabbf81a2255364a0114e690f8","tarball":"https://registry.npmjs.org/@andie/loopmark/-/loopmark-0.0.7.tgz","fileCount":23,"integrity":"sha512-IOa4m8kV19N9yphowsNUC2cJCsA3zz2yre5rHr8oAhE3DeUAp6y2wxF6Bu0jl7O086sTYuH3yLNhDgfRFTVFAQ==","signatures":[{"sig":"MEUCIQCxHAD5EHvhxl5+PKX9KZrq7Nr4JlcO1HMSbFuEOczEKgIgCmCdFnNLoxcuEoSVmqgBxSMDR5dxe6yLOtfziZv2KLI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@andie%2floopmark@0.0.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1498844},"type":"module","gitHead":"5be07d6845655301a58165102ebb5dd0592bbe35","scripts":{"dev":"vite --host 127.0.0.1","try":"pnpm try:complex","lint":"eslint . --max-warnings=0","test":"vitest run --coverage","build":"pnpm build:web && pnpm build:cli","start":"node dist/cli/index.js","test:e2e":"pnpm build && playwright test","build:cli":"tsup","build:web":"vite build","try:basic":"tsx scripts/try-example.ts examples/basic.json","typecheck":"tsc --noEmit","test:watch":"vitest","try:simple":"tsx scripts/try-example.ts examples/simple.json","try:complex":"tsx scripts/try-example.ts examples/full.json","dev:cloudflare":"pnpm build:web && wrangler dev","check:cloudflare":"pnpm build:web && wrangler deploy --dry-run","deploy:cloudflare":"pnpm build:web && wrangler deploy"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:72c502fe-6911-4f2e-9e32-149a0e9b2c83"}},"repository":{"url":"git+https://github.com/Andiedie/loopmark.git","type":"git"},"_npmVersion":"11.13.0","description":"Cloud human input handoff for AI agents.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.2.0","clsx":"^2.1.1","react":"^19.2.7","react-dom":"^19.2.7","lucide-react":"^0.468.0","@dnd-kit/core":"^6.3.1","tailwind-merge":"^3.4.0","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@radix-ui/react-slot":"^1.2.4","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.5.2","devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","vite":"^7.2.7","jsdom":"^27.2.0","eslint":"^9.39.2","vitest":"^4.0.15","postcss":"^8.5.6","wrangler":"^4.100.0","@eslint/js":"^9.39.2","playwright":"^1.57.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^3.4.18","@types/react":"^19.2.7","autoprefixer":"^10.4.23","@playwright/test":"^1.57.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.50.0","@vitest/coverage-v8":"^4.0.15","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@cloudflare/workers-types":"^4.20260616.1","@testing-library/jest-dom":"^6.9.1","eslint-plugin-react-hooks":"^7.0.1","@testing-library/user-event":"^14.6.1","eslint-plugin-react-refresh":"^0.4.24"},"_npmOperationalInternal":{"tmp":"tmp/loopmark_0.0.7_1782112589332_0.01847270039375082","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@andie/loopmark","version":"0.0.8","description":"Cloud human input handoff for AI agents.","keywords":["ai","agent","human-in-the-loop","cli","cloudflare","e2ee","feedback"],"homepage":"https://github.com/Andiedie/loopmark#readme","bugs":{"url":"https://github.com/Andiedie/loopmark/issues"},"repository":{"type":"git","url":"git+https://github.com/Andiedie/loopmark.git"},"license":"MIT","type":"module","bin":{"loopmark":"dist/cli/index.js"},"scripts":{"dev":"vite --host 127.0.0.1","start":"node dist/cli/index.js","try":"pnpm try:complex","try:simple":"tsx scripts/try-example.ts examples/simple.json","try:basic":"tsx scripts/try-example.ts examples/basic.json","try:complex":"tsx scripts/try-example.ts examples/full.json","build":"pnpm build:web && pnpm build:cli","build:web":"vite build","build:cli":"tsup","deploy:cloudflare":"pnpm build:web && wrangler deploy","dev:cloudflare":"pnpm build:web && wrangler dev","check:cloudflare":"pnpm build:web && wrangler deploy --dry-run","lint":"eslint . --max-warnings=0","test":"vitest run --coverage","test:watch":"vitest","test:e2e":"pnpm build && playwright test","typecheck":"tsc --noEmit"},"dependencies":{"@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@radix-ui/react-slot":"^1.2.4","class-variance-authority":"^0.7.1","clsx":"^2.1.1","lucide-react":"^0.468.0","react":"^19.2.7","react-dom":"^19.2.7","tailwind-merge":"^3.4.0","zod":"^4.2.0"},"devDependencies":{"@cloudflare/workers-types":"^4.20260616.1","@eslint/js":"^9.39.2","@playwright/test":"^1.57.0","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.0","@testing-library/user-event":"^14.6.1","@types/node":"^24.10.1","@types/react":"^19.2.7","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^5.1.2","@vitest/coverage-v8":"^4.0.15","autoprefixer":"^10.4.23","eslint":"^9.39.2","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-react-refresh":"^0.4.24","jsdom":"^27.2.0","playwright":"^1.57.0","postcss":"^8.5.6","tailwindcss":"^3.4.18","tsup":"^8.5.1","tsx":"^4.21.0","typescript":"^5.9.3","typescript-eslint":"^8.50.0","vite":"^7.2.7","vitest":"^4.0.15","wrangler":"^4.100.0"},"packageManager":"pnpm@11.5.2","gitHead":"36ee0e2df74d930de4c3de968621bfe78933ea88","_id":"@andie/loopmark@0.0.8","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-68SjdoamvUq10z9712Z423OP/pApxy+ddKVHOkws24IqRE0610jrK8Ih61Ye33MWr9DJvC4qJbblDZFgRlSNjw==","shasum":"b052268cb6329487f5cfe6b41a84497c91f63dfa","tarball":"https://registry.npmjs.org/@andie/loopmark/-/loopmark-0.0.8.tgz","fileCount":21,"unpackedSize":1483056,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@andie%2floopmark@0.0.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCmDM5ZbPu5y06zZ64tK7pM9Pvl30njT+7FKd+yiLbc0QIgVuMj1STR3jr7qG8lqAA4FPQ2V7ggMYwV0IurZ9Y63ps="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:72c502fe-6911-4f2e-9e32-149a0e9b2c83"}},"directories":{},"maintainers":[{"name":"andie","email":"zchangan@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/loopmark_0.0.8_1782197491823_0.07481681111242455"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-16T10:43:59.452Z","modified":"2026-06-23T06:51:32.319Z","0.0.1":"2026-06-16T10:43:59.859Z","0.0.2":"2026-06-16T10:52:25.206Z","0.0.3":"2026-06-16T13:33:36.791Z","0.0.4":"2026-06-17T08:07:16.997Z","0.0.5":"2026-06-18T17:43:17.108Z","0.0.6":"2026-06-19T18:10:56.077Z","0.0.7":"2026-06-22T07:16:29.519Z","0.0.8":"2026-06-23T06:51:31.996Z"},"bugs":{"url":"https://github.com/Andiedie/loopmark/issues"},"license":"MIT","homepage":"https://github.com/Andiedie/loopmark#readme","keywords":["ai","agent","human-in-the-loop","cli","cloudflare","e2ee","feedback"],"repository":{"type":"git","url":"git+https://github.com/Andiedie/loopmark.git"},"description":"Cloud human input handoff for AI agents.","maintainers":[{"name":"andie","email":"zchangan@163.com"}],"readme":"<p align=\"center\">\n  <img src=\"assets/brand/loopmark-logo-readme.png\" alt=\"Loopmark logo\" width=\"96\" height=\"96\">\n</p>\n\n<h1 align=\"center\">Loopmark</h1>\n\n<p align=\"center\">Loopmark helps AI agents ask humans at the right moment.</p>\n\nAgents can inspect code, run tests, read docs, and search the web on their own. Some questions still belong to a person: product tradeoffs, preferences, approvals, private context, ranked priorities, or secrets. Loopmark gives agents a structured cloud handoff without keeping a local process open.\n\n## Install The Skill\n\nInstall the Loopmark Agent Skill with Vercel's `skills` CLI:\n\n```bash\nnpx skills add andiedie/loopmark\n```\n\nThat is the only installation step most users need. You do not need to install Loopmark globally or add it to your project dependencies before using the skill.\n\n## How It Works\n\nWhen the agent needs human input, it creates a compact JSON question session and runs Loopmark once:\n\n```bash\nnpx --yes @andie/loopmark < questions.json\n```\n\nThe CLI encrypts the session, posts it to the Loopmark Worker, writes a local receipt file, prints a public fill URL, and exits. The human opens the URL, answers in the browser, clicks Copy answers, and pastes the copied Answer Text back to the agent.\n\nNon-secret answers and notes live directly in the pasted Answer Text so the conversation stays traceable. If the Answer Text says secrets were omitted, the agent downloads only the encrypted secret bundle:\n\n```bash\nnpx --yes @andie/loopmark secrets s_xxx\n```\n\nUse a self-hosted deployment with:\n\n```bash\nnpx --yes @andie/loopmark --base-url https://your-loopmark.example < questions.json\n```\n\nor set `LOOPMARK_BASE_URL`.\n\n## What Agents Should Ask\n\nLoopmark is for human decisions, not agent shortcuts. Use it for:\n\n- product direction and scope boundaries;\n- preferences between several reasonable options;\n- approvals before irreversible or risky actions;\n- private context unavailable in the repository;\n- ranked priorities;\n- sensitive values that should not appear in chat.\n\nIf the answer can be found through code, logs, tests, documentation, APIs, or web research, the agent should investigate first and should not ask through Loopmark.\n\n## Privacy And Secrets\n\nLoopmark uses end-to-end encryption for question sessions and secrets:\n\n- The public fill link contains only a `sessionCode` in the URL hash.\n- The Worker and R2 store encrypted question-session envelopes and encrypted secret bundles only.\n- Browser answers are copied as Answer Text. Non-secret answers and notes are visible in Answer Text; secret values are omitted.\n- The local receipt file contains the secret decryption key and should not be shared.\n- Secret answers are encrypted in the browser, uploaded as ciphertext, downloaded with `npx --yes @andie/loopmark secrets`, and written to a local `.env` file.\n\nThe agent receives a file path for secret answers, not the secret value, and should read it only when the task truly requires it.\n\n## Self-Hosting On Cloudflare\n\nThe default service is `https://loopmark.ssoo.fun`. Forks can deploy their own Worker and use `--base-url` or `LOOPMARK_BASE_URL`.\n\nCloudflare self-hosting uses a Worker plus a private R2 bucket, normally `loopmark-sessions`. The included GitHub Actions deploy workflow expects:\n\n- `CLOUDFLARE_ACCOUNT_ID`\n- `CLOUDFLARE_API_TOKEN`\n- optional `LOOPMARK_BASE_URL` GitHub Actions variable for the production environment URL\n\nFor bucket lifecycle, API token scope, custom domain setup, dry-run checks, and deployment verification, read the [Cloudflare operations guide](https://github.com/Andiedie/loopmark/blob/main/docs/operations/cloudflare.md).\n\n## For Agent Authors\n\nThe operational protocol lives in the repository-installed skill: [`skills/loopmark/SKILL.md`](https://github.com/Andiedie/loopmark/blob/main/skills/loopmark/SKILL.md) and [`skills/loopmark/references/protocol.md`](https://github.com/Andiedie/loopmark/blob/main/skills/loopmark/references/protocol.md). Humans normally do not need to write Loopmark JSON by hand; the installed skill teaches the agent to generate the session, run the CLI, wait for pasted Answer Text, and download omitted secrets only when needed.\n","readmeFilename":"README.md"}