{"_id":"@wolpertingerlabs/callboard","_rev":"79-3e8840e8903ad8fe324ce722dc227c05","name":"@wolpertingerlabs/callboard","dist-tags":{"latest":"1.0.0-alpha.60"},"versions":{"1.0.0-alpha.1":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.1","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.1","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"c20db807c7d34220a50587249fa6277bf1804f1c","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.1.tgz","fileCount":168,"integrity":"sha512-t1VX08ZjbszM8yiS0xT1hQE2e7rIfV788HehsYRh4x0FXQ73bWsuUMERfvvFo3G8zJqzJLUs7wRmo6oLnlV+Hg==","signatures":[{"sig":"MEYCIQDOuBBnvNLgEgeMMuljsQM0rY6Jaot/jjkiZPJ/zvWpdAIhAMLeH9EZJT7TnVAUVdLyTqRtzLKtCX/JkCNWQYpba7Eh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1374756},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"820a92c259dea183b71a8cfcd8ea4587548f01a9","scripts":{"dev":"concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","redeploy:prod":"node start-server.js","build:frontend":"npm -w callboard-frontend run build","prepublishOnly":"npm run lint:all && npm test && npm run build","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A full-stack web interface for the [Anthropic Claude Code](https://docs.anthropic.com/en/docs/claude-code) agent SDK, providing real-time chat, tool permission management, image uploads, git integration, and more.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","express":"^4.21.0","winston":"^3.19.0","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.1","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.1_1772205751812_0.7731838718348498","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.2":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.2","license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.2","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"0f2387759e7d7ddf6e33ed23042f4ae55f7bc522","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.2.tgz","fileCount":159,"integrity":"sha512-XWwimNOJnRHBp8H2F1B0sEuNJveEbkXFGyfJdhgNmk0TJaqO2POYZ9ylOcqUc8uoGgnGcyXTpqoCxq03p16zcw==","signatures":[{"sig":"MEUCIHP9uWw2JTVhvMahVak6ouQRuRihttvu9szcDmLL1ZzGAiEAugOqLed9WQ2zensq3Boi+31tmnFNiJbuAIq1ODepg3w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1371450},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"3b7f6a65f1333a74f38b6ca6bba70f916df07e07","scripts":{"dev":"concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","prepublishOnly":"npm run lint:all && npm test && npm run build","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A full-stack web interface for the [Anthropic Claude Code](https://docs.anthropic.com/en/docs/claude-code) agent SDK, providing real-time chat, tool permission management, image uploads, git integration, and more.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","express":"^4.21.0","winston":"^3.19.0","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.1","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.2_1772231115736_0.5569854132452297","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.3":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.3","license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.3","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"f9906631a6175affb0d2f691e90b272b2d77bf2e","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.3.tgz","fileCount":166,"integrity":"sha512-dR5uV9efzIdfXZGVtUNRQI0mLqZnQqntDktUU2n7+BDpKp0i3/sd/8OglfqvJja/apUKFCasNjl91d3ECnPOgA==","signatures":[{"sig":"MEYCIQCCQBl4NZnkKHP58/nF6OttU2xXjxq8bO5XC1sHpRvyrgIhANAMK/cYFjh3FocddRi8lINOv2dIDi7gB0ZdBFulJFXv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1473914},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"5fa93d06dee31e95788540ff0d2991ad88e2c176","scripts":{"dev":"concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"npm install --include=dev && npm run build && VERSION=$(node -p \"require('./package.json').version\") && npm pack --pack-destination /tmp && npm install -g \"/tmp/wolpertingerlabs-callboard-$VERSION.tgz\" && rm \"/tmp/wolpertingerlabs-callboard-$VERSION.tgz\" && callboard restart && callboard status","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","prepublishOnly":"npm run lint:all && npm test && npm run build","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"> **Alpha Software:** This project is in alpha. Expect breaking changes between updates.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.1","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.3_1772312172674_0.6875821237034876","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.4":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.4","license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.4","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"ca22516ed2b22023a8e9e5af176b6c2a310e7538","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.4.tgz","fileCount":166,"integrity":"sha512-4Rmh83727q7QB71aWM08LE3M4a05xOmaVto/G67p5XkjevaG9iJAw96Rvjum18J2Lfybr/cTQ/C3xa93PgfITA==","signatures":[{"sig":"MEYCIQC9LR/S+v6Fe2Y72vB3CcfvckbzTOFrrJ7tcgPq7vO+1wIhAO+KpnpQq6mNoIbYLEGq9/N5EuI2HgBdqFvdgnXCVCX5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1594557},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"2d0832e22a9e32fe40f8e9d258a847c4e21b016e","scripts":{"dev":"concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"npm install --include=dev && npm run build && VERSION=$(node -p \"require('./package.json').version\") && npm pack --pack-destination /tmp && npm install -g \"/tmp/wolpertingerlabs-callboard-$VERSION.tgz\" && rm \"/tmp/wolpertingerlabs-callboard-$VERSION.tgz\" && callboard restart && callboard status","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","prepublishOnly":"npm run lint:all && npm test && npm run build","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"> **Alpha Software:** This project is in alpha. Expect breaking changes between updates.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.4","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.4_1772456228037_0.1418124346414189","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.5":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.5","license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.5","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"4925f3de266d96eb61fe327d52e36b012868080b","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.5.tgz","fileCount":166,"integrity":"sha512-ZRcBxTkdIDjKI9OWfppaAtpEqK+cAo8BiiVMs8kHihFijH3dqEUFBSiupi2sMJ5V2ntPoReMlXyKcvdbeVNHKQ==","signatures":[{"sig":"MEUCIQDkhBqC/jWo6ScMcKcNHm273ldCRn1Rt3+hdeYC3AVW5QIgFv9CiOrD5/dlBrk/JhFyVDlh70w00magE35fsvc/AsQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1598002},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"21760f2b2ae29dda9dca65354391bb36a3e1e61c","scripts":{"dev":"concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"npm install --include=dev && npm run build && VERSION=$(node -p \"require('./package.json').version\") && npm pack --pack-destination /tmp && npm install -g \"/tmp/wolpertingerlabs-callboard-$VERSION.tgz\" && rm \"/tmp/wolpertingerlabs-callboard-$VERSION.tgz\" && callboard restart && callboard status","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","prepublishOnly":"npm run lint:all && npm test && npm run build","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"> **Alpha Software:** This project is in alpha. Expect breaking changes between updates.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.4","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.5_1772544294833_0.5572561063067489","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.5.1":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.5.1","license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.5.1","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"0373988bf7fb5f7e8907bba8a693390d548ce112","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.5.1.tgz","fileCount":166,"integrity":"sha512-4I4iOTZSruKIT9cr4LR6HUkSXEHbMnZkcdST1dPrCu8Lt2z5qbYQHHtaiMUhQMRkeviUOCOTVGe1QDOHrFuq+w==","signatures":[{"sig":"MEYCIQCgrArbzEmofnSn3bnAKsZTPxas1t1fgT/KfybJnptAogIhAPQSWt+fpBQZ29KcoSidSoTFI584uZNNP0fDD8hxcwIS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1598647},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"6703a77c61c3b140ff50563e3e89400580f2ece3","scripts":{"dev":"concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"npm install --include=dev && npm run build && VERSION=$(node -p \"require('./package.json').version\") && npm pack --pack-destination /tmp && npm install -g \"/tmp/wolpertingerlabs-callboard-$VERSION.tgz\" && rm \"/tmp/wolpertingerlabs-callboard-$VERSION.tgz\" && callboard restart && callboard status","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","prepublishOnly":"npm run lint:all && npm test && npm run build","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"> **Alpha Software:** This project is in alpha. Expect breaking changes between updates.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.4","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.5.1_1772553027309_0.13942482182443072","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.5.2":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.5.2","license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.5.2","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"28fc42c667cefc4d345341d1cb46addb6d20f4f4","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.5.2.tgz","fileCount":168,"integrity":"sha512-p63Og+xf2HYl/Rk5T0f3/onz1s20hzyBPl8N9k6plrCDUJJb6JNNze3oDtpgTuzqrvxniH7BhACY0LluulAvFw==","signatures":[{"sig":"MEUCIQCEOrDGYq4MIwIfncJ46576aoXMOSB0WcVTti3R8CK0VwIgYw7EKyDt69u/+sxoRsz1gsfuKDT+0wWfZSweXvXCr/c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1613472},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"01612367d69ca4f99b79e7e505cfad3ec2430cc6","scripts":{"dev":"concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"npm install --include=dev && npm run build && VERSION=$(node -p \"require('./package.json').version\") && npm pack --pack-destination /tmp && npm install -g \"/tmp/wolpertingerlabs-callboard-$VERSION.tgz\" && rm \"/tmp/wolpertingerlabs-callboard-$VERSION.tgz\" && callboard restart && callboard status","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","prepublishOnly":"npm run lint:all && npm test && npm run build","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"> **Alpha Software:** This project is in alpha. Expect breaking changes between updates.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.5.2","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.5.2_1772559568209_0.2829378361573216","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.6.0":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.6.0","license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.6.0","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"39f0269f0b6973adb0a93c5f7114dfa673dbbac5","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.6.0.tgz","fileCount":170,"integrity":"sha512-8cFlVCcY3pFj0TJAlKTIQX1wknUTt59OQ2rpSAFY0nCAY8kjVw08ysxYpvMpYGj63XPIe5CvRkDx808c4FJpnQ==","signatures":[{"sig":"MEUCIGESEdG9Wo1ztfEWyF1tmxY5bvJHfacKl+jE0EXJN4XcAiEA0dWKPpWJsAhi9JaTO6Yz0rRxpee+MKYHJlueEmWnwe8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1626091},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"0b62cfe2b5166139ba02ba3423976ff1c711ac20","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"> **Alpha Software:** This project is in alpha. Expect breaking changes between updates.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.6.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.6.0_1772639655021_0.16128015594275547","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.7.0":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.7.0","license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.7.0","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"8e055ae454268062f21610d240bb5cf0c2bcb82c","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.7.0.tgz","fileCount":170,"integrity":"sha512-N3bmr1SuMAtFKLYYFz2j+WeZbCuZNOWEHDBffTg/HwKIEGYW2ad6KdgXYZMAhoxfLEqLWIpkBTTSFgJM3gzE/Q==","signatures":[{"sig":"MEQCIFaHLOtN0WUwb6cQa0rLfAnTXiLOob7NGNhzTkhKWNUuAiAeIFpYhKNi4qdcimiR6AO8gwnZDGHQR++dqnqlKL/WYw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1647201},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"5ceb57f1c05cf527b6db42d596339d25f2673cce","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"> **Alpha Software:** This project is in alpha. Expect breaking changes between updates.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.7.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.7.0_1772713687393_0.07757828374987263","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.7.1":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.7.1","license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.7.1","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"9ecf9c94d03f4003ef1a40b4ccf753ca5be44b32","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.7.1.tgz","fileCount":170,"integrity":"sha512-1YFJbQw8oC+U205SU0WmAGyu4lZORvj5szMOIf3kHb29KjchTVGU66RqESKvxJ6CWC4qneQxi4hzD7yQYoEhjw==","signatures":[{"sig":"MEUCICS6QWD3xkqZ/nSPppH7KaVNqE6RIVPcxhwcJyY2fKbOAiEAzZUpnsPGoFtBSy7nwlBMyZ28N35ww09p/Qpd6Izk+sE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1647224},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"a473b52457f3fb77ad0429e2c3ea09c1ebb5cb1c","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"> **Alpha Software:** This project is in alpha. Expect breaking changes between updates.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.7.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.7.1_1772725397568_0.5317393820490832","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.8.0":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.8.0","license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.8.0","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"1c46faa4a729c083dc9a40e0a47745b50965e5f7","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.8.0.tgz","fileCount":178,"integrity":"sha512-5ERBGvuC1HpqxtgPcT9UEq51w2tS42GDqw+iSnTVNQmW929FzELiReZnWuZhLhiKHKy/C/0jXED3xM+5nxwlow==","signatures":[{"sig":"MEYCIQCJMNHrgUnPufbuWsHhwdDbkmG3w9Anenn4biOjlaafKQIhAKjsM4ZPT79pJmxS0EpNwZTUH4wq6/Z6uPw23RbHxt9R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1700265},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"e8eebd574f307e37b64528372c90beda2f217a5e","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"> **Alpha Software:** This project is in alpha. Expect breaking changes between updates.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.8.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.8.0_1772809642161_0.5180409377681556","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.8.1":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.8.1","license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.8.1","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"3320efc151764bdc75c6db8dd5b977edd4c0c6f2","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.8.1.tgz","fileCount":178,"integrity":"sha512-fa3tZJ3onVrAAJ8TBwE89R7lup+G4KCgAs7PsAQpuKtTOZGznuxvTI+QwBpXVLFKEcvgapACc+Nd1VKBdHao/A==","signatures":[{"sig":"MEQCIG5lBaYIMtAPQ88O4xurLU1wiMSxGhnqIyIyoTW0Qz/jAiAy6RImXc4ckPGKpPzlzX8hXRGoXCEbXusi5p6dFYZHkg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1704749},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"14c0ae5c36eb9ed8a075df68490b6ebe7e31fb49","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"> **Alpha Software:** This project is in alpha. Expect breaking changes between updates.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.8.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.8.1_1772819554657_0.686850073000769","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.9.0":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.9.0","license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.9.0","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"221c5e3acec649b96559775a70516420c600ee39","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.9.0.tgz","fileCount":180,"integrity":"sha512-AzHNeOJ2DFavbatxSiVfnPrM+6nfYHfEHziZpJbDXxrJgr1i6L/+UER90XWnzVwNESfEDsOOuf/cPJquYBYO+Q==","signatures":[{"sig":"MEUCIQCGNgrxcU27UXBkiGBl04DDBYzAznTcaOpzUH30/VsJUwIgUnYi/ZOu3y7BrE9imxfj+8uDkPJReM/KcudspvTXOC8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1729158},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"ede35756ef0413e4349a04cc1423a8eb9ccbf687","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web UI for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) — chat with Claude agents through your browser instead of the terminal.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.9.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.9.0_1772977337232_0.36417528755334594","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.9.1":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.9.1","license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.9.1","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"bfd1fb2db9ba1dcfab2020ea2c44181f8cfec2c6","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.9.1.tgz","fileCount":180,"integrity":"sha512-j5YGHdCskjLevtjnfc4L9SLsBdWWQKOH1Rw79ZtPWTBTkLL5qwhBpKjXffqTntTRp6x1VlOOSdlltG25qdkZnQ==","signatures":[{"sig":"MEYCIQDT0bOS37rUDE4SXKe4/tZ8sG8KhvdKnd7U9ybGqGh6+AIhANShLArPlBYpEJHh+S637ZwANvOFyTM4qCAWLk023lwB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1729432},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"db62347efb11be8fe53394675db881edacd38dcc","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web UI for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) — chat with Claude agents through your browser instead of the terminal.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.9.1","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.9.1_1772977796096_0.37648687243751655","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.9.2":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.9.2","license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.9.2","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"8e25e7bea183618763374e172b001e4f26e1b000","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.9.2.tgz","fileCount":180,"integrity":"sha512-XUMcB/74Yms6IzcThZ0txMyLL4bIB14RSe8BEzcDf8NKGFMh+JAl2AGZEsCu3Ov02VWvFJPyrrc9zeKTQzH4cg==","signatures":[{"sig":"MEQCIFvyMLVSPxh+nhugn01XGI4SJ6E+25JUhjaZSN8rwcosAiBqvVYfxkousnNlnB7h9b0zSGuvlT3STtyoTKP2wxfP9A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1729869},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"316f54a68af8450b6f468af5f1a084f3745c99c4","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web UI for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) — chat with Claude agents through your browser instead of the terminal.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.9.2","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.9.2_1772979419289_0.034579627558736226","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.9.5":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.9.5","license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.9.5","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"3f7914c0be2e516314706a66159822602cd28eda","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.9.5.tgz","fileCount":180,"integrity":"sha512-MBgKACETStb4gLdHt1PZJonQJ5rDGaPPtlZMQkc78oOk1NaRLc6vION88mHWF5oWtEXrDE+24zRNT72yDw3WFw==","signatures":[{"sig":"MEUCIAJ2BQs99XeDm3FVIi8+S9iZ7bwxTUJWYTdyJm11OVohAiEA5kJPi8zo19J+/AncD+4w4wAam3JB8lboQcTXHwAIHaw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1734535},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"ad5fbc5b306455a1a89693832e6e8bdf9e2daab0","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web UI for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) — chat with Claude agents through your browser instead of the terminal.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.9.5","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.9.5_1772985063659_0.2981010621045712","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.9.6":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.9.6","license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.9.6","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"4e8b79920d4f543354cf709f9e3130bf38119326","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.9.6.tgz","fileCount":180,"integrity":"sha512-uJLhUxt7KfmLaWe1iCghfD5ZI8nrEHCjI77aY/HfHpGY5+mE4pfg5G9t56kv+RnCN+UdB7fqMXzPjep76ZM7Qg==","signatures":[{"sig":"MEYCIQD56+54V6XGIQvyJflI59JQwq7rmdcQuVLXFcBTHFBW7gIhAN/+YqXpOyfAjW8LXSRGJ1A4PZxyk6Gao9pUFehTpt9t","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1734560},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"0d423817972214f9e45b86953525b05fc0b0d548","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web UI for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) — chat with Claude agents through your browser instead of the terminal.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","uuid":"^10.0.0","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.9.5","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.9.6_1772986928654_0.23844618086889513","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.10.0":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.10.0","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.10.0","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"209146e50b838cdd9642b7912703e4797d3f1c25","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.10.0.tgz","fileCount":180,"integrity":"sha512-0V673dRxdcWHTciwe4LPgY+K4h+s0hHIfRqJsnEOwCFANyHSXTt95RPe4PAjxtRMDNAQOMB1Y/Lq2Rz8QJK5Sg==","signatures":[{"sig":"MEQCIAfKffMie/8njFsK0FkBhg5k15rf6Y5bTZo+Ksb2FgprAiArXHWp6if6v51i0XY+Znur6Pk9x2Kd4Jju7YDB8k/w9A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1737565},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"8c2b14cf1419f9cad30b54281de12b7f3f0d5332","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.10.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.10.0_1773055911488_0.5958650146627504","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.10.1":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.10.1","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.10.1","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"29271e585f23e4a51bf9b2aaf45ca426ed2d866a","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.10.1.tgz","fileCount":184,"integrity":"sha512-Y9UeSrldkqNfmlKmZYw4HBEJLD5KYQLTKLLp4kxwYrRA4WF4fHc8EYBwQFGOC5D/uR5k3X6PZ9+wTEdHFwjOVQ==","signatures":[{"sig":"MEYCIQD+KNwjRxXXQj+g4wwFbdK2r+55R5DzyRKAgsWFCHRJDAIhAK+mKMrWnHGOggCIudo49J5X8buukt52SLbL7VNErqqp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1758603},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"a42baa2a5dd29400ef6442654e40b9ef812246b6","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.10.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.10.1_1773067911867_0.27411337966014404","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.10.2":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.10.2","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.10.2","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"66feea3e0313d8fa7b02626e012bfaee2c5298d1","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.10.2.tgz","fileCount":184,"integrity":"sha512-6WWOIPI/+8iWz661pAOfrHlQtjbLPd14frB5cxy8eKFCeCvnHncTfLGlF5ucaA5FrvgoNBr858zruSY4D0hswQ==","signatures":[{"sig":"MEYCIQDincPDdaU8jWchFD4Qva2D41BJY5FK076W92gyT4FeOgIhAJpuu8X6beaR2iyXKNDv77NouTA9oaGta1edqOppMB6J","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1759087},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"2528f70ab85c71f635091f6c77f46fb86c50d2a0","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.10.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.10.2_1773072139288_0.23894292630192004","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.10.3":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.10.3","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.10.3","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"d5ef8e8504c11bc8fc4908c894dfbc74ba701879","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.10.3.tgz","fileCount":184,"integrity":"sha512-YY1aIOxZfgxY81rq75wbos5krAhALA2/AL66HBoLi2NUyhkl9GlpCFObmiDODg7PN1VbFVNSLTS+p58oeNtiFw==","signatures":[{"sig":"MEUCIQCKPbqDdCxw+k0u6SCnnCJL3bh9K5YN4aXFyJ27jF32uwIgXbw+y6RUbLpPzVkWNJgh6ylYgHTUToxTaJ+fmRk6Ons=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1767727},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"3a9f66a5c66bf5cb5dee203e39c456618e209755","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.10.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.10.3_1773148269609_0.647501768544078","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.11.1":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.11.1","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.11.1","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"a0e050f98455b42aad07c39d1b38a42068649dd3","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.11.1.tgz","fileCount":190,"integrity":"sha512-up5U2Bjn3/ibaOTvBAzJcrPFt72ibSwN2dbPkOV312CJeBkCKKchEac76saAZluASkVcta+q/GyQZrNrTgw7oA==","signatures":[{"sig":"MEUCIQClVw+u4csYBnWqpcCHc20blnh0hPJ5OEDFi71v62N/ewIgSWDsYvKgY/w2ypOhuQhk20PqrkhTH/8K+HsPTJvPm54=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1807411},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"ab271f5f2ce0afc8d30f78d8d37436cdd68fb77f","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.10.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.11.1_1774532693784_0.45580777386948657","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.12.0":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.12.0","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.12.0","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"2f1d3e771ae633a57cad92c7de2af55521cef54e","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.12.0.tgz","fileCount":198,"integrity":"sha512-EOagqV7keNVbt7T0ThbzQMrdTjMEONzTqR9YWuVgnhuTp4ASFDZoFL8Mp/xom0D4OEZb6syUNNZ6K+OyZgx9OA==","signatures":[{"sig":"MEUCICiG8bMzfBqKG+NLhglWOXf27+bJjiZvWbBuK/x5I5uLAiEAqTaSFZ/ZO5zx42q6D+RwhxFL0L+6c81MfF/zLOqJQtE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1894881},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"b08f625d6c3650ce8177c5607ee1642d4ab867b4","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.12.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.12.0_1774879438321_0.18880588066050974","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.12.1":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.12.1","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.12.1","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"c58845862d744efe85b84f4f48135dae858b0ab5","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.12.1.tgz","fileCount":198,"integrity":"sha512-1Rk9TfGeYR92PSPkj0VoTL00QVKDDkvQukYgq1XsLgiX9xHEzJVJRRBRc5O6gpKKzP9Ss6Xn1uNrqT5XueDCfg==","signatures":[{"sig":"MEYCIQDdutM2X+ohLgO9hx5xOUWaAGEnY7ZAFP7WBy+afin9dAIhALkunwCnA47Xzjz0YIox9fZLRARcLfX0buPSVDk+/yF0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1895085},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"ddb6007647ee4d295dce54f60c9db82301422d86","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.12.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.12.1_1774881527765_0.15441770553433654","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.12.2":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.12.2","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.12.2","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"e139ad4bf7d7ec848bb675d65b0a1eb4f104835e","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.12.2.tgz","fileCount":198,"integrity":"sha512-5zoD+TvFC+hYGtcCgyqsEi/8y0WV+OMdx1fgXIXsVUW8Onrc6X4iopwdLWD2rfqtoOMHQ5aMj4XrktC/qx64Dw==","signatures":[{"sig":"MEUCIHq8DLbylvY263y3+gwE/V9BZpZgxFjijZdi5fvkBEqLAiEAn2onaXlDs522nvXD4hRSCw6Ibhvdj37UnRSZYu3+fSI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1893013},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"c8b64585aeae55dabba60c31ce8b8d0e583706b3","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.12.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.12.2_1774884036513_0.5683358945516745","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.13.0":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.13.0","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.13.0","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"a7eee6521e73fcc146429a4f5cefdb1af8c6a7a0","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.13.0.tgz","fileCount":198,"integrity":"sha512-S1SVgVHfS05EyyBv1w5SnY9Hfq2oZ94nL/I3FRhf5Yq8OR+VarVKAN8EHgY0mE2BwEjmf6+q2GveBzyrHyrKkA==","signatures":[{"sig":"MEYCIQCk0ad0BYXW5iKqId+KVTEmpGsHF9vHubGtjOPa2GWBEgIhAJRwayFS607gzQW55EHGdMypvKW4tAshCqdeOWa5Ijvp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1918675},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"7357d72828729d66feb5ada96d67b4ce093a548e","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.12.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.13.0_1774966906376_0.4980575767798725","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.14.0":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.14.0","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.14.0","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"a3d41a9ec5e572a165c6f2cdc99cc3da075d212d","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.14.0.tgz","fileCount":198,"integrity":"sha512-6ATrTv/o/7ll6UMs20THW4r/DnsD5N3s/jfPMxE86d29MJnL37RAwV6bTHq2aoAXhR7x7pXTkBVMlEtC7noyAA==","signatures":[{"sig":"MEQCIDYaI6am+YMEKDlx9zWsKOiBSgfHJNDyuUlLhWd12qkRAiAdxL/GPDmldSDX+iC8w4vc8vC1hd6JdsiqHHsP++fBQg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1920497},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"7eb30fb1e64415ebe1962ba1f94463c667be9c29","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.12.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.14.0_1775234250561_0.48042727528907037","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.15.0":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.15.0","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.15.0","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"572c82bc6b83ebd6a848e25a785ecbc7dc02bddc","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.15.0.tgz","fileCount":198,"integrity":"sha512-JP2DZ4ly6dxXcszevgz/URXaWUNUaN55mAxq+hVWRNwDUc5I25giK0XHGgALtYwWSN2bBcZozQa8Tn/+KQtDiA==","signatures":[{"sig":"MEQCIBLXZoxcGu7sxI1LEKoid93W2aGWbusvK2DAgBZoyG9rAiAHYd0KVzQ0A02P3D4Pe2IRxTLhhxQbs0olIPWvUv+JpQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1920666},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"10764977873cfcece7f9ac55dd88ea8a48af986b","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.15.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.15.0_1775320132717_0.7657100810421154","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.15.1":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.15.1","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.15.1","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"f2b123a41d2409ce4cf6525bae59c831b393581f","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.15.1.tgz","fileCount":198,"integrity":"sha512-GvUy1V+mfgXiw7ztIWQBxhT0kU0VIi7cdYtq4vZDUAPjaoTTQGL1IItpsdBGiXhtVtKhWKRNFSVcmEjV/REYoQ==","signatures":[{"sig":"MEYCIQD+m0eNM28fXh1FOMMLDuuA/u09i62+Yd/CnZbqVSnnMgIhAIG6EqINafW6x2pM5wpuSPxsiG1E0Tu6zKjHAdVrRCTj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1920666},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"50d48522e1b62b4218cbee0769d2b71285b58b26","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.15.0","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.15.1_1775390552149_0.7371142940033386","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.15.2":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.15.2","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.15.2","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"2125dc19cc9583bb9d0b95508318c10115c843e8","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.15.2.tgz","fileCount":198,"integrity":"sha512-BDEtBBytimDiDcicOLO8YD7mMmgmIK1qFFnSBSupidWkhmmLV51aJiZ1/s9kQXUCmyfWsbLJEBFMZ8W16VfF0Q==","signatures":[{"sig":"MEQCIGPe+vB83Ew/84vucnPPDuNTIjUCCMcORBbcOOT6TkN3AiA4eAXhU84uMpI2GsLqCMwMDZmMh53cUXPhZUK4jwyzAg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1921503},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"80f7d55428bbe84f61a53b867752054adcb4e842","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.15.2","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.15.2_1775392151438_0.8970215951536724","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.16.0":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.16.0","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.16.0","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"a3466dcaf37c0149af1e5486d0bf8d72e8e4c2f9","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.16.0.tgz","fileCount":198,"integrity":"sha512-EbEQ5hB5roPQpCPATdm/I8zWheW2/Dpm0mkA8m9jluyhMGAqktNNmQr1SCDSz7F0+zpXYtwH+BQ94SMpurPVqQ==","signatures":[{"sig":"MEYCIQD8nBH89YeQtquqngLC6M3lH1IQAVRDNJkwbEWUEExvjQIhAInnjz+3+gwOJkAQUJuKiqk5LTa09bb7ecz/YxWpBxT0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1921753},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"58d8e673a1bac76ec06362598569ccb9517afeaa","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.15.2","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.16.0_1776089913834_0.9281066889043297","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.17.0":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.17.0","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.17.0","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"7cc7271bb6cedaba1735cd6259f72a199c6c1654","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.17.0.tgz","fileCount":202,"integrity":"sha512-TIDmsmpuQJ9zViKXnXjOGmC34NU6KB2nbCeBvb/ouw9N4ClZTlpjP6SxEh1U5q1JZo7y53XbFRcrU4TWdqss/Q==","signatures":[{"sig":"MEUCIQDVsxjUFf3RWzWAg+7M0Y8b26SQtOXhjkGmdcAAv5o6fgIgDI7l7qNc8EQvSoKWbMwxac0DFM1qBqXlx9N4u4UNWoI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2003903},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"6bf1ed97f1872e2799b4a0660909f1ed6d37693c","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.15.2","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.17.0_1776696892606_0.6985590338594259","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.17.1":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.17.1","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.17.1","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"4e9a92c505f800fb8f167efc0aef501ce6c0d4ae","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.17.1.tgz","fileCount":202,"integrity":"sha512-bD836bUM55GU6L6vvC6PE4q3nn1fjI/aw5DBbXXbSBKx3vIh9sOz1FyB2clP/Fen+nyR4usGoHgYuNn7ZtkRvg==","signatures":[{"sig":"MEYCIQC/ybrunAA2t8zZ7xSutE++bMMVKaSaqgwq8fiUXiT4HgIhAOaD9MNb44WfwjFMwgPOFvw6xCH1pcs20b3OkD4Lwrox","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2006028},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"19f34a02f9a44d93d85ba9491f766385efc292e7","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.15.2","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.17.1_1776698730825_0.9542350191340314","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.18":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.18","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.18","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"dfdf88f6c55a6b645c4c4a1dafc96a53a1e9e3c3","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.18.tgz","fileCount":3988,"integrity":"sha512-CVMATJKcnQky6YjV8cdzSOzFvu6l2vNoXi6yRlviIvWtTK6BhRX+Or2tqAN7sEv+RQaPWIEa1rLYc7pv/SHP9Q==","signatures":[{"sig":"MEUCICXsH3o3Oa4ceFynZKVI8cxJIL+awN8pkeoqtUDPpL5cAiEA8HV9hZjE/AibXhzF59rnwn41rs+0AI4CKf8B/y43VeY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18889885},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"229a3b1a38d66aa177e364a770e1df0107424600","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.15.2","@anthropic-ai/claude-agent-sdk":"^0.2.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.18_1779193435213_0.21821466088718888","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.17.3":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.17.3","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.17.3","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"96903af05c85166cee75991897a39fb79e67d614","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.17.3.tgz","fileCount":4004,"integrity":"sha512-UA5tb/yBQWGUZShzrRjUxw2o4l0AwctpBxnJUASASU3QysrqNgO50td4NUsrZmngtAs9dvEd6z0bjjRpe5GzDQ==","signatures":[{"sig":"MEYCIQD3qrm5/1z5cbUPIdAJ2s0uS7/sjBwQJ+O+nX2lHZqucwIhAMJsBtZL1QnQ5Yb7Vp4MUZTSsJIf+k1RDIiirzEGtX1+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18998093},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"bf6019d53a859a0024403122267a2bfd1c82772e","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.15.2","@anthropic-ai/claude-agent-sdk":"^0.2.32","@cybourgeoisie/openrouter-agent-coder":"github:Cybourgeoisie/openrouter-agent-coder"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.17.3_1779825945738_0.6397962484636601","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.18.0":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.18.0","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.18.0","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"bc4599423378734a4a8837b3eab65a6d81955bd8","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.18.0.tgz","fileCount":4004,"integrity":"sha512-yquhirnJ946sCqg0hOgcflqOGz1D/F0CTKvWeaYc7c0QQDgkqRIW0FdQTgu+pCFAzz7cuh9Dooful5BhhoAdRw==","signatures":[{"sig":"MEUCIC4p/X/35aRhkThq5CSAF0iLse9R3gvXILI06yKVUQQJAiEA4AyE2lU3hdQpBQaa52SmpOi2l2fxTMETMA9Knp1GqXk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18997447},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"b2657a7eef0fe17774574c492673e10fc8564c0c","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.15.2","@anthropic-ai/claude-agent-sdk":"^0.2.32","@cybourgeoisie/openrouter-agent-coder":"github:Cybourgeoisie/openrouter-agent-coder#7b8a979"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.18.0_1779886499081_0.18158621365139926","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.18.1":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.18.1","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.18.1","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"3f23f50d0742f968724a71965b67eecf6421b5ea","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.18.1.tgz","fileCount":4006,"integrity":"sha512-+iPKFswnH6lb9In48LBNlACOFNyr/IPAImDCz36Ik0eElkQ/E72WKjPQnslUHyCeLpf0Ok9RTAIohIcJMIhFPg==","signatures":[{"sig":"MEUCIBgwIYBIU79ejijOSaIU0gJaKMmPwLuEfCwgAiLtC860AiEAsXMxadrNl77TFQ+x0Imi0oMZoPFBbUsOkg2rfn+3ZLQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19030754},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"87ce5eb8e78df39fdb114e074bfb50a8e653782e","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.15.2","@anthropic-ai/claude-agent-sdk":"^0.2.32","@cybourgeoisie/openrouter-agent-coder":"github:Cybourgeoisie/openrouter-agent-coder#7b8a979"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.18.1_1779913531837_0.7315795538272745","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.18.2":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.18.2","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.18.2","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"10eba7cf28d809561eb0e3ce084c78fe92d3cfe1","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.18.2.tgz","fileCount":4022,"integrity":"sha512-9xuEeS5aCTx4ARFYBPl14BTD+7DN9sW4yvoLOhbPpiNqp9gjAWX7AqdSfd50MfW/YCcqTNtCeMMnTIA3+tF8jw==","signatures":[{"sig":"MEYCIQD9QsAwWdK9/BKe89b3PMOLq3ZQyD3YfEREmTEjRE2iWAIhAJNLIq69jj0xG48zL7Zg3lnkfx4GYL9SX2mwdkbA6d8X","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19096718},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"3b9f0c8f129c78879feaf66475922cf375252ac7","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.15.2","@anthropic-ai/claude-agent-sdk":"^0.2.32","@cybourgeoisie/openrouter-agent-coder":"github:Cybourgeoisie/openrouter-agent-coder#613aec0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.18.2_1779993453105_0.6412994140533466","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.19":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.19","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.19","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"d1063b0c9515bb25e65854626cf667d0785fcfb5","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.19.tgz","fileCount":4027,"integrity":"sha512-ZcWwlHxxKbhnQTSaomAhpLcWG3MIT+v6IuPw5PnWp7ENYXOEj7FHyGlzvxDDc4mQKWB7FstFQr6JEqsEMrJ7/w==","signatures":[{"sig":"MEUCIQD/CHM2Mpunyh+U5YkIeRUwROE6QsiqV7XjZjDJB05H+gIgS4fYMJDFcQnTVNy2p4z9pYKWDAogr2C1JGdMIguCitU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19068767},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"a5cb79a006f18b00ef4f45270131a147e9c805a4","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.15.2","@anthropic-ai/claude-agent-sdk":"^0.2.32","@cybourgeoisie/openrouter-agent-coder":"github:Cybourgeoisie/openrouter-agent-coder"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.19_1780074696144_0.5544286769209268","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.20":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.20","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.20","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"825941fe4163b570864c5a3528f2dbec51abc829","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.20.tgz","fileCount":4031,"integrity":"sha512-no0FNch4FRuxM//iWOJ/APO5Rb+go4Xy2fgbU3KmDSZ/H8D+mL3lD0xCjeNymQKzA/uhqU1G4AAX+ewKNTn/PQ==","signatures":[{"sig":"MEQCIAHE0BpTAC3p4XNWchfcdP26/5GD98+NZ1IWFYY3js2QAiBq3wXaksWuA+xVVEfDa/59UQp1YBSMOYCRkmgZVeygKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19093437},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"ebd60543ee6ca0cb0f8fe7e16671b43edeb61d7d","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.19","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.20_1780928431627_0.6623962498394418","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.21":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.21","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.21","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"ea3f3189b9c5fc1229d0a5a673c0dcd36b0d076c","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.21.tgz","fileCount":4050,"integrity":"sha512-JcGtlVVV3wca1uNDZSpcNdi0BTT7fT5We2c5BqL/YdEPerW0Bzvn/FefAEQVaUNnftXAq2kzN+SdG1XDqjhqKg==","signatures":[{"sig":"MEUCIBEcOCmpitafThKEazGVfucTWDBbrzB/cm7epxhKr5SaAiEA/LvzZI1p4/FR5vAlMkjwC+/Tp3V37TSt/rxHgFJEQ9A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19604681},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"adeb70cb86d532007004b6ff22aa2f3c65a01a4e","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.19","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.21_1781034045853_0.6712589651637637","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.22":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.22","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.22","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"e0efa85135c7117f021b535a0fe6d46d27b59ae4","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.22.tgz","fileCount":4076,"integrity":"sha512-0M1OmVeCPwHbgYKD/DLPZLekLX6zUTAEPRqGXMU38n/Bi7xN5n/XEag+3S7TSx1j+JiHDXS+tOFc3pS+QbgIXQ==","signatures":[{"sig":"MEQCIFmNAMM9ZdGcZfq6zE8V/pxn6MKffpnmGu4aRRoGBaJSAiAlbvNkMnNmNF7pZFugHQkFFGFobycOxHlVKVoklINUQg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19860595},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"676234609af9da334a0b23eb8cca31adf566033e","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.19","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.22_1781194053722_0.13949324186109435","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.23":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.23","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.23","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"a0fb3cde226fbc766dbaf91338b8def9245e3570","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.23.tgz","fileCount":4080,"integrity":"sha512-GOBBOeXzYwePA8SoXA6fJt85YL0HvZARmZFLZYFViG9a0glsaLjA0l+n2pPD6/n87t1PqE82P1VCfmbLzKLCtQ==","signatures":[{"sig":"MEUCIQDVwsReFPJYxUlqcn++JPXcAMkFjGSdhm7iYHNGLrIdDAIgIZLXhuf1dQRjiLBCaCuC2A5eyUEpLsSW36Gq6PPWfus=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19893554},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"7b34b895c4b38cded90987e8cba6c0cc748712ae","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.19","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.23_1781273495646_0.2125072519025506","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.24":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.24","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.24","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"17a74b43eec98bae0fabb587f00ad94455981cb0","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.24.tgz","fileCount":4080,"integrity":"sha512-AXWHJbMjfi8P81XNCoDTSLrL/FtSB7CJzX3kSZ4AoFmRqryQlroT9bAoc/wSDkkUzCuy9/q+HJa/SStOd/GeJg==","signatures":[{"sig":"MEUCIQCd5yRETeYIlK8+TecYY9x8MJOegPBSPXz5mjGT8EPihQIgOJrQ3+10QgvuHi2vcA3wMFxqLEG8B0TpBaSvmQrhox4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19905078},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"fc225e91be4797aba90e89f77c7385f5c7831ecd","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.19","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.24_1781283446525_0.8174407292349468","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.25":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.25","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.25","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"904a99946d85aa6c529d920b4b4643ae97d54885","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.25.tgz","fileCount":4080,"integrity":"sha512-EDIF/uw3GflseS3BxZ19w4f20rdSh9V3CQ8AXEhZH/tI/NWteh8TgMVjLuAEt6QiaRKIP0LFbZsBBQgl02FVHA==","signatures":[{"sig":"MEUCIHTMPjjgiK0EOlUXwcGSzzR7y22yqoeVIS5De2L3NfWuAiEAlVcaYNf7J1518qgwYC0URVC83sj5lcWP0fOxyClqzXY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19903466},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"2a47ad869243dc55f1aef74e74bb6d70a35b37d7","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.19","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.25_1781288628319_0.8862586097125287","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.27":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.27","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.27","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"55769a06091330a937ef9ba3dc16aa9089382770","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.27.tgz","fileCount":4110,"integrity":"sha512-/UT8hYQK4kSRAdwda/8/M8XrBbpN+DJTimL2MR3oqRvq93m7FzoRUl6jsV0hca8CzqOiEU43G7JpYMPb6Fk13A==","signatures":[{"sig":"MEUCIQDXXz+kpFmAOBL1AHXJ0ihlARcjCEFiR8xDBstN/G6i+gIgLIY9au/wMNt1wWdJp5X1MdNOraaxEJX5f3pt4JBtXus=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20122190},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"f1defc8eeaf062b95a21ebcdab39db1999e9db10","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.139.0","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.19","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.27_1781532199690_0.8402504292961035","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.28":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.28","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.28","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"99c200d8abdda465e6940f394a1220b0137cc787","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.28.tgz","fileCount":4110,"integrity":"sha512-x3Pv7woOCwgpPeRsYGhYpOMOc9t3IiSHOENx2oJSR+e46V296BY5+Up1MZvOkPFcjCFDrgFGN/V7MeqEfVhdXA==","signatures":[{"sig":"MEUCIGBebgiwirs+VPXBY5pBv+EsIXMZALUrfUMVtFN1ym3cAiEAkjYEL82em6G0A7kEZ7FdqA6n5X9PXOmTVzfCRNExzLI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20124657},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"9bddc48859fd9a7d53475d2505eb3d3568be5041","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.139.0","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.19","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.28_1781536022386_0.21255984373354297","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.29":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.29","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.29","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"2ed3083760c0abdbfa3ccc8e75983cfdb9ebff80","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.29.tgz","fileCount":4166,"integrity":"sha512-Y7HqvqbdfzLh3sXq9PjSkDmTp8LAXkAf9O2vtkOe4qTglGQLy5o8hPr1xYLoS33RlLZLGb4l0+IXMOngNULDcg==","signatures":[{"sig":"MEQCIADhvSRJldy9bOPPmqgmWIBTjBdgPnkK6sOHjOjUezViAiBMhCXHPWI2ldOT7rbsrxbqh9HkPdSKZzQnRieh/ykDKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20713067},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"c1008f68d308af69de7d659cd6f24616dc2cfecf","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.139.0","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.29","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.29_1781715234503_0.10928224610995318","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.30":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.30","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.30","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"8d1390036f9f878541f491fd4980aca93b02a93c","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.30.tgz","fileCount":4166,"integrity":"sha512-ZE4C3tMBALC/WBBhwlczI0Lfk+3wqERzdZgX3nWohDqygeijuWabJz0kAr0JwXJ1bY9crB/w7QwT1BxEJYVnhQ==","signatures":[{"sig":"MEUCIQCtRbVZpfMh5DJHMrM2S/+78N8qFrGBsc8njcQ7XjebWgIgfxl9I8s322+t7qBm+f7e/7GnihRnBQCuAD9apYH856o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20713067},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"0f91aa004a5cf998654921546f4613b14cb42739","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.139.0","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.29","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.30_1781719486110_0.36161123949873186","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.31":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.31","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.31","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"d5a7fc5b7574313d1e4345b5b8e58ffe833a4f60","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.31.tgz","fileCount":4172,"integrity":"sha512-9T/RFtsdWiA5zUuupdVPbn9KLHXP1L9qLmMQN3tU3iY6N8nGBfedswhl5phws0kS+d9/7wSrA/ZY8uLSegsOmg==","signatures":[{"sig":"MEUCIFttJxswQs8KpX8GzQ67N3ocvyjsc0fTy/xcnr3dMnzyAiEAuHtPGa2SM3/teqMFKSPkk4ooeQL10jAf8vANAHbJbhM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20765749},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"91e35716f58dfa56d3f233e0b7c19d72c58970dc","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.139.0","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.31","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.31_1781780317192_0.7155579295117382","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.32":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.32","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.32","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"8f6ed5c3ab40e713888c6d52aba81022e31d4055","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.32.tgz","fileCount":4172,"integrity":"sha512-6LNv+QfatZiOSB+hT6FFHAfeEwfqpF+Sb0iR4Ta5tukhXeL69Tqc39+d2Bw+lRGan+fEw2iK9NTSxXr6oYFwIg==","signatures":[{"sig":"MEUCIQDxmyxtZmUyL9UjC3BxM3WUNOTx+twfrvLMMZ1vHJuJ4QIgLJYdI6ITf3IQbcdxb2d+s5z4cuCFTdt5HMZpFEgahrI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20794121},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"e32731d4d54bedf705881e566c9cb0ba2d79f74e","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.139.0","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.31","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.32_1782218442951_0.43214078768740816","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.33":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.33","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.33","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"76a51e4a31038467f398de8f995c35a944f8119c","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.33.tgz","fileCount":4178,"integrity":"sha512-tRefZ4/njfErKy7GP42e6CDaBiocLMmHoTK5OyyzuDAdULKOtMpULBUj3Q55fDtxJTC0aWAWKhL43xSS1eN/qQ==","signatures":[{"sig":"MEQCICkGNW9b5E/vB8fV2sAb6n5NnuXb3m8uZvDiuo31gBIdAiB8P3J3HY1b5sOemHd+I6Lgu+jLpB27P/C0ATHAOOGzfw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20871072},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"bf6ba83da360421c2ca6e82ac37fa17ad23e16dc","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.139.0","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.31","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.33_1782480834316_0.7141535514350834","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.34":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.34","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.34","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"252270886c5f37bf56c2c98e466c37b11197b7b2","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.34.tgz","fileCount":4178,"integrity":"sha512-hBxKueQy0Im4jYuZqk49JJNZP6xqjCENjcgheSBWpCh7CKrTx/7F3TeIHHQ29EpCnIQUMozhGYkClVSQN8KSpw==","signatures":[{"sig":"MEYCIQC7XrhJ9HwaN8hWlL1LQjPZyQ8M9ZA6480qf6likifs7wIhAJtvCquLbCu9zafqvXaOYgySr8Zc4mY4XpTvjwr1JYuD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20871314},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"9a744f1d9785f0cf5cc4658af5e3cc87ec033243","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.139.0","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.31","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.34_1782910133722_0.02504088951805694","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.35":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.35","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.35","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"a46f55933852246f7579be758a9b1906b80cab60","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.35.tgz","fileCount":4178,"integrity":"sha512-30OzrmcNCcFG6TTA6ROSAnnRbNFFB6KkcrtHuvnm+N/wxltJlKbeUFw8jeFeOyViZQg+UvJZ2UAty/8clUoPUg==","signatures":[{"sig":"MEQCIH4UdLmDgQx3L/g2isEpk6s9M47tE9griMQH93doAjMBAiBW56NFnR1jndvfBp9xwQpFwrQLgITxMQdeqj5a4tdzxA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20871380},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"915847740a3c284ed98e6a0c753189f8374fd9d0","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.139.0","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.31","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.35_1782911726611_0.7924815471585502","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.36":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.36","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.36","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"1ae2830f861995795873e0bd0b17c6a4259075ba","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.36.tgz","fileCount":4178,"integrity":"sha512-WY1boT/YqFnd1tYryV2TWBPjp+eqcw3fn7sffpTX6E8nlRwNT6mtoMgUA+F+iyymh6O2X2DXjXDzVAinJmst1Q==","signatures":[{"sig":"MEUCIQCWPnDVjsVv0KK+mscvjxz2+XhBrzL6BdFLcTw9Mu5/EAIgd9SOnrKbxH9GR5RIXLdND/nC8/l0DYYY9COz2rbkEno=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20880412},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"cd0d0d40cabc1245415aaf5af0e085c8e9984742","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.139.0","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.35","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.36_1783001318663_0.3370445484481288","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.37":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.37","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.37","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"bc5f05169938bfe4b963cfb2fd90521f3a6f5dac","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.37.tgz","fileCount":4191,"integrity":"sha512-9WpahziOsk1oizeKSD5/XMwsCTjloTb3iow6dVrjUzE+vrX+3YryI63D0S3U/Z26KJ27IdeJjTzY3/zL70aA/g==","signatures":[{"sig":"MEQCIFFq8s2wItgTUm621BcZy39dD9TDMG1rAMsx9hNsXVucAiBPFlku4L4G831CUX5hLQ3owH9ohVsh8RGEauoBjhzy+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20992020},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"5cf14b01e36970464ff36514b40356358ca692e4","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.139.0","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.37","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.37_1783433612172_0.30860037861356604","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.38":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.38","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.38","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"77045dd60832c680e9f9e75519c3fcacc77324a6","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.38.tgz","fileCount":4191,"integrity":"sha512-+N+QlbiSGAJ1/6n9gcidl/n2cW5KjcRZb3O/dj5tTmrWOPQy0dhypouzZMXI20QQ/BT6SRvpCYjyD+YYJLS20Q==","signatures":[{"sig":"MEUCIQD/rmmPbmyH5KZH+jdjey6lLQ4HyNcjdUdKDPQ72NnlmgIgb5DaVI469o3uY32krwHOByWDfMAs5KzEEevWVQlJlvc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20999779},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"98ebeaae7844e9864b063c94e4d26c9ff9d78c35","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.139.0","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.37","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.38_1784044970551_0.3661409164955487","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.39":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.39","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.39","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"b124e34a442d942b24118111304a7fbfe2739687","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.39.tgz","fileCount":4191,"integrity":"sha512-f0UQmlCTb3PCVLYuw81J7q47+lRkASh89Kua4FfF10AvfQyRg9X17YlJpYuOuqHPm/JVt4nkSXmRTbl/iaYNhA==","signatures":[{"sig":"MEYCIQDd05lVHdyhMmK2WpDP1CflsQzz8y+Rb+mz6/JW0z4GewIhAMvCP2eO9CqeseC42LEOCtwxrvGeHWGjkAHu3jbqjvis","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21000533},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"38cf38ac98437abd2874e6201606f590f72e977b","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.139.0","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.37","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.39_1784123363696_0.46732649864620845","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.40":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.40","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.40","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"463bfcf2739c7cddfc80d0e6deb45df90fadae40","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.40.tgz","fileCount":4212,"integrity":"sha512-Ey+zhbIUQiC9Rppq/54xEnXBWGu6m6BiN6Yvv/gRHXVl6+gUkFBanv3s1At3TgPZzP8Hzlngc5aOrjH+7+kkWA==","signatures":[{"sig":"MEUCIQC/MonagxZkr8Hhxt5Apxip4UWCmj/e5l1PjdN5AAB8eQIgQoLlVyw4MEJrnAFXSt16wxVrPSWuQEE0mqwUCVGL5GA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21183934},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"4afcca7874d0dc12b3b2149ab9e13f3f6bda0acd","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.139.0","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.40_1784551665108_0.8081958184896312","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.41":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.41","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.41","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"46132ac6e6dd85fa17a2972b85adc5913f03832f","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.41.tgz","fileCount":4212,"integrity":"sha512-6YyWsr2sNX4ZLb0m0bFYORHecDS5IUZ8xZGchCKjBAFDYA8A2FDPcpcyW8n9Eq9rpbhmpZ2noKHfXooCamJj2w==","signatures":[{"sig":"MEUCIG+KLaixRFpavGUFH4g04+DZgeXz1yVuAjaPrc4bu9iXAiEAmPBXPUpK40smZvmINiJEOr/vp0cosUMjfmWlTT1C0g0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21205156},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"335ac81a8a3a27da5269d8ab9f4f636f5f8a90c8","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.139.0","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.41_1784559526721_0.7509486917226036","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.42":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.42","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.42","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"f72de29b2f4eb7f46d6cb8d545519ae34e67749d","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.42.tgz","fileCount":4216,"integrity":"sha512-dWqy6pXIvsIZWfckCDa9ZOVKmCeTmZTlftHqSi37jaKKxtToMLnCSmh8buEqPinNH84slTtAzVUhV2b7Yd2dtw==","signatures":[{"sig":"MEYCIQDZtlRcidrQd0ulcdF6Yx0NMqYHEh9zan8gLAR/8NgK4gIhAItHvKuYeAT8j7YDbEmqDNpcvOmEUy33yKILWSzPeE/Q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21231301},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"dd676f223e6ddc70a07d558df943b225684632fd","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.144.6","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.42_1784643559605_0.08079373411836999","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.43":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.43","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.43","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"15cc45f35a12c1ad7b9c541fee0d5d3ea3cf38b4","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.43.tgz","fileCount":4218,"integrity":"sha512-O6GT1guglEQmpA+uGRb3r+TFmlAmmY1xVzldowkylEZK68b8ok/+ubwMfR5w24pHDVEFyEPUZ/8QOrOTQ8wE2g==","signatures":[{"sig":"MEUCIQCF9SuzgakFCmczrregTzPNDzCfeiKsojVwO+B01KQZkAIgFoSn9xeu2dJFxhZbz4sMIi4isqDmkmdg8Vsu26eAduU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21302336},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"cf8f1f5c48913139b56730da60202d390e28ef9a","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.144.6","express-rate-limit":"^7.5.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.43_1785159834140_0.22993264968078764","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.44":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.44","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.44","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"9d18f3fb7ae354e3314fd63e2c43078f7be5a15f","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.44.tgz","fileCount":4286,"integrity":"sha512-ocDXdbS2Nsep+TYY4kWVTHCNTnIzqI8FVXgfh6yh4DQQis5qjGokhrA/i0UvgnSogAA0k4pteTJSQxkAP4CU3w==","signatures":[{"sig":"MEQCIGC2s1+ATCc/mBoGqI8gcSCLEdRBV+GCz2kMR7WyPvaIAiBWjwuDnP0WHv7CACK85Cdw2EF3tN2luniCixxisfJsag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22038465},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22"},"gitHead":"1b76a25f065ae777f8cd932acd5d64027fff61a6","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.4.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.144.6","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.3.0","@modelcontextprotocol/sdk":"^1.29.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.2.32","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"bundleDependencies":["@wolpertingerlabs/drawlatch"],"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.44_1785335837117_0.15568229802404843","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.45":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.45","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.45","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"f7f9581b6b2deac3031973344906ecb3cb14b182","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.45.tgz","fileCount":502,"integrity":"sha512-s3SsPmSY1/Uaq7vHos5wursxl2herV2R58Uoh5K4aNsQK/KLwK9vl2i6xCGFjGRQV8zAAWO9oqQW6PYRrIT9pg==","signatures":[{"sig":"MEUCIGu9QV7mh5r/cFMl5Dm0sxe/uqLuJapterT1h4jHhEsdAiEA5ocLuMenfHUJa3Vu6Bux7yPje9c+QsPHq90jBcFuXHM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4486248},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"7b2075e3d0307e655ec85ed2f08d35c73de95122","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","install:check":"node scripts/check-install-tree.cjs","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4","@openrouter/sdk":"^1.2.7"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.4.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","@cline/sdk":"0.0.69","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.146.0","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.3.0","@modelcontextprotocol/sdk":"^1.29.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.2.32","@earendil-works/pi-coding-agent":"0.83.0","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","@openrouter/sdk":"^1.2.7","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.45_1785942533750_0.2614835418883057","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.46":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.46","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.46","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"66c49ff16f7575d00b6ec85fcf7fc7acba583bdd","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.46.tgz","fileCount":502,"integrity":"sha512-ZQzMMT3pSn+ljrmSFRtHFOSTn0hh9u9BWtrNL4jsx6UBYY2LZDU2+WFGCyYEvIqNnTUrTYIna1CFqCf7X0vVjg==","signatures":[{"sig":"MEYCIQDLCv6SCOyH6EvMya47PeC0jrg4lKAzdUUbpAFO1S7RWQIhAPyfCvVdH2cA5DRKr6UAgvS0ra3UP07nknF6OkkpR4uQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4493678},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"a99212a52da7b3aef1d730f1ea6d640ef2fab8a8","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","install:check":"node scripts/check-install-tree.cjs","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm test && npm run build && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4","@openrouter/sdk":"^1.2.7"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.4.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","@cline/sdk":"0.0.69","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.146.0","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.3.0","@modelcontextprotocol/sdk":"^1.29.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.2.32","@earendil-works/pi-coding-agent":"0.83.0","@wolpertingerlabs/openrouter-agent-harness":"github:WolpertingerLabs/openrouter-agent-harness"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","@openrouter/sdk":"^1.2.7","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.46_1786027501825_0.8208785735906605","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.47":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.47","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.47","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"e0c8157dc628e8c7afca0400657989b2eea7ae9b","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.47.tgz","fileCount":460,"integrity":"sha512-a33g6yn+4q6TW4V+zgL7XzsjvQq9nAkrs+gDZE77ZuT5jOuSSj4TRW3bqzQ5CY7gstCRsZV7UJRp8gGUsImigw==","signatures":[{"sig":"MEUCIQDRHHZFdSGZ3cDjiSkz8s79sGXlqx1L0gpHb4HtFIL+fwIgT85YeTGblIRcBlQFl7FNP02sjYy21BeRGuclyA5hNyE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4191365},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"1168514e1653bdcf9abdd2a2e3896488a0a6a042","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","install:check":"node scripts/check-install-tree.cjs","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm run clean && npm run build && npm test && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.4.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","@cline/sdk":"0.0.69","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.146.0","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.3.0","@modelcontextprotocol/sdk":"^1.29.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.2.32","@earendil-works/pi-coding-agent":"0.83.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.47_1786984767784_0.39107241755904765","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.48":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.48","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.48","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"84f46fb49733ab2ccdaa4029ee8d18d411e6738a","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.48.tgz","fileCount":460,"integrity":"sha512-IpaWaM52PacJ9fxjGgNweBI82a36bd/mT8qc0em6QqiRi0LkjBW+eqhoNgd7XhXt7wrBQRIoc9+71F2T8VcYDA==","signatures":[{"sig":"MEUCIQCGckXQyNTMPG9gyFwZfpKuhnpQ12njcp2aozSB/o/waAIgeAnmPX0ORB5X00u6PUKH2Z7Xv7MmWeUcvglu4iM1DLM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4192724},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"18798b51493c0360117de90b68f2dcf8e54d53cb","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","install:check":"node scripts/check-install-tree.cjs","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm run clean && npm run build && npm test && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.4.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","@cline/sdk":"0.0.69","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.146.0","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.3.0","@modelcontextprotocol/sdk":"^1.29.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.2.32","@earendil-works/pi-coding-agent":"0.83.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.48_1787006498823_0.7740731326767454","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.49":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.49","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.49","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"34dec8a9580f11fe790d19266c7512f1baaf8045","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.49.tgz","fileCount":462,"integrity":"sha512-oy8v1KUWK6ZV0BdhgH6LT6PY1z5WURUVITvY2Hw9ziEC9NlDjEkrUpf9/tBphDJiSInF3GRxVN0PEUZt0o5Dsw==","signatures":[{"sig":"MEYCIQD7JbRwjNu2sypiah+rkWxxePrLzhafKSQZ3CNU3ypSBAIhAMHblESU5BlKhydR04n8hZzfBQOU2UwUfrfkBLuwMg4R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4227471},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"02555dae1cb71d477d1cace5b28d2508f89a7359","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","install:check":"node scripts/check-install-tree.cjs","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm run clean && npm run build && npm test && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.4.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","@cline/sdk":"0.0.69","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.146.0","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.3.0","@modelcontextprotocol/sdk":"^1.29.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.2.32","@earendil-works/pi-coding-agent":"0.83.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.49_1787143908565_0.3464633279745877","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.50":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.50","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.50","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"864537a8c7bef99dd17325fd9786714062470f8f","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.50.tgz","fileCount":464,"integrity":"sha512-uGtiVpcjDJ+u2k4S8/iVJ4J74mppfxKsUHlpSQDOJ+pVUqiQtipB9eLlxcMT/+8PUx9oAWJhqNuLGx20hP3rgQ==","signatures":[{"sig":"MEUCIEj+u8OjOaMhG2IUR+8xRTNwwtQ2TAMbHdOthyxNKt8jAiEA81PStIDjPyPfWRgEG3g3DZz3QWnCGsCNJf6Vh5qyWDc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4237593},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"80183b6eb0bb5d851466431709db83681b51c882","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","install:check":"node scripts/check-install-tree.cjs","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm run clean && npm run build && npm test && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.4.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","@cline/sdk":"0.0.69","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.146.0","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.3.0","@modelcontextprotocol/sdk":"^1.29.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.2.32","@earendil-works/pi-coding-agent":"0.83.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.50_1787313729238_0.12394905671150025","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.51":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.51","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.51","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"78b5252b4f954bffe92fe90dde7e8adb22c055c1","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.51.tgz","fileCount":507,"integrity":"sha512-+brSySml3FYovzrDLzsWh/9Y0ezjZxfyXU1KeIcQtNTBu6XQJIiLkrFdm8dsnls/eCUyfa5mt01jaIrmRtF+7g==","signatures":[{"sig":"MEYCIQDiHrPnvbZ5lHIBlqUGdQCKwhabKxRC/gNfYWA9ipqZ6AIhAMVcak1oSD6Ph6ar6uslMCUtszdf4C52z0qTh/LU0b9b","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4918773},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"2a0fee2a6306598aaaa5392aa8e4d8f594ccb3fd","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","install:check":"node scripts/check-install-tree.cjs","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm run clean && npm run build && npm test && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.4.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","@cline/sdk":"0.0.69","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.146.0","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.3.0","@modelcontextprotocol/sdk":"^1.29.0","@sap-cloud-sdk/connectivity":"4.8.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.2.32","@earendil-works/pi-coding-agent":"0.83.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.51_1787581382731_0.8428734221333021","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.52":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.52","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.52","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"07dd7bbfbb1a78a6b2151ae5b577e9e4e3bcfe44","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.52.tgz","fileCount":509,"integrity":"sha512-nS2R1vBjqe2Z1OXoak1gjMj0VfzWZpgsX2qpXR7uzuY/gpx0APDlPhj0q3DptG7TyQLzgFeR8+chSVFhdnrYQA==","signatures":[{"sig":"MEUCID5fHzazJhA3Zt9JOC5B4UPUKoZ3oQtznC6D5L6n4kwtAiEA2Y18Mgt0wK9lWD8J3IyNN0pRX59h1fhZyN2ClmrIS7U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4952722},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"38a417c2c0a258515e1c33df9d850e9f2fb1f947","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","install:check":"node scripts/check-install-tree.cjs","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm run clean && npm run build && npm test && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.4.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","@cline/sdk":"0.0.69","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.146.0","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.3.0","@modelcontextprotocol/sdk":"^1.29.0","@sap-cloud-sdk/connectivity":"4.8.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.2.32","@earendil-works/pi-coding-agent":"0.83.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.52_1787664496654_0.010270438275453264","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.53":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.53","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.53","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"4376c8b27e08c41b7c5b26a5fa39d513c3b55f25","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.53.tgz","fileCount":511,"integrity":"sha512-5shs6QsN30MqhwHIYlQ1MYlYTprz0vRk0Lrm7CJ6KrKzc8cZx6/yB1AY/Jvl640Dgq4aNHmusxaGrMjPocme6A==","signatures":[{"sig":"MEYCIQDugqU4EenoMn7NwrvJXXDM4gnBx3lcqXesT3gDdhiYmAIhAKF5dThGDH2Fsz0OvfPKN4XjlFJRCNtw1zyQvJ8AUVX/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5034146},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"c2aa16d34d7f967ed99952ad6c5c0c08e62044b6","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","install:check":"node scripts/check-install-tree.cjs","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm run clean && npm run build && npm test && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.4.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","@cline/sdk":"0.0.69","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.146.0","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.3.0","@modelcontextprotocol/sdk":"^1.29.0","@sap-cloud-sdk/connectivity":"4.8.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.2.32","@earendil-works/pi-coding-agent":"0.83.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.53_1787935221360_0.6088733923819465","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.54":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.54","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.54","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"d111e26f74f8ce550a12db2248719c4969ad7ed0","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.54.tgz","fileCount":511,"integrity":"sha512-bz1p51gjJUF6qjyokFU5ig+rXUrPhkdkrZV57En4Yv/INBjf86kNiLc4US7+AYJaR4sgjT9TrF/4tDR5aoyQLw==","signatures":[{"sig":"MEQCIGAt7X4OYr4GUR7YjvIwR6ahJJalUjuHaSzPvvThTEE4AiBSDb89n1QQtfVq8x4L53bvlpVa6M0UAkQ6LTxKP2cjjA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5032717},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"34e76164f786b02388c195f306d500916935db0b","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"vitest run","build":"npm run build:shared && npm run build:backend && npm run build:frontend","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","install:check":"node scripts/check-install-tree.cjs","test:coverage":"vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm run clean && npm run build && npm test && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.4.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","@cline/sdk":"0.0.69","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.146.0","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.3.0","@modelcontextprotocol/sdk":"^1.29.0","@sap-cloud-sdk/connectivity":"4.8.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.2.32","@earendil-works/pi-coding-agent":"0.83.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.54_1788276126517_0.24933404475740328","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.55":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.55","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.55","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"f84bd792038a6e95a2d32736b66d017c47555426","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.55.tgz","fileCount":576,"integrity":"sha512-3Hr7c0cwklYrbOlYgqmFDAWvKxp0wlng4z1Vtu3bs5PnT9guGiLmjfyoU/Q0LijgM+3zYDm3/ICQRieyvl4RxA==","signatures":[{"sig":"MEYCIQCfMXO+/3vsNi10aik7luXtRh8zwg6WJRL65klP5qaGXgIhAIi05Q0K5//+8w2zGHNTGBtThpydn/ofSTPXyfHAqCQj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5581536},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"19618c72df5217553a0ffa1f5b44f02b20106bca","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"npm run test:computer-use && vitest run","build":"npm run build:shared && npm run build:computer-use && npm run build:backend && npm run build:frontend && node scripts/rewrite-shared-imports.mjs","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"node --import tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","install:check":"node scripts/check-install-tree.cjs","test:coverage":"npm run test:computer-use && vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm run clean && npm run build && npm test && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm_config_cache=\"${TMPDIR:-/tmp}/callboard-npm-cache\" npm publish --dry-run","test:computer-use":"npm -w @wolpertingerlabs/computer-use test","build:computer-use":"npm -w @wolpertingerlabs/computer-use run build"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"zod":"$zod","shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend","packages/computer-use"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":">=4.4.3 <4.5.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","@cline/sdk":"0.0.82","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.153.4","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.4.0","@modelcontextprotocol/sdk":"^1.29.0","@sap-cloud-sdk/connectivity":"4.8.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.3.261","@earendil-works/pi-coding-agent":"0.85.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"optionalDependencies":{"playwright":"^1.55.0"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.55_1788963103291_0.09840866315006602","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.56":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.56","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.56","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"b8a3c1355204cccdce6faa04fef86121a0c65a65","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.56.tgz","fileCount":576,"integrity":"sha512-R+KDArs2mdPNPSiReJC9C4kPrjwPq2lUDqHCuoHZStWxYlYSfYi3GeaYCn8Up18dfZAKFRimoXPXd98zBqc9gQ==","signatures":[{"sig":"MEYCIQDOoRj158JBER1eIKNeGC/LhfUBMwGaTQ9dxI6QNFcJaQIhAIwfE4d+zHpfXl6qwA4XpEajoPdNu1RtO98cV1vI1j2U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5649524},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"10da3a82e6d92b372893d5769786e229ff956dd6","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"npm run test:computer-use && vitest run","build":"npm run build:shared && npm run build:computer-use && npm run build:backend && npm run build:frontend && node scripts/rewrite-shared-imports.mjs","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"node --import tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","install:check":"node scripts/check-install-tree.cjs","test:coverage":"npm run test:computer-use && vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm run clean && npm run build && npm test && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm_config_cache=\"${TMPDIR:-/tmp}/callboard-npm-cache\" npm publish --dry-run","test:computer-use":"npm -w @wolpertingerlabs/computer-use test","build:computer-use":"npm -w @wolpertingerlabs/computer-use run build"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"zod":"$zod","shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend","packages/computer-use"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":">=4.4.3 <4.5.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","@cline/sdk":"0.0.82","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.153.4","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.4.0","@modelcontextprotocol/sdk":"^1.29.0","@sap-cloud-sdk/connectivity":"4.8.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.3.261","@earendil-works/pi-coding-agent":"0.85.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"optionalDependencies":{"playwright":"^1.55.0"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.56_1789131156921_0.4415177236463206","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.57":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.57","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.57","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"fb1f4b7218f0298d184b98bd43653702e5743e15","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.57.tgz","fileCount":576,"integrity":"sha512-/MUAJgeMXp4C8e3fDjTGY5CJY8x9qm6X1H0RpHbJswUDLAnmuCRpe5esBBW1F3/G4CC0oXwty8DrbDkoFJtDRA==","signatures":[{"sig":"MEUCIH2vnIbSWmK5elIt7FjvBdRLLyUpUhPt6BPwdNuVzWTCAiEAtmUcCo7B0TLld0ntcLfBDgWbNV/Hnyfa8N2/4Np4KD8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5652953},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"25912bc414236edea43ff3cf329b042e0299c4dc","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"npm run test:computer-use && vitest run","build":"npm run build:shared && npm run build:computer-use && npm run build:backend && npm run build:frontend && node scripts/rewrite-shared-imports.mjs","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"node --import tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","install:check":"node scripts/check-install-tree.cjs","test:coverage":"npm run test:computer-use && vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm run clean && npm run build && npm test && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm_config_cache=\"${TMPDIR:-/tmp}/callboard-npm-cache\" npm publish --dry-run","test:computer-use":"npm -w @wolpertingerlabs/computer-use test","build:computer-use":"npm -w @wolpertingerlabs/computer-use run build"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"zod":"$zod","shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend","packages/computer-use"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":">=4.4.3 <4.5.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","@cline/sdk":"0.0.82","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.153.4","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.4.0","@modelcontextprotocol/sdk":"^1.29.0","@sap-cloud-sdk/connectivity":"4.8.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.3.261","@earendil-works/pi-coding-agent":"0.85.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"optionalDependencies":{"playwright":"^1.55.0"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.57_1789137059193_0.8127723433540948","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.58":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.58","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.58","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"20c282dbaf331552053666afc0ccff8d69f19a02","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.58.tgz","fileCount":578,"integrity":"sha512-k9UDod2pQKdZM60V2HjCctw/aF18H/HHd+2ITrza4ZpzxUryyfQTTVil7bjV3tWVorItqG64c69JaSSIYn1ldg==","signatures":[{"sig":"MEQCIECeQ437nxZ6BjW+6AQmiBxUOqtFnruWqopSt677lF+zAiBg7Uum7TG0z4vH9CjfKGmoiHPEkla2o4rbbFwbC0BUJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5681585},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"ad5311fad36604f7e614e61c793b7d8812cddefe","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"npm run test:computer-use && vitest run","build":"npm run build:shared && npm run build:computer-use && npm run build:backend && npm run build:frontend && node scripts/rewrite-shared-imports.mjs","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"node --import tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","install:check":"node scripts/check-install-tree.cjs","test:coverage":"npm run test:computer-use && vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm run clean && npm run build && npm test && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm_config_cache=\"${TMPDIR:-/tmp}/callboard-npm-cache\" npm publish --dry-run","test:computer-use":"npm -w @wolpertingerlabs/computer-use test","build:computer-use":"npm -w @wolpertingerlabs/computer-use run build"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"zod":"$zod","shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend","packages/computer-use"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":">=4.4.3 <4.5.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","@cline/sdk":"0.0.82","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.153.4","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.4.0","@modelcontextprotocol/sdk":"^1.29.0","@sap-cloud-sdk/connectivity":"4.8.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.3.261","@earendil-works/pi-coding-agent":"0.85.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"optionalDependencies":{"playwright":"^1.55.0"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.58_1789311053009_0.08317057642930004","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.59":{"name":"@wolpertingerlabs/callboard","version":"1.0.0-alpha.59","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"license":"MIT","_id":"@wolpertingerlabs/callboard@1.0.0-alpha.59","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"homepage":"https://github.com/WolpertingerLabs/callboard#readme","bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"bin":{"callboard":"bin/callboard.js"},"dist":{"shasum":"fb82d5c56a932417b6b7248bddc11ea56affe875","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.59.tgz","fileCount":596,"integrity":"sha512-2AfvPDPbniYHOHukbRsC8bc/H41Li8K7NkQBUEOyl1dm51gESfnXJxbPOJKwr4oCbt6sAztW5U+tWt3GtjagCQ==","signatures":[{"sig":"MEUCIACVB+lQ6km1EdD6yMXKvajP+aqmPTg91pqhqcJxUVvSAiEAruAgPm12N+u57QWp7Bcxa9NlGf9poLi4snQEg20wa+w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICPWvKs2QQFu8j2IfqYxFif9m4i9QzJSZqmMYpqhMwYSAiBlEDj15V3TkVQgRfGcegP1gIzH6XPOqhQdz4JuKCuzYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5779061},"main":"./backend/dist/index.js","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"48579143c71c7362a900a588c16fe971dc455e06","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"npm run test:computer-use && vitest run","build":"npm run build:shared && npm run build:computer-use && npm run build:backend && npm run build:frontend && node scripts/rewrite-shared-imports.mjs","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"node --import tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","install:check":"node scripts/check-install-tree.cjs","test:coverage":"npm run test:computer-use && vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm run clean && npm run build && npm test && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm_config_cache=\"${TMPDIR:-/tmp}/callboard-npm-cache\" npm publish --dry-run","test:computer-use":"npm -w @wolpertingerlabs/computer-use test","build:computer-use":"npm -w @wolpertingerlabs/computer-use run build"},"_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"overrides":{"zod":"$zod","shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend","packages/computer-use"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":">=4.4.3 <4.5.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","@cline/sdk":"0.0.82","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.153.4","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.4.0","@modelcontextprotocol/sdk":"^1.29.0","@sap-cloud-sdk/connectivity":"4.8.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.3.261","@earendil-works/pi-coding-agent":"0.85.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"optionalDependencies":{"playwright":"^1.55.0"},"_npmOperationalInternal":{"tmp":"tmp/callboard_1.0.0-alpha.59_1789595460457_0.5088186602324665","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.60":{"_id":"@wolpertingerlabs/callboard@1.0.0-alpha.60","bin":{"callboard":"bin/callboard.js"},"bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"dist":{"shasum":"fc45d5f4ece353389c7e864369d1457956dc8636","tarball":"https://registry.npmjs.org/@wolpertingerlabs/callboard/-/callboard-1.0.0-alpha.60.tgz","fileCount":598,"integrity":"sha512-uUQz56yTyx5RFdCnbfNSteIs5tY0t5gQJcPP5rzdFHjUJnkpr828p/fxUb0h9aUBvZLTIqbKYABq8somLirtfQ==","signatures":[{"sig":"MEYCIQDmeAMfhpE0zG2l9X63Ops0Wj/NGU/VyADY40yAALLxxgIhAP2X8MbP4Td9pZFXZXYlvtsFnowe/sJmQPijXWZSPj3Y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCME/wBLs4V5z2pgol+TQkSont1VoEUP25GWt4bhEAFqAIgTi5WdXHKKmZvjYo8uNpGJs2LaF/7/6ECrFToNP3V9PM="}],"unpackedSize":5820444},"main":"./backend/dist/index.js","name":"@wolpertingerlabs/callboard","type":"module","types":"./backend/dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"2ce15ca18b09ac2b07260d2edd6f8ae6601ad363","license":"MIT","scripts":{"dev":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev concurrently \"npm run dev:backend\" \"npm run dev:frontend\"","lint":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint","test":"npm run test:computer-use && vitest run","build":"npm run build:shared && npm run build:computer-use && npm run build:backend && npm run build:frontend && node scripts/rewrite-shared-imports.mjs","clean":"rm -rf shared/dist backend/dist frontend/dist shared/tsconfig.tsbuildinfo backend/tsconfig.tsbuildinfo frontend/tsconfig.tsbuildinfo","start":"NODE_ENV=production node backend/dist/index.js","reload":"node scripts/drawlatch-reload.cjs local","prepare":"npm run build","preview":"npm -w callboard-frontend exec vite preview","swagger":"node --import tsx backend/src/swagger.ts","lint:all":"eslint . --ext .js,.jsx,.ts,.tsx","lint:fix":"git diff --name-only --cached HEAD | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r eslint --fix","prebuild":"npm run swagger","prettier":"git diff --name-only HEAD | xargs -r npx prettier --write --ignore-unknown && git diff --name-only --cached HEAD | xargs -r npx prettier --write --ignore-unknown","postbuild":"node scripts/rewrite-shared-imports.mjs","deps:check":"node scripts/check-published-deps.mjs","test:watch":"vitest","dev:backend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-backend run dev","reload:prod":"node scripts/drawlatch-reload.cjs prod","build:shared":"npm -w shared run build","dev:frontend":"CALLBOARD_DATA_DIR=$HOME/.callboard-dev npm -w callboard-frontend run dev","lint:all:fix":"eslint . --ext .js,.jsx,.ts,.tsx --fix","reload:local":"node scripts/drawlatch-reload.cjs local","build:backend":"npm -w callboard-backend run build","install:check":"node scripts/check-install-tree.cjs","test:coverage":"npm run test:computer-use && vitest run --coverage","build:frontend":"npm -w callboard-frontend run build","drawlatch:prod":"node scripts/drawlatch-switch.cjs prod && npm install","prepublishOnly":"npm run drawlatch:check && npm run lint:all && npm run clean && npm run build && npm test && npm run deps:check","drawlatch:check":"node scripts/drawlatch-switch.cjs check","drawlatch:local":"node scripts/drawlatch-switch.cjs local && npm install","drawlatch:which":"node scripts/drawlatch-switch.cjs which","publish:dry-run":"npm_config_cache=\"${TMPDIR:-/tmp}/callboard-npm-cache\" npm publish --dry-run","test:computer-use":"npm -w @wolpertingerlabs/computer-use test","build:computer-use":"npm -w @wolpertingerlabs/computer-use run build"},"version":"1.0.0-alpha.60","_npmUser":{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"},"homepage":"https://github.com/WolpertingerLabs/callboard#readme","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"overrides":{"zod":"$zod","shell-quote":"1.8.4"},"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"workspaces":["shared","backend","frontend","packages/computer-use"],"_npmVersion":"10.9.4","description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","directories":{},"maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"_nodeVersion":"22.22.0","dependencies":{"zod":">=4.4.3 <4.5.3","cors":"^2.8.5","dotenv":"^17.2.3","multer":"^2.0.2","adm-zip":"^0.5.16","express":"^4.21.0","winston":"^3.19.0","archiver":"^7.0.1","ipaddr.js":"^2.4.0","node-cron":"^3.0.3","@cline/sdk":"0.0.82","cron-parser":"^5.0.0","cookie-parser":"^1.4.7","@openai/codex-sdk":"^0.153.4","express-rate-limit":"^7.5.1","@agentclientprotocol/sdk":"1.4.0","@modelcontextprotocol/sdk":"^1.29.0","@sap-cloud-sdk/connectivity":"4.8.0","@wolpertingerlabs/drawlatch":"^1.0.0-alpha.40","@anthropic-ai/claude-agent-sdk":"^0.3.261","@earendil-works/pi-coding-agent":"0.85.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","rollup":"^4.60.1","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.9.3","concurrently":"^9.0.0","swagger-autogen":"^2.23.7","@types/eslint__js":"^8.42.3","typescript-eslint":"^8.54.0","@vitest/coverage-v8":"^4.1.9","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1"},"optionalDependencies":{"playwright":"^1.55.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/callboard_1.0.0-alpha.60_1789668279089_0.9972463755778103"}}},"time":{"created":"2026-02-27T15:22:31.747Z","modified":"2026-09-17T18:04:39.428Z","1.0.0-alpha.1":"2026-02-27T15:22:31.984Z","1.0.0-alpha.2":"2026-02-27T22:25:16.518Z","1.0.0-alpha.3":"2026-02-28T20:56:12.859Z","1.0.0-alpha.4":"2026-03-02T12:57:08.212Z","1.0.0-alpha.5":"2026-03-03T13:24:55.228Z","1.0.0-alpha.5.1":"2026-03-03T15:50:27.527Z","1.0.0-alpha.5.2":"2026-03-03T17:39:28.391Z","1.0.0-alpha.6.0":"2026-03-04T15:54:15.220Z","1.0.0-alpha.7.0":"2026-03-05T12:28:07.586Z","1.0.0-alpha.7.1":"2026-03-05T15:43:17.742Z","1.0.0-alpha.8.0":"2026-03-06T15:07:22.372Z","1.0.0-alpha.8.1":"2026-03-06T17:52:34.963Z","1.0.0-alpha.9.0":"2026-03-08T13:42:17.461Z","1.0.0-alpha.9.1":"2026-03-08T13:49:56.267Z","1.0.0-alpha.9.2":"2026-03-08T14:16:59.491Z","1.0.0-alpha.9.5":"2026-03-08T15:51:03.836Z","1.0.0-alpha.9.6":"2026-03-08T16:22:08.895Z","1.0.0-alpha.10.0":"2026-03-09T11:31:51.751Z","1.0.0-alpha.10.1":"2026-03-09T14:51:52.050Z","1.0.0-alpha.10.2":"2026-03-09T16:02:19.533Z","1.0.0-alpha.10.3":"2026-03-10T13:11:09.792Z","1.0.0-alpha.11.1":"2026-03-26T13:44:53.981Z","1.0.0-alpha.12.0":"2026-03-30T14:03:58.495Z","1.0.0-alpha.12.1":"2026-03-30T14:38:48.007Z","1.0.0-alpha.12.2":"2026-03-30T15:20:36.742Z","1.0.0-alpha.13.0":"2026-03-31T14:21:46.634Z","1.0.0-alpha.14.0":"2026-04-03T16:37:30.711Z","1.0.0-alpha.15.0":"2026-04-04T16:28:52.882Z","1.0.0-alpha.15.1":"2026-04-05T12:02:32.349Z","1.0.0-alpha.15.2":"2026-04-05T12:29:11.665Z","1.0.0-alpha.16.0":"2026-04-13T14:18:34.014Z","1.0.0-alpha.17.0":"2026-04-20T14:54:52.850Z","1.0.0-alpha.17.1":"2026-04-20T15:25:31.044Z","1.0.0-alpha.18":"2026-05-19T12:23:55.706Z","1.0.0-alpha.17.3":"2026-05-26T20:05:45.996Z","1.0.0-alpha.18.0":"2026-05-27T12:54:59.416Z","1.0.0-alpha.18.1":"2026-05-27T20:25:32.140Z","1.0.0-alpha.18.2":"2026-05-28T18:37:33.387Z","1.0.0-alpha.19":"2026-05-29T17:11:36.448Z","1.0.0-alpha.20":"2026-06-08T14:20:31.991Z","1.0.0-alpha.21":"2026-06-09T19:40:46.152Z","1.0.0-alpha.22":"2026-06-11T16:07:34.004Z","1.0.0-alpha.23":"2026-06-12T14:11:36.126Z","1.0.0-alpha.24":"2026-06-12T16:57:26.884Z","1.0.0-alpha.25":"2026-06-12T18:23:48.649Z","1.0.0-alpha.27":"2026-06-15T14:03:20.003Z","1.0.0-alpha.28":"2026-06-15T15:07:02.633Z","1.0.0-alpha.29":"2026-06-17T16:53:54.817Z","1.0.0-alpha.30":"2026-06-17T18:04:46.450Z","1.0.0-alpha.31":"2026-06-18T10:58:37.445Z","1.0.0-alpha.32":"2026-06-23T12:40:43.252Z","1.0.0-alpha.33":"2026-06-26T13:33:54.525Z","1.0.0-alpha.34":"2026-07-01T12:48:53.980Z","1.0.0-alpha.35":"2026-07-01T13:15:26.902Z","1.0.0-alpha.36":"2026-07-02T14:08:38.955Z","1.0.0-alpha.37":"2026-07-07T14:13:32.513Z","1.0.0-alpha.38":"2026-07-14T16:02:51.145Z","1.0.0-alpha.39":"2026-07-15T13:49:23.953Z","1.0.0-alpha.40":"2026-07-20T12:47:45.324Z","1.0.0-alpha.41":"2026-07-20T14:58:47.036Z","1.0.0-alpha.42":"2026-07-21T14:19:19.960Z","1.0.0-alpha.43":"2026-07-27T13:43:54.441Z","1.0.0-alpha.44":"2026-07-29T14:37:17.454Z","1.0.0-alpha.45":"2026-08-05T15:08:53.978Z","1.0.0-alpha.46":"2026-08-06T14:45:02.009Z","1.0.0-alpha.47":"2026-08-17T16:39:27.982Z","1.0.0-alpha.48":"2026-08-17T22:41:39.011Z","1.0.0-alpha.49":"2026-08-19T12:51:48.745Z","1.0.0-alpha.50":"2026-08-21T12:02:09.592Z","1.0.0-alpha.51":"2026-08-24T14:23:02.949Z","1.0.0-alpha.52":"2026-08-25T13:28:16.886Z","1.0.0-alpha.53":"2026-08-28T16:40:21.546Z","1.0.0-alpha.54":"2026-09-01T15:22:06.719Z","1.0.0-alpha.55":"2026-09-09T14:11:43.452Z","1.0.0-alpha.56":"2026-09-11T12:52:37.092Z","1.0.0-alpha.57":"2026-09-11T14:30:59.337Z","1.0.0-alpha.58":"2026-09-13T14:50:53.177Z","1.0.0-alpha.59":"2026-09-16T21:51:00.606Z","1.0.0-alpha.60":"2026-09-17T18:04:39.222Z"},"bugs":{"url":"https://github.com/WolpertingerLabs/callboard/issues"},"license":"MIT","homepage":"https://github.com/WolpertingerLabs/callboard#readme","keywords":["claude","claude-code","anthropic","ai-agents","agent-sdk","multi-agent","mcp","model-context-protocol","control-panel","dashboard","automation","cron","webhooks","callboard"],"repository":{"url":"git+https://github.com/WolpertingerLabs/callboard.git","type":"git"},"description":"A web-based control panel for managing Claude Code sessions, autonomous agents, and multi-agent workflows","maintainers":[{"name":"cybourgeoisie","email":"ben@cybourgeoisie.com"}],"readme":"# Callboard\n\nA web control panel for coding agents — run [Claude Code](https://docs.anthropic.com/en/docs/claude-code), Codex, Cline, pi or OpenCode through your browser instead of the terminal.\n\n> **Alpha Software** — Expect breaking changes between updates.\n\nCallboard gives you a full-featured chat interface on top of five agent harnesses. You get real-time streaming responses, tool permission controls, image uploads, git worktree isolation, a card board, scheduled and event-driven agents, and multi-step jobs — all from a browser tab you can keep open alongside your editor.\n\n## Quick Start\n\n### 1. Install\n\n```bash\nnpm install -g @wolpertingerlabs/callboard\n```\n\nRequires **Node.js 22.19+**, and — for Claude Code, the default engine — either the [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code) installed and authenticated, or an Anthropic API key set under Settings → API. See [Engines](#engines) for that and for the four other engines Callboard can run.\n\n### 2. Set a password\n\n```bash\ncallboard set-password\n```\n\nThis step is not optional. Callboard has no anonymous mode: until a password hash is stored, `/api/auth/login` returns 503 and every other API route with it, so a server started without one has a login page that cannot be used. Minimum eight characters; the password is hashed with scrypt and the plaintext is never written anywhere.\n\n### 3. Start the server\n\n```bash\ncallboard start\n```\n\nOpen **http://localhost:8000** in your browser and log in. That's it.\n\n## Engines\n\nCallboard runs a chat on one of five agent **engines** — Claude Code, Codex, Cline, pi, or OpenCode. You pick one per chat, and set each one's defaults under **Settings → API**. Every engine gets a tab there whether or not it can actually run, so start here. (The OpenRouter tab alongside them is not an engine — it holds a service credential the other engines can be routed through.)\n\n| Engine          | How it runs                                                   | Install anything?     | Authentication                                                    |\n| --------------- | ------------------------------------------------------------- | --------------------- | ----------------------------------------------------------------- |\n| **Claude Code** | Bundled agent SDK, but a `claude` on your `PATH` is preferred | Optional, recommended | `claude auth login`, or a key in Settings → API                   |\n| **Codex**       | Bundled — the `codex` binary ships inside Callboard           | Only to log in        | `codex login` (needs the CLI), or an OpenAI key in Settings → API |\n| **Cline**       | Bundled — runs in the Callboard process, no binary            | No                    | A key for the provider you pick, in Settings → API                |\n| **pi**          | Bundled — runs in the Callboard process, no binary            | No                    | A key for the provider you pick, in Settings → API                |\n| **OpenCode**    | An `opencode` binary you install, spawned per turn            | **Yes** — required    | `opencode auth login`, in your own terminal                       |\n\n**Bundled** means the engine is an ordinary npm dependency of Callboard: you got it with `npm install -g @wolpertingerlabs/callboard`, and you update it by updating Callboard. Installing a bundled engine globally does not upgrade it — Node resolves the package from Callboard's own `node_modules` first, and global installs aren't on that search path, so the two copies coexist and Callboard keeps using its own. It doesn't break anything either; it just has no effect. To move a bundled engine forward, update Callboard.\n\n### Claude Code\n\nNo engine to install: the Claude Agent SDK ships with Callboard, and carries a native `claude` binary for your platform with it. That binary is an *optional* dependency, so it is missing if you installed with `--omit=optional` or you're on a platform Anthropic doesn't publish one for — in which case the SDK throws on startup and asks you to reinstall or point it at a `claude` yourself.\n\nCallboard prefers a `claude` you installed anyway, and one lookup decides it — for chats, for the login prompt and for the About page alike. In order:\n\n1. the **Binary path** field under Settings → API → Claude Code (`pathToClaudeCodeExecutable`)\n2. the `CLAUDE_BINARY` environment variable\n3. `which claude`\n4. four well-known install directories — `~/.local/bin`, `~/.claude/bin`, `/usr/local/bin`, `/opt/homebrew/bin`\n\nNothing resolving means this machine has no native CLI, and the Agent SDK's bundled binary runs. The status card names the path in effect and which of the four found it, which is worth reading: `~/.local/bin/claude` is where Anthropic's own `install.sh` lands, and a daemon that started before that directory was on its `PATH` finds it only through step 4.\n\nEither binary field — Claude Code's or Codex's — is checked before it is used: the path must be **absolute**, exist, be a regular file, and be executable by the user running the Callboard daemon. (Absolute matters more than it looks: Callboard would resolve a relative path against the daemon's own directory while the engine spawns it from the chat's folder, so it would name a different file in every chat.) A path that fails any of those is **rejected** and resolution carries on as if the field were blank, so a typo cannot break every chat. The field says why while you are typing, and the status card says why afterwards. Editing either field takes effect on the next chat; no restart.\n\nBoth fields can only be changed from a browser on the same machine or LAN, or by editing `~/.callboard/agent-settings.json` on the host. They decide which executable the daemon spawns, so they are held to the same scope as running an install — a client reaching Callboard through Remote Access can see which binary is in effect but not change it.\n\nInstalling it is the recommended setup, and it is the only way to sign in with a Claude subscription:\n\n```bash\nnpm install -g @anthropic-ai/claude-code\nclaude auth login\n```\n\nTo use an API key or a gateway bearer token instead, set it under **Settings → API → Claude Code**, which also shows which token source is currently live. Callboard's \"Claude Code Login Required\" prompt reads that credential before it reaches for the CLI, so an API-key install doesn't get asked to log in — the prompt appears only when no credential of any kind was found, and it says which of the two remedies applies to your machine.\n\n### Codex\n\nNothing to install to *run* Codex: `@openai/codex-sdk` brings the `codex` binary for your platform with it, so the engine is always present. What varies is whether you are signed in. Two ways to do that:\n\n- **ChatGPT subscription.** This needs the Codex CLI as a separate install — Callboard's copy of the binary sits inside its own `node_modules` and never lands on your `PATH`, so `codex login` is not a command you have otherwise.\n\n  ```bash\n  npm install -g @openai/codex\n  codex login\n  ```\n\n  That writes `~/.codex/auth.json` (or wherever `CODEX_HOME` points) and Callboard reads it from there. The global CLI is only needed to log in — chats still run on Callboard's bundled copy, unless you point the **Binary path** field at it (below).\n\n- **API key.** Switch the auth mode to API key under **Settings → API → Codex** and paste an OpenAI key. Nothing to install, no CLI involved.\n\n#### Running your own `codex`\n\nSet **Binary path** under Settings → API → Codex (`codexPathOverride`) and chats spawn that binary instead of the bundled one — useful if you want a newer Codex than the release Callboard pins, or a build of your own. If you installed the CLI globally to run `codex login`, `which codex` prints the path to use.\n\nThere is no `PATH` search behind that field: it is your path or the bundled copy, nothing in between. Auth and sessions do not move either — the overriding binary still reads `$CODEX_HOME/auth.json` and writes to the same rollout tree.\n\nOne thing to watch. Callboard parses Codex's session rollout files by hand, and that format is undocumented and changes between releases. Run a `codex` far enough from the version Callboard targets and the transcripts it writes **from now on** can render with turns missing rather than fail loudly — chats recorded by a matching version still read correctly. The status card shows a **Compatibility** row when the version in effect differs from the one the parser was written against.\n\n### Cline\n\nNothing to install, and no binary at all — the `@cline/sdk` runtime runs inside the Callboard process.\n\nPick a provider (`anthropic` by default) and give it a key under **Settings → API → Cline**. Leave the key blank and the runtime falls back to the usual environment variables — `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, the AWS credential chain, and so on.\n\n### pi\n\nNothing to install. Like Cline, pi is an in-process library.\n\nPick a provider (`openrouter` by default) and give it a key under **Settings → API → pi**. Blank falls back to the environment (`OPENROUTER_API_KEY`, …); a key set here wins over the environment when both are present. Callboard never writes to pi's own auth file.\n\n### OpenCode\n\n**The one engine you have to install.** Callboard talks to OpenCode over the [Agent Client Protocol](https://agentclientprotocol.com) by spawning the `opencode` binary, so if it isn't on the `PATH` of the user running the Callboard daemon, the engine does not work at all.\n\n```bash\nnpm install -g opencode-ai\n```\n\nOr use OpenCode's own installer — see the [OpenCode docs](https://opencode.ai/docs/).\n\nAuthentication is mostly OpenCode's own: run `opencode auth login` in a terminal. Callboard never touches OpenCode's credential file, which OpenCode shares with your own terminal sessions. The one credential Callboard does hold for it is **Give ACP agents an OpenRouter key**, under **Settings → API → OpenCode** — handed to the spawned process as `OPENROUTER_API_KEY` so OpenCode's own OpenRouter provider works.\n\n**Default Model**, on the same tab, sets which model new OpenCode chats start on. Blank leaves OpenCode's own configured model alone — the same one it would use if you ran it from a terminal — and a per-chat model, when you pick one for a chat, always overrides it.\n\nNote that \"installed\" and \"signed in\" are separate questions here, and Callboard can only answer the first — it checks that the binary resolves on your `PATH`. ACP gives no way to ask an agent who is logged in, so an OpenCode you installed but never signed into shows as available and then fails when you send your first message, with OpenCode's own error. When that happens, `opencode auth login` is the fix.\n\n### After installing an engine, or signing in\n\nCallboard resolves engine binaries — and the Claude Code account — once, and caches the answers for the life of the daemon, because `PATH` doesn't change underneath a running process. So after you install a CLI or run a `login` command, the card in **Settings → API** is still reporting what it found before.\n\nPress **Recheck** on that card. It drops every cached lookup (each engine's binary path and version, the executable handed to the Agent SDK, and the Agent SDK's account info) and probes again, so a running daemon picks up both a new binary and a fresh login without a restart. Re-probing spawns processes, so it's limited to one real check every ten seconds; press it again inside that and you'll be told you're seeing the previous result.\n\n**Recheck cannot see everything.** Three cases need `callboard restart` instead, and Callboard states each one on the card rather than pretending it checked:\n\n- **A vendor install script.** `https://opencode.ai/install` installs to `~/.opencode/bin` and `https://claude.ai/install.sh` lands in `~/.local/bin`; both put that directory on your `PATH` by editing your shell rc. New terminals get it — a process that's already running never does, because its `PATH` was fixed when it started. This is the common case, not an edge one: restart Callboard from a terminal where the command works.\n- **A global prefix you can't write to.** A system-wide Node install fails `npm install -g` with `EACCES` until you point npm somewhere you own (`npm config set prefix ~/.npm-global`, then make sure that `bin/` is on your `PATH`).\n- **nvm.** The global prefix belongs to the active Node version, so a binary installed under one version is invisible to a daemon running under another. Compare `node -v` in the terminal you installed from against the Node running Callboard.\n\n### Installing a CLI from the card\n\nThree of the install commands above have an **Install** button beside them, which runs the `npm install -g …` for you and streams the output into the card: the native `claude`, the Codex CLI, and `opencode`. The package comes from a closed list in the source — nothing from the request reaches a command line, and there is no shell.\n\nThe button is offered only to a browser on the same machine or LAN, never to one reaching Callboard through Remote Access, and only when npm's global prefix resolved and is writable. Turn it off entirely with `allowEngineInstalls: false` in `~/.callboard/agent-settings.json`. Whenever it is withheld, the card says why and the copy-and-paste command is still there. The vendor `curl … | bash` installers never get a button — Callboard offers that text and will not run it for you.\n\nA zero exit from npm is not the same claim as \"the engine is installed\", so the card doesn't make it: after a successful install Callboard re-probes and reports what it actually found, which is how you learn that the global bin directory isn't on the daemon's `PATH`.\n\n## What You Can Do\n\n### In a chat\n\n- **Watch it work** — streaming responses with thinking, tool calls, and permission prompts, on whichever engine the chat runs\n- **Gate tools** — set `allow` / `ask` / `deny` per chat on five axes: file read, file write, code execution, web access, and Browser & Computer Control\n- **Attach images** — drag and drop PNG, JPEG, GIF or WebP, up to 10 MB each\n- **Start on a branch** — pick a base branch, name a new one (or have one generated from your prompt), and optionally run the chat in its own git worktree\n- **Read the diff** — the chat's working tree, file by file, without leaving the tab\n- **Use slash commands** — autocomplete over the commands your project and enabled plugins provide. The one you pick becomes a *chip* in the composer rather than text, so the prose you type alongside it stays yours; click the chip to read the command's body\n- **Expand `$keyword` snippets** — named chunks of prompt text you keep under Settings → Keywords and drop inline by typing `$name`. Purely a client-side expansion: the harness sees prose you could have typed by hand\n- **Save drafts** — park a message on a chat, or on a folder before the chat exists, and send it later\n- **Fork a chat** — branch off an earlier message into a new chat. Forks keep their parentage, and the resulting tree is browsable\n- **Switch model mid-chat** — and pick a reasoning effort on the harnesses that have one\n- **See what the agent renders** — images, audio, video and PDFs pushed into the transcript, plus versioned HTML/SVG **canvases** an agent can create and then update in place\n\n### Browser & Computer Control (preview)\n\nThe dedicated Computer view contains target selection, approvals, screenshots and manual takeover. Switching views never enables a target, captures a screenshot or resumes an agent. Closing the view drops local screenshots and input; it does not cancel an already accepted server capture. Status continues to poll without screenshots. The status/Stop strip is hidden in unused chats until a session (including stopped history), approval request or valid late session response is observed; it then stays visible for that chat/controller lifetime, even after errors, permission denial or empty status. **Stop computer control** stays reachable even on mobile with the action bar closed after use. The Computer view remains available in the view menu for unused chats and temporarily shows the strip for emergency global Stop discovery/retry even when status fails. Closing an unused view hides the strip again unless Stop is still pending or has an unresolved retry error (a successful empty Stop clears that exception): viewing alone is not usage or automatic enable. It attempts all current chat browser/native sessions and pending requests, independently of Stop generation; partial failures remain visible for retry. Native Codex child chats are read-only. This UI has offline regression coverage, not live UI, model, browser, Aseprite or Blender qualification.\n\nExisting chats continue normally: this feature does not automatically open a browser or control a desktop. In an existing chat, select the monitor (**Show computer control**) in the header view switcher (on mobile, open the secondary action bar), then open **Chat permissions**, and explicitly change its fifth permission from **Deny** to **Ask** or **Allow**. Missing legacy values and new child/job defaults deny managed access, including screenshots.\n\n> Control a managed browser or desktop on the service host. Agents with unrestricted code execution may still run their own automation.\n\nThe agent can call `cu_request_control` to show an **Enable browser control** or **Enable desktop control** card directly in chat. Read the host, screenshot/model, duration and permission disclosures, then Enable or Deny; after approval the agent receives the created session and continues automatically, without switching views or sending another message. Both Ask and Allow require this initial human consent. Deny (including missing policy) remains denied; change permissions explicitly in the chat permissions dialog if needed. You can still choose **Managed browser** or **Native desktop (service host)** in Computer view and click **Enable**; that existing Ask path also requires scoped approval. Browser permission does not authorize desktop control. **Only you can enable a target, at every level**: the agent's `cu_open` lists ready sessions and grants nothing. What the level decides is what happens after that — under **Ask**, every model-requested GUI action stops the agent's turn and asks you in the chat, and only a signed-in browser session can answer (an API key cannot; human-only replies require the current server-issued request ID and same-origin session authentication); under **Allow**, the agent acts unattended, and each action it performs is written to the server log instead. Confirmations expire and bind one action to one captured frame; the agent must re-observe and ask again if the frame becomes stale. Initial enablement instead binds the target, policy and bounded grant duration: readiness probes time out after 10 seconds, and Stop/cancellation or changed authority during startup prevents success and fences the new session. Failed submissions remain visible for retry; refreshed tabs replay the current request, not the old consent. Tabs running an older bundle receive an in-chat **Reload this Callboard tab** notice for both initial enablement and existing per-action confirmations, including when they connect to a chat that was already waiting. Stream attachment subscribes before checking pending state; capable clients and ordinary prompts retain REST replay without duplicate cards. Reload to recover the pending card (or ask again if it expired); ID-less human-only replies are never accepted. The REST pending endpoint advertises `reloadRequired` without an answerable placeholder for clients missing `human_prompt_identity`.\n\nSubagents that run inside a chat's turn share that chat's tool server and therefore its computer-control grant: Claude Code Task subagents and Codex native subagents both make their screenshot and action requests as the parent chat, and they are authorized and audited as the parent, not as the child. Enable a target only if you are comfortable with everything the chat spawns using it.\n\n**Provision the service host first:**\n\n- **Browser:** install the optional Playwright runtime and provision compatible Chromium plus its OS libraries separately; Callboard never downloads browsers automatically. Set `CALLBOARD_BROWSER_EXECUTABLE=/absolute/path/to/chrome` in the service environment to select an existing executable, or provision Playwright's expected executable. Profiles are isolated and disposable. Web Access must be Allow. **Chromium sandboxing is mandatory**: Linux needs a non-root user and OS support for Chromium's sandbox (user namespaces/seccomp or a supported sandbox helper). There is no unsandboxed fallback. An executable-found probe does not prove sandboxed launch works.\n- **Native desktop:** the built-in driver targets an existing **Linux X11** session, requiring reachable local display access, `/usr/bin/xdotool` (XTEST) and ImageMagick's `/usr/bin/import`. Configure `CALLBOARD_NATIVE_DISPLAY=:0` for the intended local display, or the service's `DISPLAY`. The original four permission axes must all be Allow: a pixel driver cannot enforce narrower OS file, code or network authority. This is not an OS isolation boundary.\n- Missing dependencies, inaccessible displays and unsupported targets fail unavailable rather than silently falling back or breaking ordinary chats. Built-in native macOS, Windows and Wayland/XWayland control is unavailable; headless hosts have no native desktop to control.\n\n**Viewer and privacy:** refresh screenshots explicitly or opt into Live preview. Take over before manual input; agent capture and input are blocked during human control. Each input consumes its frame, so refresh before the next action. **Resume** explicitly restores agent control and captures a fresh agent-visible frame—remove sensitive windows first. Stop/Revoke fence queued and future access; native applications remain open. Previously delivered model images cannot be recalled. Events are memory-only, and hard-crash input recovery is not yet supervised.\n\nTools operate on the **service host**, not the machine viewing this page. A separately installed authenticated helper would be needed for another machine; that helper is not included in this preview.\n\nClaude Code, Codex, Cline, pi and OpenCode via ACP share the MCP execution/authorization service; Cline/pi use host bridges. Offline image-serialization tests do not qualify arbitrary models or provider routes. Live sandboxed-browser operation on the current build host, native desktop workflows, and Aseprite/Blender artwork/export scenarios remain unqualified; this is not a promise of autonomous drawing or modeling.\n\nSee the [standalone package guide](packages/computer-use/README.md) for contracts, prerequisites, limitations and source/tarball use.\n\n### Around the work\n\n- **Workspaces** — a workspace is a `cwd` plus its git isolation. Start a chat in a worktree and Callboard records one; from the workspace manager you can rename it, archive it (with the worktree removed and quarantined in a trash you can restore from), or **adopt** worktrees Callboard didn't create. Several workspaces may share one checkout — that is a supported state, not a bug\n- **Cards and the board** — every conversation is a card: the card is the board view of a top-level chat and everything spawned from it (child chats, job runs), so a card exists the moment you send a prompt and disappears when that chat is deleted. The board files open cards under **Needs you**, **Running** and **Idle**, with a card's own category as a sub-heading inside each — the question it answers first is what is waiting on you. Agents can list, read, and amend cards — title, description, emoji, narrative status, category, cross-reference metadata\n- **Jobs** — deterministic multi-step workflows. A job definition is an ordered list of steps (`agent`, `approval`, `poll`, `wait_event`, `gate`, `notify`, `parallel`, and nested `job`); control flow is backend code, the work inside a step is a spawned agent session. Spawning one creates a run you can pause, resume, cancel, or retry a failed step of, and runs survive a daemon restart. Built under Settings → Jobs, and importable/exportable as JSON\n- **Custom skills** — write a skill under Settings → Skills and it lands at `~/.callboard/custom-skills/skills/<name>/SKILL.md`, invoked in chat as `callboard:<name>`\n- **Model aliases** — one name (`planner`, `worker`) that resolves to a different concrete model per harness, accepted anywhere a model is configured: new chats, per-chat overrides, provider defaults, cron actions, job steps\n- **Plugins & MCP** — register directories to scan and Callboard discovers Claude Code plugin marketplaces under them, along with the slash commands, hooks and MCP servers each plugin carries. Toggle plugins per directory\n- **Themes** — every colour in the UI is a CSS variable, in a light and a dark set. Custom themes live as files in `~/.callboard/themes/`, and an agent can generate one for you\n- **API keys** — mint `cbk_` bearer tokens under Settings → Account to drive the REST API from scripts. They do not authorize human-only operations such as minting more keys or using the computer-control viewer/control plane\n\n## Agents\n\nCallboard isn't just a chat window — it's a platform for running autonomous agents. Each agent gets its own identity, workspace, memory, and schedule.\n\n### Creating Agents\n\nAgents are created from the UI. Each agent has a name, emoji, personality, role, tone, pronouns and guidelines that shape how it behaves, plus what it knows about you — your name, timezone and location. Those compile into a system-prompt append you can inspect, section by section with a token estimate, from the agent's dashboard. Behind the scenes, an agent gets:\n\n- **A workspace** at `~/.callboard/agent-workspaces/<alias>/` with scaffold files that teach it how to maintain memory, take notes, and work proactively — `CLAUDE.md`, `SOUL.md`, `USER.md`, `TOOLS.md`, `HEARTBEAT.md`, `MEMORY.md`\n- **A two-tier memory system** — daily journal files at `memory/YYYY-MM-DD.md` for running notes, and a curated long-term `MEMORY.md` distilled over time. Today's journal and `MEMORY.md` are pre-loaded whole; each *earlier* day is capped by the **journal budget** on the Memory tab — 16k tokens by default, a backstop against one runaway day rather than a tight budget, and settable up to no limit. A capped journal carries a notice telling the agent to read or search the file for the entries left out\n- **Tool permissions** — agents default to allow on the original four axes (file read/write, code execution, web access), but you can restrict per session. Browser & Computer Control defaults to deny\n- **A caller identity** for the connection proxy, chosen per proxy mode, which decides which external APIs it can reach\n\nAn agent can be switched off outright (`enabled: false`), which suppresses its crons, its triggers and its sessions at once.\n\n### Triggering Agents\n\nAgents can run in four ways:\n\n- **Cron jobs** — scheduled tasks with cron expressions, evaluated in the agent's configured timezone. One-off, recurring, or indefinite, and optionally skipped when the previous run is still going. Two are created for every new agent: a **Heartbeat** every 30 minutes that reads `HEARTBEAT.md` and acts on what it finds, and a nightly **Memory Consolidation** at 03:00 that distils the day's journals into `MEMORY.md`.\n- **Event triggers** — react to incoming events from external services (Discord messages, GitHub webhooks, etc.) with filters on source, event type and dot-notation conditions over the payload, and prompt templates that interpolate event data via `{{event.*}}`. A trigger can debounce, so a burst of events produces one session rather than forty.\n- **Event subscriptions** — the lighter option: name a connection the agent watches, and it is woken when events arrive, with no filter or prompt template to configure. The agent decides what to do.\n- **Direct invocation** — agents can start sessions as other agents (`deploy_agent`, fire-and-forget) or send them a message and wait for the reply (`talk_to_agent`), creating multi-agent workflows.\n\nEach cron job and trigger names the harness, model and reasoning effort its sessions run on, so one agent can plan on one engine and grind on another.\n\n### Quiet Hours\n\nQuiet hours are set **per cron job and per trigger**, not once per agent: each item carries its own window, evaluated in the agent's timezone. A recurring cron job or a trigger inside its window is suppressed. One-off cron jobs fire regardless — something you scheduled for 3am still happens at 3am.\n\n### Agent Tools\n\nAgents have access to specialized tools beyond the standard coding-agent toolkit:\n\n- Start, monitor, and continue chat sessions in any directory or branch, and read back their messages\n- Run jobs — spawn a run, approve a step, pause, resume, cancel, or retry a failed step\n- Manage their own cron jobs and event triggers, and query their own activity log\n- Discover and orchestrate other agents on the platform\n- List, read, and amend the card their conversation belongs to — title, description, emoji, status, category, and cross-reference metadata. Cards are created by the conversation itself; there is nothing to create or join\n- Create and update workspaces, and adopt worktrees Callboard didn't create\n- Read and write custom skills, and manage model aliases\n- Render media and canvases into the chat, and reach you outside it — `summon_user` raises a flag on the chat in the dashboard, `notify_user` hands back the handle for a contact channel you've enabled (Discord, Telegram or email) so the agent can deliver a message through the proxy\n- Everything the connection proxy exposes: authenticated HTTP requests, event polling, listener control\n\n## Connections & Event Listening\n\nCallboard uses [@wolpertingerlabs/drawlatch](https://www.npmjs.com/package/@wolpertingerlabs/drawlatch) to give agents authenticated access to external APIs — Discord, GitHub, Slack, Google, Trello, and [many more](https://www.npmjs.com/package/@wolpertingerlabs/drawlatch).\n\n### How Connections Work\n\nA connection is a pre-configured API route template. Each connection defines the allowed endpoints (URL patterns), required secrets, and auth headers. When an agent makes a request, Drawlatch matches the URL against allowed patterns, injects the right credentials, and proxies the request. Agents never see the raw API keys — they just call `secure_request` with a URL and Drawlatch handles authentication.\n\nConnections, secrets, event listeners and the webhook tunnel are **configured in Drawlatch's own password-gated dashboard**, not in Callboard. Settings → Proxy links straight to it. What Callboard keeps on its side is the wiring: which mode it talks to Drawlatch in, which caller identity each agent uses, and which caller regular (non-agent) chats borrow.\n\n### Event Listening\n\nDrawlatch supports real-time event ingestion from external services through three mechanisms:\n\n- **WebSocket listeners** — persistent connections to services like Discord Gateway and Slack Socket Mode, with automatic reconnection and heartbeat management\n- **Webhook receivers** — HTTP endpoints that receive and verify signed payloads from GitHub, Stripe, Trello, and others\n- **Pollers** — interval-based HTTP polling for services like Notion, Linear, Reddit, and Telegram\n\nEvents are buffered in per-caller ring buffers. Callboard polls `poll_events` on a loop, one watcher per caller alias, and appends what it finds to an event log. This is what powers event triggers and event subscriptions — when an agent has a trigger configured for Discord messages, Drawlatch's event listener catches the message and the trigger dispatcher routes it to the right agent.\n\n### Local vs. Remote Mode\n\nDrawlatch runs in two modes. Both speak the same encrypted protocol — the difference is who owns the daemon and how the caller gets enrolled, not whether the channel is protected.\n\n**Local mode** (the default) starts and supervises a Drawlatch daemon as a child process on loopback, and talks to it over that protocol like any other. Enrolment is automatic: Callboard points the daemon at its own keys directory and the daemon writes the key files there at boot, the same-host write being the proof of trust. This is the simplest way to get started on a personal server, and it is where the dashboard link takes you.\n\n**Remote mode** points Callboard at a Drawlatch server somewhere else, which holds all the API keys. Communication is encrypted end-to-end with AES-256-GCM, authenticated with Ed25519 signatures, and protected against replay attacks. The remote server enforces per-caller access control — each caller only sees routes it has been explicitly granted. This is the right choice when you want secrets isolated from the machine running agents, or when several users share one Drawlatch server with different credentials.\n\nTo connect to a remote server, go to **Settings → Proxy**, switch the mode to Remote, and:\n\n1. Issue a caller on the Drawlatch side (its Callers page → Issue credentials, or `drawlatch issue-caller`). That produces a `.drawlatch-caller.json` bundle.\n2. Import that file on the Proxy page. Callboard pins the server key out of the bundle and shows it to you to confirm before writing any keys. Bundles wrapped with a passphrase will ask for it.\n3. Set the **Server URL** by hand. The bundle carries an endpoint, but Callboard ignores it — tunnel URLs are ephemeral.\n\nEnrolled callers are listed on the same page with their fingerprints and the agents bound to them, and can be deleted from there.\n\n## CLI Reference\n\n```\ncallboard                    Show status if running, otherwise the help text\ncallboard start              Start the server (background daemon)\ncallboard stop               Stop the server\ncallboard restart            Restart the server\ncallboard status             Show PID, port, uptime, and health\ncallboard logs               View and follow server logs\ncallboard config             Show effective configuration\ncallboard set-password       Set or change the login password\ncallboard help               Print the help text\n```\n\nEvery subcommand takes `-h` / `--help` and prints its own page.\n\n### Options\n\n```\ncallboard -v                  Print the version and exit\ncallboard start -f            Run in the foreground\ncallboard start --port 3000   Use a custom port (default: 8000)\ncallboard restart --port 3000 Same, when restarting\ncallboard logs -n 100         Show last 100 log lines\ncallboard logs --no-follow    Print the lines and exit (default is to follow)\ncallboard config --path       Print the config file path\n```\n\n`callboard` with no arguments, and `start`, `status` and `config`, all warn when no password is set. Running it for the first time scaffolds `~/.callboard/.env` and prints the three steps above.\n\n## Configuration\n\nCallboard reads `~/.callboard/.env` (created automatically on first run), then a `.env` in the package root if one exists, which **overrides** it. `callboard config` prints the merged result and the paths it came from.\n\n| Variable                   | Default                         | Description                                                 |\n| -------------------------- | ------------------------------- | ----------------------------------------------------------- |\n| `PORT`                     | `8000`                          | Server port                                                  |\n| `LOG_LEVEL`                | `info`                          | Log level (`error`, `warn`, `info`, `debug`)                 |\n| `SESSION_COOKIE_NAME`      | `callboard_session`             | Cookie name (change to avoid collisions)                     |\n| `AUTH_PASSWORD_HASH`       | —                               | scrypt hash of the login password. Written by `set-password` |\n| `AUTH_PASSWORD_SALT`       | —                               | Salt for the above. Written by `set-password`                |\n| `INSTANCE_NAME`            | generated                       | Friendly name for this instance. Generated on first run      |\n| `CALLBOARD_DATA_DIR`       | `~/.callboard`                  | Everything Callboard stores — config, chats, logs, PID file  |\n| `CALLBOARD_WORKSPACES_DIR` | `~/.callboard/agent-workspaces` | Where agent workspaces are created                           |\n\nPasswords are stored as scrypt hashes — plaintext is never saved. Set them with `callboard set-password`, not by editing the file.\n\n`CALLBOARD_DATA_DIR` is read from the process environment, not from the `.env` — it decides *which* `.env` is read, so it has to be set before Callboard starts. Everything else lives under it: `chats/`, `jobs/`, `workspaces/`, `canvas/`, `images/`, `themes/`, `custom-skills/`, `keywords.json`, `agent-settings.json`, `api-keys.json`, `logs/`. (`cards/` and `cards-archive/` appear only on installs that predate cards-as-chat-metadata, or never — the one-time startup migration moves any legacy card entities into root chats' metadata and archives the rest.)\n\n## Remote access (Cloudflare tunnel)\n\nCallboard can expose its web UI to the public internet through a [`cloudflared`](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/)\ntunnel, so you can reach your instance from outside your LAN. It is **off by default** —\nenable it under **Settings → Remote Access**.\n\n- **Quick tunnel** — free, no Cloudflare account; gets a random `*.trycloudflare.com`\n  URL that changes on each restart.\n- **Named tunnel** — paste a token from the Cloudflare Zero Trust dashboard (route the\n  hostname to `http://localhost:8000`) for a stable hostname.\n\n> ⚠️ **Security:** enabling remote access makes callboard reachable by anyone with the\n> URL — your login password becomes the only barrier to your sessions, files, and\n> connected services. Callboard refuses to enable the tunnel until a password is set;\n> make sure it is strong and unique. The `cloudflared` binary must be installed.\n\nAn optional **IP allowlist** on the same page narrows that further: list the addresses or CIDR ranges allowed in through the tunnel and everything else is refused before it reaches the login page. Loopback and private-LAN ranges are always allowed and are never gated by the list, so a bad entry can't lock you out of your own machine.\n\nA client arriving through the tunnel is treated as remote throughout, not just at the door. It cannot change either engine's binary-path field, and it is never offered the one-click engine install — both decide what the daemon executes, so they are held to the same scope as running an install by hand.\n\n## Development\n\nIf you want to contribute or run from source:\n\n```bash\ngit clone https://github.com/WolpertingerLabs/callboard.git\ncd callboard\nnpm install                # also builds, via the `prepare` script\n\ncp .env.example .env       # then UNCOMMENT the DEV_PORT_SERVER line\nCALLBOARD_DATA_DIR=$HOME/.callboard-dev node bin/callboard.js set-password\n\nnpm run dev\n```\n\nThis starts the frontend on `http://localhost:3000` and the backend on `http://localhost:3002`.\n\nTwo things about that are easy to get wrong:\n\n- **`DEV_PORT_SERVER` is not optional.** Vite proxies `/api` to port 3002 by default, but the dev backend only binds 3002 when `DEV_PORT_SERVER` says so — otherwise it falls through to `PORT`, i.e. 8000, and the UI talks to nothing. `.env.example` ships that line commented out, so copying it is not enough; uncomment `DEV_PORT_SERVER=3002` (and `DEV_PORT_UI` if 3000 is taken).\n- **Dev has its own data directory.** `npm run dev` sets `CALLBOARD_DATA_DIR=$HOME/.callboard-dev`, so dev chats, settings and — importantly — the password hash are read from there, not from `~/.callboard`. That is why the `set-password` above names the directory explicitly. There is no auth bypass in development: without a password hash in the dev config, login returns 503.\n\n### Scripts\n\n| Command                 | Description                                                              |\n| ----------------------- | ------------------------------------------------------------------------ |\n| `npm run dev`           | Start frontend + backend dev servers against `~/.callboard-dev`           |\n| `npm run build`         | Build shared, backend, and frontend for production                        |\n| `npm run clean`         | Delete every `dist/` and TypeScript build-info file                       |\n| `npm start`             | Start the production server from `backend/dist`                           |\n| `npm test`              | Run tests (Vitest, single pass)                                           |\n| `npm run test:watch`    | Run tests in watch mode                                                   |\n| `npm run test:coverage` | Run tests with a v8 coverage report                                       |\n| `npm run lint`          | Lint **staged** files only — what the commit workflow runs                |\n| `npm run lint:fix`      | The same, with `--fix`                                                    |\n| `npm run lint:all`      | Lint every file in the project                                            |\n| `npm run lint:all:fix`  | The same, with `--fix`                                                    |\n| `npm run prettier`      | Format changed and staged files                                           |\n| `npm run swagger`       | Regenerate `backend/swagger.json` (served, with auth, at `GET /api/docs`) |\n\nNote the split: `lint` and `lint:fix` pipe `git diff --cached` into ESLint and touch nothing else, so on a clean index they lint zero files and exit 0. Use `lint:all` when you want the whole tree.\n\n`build` is incremental. If you delete a `dist/` by hand, `tsc -b` will still believe it is up to date and skip it — run `npm run clean` first.\n\n### Project Structure\n\n```\ncallboard/\n├── frontend/        React UI (Vite + TypeScript)\n├── backend/         Express API server (TypeScript)\n│   └── src/\n│       ├── routes/     HTTP + SSE endpoints\n│       ├── services/   Domain logic, stores, MCP tool servers\n│       ├── agents/     Per-harness adapters behind one provider port\n│       └── scaffold/   Files copied into a new agent's workspace\n├── shared/          TypeScript types used by both ends\n├── bin/             CLI entry point (callboard command)\n├── scripts/         Build and release helpers\n└── plans/           Design docs for in-flight work\n```\n\nRuntime data is not in the repo — it lives under `~/.callboard` (or `$CALLBOARD_DATA_DIR`).\n\nTwo conventions worth reading before you change anything, both documented in `.claude/CLAUDE.md`: `shared/types/stream.ts` is a **published wire interface** with its own compatibility rules and a snapshot test, and everything cached or stored keys on either `cwd` or `workspaceId` depending on whether the directory or the workspace owns it.\n\n### Tech Stack\n\nReact 18, React Router 6, Express 4, TypeScript 5, Vite 5, Zod 4, Winston logging, Vitest, ESLint + Prettier. Agent harnesses come from `@anthropic-ai/claude-agent-sdk`, `@openai/codex-sdk`, `@cline/sdk`, `@earendil-works/pi-coding-agent` and `@agentclientprotocol/sdk`; connections from `@wolpertingerlabs/drawlatch`.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}