{"_id":"@alptech/openwolf","_rev":"8-f749cd83b155a769222e0cc3cd791c58","name":"@alptech/openwolf","dist-tags":{"latest":"1.1.3"},"versions":{"1.0.4":{"name":"@alptech/openwolf","version":"1.0.4","keywords":["claude","ai","context","token","openwolf","claude-code","developer-tools"],"author":{"name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"@alptech/openwolf@1.0.4","maintainers":[{"name":"nottyjay","email":"891084418@qq.com"}],"homepage":"https://github.com/cytostack/openwolf","bugs":{"url":"https://github.com/cytostack/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"ac0f416ca74b880d8a30fc1a554ac73bab749331","tarball":"https://registry.npmjs.org/@alptech/openwolf/-/openwolf-1.0.4.tgz","fileCount":115,"integrity":"sha512-LAZrzm8BHCoaX2UmKWcA5q1PygseKlCoz1RrdVgxUiivRMa8GDz9vSBgb8lmbyDUI9BvsK2rjqC6WkOb3RcHKw==","signatures":[{"sig":"MEUCIEvMrjfVkN9VOIGQs5KsOZZ5zJTRW2b88vZBGPNdkWSmAiEAq9JhE7AtT08WoIbm2xErNxuMJqFBjk438KpQ+loTO9s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1373667},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"23bfabb9181ab1e8bdcc5dda3c05e48c031dfdec","scripts":{"dev":"tsc --watch","build":"tsc && pnpm build:hooks && pnpm build:dashboard","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"nottyjay","email":"891084418@qq.com"},"repository":{"url":"git+https://github.com/cytostack/openwolf.git","type":"git"},"_npmVersion":"10.8.2","description":"Token-conscious AI brain for Claude Code projects","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","open":"^10.0.0","chalk":"^5.3.0","express":"^5.0.0","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"optionalDependencies":{"puppeteer-core":"^24.39.1"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_1.0.4_1779245718713_0.35763150489512974","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@alptech/openwolf","version":"1.0.5","keywords":["claude","ai","context","token","openwolf","claude-code","developer-tools"],"author":{"name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"@alptech/openwolf@1.0.5","maintainers":[{"name":"nottyjay","email":"891084418@qq.com"}],"homepage":"https://github.com/cytostack/openwolf","bugs":{"url":"https://github.com/cytostack/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"160eb82bf81719f570263a131b4c3fb1dfac82b1","tarball":"https://registry.npmjs.org/@alptech/openwolf/-/openwolf-1.0.5.tgz","fileCount":117,"integrity":"sha512-s9mUhEsmmP0ZrowBZSIO4zSq6KLfNXyAYUsmXEsN+4Fhe22GZ7UK75Imk41JrL1kVCG30ksLPK5pUBlPlrGo1Q==","signatures":[{"sig":"MEUCIDT0GlUg2sdVd4DvVCmE82lv3o6MJQQZkA+58+myv/CHAiEAtEzFlfqakkqOsb6nyeUE28qLTC/T/JWsLO2f5/Xswgw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1376323},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"a230430cc8788d3b2931ebe0b7cfc1626ef4b39f","scripts":{"dev":"tsc --watch","build":"tsc && pnpm build:hooks && pnpm build:dashboard","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"nottyjay","email":"891084418@qq.com"},"repository":{"url":"git+https://github.com/cytostack/openwolf.git","type":"git"},"_npmVersion":"10.8.2","description":"Token-conscious AI brain for Claude Code projects","directories":{},"_nodeVersion":"20.19.2","dependencies":{"ws":"^8.18.0","open":"^10.0.0","chalk":"^5.3.0","express":"^5.0.0","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"optionalDependencies":{"puppeteer-core":"^24.39.1"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_1.0.5_1780997936896_0.6325578542750705","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@alptech/openwolf","version":"1.0.6","keywords":["claude","codex","ai","context","token","openwolf","claude-code","codex-cli","developer-tools"],"author":{"url":"original","name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"@alptech/openwolf@1.0.6","maintainers":[{"name":"nottyjay","email":"891084418@qq.com"}],"homepage":"https://github.com/nottyjay/openwolf","bugs":{"url":"https://github.com/nottyjay/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"ef132f58eb7c85cf6da6d4d833f67be0bb00411b","tarball":"https://registry.npmjs.org/@alptech/openwolf/-/openwolf-1.0.6.tgz","fileCount":117,"integrity":"sha512-e9QHt5U209XI0Nk9Ei49YnLfY7ATqz9KX8C14hGsLs4AnYEvzIzQXhTcBqP3s48ZGvAvGaVkm2gdvWAeANKo8Q==","signatures":[{"sig":"MEUCIQCjpnrRQwguBqS6feM3VJqhqoOKAOR+sR3LCQ5FHN6vVQIgVDYOtK5Qw5W3klYGk7B5c8r6MZTTxFPOd/2iyQnFibw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1378754},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"f3023024426e6742737191d604bb10e66c681604","scripts":{"dev":"tsc --watch","build":"tsc && pnpm build:hooks && pnpm build:dashboard","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"nottyjay","email":"891084418@qq.com"},"repository":{"url":"git+https://github.com/nottyjay/openwolf.git","type":"git"},"_npmVersion":"10.8.2","description":"Token-conscious AI brain for Claude Code projects","directories":{},"_nodeVersion":"20.19.2","dependencies":{"ws":"^8.18.0","open":"^10.0.0","chalk":"^5.3.0","express":"^5.0.0","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"optionalDependencies":{"puppeteer-core":"^24.39.1"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_1.0.6_1782285377002_0.4359584933317726","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@alptech/openwolf","version":"1.0.7","keywords":["claude","codex","ai","context","token","openwolf","claude-code","codex-cli","opencode","cursor","developer-tools"],"author":{"url":"original","name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"@alptech/openwolf@1.0.7","maintainers":[{"name":"nottyjay","email":"nottyjay@gmail.com"}],"homepage":"https://github.com/nottyjay/openwolf","bugs":{"url":"https://github.com/nottyjay/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"34cc0acd8dba60b08641d6ad7f1451acf9dbfc7a","tarball":"https://registry.npmjs.org/@alptech/openwolf/-/openwolf-1.0.7.tgz","fileCount":158,"integrity":"sha512-atvJhzk9mmVcbnm5s8RePn78UhWJvtV/EOl+W40BLSDuv06wi8U+aWWcLluo/x4CTszJnSnxZc5S1rI1087esw==","signatures":[{"sig":"MEYCIQCr5rjuiU1pNw22Pm6ZMkwIR+5kr6b8Z/dwv9uMmIFlfQIhALs5hUJ1gfvnEPz2B9jXzEBaI0vZ0WyRvzw+phDbICCy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1601622},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"9ff5e2d174d417895f17b64c02161517e425aff3","scripts":{"dev":"tsc --watch","test":"node --experimental-strip-types --test tests/*.test.ts","build":"tsc && pnpm build:hooks && pnpm build:dashboard","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"nottyjay","email":"nottyjay@gmail.com"},"repository":{"url":"git+https://github.com/nottyjay/openwolf.git","type":"git"},"_npmVersion":"11.13.0","description":"The second brain for Claude Code, now for every AI coding assistant: context management, architecture scaffolding, and smarter token utilization through lifecycle hooks.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","open":"^10.0.0","chalk":"^5.3.0","express":"^5.2.1","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^4.2.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"optionalDependencies":{"puppeteer-core":"^24.42.0"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_1.0.7_1786520619040_0.38403396048505645","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@alptech/openwolf","version":"1.1.0","keywords":["claude","codex","ai","context","token","openwolf","claude-code","codex-cli","opencode","cursor","developer-tools"],"author":{"url":"original","name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"@alptech/openwolf@1.1.0","maintainers":[{"name":"nottyjay","email":"nottyjay@gmail.com"}],"homepage":"https://github.com/nottyjay/openwolf","bugs":{"url":"https://github.com/nottyjay/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"68b5352376cc8f26645c99047d3fe2048e0d5b0f","tarball":"https://registry.npmjs.org/@alptech/openwolf/-/openwolf-1.1.0.tgz","fileCount":166,"integrity":"sha512-qJywcrFwUOAjlJK3gxowB2UVGTfD6zkn7Vbzc4hnc+rB5Mw/jLbG9GrDVKwynDir1POqv8HilruQNtg5y0WkRQ==","signatures":[{"sig":"MEUCIQCTNQJ0BlSlFZ5pTdeP2nvfqD6d5TnApxOtplb9fEuHDAIgAUfKJwqxEIyLoBzfoNCfegXvaM4zq2mDsPaOWxZ5uS4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1640080},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"200dc56f7e4338b63a51ba550fa1f04a31f36a16","scripts":{"dev":"tsc --watch","test":"node --experimental-strip-types --test tests/*.test.ts","build":"tsc && pnpm build:hooks && pnpm build:dashboard","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"nottyjay","email":"nottyjay@gmail.com"},"repository":{"url":"git+https://github.com/nottyjay/openwolf.git","type":"git"},"_npmVersion":"11.13.0","description":"The second brain for Claude Code, now for every AI coding assistant: context management, architecture scaffolding, and smarter token utilization through lifecycle hooks.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.18.0","open":"^10.0.0","chalk":"^5.3.0","express":"^5.2.1","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^4.2.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"optionalDependencies":{"puppeteer-core":"^24.42.0"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_1.1.0_1786611258142_0.5354363590750333","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@alptech/openwolf","version":"1.1.1","keywords":["claude-code","codex","opencode","agent-memory","context-engineering","observability","context","token","openwolf","developer-tools","ai"],"author":{"url":"original","name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"@alptech/openwolf@1.1.1","maintainers":[{"name":"nottyjay","email":"nottyjay@gmail.com"}],"homepage":"https://github.com/nottyjay/openwolf","bugs":{"url":"https://github.com/nottyjay/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"4feca2913959fcd43f67d97c9487a92b417ca4bc","tarball":"https://registry.npmjs.org/@alptech/openwolf/-/openwolf-1.1.1.tgz","fileCount":224,"integrity":"sha512-+XBOgRkPjQglfqtLeEKUHjISZiVoHMTlMKHk++eMfIJxbCwXF9J9o3kHZiZEHK5bT0bWeE1RF7s54Eyp+b+rIg==","signatures":[{"sig":"MEUCIQCbQRLA0xbWpYbz36ij4SzzEJCNyHWVFEMFfyt6rJjlDQIgQG7fruOEmi+UYhkzXKTJ6ndHrXxOgPggXr1d0LmZvGY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICiZZ/eKJllNxbBfCCpHu70lWRbc+vbUKG72cKu32XbaAiEAjkoVdmcxVet0GoMDhyoyjbxYnqeKR0p98cyjD/yM+VM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2142498},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"6f850cd3bfbb3abec146e79f55afc215026d203b","scripts":{"dev":"tsc --watch","test":"tsx --test tests/*.test.ts","build":"tsc && pnpm build:hooks && pnpm build:dashboard","pretest":"pnpm build","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"nottyjay","email":"nottyjay@gmail.com"},"repository":{"url":"git+https://github.com/nottyjay/openwolf.git","type":"git"},"_npmVersion":"10.8.2","description":"One project memory across Claude Code, Codex and OpenCode. Token usage measured, not estimated. Zero API calls.","directories":{},"_nodeVersion":"20.19.2","dependencies":{"ws":"^8.21.3","open":"^10.0.0","chalk":"^5.3.0","express":"^5.2.1","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^4.2.1","web-tree-sitter":"^0.24.7","tree-sitter-wasms":"^0.1.13"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_1.1.1_1788512449653_0.04628539841036594","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@alptech/openwolf","version":"1.1.2","keywords":["claude-code","codex","opencode","agent-memory","context-engineering","observability","context","token","openwolf","developer-tools","ai"],"author":{"url":"original","name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"@alptech/openwolf@1.1.2","maintainers":[{"name":"nottyjay","email":"nottyjay@gmail.com"}],"homepage":"https://github.com/nottyjay/openwolf","bugs":{"url":"https://github.com/nottyjay/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"c0f6d59419fe4212a829e5958dc145bf57555c6b","tarball":"https://registry.npmjs.org/@alptech/openwolf/-/openwolf-1.1.2.tgz","fileCount":224,"integrity":"sha512-5uDOVa+DcNh3w4MeG4nfmUu0uQtX7ZMI5JMJB50V3/IkFUnW9yPmP253LYKH9i8+5cN+Vq4DKUHNNmz8O1iaEw==","signatures":[{"sig":"MEQCIDNixMOS9ttQQ712yzwbeqT4pfQ7CYIxV9lE8NDrpOvPAiA9dduDz+w9nnsa95aSOVfa+FIxbbG7t55AJuIoeoKn5A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDvWcW+YpmO+axodg7HK+lJ0gRyPuKBUcEH0w6VOrYCrwIhALh5gIluPnKKaw0ryH3I/cXLW6YXiZsgIyAjH+ZRlMpH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2144973},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"b070402862fb7911a396a979bc88b18ba6ea2f85","scripts":{"dev":"tsc --watch","test":"tsx --test tests/*.test.ts","build":"tsc && pnpm build:hooks && pnpm build:dashboard","pretest":"pnpm build","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"nottyjay","email":"nottyjay@gmail.com"},"repository":{"url":"git+https://github.com/nottyjay/openwolf.git","type":"git"},"_npmVersion":"10.8.2","description":"One project memory across Claude Code, Codex and OpenCode. Token usage measured, not estimated. Zero API calls.","directories":{},"_nodeVersion":"20.19.2","dependencies":{"ws":"^8.21.3","open":"^10.0.0","chalk":"^5.3.0","express":"^5.2.1","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^4.2.1","web-tree-sitter":"^0.24.7","tree-sitter-wasms":"^0.1.13"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_1.1.2_1788513850206_0.9350587531076249","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"_id":"@alptech/openwolf@1.1.3","bin":{"openwolf":"dist/bin/openwolf.js"},"bugs":{"url":"https://github.com/nottyjay/openwolf/issues"},"dist":{"shasum":"51d1e5c112d63b22fbe3a566d222a8b5edfa1024","tarball":"https://registry.npmjs.org/@alptech/openwolf/-/openwolf-1.1.3.tgz","fileCount":224,"integrity":"sha512-Vw46mE89sb3a+hZP8KKsW+4QvNNbuEkAZWfp2ZeXF35wMy/5msyrAL/TIvmnrmVdE0fR6se3mDJTNvW5OfWgBw==","signatures":[{"sig":"MEQCIHRwO8eiBkkj9DDA+OMOx6XfTr+L0v/EuweWy+Nrkj6JAiAWRYLo20yhuo9/jQ7IxHRRfE/a3c8tBlEXe4Cyr7IBGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICryqR3obilmtVxJczCzGQVuFl7LBxqu3PGfqc7rI5hwAiEA6vjAmtbB0gGmpI0S4NhC1pH2wcbbxf9wVjhBWJzwmSU="}],"unpackedSize":2189449},"name":"@alptech/openwolf","type":"module","author":{"url":"original","name":"Cytostack Pvt Ltd"},"engines":{"node":">=20.0.0"},"gitHead":"b070402862fb7911a396a979bc88b18ba6ea2f85","license":"AGPL-3.0-only","scripts":{"dev":"tsc --watch","test":"tsx --test tests/*.test.ts","build":"tsc && pnpm build:hooks && pnpm build:dashboard","pretest":"pnpm build","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"version":"1.1.3","_npmUser":{"name":"nottyjay","email":"nottyjay@gmail.com"},"homepage":"https://github.com/nottyjay/openwolf","keywords":["claude-code","codex","opencode","agent-memory","context-engineering","observability","context","token","openwolf","developer-tools","ai"],"repository":{"url":"git+https://github.com/nottyjay/openwolf.git","type":"git"},"_npmVersion":"10.8.2","description":"One project memory across Claude Code, Codex and OpenCode. Token usage measured, not estimated. Zero API calls.","directories":{},"maintainers":[{"name":"nottyjay","email":"nottyjay@gmail.com"}],"_nodeVersion":"20.19.2","dependencies":{"ws":"^8.21.3","open":"^10.0.0","chalk":"^5.3.0","express":"^5.2.1","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^4.2.1","web-tree-sitter":"^0.24.7","tree-sitter-wasms":"^0.1.13"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/openwolf_1.1.3_1788596379123_0.6360834431916527"}}},"time":{"created":"2026-05-20T02:55:18.594Z","modified":"2026-09-05T08:19:39.414Z","1.0.4":"2026-05-20T02:55:18.871Z","1.0.5":"2026-06-09T09:38:57.077Z","1.0.6":"2026-06-24T07:16:17.143Z","1.0.7":"2026-08-12T07:43:39.220Z","1.1.0":"2026-08-13T08:54:18.317Z","1.1.1":"2026-09-04T09:00:49.781Z","1.1.2":"2026-09-04T09:24:10.315Z","1.1.3":"2026-09-05T08:19:39.230Z"},"bugs":{"url":"https://github.com/nottyjay/openwolf/issues"},"author":{"url":"original","name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","homepage":"https://github.com/nottyjay/openwolf","keywords":["claude-code","codex","opencode","agent-memory","context-engineering","observability","context","token","openwolf","developer-tools","ai"],"repository":{"url":"git+https://github.com/nottyjay/openwolf.git","type":"git"},"description":"One project memory across Claude Code, Codex and OpenCode. Token usage measured, not estimated. Zero API calls.","maintainers":[{"name":"nottyjay","email":"nottyjay@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"demo.gif\" alt=\"OpenWolf demo\" width=\"640\" />\n</p>\n\n<h1 align=\"center\">@alptech/openwolf</h1>\n\n<p align=\"center\">\n  <strong>你的 Agent 会换，项目记忆不该跟着重置。</strong>\n</p>\n\n<p align=\"center\">\n  在 Claude Code、Codex 和 OpenCode 之间共享项目记忆，<br />\n  从真实会话记录测量 Token 使用；完全本地，无 API 调用。\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@alptech/openwolf\"><img src=\"https://img.shields.io/npm/v/@alptech/openwolf.svg\" alt=\"npm version\" /></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/License-AGPL--3.0-blue.svg\" alt=\"License: AGPL-3.0\" /></a>\n  <a href=\"https://nodejs.org\"><img src=\"https://img.shields.io/badge/Node.js-20%2B-green.svg\" alt=\"Node.js\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"README.md\">English</a> ·\n  <b>中文</b> ·\n  <a href=\"README.ja.md\">日本語</a> ·\n  <a href=\"README.ru.md\">Русский</a>\n</p>\n\n> **本仓库是 [openwolf](https://github.com/cytostack/openwolf)（[Cytostack](https://github.com/cytostack)）的 fork。** 同步上游业务能力，并保留 `@alptech/openwolf` 包名与项目身份。\n\n---\n\n| 没有 OpenWolf | 有 OpenWolf |\n|---|---|\n| Agent 重复读取已看过的文件（约 2,000 tokens） | 先读一行描述，或直接跳过读取 |\n| 为找一个函数读完整文件 | 符号级提示给出精确行号，支持 `offset`/`limit` |\n| 上下文压缩会丢掉本轮工作 | PreCompact 快照与恢复，压缩后仍可续作 |\n| 每个 Agent 都从冷启动开始 | 共享同一套 `.wolf/` 大脑（Codex / OpenCode / Claude Code / Cursor / Antigravity 等） |\n| 不知道 Token 花在哪里 | 从 harness 转录读取实测用量，并提供本地 Dashboard |\n\n---\n\n## 为什么需要 OpenWolf？\n\n编程 Agent 很强，但默认是“盲操作”：不知道文件内容与体量，会在同一次会话里重复读文件，跨会话忘记你的纠正，上下文压缩后又像失忆。\n\nOpenWolf 通过持久、共享的项目记忆解决这些问题：\n\n- **上下文管理**：会话开始注入预算受限的高价值摘要；PreCompact + 压缩后重启，避免工作进度被抹掉。\n- **架构脚手架**：可自愈的项目索引，含描述、Token 估算，大文件还有函数/类与行号范围。\n- **Token 利用**：拦截重复读取，整文件读变切片读，并从 harness 转录测量真实用量。\n\n## 快速开始\n\n```bash\nnpm install -g @alptech/openwolf\ncd your-project\nopenwolf init\n```\n\n不传 `--agent` 时，`init` 会接入 Claude Code，并自动检测本机安装的其他编程 Agent。传入 `--agent` 时，只接入明确指定的 Agent。\n\n## 支持的 Agent\n\n| Agent | 集成方式 | 深度 |\n|-------|----------|------|\n| **Codex CLI** | `.codex/hooks.json` 生命周期 Hook + `AGENTS.md` | 完整（Hook + 上下文） |\n| **OpenCode** | 原生插件 + `AGENTS.md` | 完整（Hook + 上下文） |\n| **Claude Code** | 12 个生命周期 Hook + `CLAUDE.md` | 完整（Hook + 上下文） |\n| **Cursor** | `.cursor/rules/openwolf.mdc`（始终应用） | Beta（上下文） |\n| **Antigravity** | `AGENTS.md` 协议块 | Beta（上下文） |\n| **Gemini CLI** | `GEMINI.md` 协议块 | Beta（上下文） |\n\n```bash\nopenwolf init                          # Claude + 自动检测其他已安装 Agent（推荐）\nopenwolf init --agent claude           # 仅 Claude Code\nopenwolf init --agent codex            # 仅 Codex\nopenwolf init --agent opencode         # 仅 OpenCode\nopenwolf init --agent gemini           # 仅 Gemini CLI\nopenwolf init --agent cursor           # 仅 Cursor\nopenwolf init --agent antigravity      # 仅 Antigravity\nopenwolf init --agent codex opencode   # 仅 Codex 和 OpenCode\nopenwolf init --agent all              # 全部受支持 Agent\n```\n\n显式参数会严格生效：例如 `--agent codex` 不会创建 Claude、OpenCode、Gemini、Cursor 或 Antigravity 配置。重新执行 `init` 不会删除项目中原本就存在的其他 Agent 文件。\n\n协议块使用 marker 围栏：不会改动你自己写在 `AGENTS.md` / `GEMINI.md` 中的内容，重复执行 `init` 也不会重复插入。\n\n## 会创建什么\n\n`openwolf init` 会在项目中创建 `.wolf/`：\n\n| 文件 | 作用 |\n|------|------|\n| `anatomy-index.json` | 持久化项目索引：描述、Token 估算、内容哈希、符号 |\n| `anatomy.md` | 索引的可读渲染，自动保持同步 |\n| `cerebrum.md` | 学习记忆：偏好、纠正、Do-Not-Repeat |\n| `memory.md` | 按时间顺序的操作日志与 Token 估算 |\n| `STATUS.md` | 会话交接：少量阅读即可恢复进度 |\n| `buglog.json` | Bug 修复记忆，可搜索，避免重复踩坑 |\n| `token-ledger.json` | 估算与实测 Token 用量（按会话/Agent） |\n| `hooks/` | 12 个生命周期 Hook（纯 Node.js，零依赖） |\n| `config.json` | 配置，含各 Agent 上下文预算 |\n| `OPENWOLF.md` | Agent 需遵循的操作协议 |\n\n## 工作原理\n\n```\n会话开始\n    |\nOpenWolf 注入受 Token 预算限制的摘要：当前目标、已知错误、近期修复、项目地图指针\n    |\nAgent 准备读取大文件\n    |\nOpenWolf: \"auth.ts (~2,900 tok)。符号: validateToken L82-140 ~450 tok。\n可用 offset/limit 只读需要的部分。\"\n    |\nAgent 编辑文件\n    |\nOpenWolf 在跨进程锁下更新索引、记录动作、估算成本\n    |\n会话中发生上下文压缩\n    |\nOpenWolf 在压缩前快照，压缩后重新注入已修改文件摘要，避免重复劳动\n    |\n会话结束\n    |\nOpenWolf 从转录中读取真实 Token 用量写入 ledger\n```\n\n## 上下文管理\n\n- **会话摘要**：在可配置的每 Agent Token 预算内注入最高价值状态。\n- **压缩存活**：PreCompact 快照 + 压缩后摘要，续作不再从零开始。\n- **过期检测**：扫描会钉住 git HEAD；HEAD 变动或扫描过期时会提示重扫。\n- **STATUS.md 交接**：阶段结束状态集中在一个小文件，新会话一次读取即可恢复。\n\n## 项目 Anatomy\n\n索引以 `anatomy-index.json` 持久化，并以 `anatomy.md` 可读呈现。写操作通过跨进程锁协调；对手写或旧版 Hook 修改的 markdown，会按内容哈希做增量吸收。\n\n估算超过 500 tokens 的文件还会索引顶层符号：\n\n```\n- `shared.ts` (~3,200 tok)\n  - fn `parseAnatomy` L82-104 (~180 tok)\n  - fn `serializeAnatomy` L106-129 (~200 tok)\n```\n\n当前支持符号提取的语言：TypeScript、JavaScript、Python、Go、Rust。\n\n## Token 智能\n\n估算有用，测量更可信。会话结束时 OpenWolf 从 harness 转录读取真实用量：input / output / cache read / cache write / API 调用次数，并归属到对应 Agent。\n\n```bash\nopenwolf report\n```\n\n1.x 实战数据（20 个项目、132+ 会话）平均估算节省约 65.8% Token，71% 的重复读被拦截。2.x 起可用实测数据在你自己的工作负载上验证。\n\n## 安全\n\n- Dashboard 仅绑定 `127.0.0.1`，API/WebSocket 使用每项目 token（时序安全比较）\n- 动态进程调用一律参数数组，无 shell 拼接\n- Cron 文件访问有路径穿越防护（realpath，符号链接安全）\n- 密钥类文件（keys、keystore、credential、`.npmrc`、`.env` 等）不进入索引与 memory\n- `pnpm test` 包含安全回归套件\n\n## 内置 Skills\n\n`openwolf init` 会为已配置 Agent（Claude Code、Codex、OpenCode）安装：\n\n- **`/handoff`**：根据 Git、操作日志与未完成事项重新生成 `STATUS.md`\n- **`/security-audit [scope]`**：依赖、密钥、注入面、鉴权等分层审计，结果写入 `.wolf/buglog.json`\n- **`/reframe [migrate | audit | fix]`**：UI 框架选型/迁移与反“AI 味”设计审计（含 13 个框架知识库）\n\n## Dashboard\n\n```bash\nopenwolf daemon start\nopenwolf dashboard\n```\n\n本地、需 token 认证的控制台：估算 vs 实测 Token、缓存经济、按 Agent 用量、上下文健康、会话交接、实时活动、cron 控制、带符号的 anatomy 浏览器。\n\n## 命令\n\n```\nopenwolf init              初始化 .wolf/ 并接入检测到的 Agent\nopenwolf status            健康状态、统计、文件完整性\nopenwolf scan              重建项目索引\nopenwolf scan --check      校验索引是否与文件系统一致（适合 CI）\nopenwolf report            Token 报告：估算 vs 实测\nopenwolf bench             对照测试启用/禁用 OpenWolf 的真实成本与完成率\nopenwolf map               按重要性生成有 Token 预算的项目概览\nopenwolf find <query>      从 anatomy 索引定位文件或符号\nopenwolf dashboard         打开 Web Dashboard\nopenwolf daemon start      启动后台 daemon\nopenwolf daemon stop       停止 daemon\nopenwolf cron list         查看定时任务\nopenwolf cron run <id>     手动触发任务\nopenwolf bug search <term> 搜索 bug 记忆\nopenwolf update            更新所有已注册项目（带备份）\nopenwolf restore [backup]  从时间戳备份回滚 .wolf/\n```\n\n也可使用无需安装的只读检查脚本：\n\n```bash\nnode scripts/openwolf-check.mjs [projectDir]\n```\n\n## 环境要求\n\n- Node.js 20+\n- 至少一个受支持的编程 Agent\n- Windows / macOS / Linux\n- 可选：PM2（持久化后台 daemon）\n\n## 局限\n\n- 估算基于字符比启发式（大约 ±15%）；实测来自 harness 转录，更精确\n- 不同 Agent 的 Hook 覆盖不同：Claude Code / Codex 完整，OpenCode 走插件事件，Gemini / Cursor 主要为上下文级\n- cerebrum / buglog 的协议遵从仍依赖模型执行指令；Hook 负责可强制的部分\n- 发现问题请提交：[Issues](https://github.com/nottyjay/openwolf/issues)\n\n## 致谢\n\n本项目基于 **[OpenWolf](https://github.com/cytostack/openwolf)** 原项目，作者为\n[Cytostack](https://github.com/cytostack) / Farhan Palathinkal Afsal。\n感谢上游作者与贡献者提供的架构、Hook 体系与持续改进。本 fork 同步上游业务功能，并以 `@alptech/openwolf` 发布。\n\n上游仓库：https://github.com/cytostack/openwolf\n\n## 许可证\n\n[AGPL-3.0](LICENSE)\n\n## 作者\n\n原项目作者：Farhan Palathinkal Afsal — [Cytostack](https://github.com/cytostack)。  \n本 fork 维护方：`@alptech/openwolf` — [alptech](https://github.com/nottyjay) / [@nottyjay](https://github.com/nottyjay)。\n","readmeFilename":"README.zh-CN.md"}