{"_id":"@bothat-io/molenkopf","_rev":"5-fb03fa155ebc2071e0dc00f3bfb3a64f","name":"@bothat-io/molenkopf","dist-tags":{"latest":"0.2.3"},"versions":{"0.1.2":{"name":"@bothat-io/molenkopf","version":"0.1.2","keywords":["molenkopf","local-ai-gateway","coding-agents","proxy","redaction","audit"],"author":{"name":"Molenkopf contributors"},"license":"MIT","_id":"@bothat-io/molenkopf@0.1.2","maintainers":[{"name":"w3hr","email":"oberheuser@gmail.com"}],"homepage":"https://github.com/bothat-io/molenkopf#readme","bugs":{"url":"https://github.com/bothat-io/molenkopf/issues"},"bin":{"molenkopf":"bin/molenkopf.js"},"dist":{"shasum":"361acb7b9eca0e4d39867c391c36f2053a9c873e","tarball":"https://registry.npmjs.org/@bothat-io/molenkopf/-/molenkopf-0.1.2.tgz","fileCount":147,"integrity":"sha512-to6KfZwFvHk13oVzxG9ZudTIA6PJP8H10qSDXwTH4h8d3IRsHNOVAt0RuUFDgvpFYr6krzQi/9r2/zPn03IM+w==","signatures":[{"sig":"MEYCIQDxnJVsNwe+CQGQ4ayMYePFM6ownuclRFuFRQ8qGRSwpgIhAP4xWDX/+lRQdlkYAoqDiWuxi5XMz3H+1Rp+xYi8PhCF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1058542},"type":"module","engines":{"node":">=24"},"gitHead":"73269c4149a0036441e6bfeb0b0122fb68e881ea","private":false,"scripts":{"dev":"npm run serve:dev","e2e":"npm --prefix packages/dashboard run e2e","prod":"npm run serve:prod","test":"npm run test:unit","vitest":"npm --prefix packages/dashboard run test","prepack":"npm --prefix packages/dashboard run build && npm run check:package","pack:dry":"npm pack --dry-run","test:all":"npm run test:unit && npm run e2e","bootstrap":"npm ci && npm --prefix packages/dashboard ci","serve:dev":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts dev","test:node":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning --import ./packages/proxy/test/setup.ts --test --test-concurrency=1 packages/core/test/*.test.ts packages/proxy/test/*.test.ts packages/dashboard/test/*.test.ts","test:unit":"npm run check:docs && npm run check:dashboard-install && npm run check:reachability && npm run check:source-completeness && npm run check:container-contract && npm run check:line-limits && npm run typecheck && npm --prefix packages/dashboard run build && npm run check:package && npm run test:scripts && npm run test:launcher && npm run vitest && npm run test:node","typecheck":"npm run typecheck:node && npm --prefix packages/dashboard run typecheck","check:docs":"node scripts/check-doc-paths.js","serve:prod":"npm --prefix packages/dashboard run build && node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts prod","serve:test":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts test","smoke:docker":"node scripts/smoke-docker.js","test:scripts":"node --test scripts/*.test.js","check:package":"node scripts/check-package-contents.js","test:launcher":"node --test test/*.test.js","release:verify":"npm run test:unit && npm run e2e && npm run smoke:installed && npm run smoke:docker","typecheck:node":"tsc -p tsconfig.node.json","smoke:installed":"node scripts/smoke-installed-package.js","check:line-limits":"node scripts/check-line-limits.js","release:npm:check":"node scripts/check-npm-release.js","check:reachability":"node scripts/check-reachability.js","check:dashboard-install":"node scripts/check-dashboard-install.js","check:container-contract":"node scripts/check-container-contract.js","check:source-completeness":"node scripts/check-source-completeness.js"},"_npmUser":{"name":"w3hr","email":"oberheuser@gmail.com"},"repository":{"url":"git+https://github.com/bothat-io/molenkopf.git","type":"git"},"_npmVersion":"11.13.0","description":"Local gateway for API and CLI based coding agents with routing, redaction, compression, memory, audit, and dashboard controls.","directories":{"doc":"docs"},"_nodeVersion":"24.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/molenkopf_0.1.2_1782573924010_0.41807764883322185","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@bothat-io/molenkopf","version":"0.1.5","keywords":["molenkopf","local-ai-gateway","coding-agents","proxy","redaction","audit"],"author":{"name":"Molenkopf contributors"},"license":"MIT","_id":"@bothat-io/molenkopf@0.1.5","maintainers":[{"name":"w3hr","email":"oberheuser@gmail.com"}],"homepage":"https://github.com/bothat-io/molenkopf#readme","bugs":{"url":"https://github.com/bothat-io/molenkopf/issues"},"bin":{"molenkopf":"bin/molenkopf.js"},"dist":{"shasum":"bd1b0efdb67189c07a2be63f4004618d69168f71","tarball":"https://registry.npmjs.org/@bothat-io/molenkopf/-/molenkopf-0.1.5.tgz","fileCount":206,"integrity":"sha512-tw6f/MvH4nR9/WyEHiYabnHAeep8vHujZj8RR3/OeYnFQ4zgrPDzjzD7FMFdQ3AWPFbJnwdoIcfVA8bk+zsBuA==","signatures":[{"sig":"MEUCIQCMYpYSS05eFjv7nWOkful6tP+dBpWe9LAJGzZ+K2a8eAIgZA2jVy1WiPoZ8oJOji44Z76ec42/6WCMELyYTnQIswY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1452110},"type":"module","engines":{"node":">=24"},"private":false,"scripts":{"dev":"npm run serve:dev","e2e":"npm --prefix packages/dashboard run e2e","prod":"npm run serve:prod","test":"npm run test:unit","vitest":"npm --prefix packages/dashboard run test","prepack":"npm --prefix packages/dashboard run build && npm run check:package","pack:dry":"npm pack --dry-run","test:all":"npm run test:unit && npm run e2e","bootstrap":"npm ci && npm --prefix packages/dashboard ci","serve:dev":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts dev","test:node":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning --import ./packages/proxy/test/setup.ts --test --test-concurrency=1 packages/core/test/*.test.ts packages/proxy/test/*.test.ts packages/dashboard/test/*.test.ts","test:unit":"npm run check:docs && npm run check:dashboard-install && npm run check:reachability && npm run check:source-completeness && npm run check:container-contract && npm run check:line-limits && npm run typecheck && npm --prefix packages/dashboard run build && npm run check:package && npm run test:scripts && npm run test:launcher && npm run vitest && npm run test:node","typecheck":"npm run typecheck:node && npm --prefix packages/dashboard run typecheck","check:docs":"node scripts/check-doc-paths.js","serve:prod":"npm --prefix packages/dashboard run build && node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts prod","serve:test":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts test","smoke:docker":"node scripts/smoke-docker.js","test:scripts":"node --test scripts/*.test.js","check:package":"node scripts/check-package-contents.js","test:launcher":"node --test test/*.test.js","release:verify":"npm run test:unit && npm run e2e && npm run smoke:installed && npm run smoke:docker","typecheck:node":"tsc -p tsconfig.node.json","smoke:installed":"node scripts/smoke-installed-package.js","check:line-limits":"node scripts/check-line-limits.js","dev:ignorechanges":"npm run serve:dev:ignorechanges","release:npm:check":"node scripts/check-npm-release.js","check:reachability":"node scripts/check-reachability.js","release:npm:publish":"node scripts/publish-npm-release.js","check:dashboard-install":"node scripts/check-dashboard-install.js","serve:dev:ignorechanges":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts dev --no-watch","check:container-contract":"node scripts/check-container-contract.js","check:source-completeness":"node scripts/check-source-completeness.js"},"_npmUser":{"name":"w3hr","email":"oberheuser@gmail.com"},"repository":{"url":"git+https://github.com/bothat-io/molenkopf.git","type":"git"},"_npmVersion":"11.13.0","description":"Local gateway for API and CLI based coding agents with routing, redaction, compression, memory, audit, and dashboard controls.","directories":{"doc":"docs"},"_nodeVersion":"24.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/molenkopf_0.1.5_1782690007687_0.36307667826739665","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bothat-io/molenkopf","version":"0.2.0","keywords":["molenkopf","local-ai-gateway","coding-agents","proxy","redaction","audit"],"author":{"name":"Molenkopf contributors"},"license":"MIT","_id":"@bothat-io/molenkopf@0.2.0","maintainers":[{"name":"w3hr","email":"oberheuser@gmail.com"}],"homepage":"https://github.com/bothat-io/molenkopf#readme","bugs":{"url":"https://github.com/bothat-io/molenkopf/issues"},"bin":{"molenkopf":"bin/molenkopf.js"},"dist":{"shasum":"f649eb8da34d9eb237519e13f9542396f370fd44","tarball":"https://registry.npmjs.org/@bothat-io/molenkopf/-/molenkopf-0.2.0.tgz","fileCount":235,"integrity":"sha512-RiqOKX5FarfuUqVkNnF0vpYTJ8FXyH2S+iWM2+YCNPQBkkBoZmj4KMtuJSOAb3Jg7dxFhgrPtPP+dO81BiwlsA==","signatures":[{"sig":"MEUCIBtiI7iRSxdHm3a1AelQX5FyY71LHFRV/vij3atvjWfPAiEA+qIDAsHIkM0Eupl4t8ZII8kDXly5mVoZ2pckHk6NuQs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1574439},"type":"module","engines":{"node":">=24"},"private":false,"scripts":{"dev":"npm run serve:dev","e2e":"npm --prefix packages/dashboard run e2e","prod":"npm run serve:prod","test":"npm run test:unit","vitest":"npm --prefix packages/dashboard run test","prepack":"npm --prefix packages/dashboard run build && npm run check:package","pack:dry":"npm pack --dry-run","test:all":"npm run test:unit && npm run e2e","bootstrap":"npm ci && npm --prefix packages/dashboard ci","serve:dev":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts dev","test:node":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning --import ./packages/proxy/test/setup.ts --test --test-concurrency=1 packages/core/test/*.test.ts packages/proxy/test/*.test.ts packages/dashboard/test/*.test.ts","test:unit":"npm run check:docs && npm run check:dashboard-install && npm run check:reachability && npm run check:source-completeness && npm run check:sensitive-workspace && npm run check:container-contract && npm run check:line-limits && npm run typecheck && npm --prefix packages/dashboard run build && npm run check:package && npm run test:scripts && npm run test:launcher && npm run vitest && npm run test:node","typecheck":"npm run typecheck:node && npm --prefix packages/dashboard run typecheck","check:docs":"node scripts/check-doc-paths.js","serve:prod":"npm --prefix packages/dashboard run build && node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts prod","serve:test":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts test","smoke:docker":"node scripts/smoke-docker.js","test:scripts":"node --test scripts/*.test.js","check:package":"node scripts/check-package-contents.js","test:launcher":"node --test test/*.test.js","release:verify":"npm run test:unit && npm run e2e && npm run smoke:installed && npm run smoke:docker","typecheck:node":"tsc -p tsconfig.node.json","smoke:installed":"node scripts/smoke-installed-package.js","check:line-limits":"node scripts/check-line-limits.js","dev:ignorechanges":"npm run serve:dev:ignorechanges","release:npm:check":"node scripts/check-npm-release.js","check:reachability":"node scripts/check-reachability.js","release:npm:publish":"node scripts/publish-npm-release.js","check:dashboard-install":"node scripts/check-dashboard-install.js","serve:dev:ignorechanges":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts dev --no-watch","check:container-contract":"node scripts/check-container-contract.js","check:sensitive-workspace":"node scripts/check-sensitive-workspace.js","check:source-completeness":"node scripts/check-source-completeness.js"},"_npmUser":{"name":"w3hr","email":"oberheuser@gmail.com"},"repository":{"url":"git+https://github.com/bothat-io/molenkopf.git","type":"git"},"_npmVersion":"11.13.0","description":"Local gateway for API and CLI based coding agents with routing, redaction, compression, memory, audit, and dashboard controls.","directories":{"doc":"docs"},"_nodeVersion":"24.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/molenkopf_0.2.0_1782845903498_0.8523896891387572","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@bothat-io/molenkopf","version":"0.2.1","keywords":["molenkopf","local-ai-gateway","coding-agents","proxy","redaction","audit"],"author":{"name":"Molenkopf contributors"},"license":"MIT","_id":"@bothat-io/molenkopf@0.2.1","maintainers":[{"name":"w3hr","email":"oberheuser@gmail.com"}],"homepage":"https://github.com/bothat-io/molenkopf#readme","bugs":{"url":"https://github.com/bothat-io/molenkopf/issues"},"bin":{"molenkopf":"bin/molenkopf.js"},"dist":{"shasum":"4f97f473c8d75375f18097bb18bcedc18f0639c5","tarball":"https://registry.npmjs.org/@bothat-io/molenkopf/-/molenkopf-0.2.1.tgz","fileCount":235,"integrity":"sha512-AsF8Xta6QEViG887SrQDhrjRWloFe61beqEmKMGr0kUjqUykBfDkyEZFQGEXK6Pu5ymrPkHPC3CvV5up+UmWEg==","signatures":[{"sig":"MEYCIQDbxSiagkfJudEGXi9zSrtU2QZV9FuqKpMrOzfKeBcUqQIhAIWmuz6c2EifcTign5XGEnrUKIcYAo/RBAZyPOqLW2XE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1576524},"type":"module","engines":{"node":">=24"},"private":false,"scripts":{"dev":"npm run serve:dev","e2e":"npm --prefix packages/dashboard run e2e","prod":"npm run serve:prod","test":"npm run test:unit","vitest":"npm --prefix packages/dashboard run test","prepack":"npm --prefix packages/dashboard run build && npm run check:package","pack:dry":"npm pack --dry-run","test:all":"npm run test:unit && npm run e2e","bootstrap":"npm ci && npm --prefix packages/dashboard ci","serve:dev":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts dev","test:node":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning --import ./packages/proxy/test/setup.ts --test --test-concurrency=1 packages/core/test/*.test.ts packages/proxy/test/*.test.ts packages/dashboard/test/*.test.ts","test:unit":"npm run check:docs && npm run check:dashboard-install && npm run check:reachability && npm run check:source-completeness && npm run check:sensitive-workspace && npm run check:container-contract && npm run check:line-limits && npm run typecheck && npm --prefix packages/dashboard run build && npm run check:package && npm run test:scripts && npm run test:launcher && npm run vitest && npm run test:node","typecheck":"npm run typecheck:node && npm --prefix packages/dashboard run typecheck","check:docs":"node scripts/check-doc-paths.js","serve:prod":"npm --prefix packages/dashboard run build && node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts prod","serve:test":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts test","smoke:docker":"node scripts/smoke-docker.js","test:scripts":"node --test scripts/*.test.js","check:package":"node scripts/check-package-contents.js","test:launcher":"node --test test/*.test.js","release:verify":"npm run test:unit && npm run e2e && npm run smoke:installed && npm run smoke:docker","typecheck:node":"tsc -p tsconfig.node.json","smoke:installed":"node scripts/smoke-installed-package.js","check:line-limits":"node scripts/check-line-limits.js","dev:ignorechanges":"npm run serve:dev:ignorechanges","release:npm:check":"node scripts/check-npm-release.js","check:reachability":"node scripts/check-reachability.js","release:npm:publish":"node scripts/publish-npm-release.js","check:dashboard-install":"node scripts/check-dashboard-install.js","serve:dev:ignorechanges":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts dev --no-watch","check:container-contract":"node scripts/check-container-contract.js","check:sensitive-workspace":"node scripts/check-sensitive-workspace.js","check:source-completeness":"node scripts/check-source-completeness.js"},"_npmUser":{"name":"w3hr","email":"oberheuser@gmail.com"},"repository":{"url":"git+https://github.com/bothat-io/molenkopf.git","type":"git"},"_npmVersion":"11.13.0","description":"Local gateway for API and CLI based coding agents with routing, redaction, compression, memory, audit, and dashboard controls.","directories":{"doc":"docs"},"_nodeVersion":"24.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/molenkopf_0.2.1_1783028327368_0.7639785490191153","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@bothat-io/molenkopf","version":"0.2.3","description":"Local gateway for API and CLI based coding agents with routing, redaction, compression, memory, audit, and dashboard controls.","author":{"name":"Molenkopf contributors"},"license":"MIT","private":false,"type":"module","bin":{"molenkopf":"bin/molenkopf.js"},"engines":{"node":">=24"},"repository":{"type":"git","url":"git+https://github.com/bothat-io/molenkopf.git"},"bugs":{"url":"https://github.com/bothat-io/molenkopf/issues"},"homepage":"https://github.com/bothat-io/molenkopf#readme","keywords":["molenkopf","local-ai-gateway","coding-agents","proxy","redaction","audit"],"publishConfig":{"access":"public"},"scripts":{"bootstrap":"node scripts/bootstrap.js","bootstrap:e2e":"node scripts/bootstrap.js --with-cypress","typecheck":"npm run typecheck:node && npm --prefix packages/dashboard run typecheck","typecheck:node":"tsc -p tsconfig.node.json","test":"npm run test:unit","test:unit":"npm run check:docs && npm run check:dashboard-install && npm run check:reachability && npm run check:source-completeness && npm run check:sensitive-workspace && npm run check:container-contract && npm run check:line-limits && npm run typecheck && npm --prefix packages/dashboard run build && npm run check:package && npm run test:scripts && npm run test:launcher && npm run vitest && npm run test:node","check:docs":"node scripts/check-doc-paths.js","check:dashboard-install":"node scripts/check-dashboard-install.js","check:reachability":"node scripts/check-reachability.js","check:source-completeness":"node scripts/check-source-completeness.js","check:sensitive-workspace":"node scripts/check-sensitive-workspace.js","check:container-contract":"node scripts/check-container-contract.js","check:package":"node scripts/check-package-contents.js","check:line-limits":"node scripts/check-line-limits.js","test:scripts":"node --test scripts/*.test.js","test:launcher":"node --test test/*.test.js","test:node":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning --import ./packages/proxy/test/setup.ts --test --test-concurrency=1 packages/core/test/*.test.ts packages/proxy/test/*.test.ts packages/dashboard/test/*.test.ts","test:all":"npm run test:unit && npm run e2e","vitest":"npm --prefix packages/dashboard run test","e2e":"npm --prefix packages/dashboard run e2e","prepack":"npm --prefix packages/dashboard run build && npm run check:package","pack:dry":"npm pack --dry-run","smoke:installed":"node scripts/smoke-installed-package.js","smoke:docker":"node scripts/smoke-docker.js","release:npm:check":"node scripts/check-npm-release.js","release:npm:publish":"node scripts/publish-npm-release.js","release:verify":"npm run test:unit && npm run e2e && npm run smoke:installed && npm run smoke:docker","serve:dev":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts dev","serve:dev:ignorechanges":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts dev --no-watch","serve:test":"node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts test","serve:prod":"npm --prefix packages/dashboard run build && node --experimental-strip-types --experimental-sqlite --disable-warning=ExperimentalWarning packages/proxy/src/cli/profile-server.ts prod","dev":"npm run serve:dev","dev:ignorechanges":"npm run serve:dev:ignorechanges","prod":"npm run serve:prod"},"directories":{"doc":"docs"},"devDependencies":{"@types/node":"^24.0.0","typescript":"^5.9.0"},"_id":"@bothat-io/molenkopf@0.2.3","_nodeVersion":"24.17.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-CpjebFsXymOhpMbHGI4OhEgw0A/K/F+hAwkHsWssP+E965qGVT+MsohMRjfTbIYodvR/RQLl+mkUNOEK34EpgA==","shasum":"1b5037419e103286aee14ce8e87869fefc0b91b1","tarball":"https://registry.npmjs.org/@bothat-io/molenkopf/-/molenkopf-0.2.3.tgz","fileCount":302,"unpackedSize":1750683,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCpZKSk1u2LxLQPkaRS4s2iilQLhibE3woXgeLuz6jikQIhAIi2C0PwiqgbEj78sOZZwi2tERVaRpocQR6lD5FrduoQ"}]},"_npmUser":{"name":"w3hr","email":"oberheuser@gmail.com"},"maintainers":[{"name":"w3hr","email":"oberheuser@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/molenkopf_0.2.3_1783090184155_0.1278562311814877"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-27T15:25:23.903Z","modified":"2026-07-03T14:49:44.440Z","0.1.2":"2026-06-27T15:25:24.157Z","0.1.5":"2026-06-28T23:40:07.868Z","0.2.0":"2026-06-30T18:58:23.719Z","0.2.1":"2026-07-02T21:38:47.564Z","0.2.3":"2026-07-03T14:49:44.310Z"},"bugs":{"url":"https://github.com/bothat-io/molenkopf/issues"},"author":{"name":"Molenkopf contributors"},"license":"MIT","homepage":"https://github.com/bothat-io/molenkopf#readme","keywords":["molenkopf","local-ai-gateway","coding-agents","proxy","redaction","audit"],"repository":{"type":"git","url":"git+https://github.com/bothat-io/molenkopf.git"},"description":"Local gateway for API and CLI based coding agents with routing, redaction, compression, memory, audit, and dashboard controls.","maintainers":[{"name":"w3hr","email":"oberheuser@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"packages/dashboard/public/molenkopf-logo.png\" alt=\"Molenkopf logo\" width=\"72\">\n</p>\n\n<h1 align=\"center\">Molenkopf</h1>\n\n<p align=\"center\">\n  <strong>Local control plane for coding-agent traffic.</strong>\n</p>\n\nMolenkopf is an unofficial local/self-hosted gateway. It is not affiliated with,\nendorsed by, or sponsored by Anthropic or OpenAI.\n\nMolenkopf sits between coding agents and provider or runtime backends. It proxies\nOpenAI-compatible and Anthropic/Claude API traffic, can bridge local Claude CLI\nand Codex CLI runtimes, and gives teams local keys, routing, usage, budgets,\nredaction, audit manifests, and dashboard controls.\n\nThe core safety pipeline is fixed: secret redaction, content classification,\naudit manifests, and redacted SSE events are always owned by Molenkopf. Optional\nplugins extend the pipeline; they do not replace core safety behavior.\n\nProduct intent and non-negotiable plugin semantics live in\n`docs/PRODUCT_INTENT.md` and `docs/MOLENKOPF_PLUGIN_API.md`.\n\n## Quickstart\n\n### npm package\n\nRequires Node.js 24 or newer.\n\n```bash\nnpm install -g @bothat-io/molenkopf\nnode -e \"require('node:fs').writeFileSync('.env','MOLENKOPF_SESSION_SECRET='+require('node:crypto').randomBytes(32).toString('hex')+'\\n')\"\nmolenkopf proxy\n```\n\n### Docker\n\n```bash\nnode -e \"require('node:fs').writeFileSync('.env','MOLENKOPF_SESSION_SECRET='+require('node:crypto').randomBytes(32).toString('hex')+'\\n')\"\ndocker run --rm --env-file .env -p 127.0.0.1:8787:8787 -v molenkopf-data:/data ghcr.io/bothat-io/molenkopf:latest\n```\n\n### Source checkout\n\n```bash\nnpm run bootstrap\nexport MOLENKOPF_SESSION_SECRET=\"$(node -e \"process.stdout.write(require('node:crypto').randomBytes(32).toString('hex'))\")\"\nnpm run dev\n```\n\nOpen `http://127.0.0.1:8787/` after startup.\nFor source hygiene checks, keep private env files outside the repository or\nexport variables in your shell. A root `.env` is local runtime state and makes\n`check:sensitive-workspace` fail by design.\n\nUse `docs/DEPLOYMENT.md` when you need a different port or non-loopback access.\n\n## Screenshot\n\n![Molenkopf dashboard overview](docs/assets/dashboard-overview.png)\n\n## Safety Notice\n\nDo not run Molenkopf blindly with real provider accounts, private repositories,\nor browser sessions. Review `SECURITY.md` first,\nkeep source runs on the default loopback bind, and treat `.molenkopf/`, audit\nfiles, retrieval stores, databases, env files, and local credential stores as\nsensitive local state.\n\n## Implemented Baseline\n\nBuilt now:\n\n- Local HTTP proxy bound to `127.0.0.1` by default.\n- Transparent streaming gateway for OpenAI- and Anthropic-compatible traffic via\n  base-URL interception (`OPENAI_BASE_URL` / `ANTHROPIC_BASE_URL`). Responses\n  are streamed through byte-for-byte where possible (SSE, gzip, headers\n  preserved); the agent runs normally and its context stream flows through\n  Molenkopf.\n- Transparent by default: the request body is never altered unless\n  `context-reducer-plugin` is explicitly enabled. Provider-input reduction is\n  opt-in and only the reducer may mutate request bodies.\n- Per-agent multi-account routing: each agent (`x-molenkopf-agent`) routes to its bound provider/account; config `profiles`/`agents` resolve to providers.\n- Real token accounting: upstream `usage` is read from the provider response and recorded as\n  real input/output tokens (not only a chars/4 estimate).\n- `project-memory-plugin`: builds a deterministic local project memory index and\n  optional Obsidian export without mutating provider requests.\n- Static pipeline with request IDs, redaction, classification, optional reducer\n  mutation, audit, SSE events, and upstream routing.\n- Local API under `/__molenkopf/*`: bootstrap endpoints for health, session\n  status, and first-run admin creation, user-scoped usage/key endpoints, and admin-only\n  provider/plugin/agent/stats/events/config metadata plus retention purge.\n- Dashboard shell served at `/__molenkopf/dashboard` with Overview and Admin\n  views backed by an isolated React/Vite dashboard package. Dedicated Providers,\n  Plugins, Requests, Audit, Agents, and Settings views are planned.\n- Plugin pages are local HTML surfaces under `/__molenkopf/plugins/:id/page`;\n  context reducer, token optimizer, and project memory pages read scoped plugin\n  data endpoints and show explicit load errors instead of fake empty workspaces.\n- The context reducer plugin owns provider-input token reduction. Token optimizer\n  is observer-only and reports reducer evidence; project memory indexes local\n  project structure without request mutation.\n- Practical dashboard and proxy connection guide: `docs/MOLENKOPF_USAGE.md`.\n- JSON config startup target for providers, agents, and plugin policies:\n  `docs/MOLENKOPF_JSON_CONFIG_PLAN.md`.\n- Multi-provider env setup: `docs/MOLENKOPF_PROVIDER_ENV.md`.\n- Root `/` redirects to the local dashboard; upstream API traffic stays on `/v1/...`.\n- Claude/Anthropic-compatible target resolution through `ANTHROPIC_BASE_URL`; Molenkopf-owned CLI runtime bridging exists for local `claude` and `codex` child processes.\n- Profile routing primitives for fixed, manual, and failover routing with env credentials, budgets, and health summaries.\n- Local plugin SDK with explicit permissions and remote plugin loading disabled.\n- CI mode primitives for PR context packing and audit artifacts.\n\nExplicitly not connected:\n\n- Remote issue-tracker integration.\n- Remote plugin installation.\n- Login with provider consumer accounts, provider account-session brokering,\n  subscription quota pooling, or subscription quota redistribution.\n- Credential-file scanning, config-file credential storage, Claude/Codex auth\n  file import, or copied provider session storage.\n\n## Security Model\n\nCore and proxy use Node.js built-ins only. Molenkopf API keys are stored as hashes, and Local API responses hide provider credentials. Molenkopf stores BYO API keys/env refs/gateway credentials, not provider account sessions. Local Claude CLI and Codex CLI runtimes authenticate locally through their installed clients. Proxy traffic on `/v1/...` requires a valid Molenkopf API key. The default upstream route can forward incoming auth headers only when the selected profile requires it; configured provider profiles strip incoming client auth and inject the server-side credential at the forwarding boundary. Prompts and responses are not logged in full. Source code and diffs pass through in safe mode.\n\nBefore the first admin exists, only health, session status, and browser first-run\nadmin creation are usable. After setup, Local API metadata is role-gated: normal\nusers get scoped usage and key data, while provider, plugin, agent, routing,\nstats, events, and retention endpoints are admin-only.\n\nUse `--allow-public-bind` only when you intentionally want to bind outside\nlocalhost. If Docker is published publicly before an admin exists, the first-run\nscreen is reachable there until the first admin is created.\n\n## Control Plane Usage\n\nRoot `/` opens the dashboard at `/__molenkopf/dashboard`; upstream agent traffic\nstays on `/v1/...` and requires a Molenkopf API key.\n\n`x-molenkopf-agent` is optional local request metadata. It may select an\nexplicit agent binding only when that binding is already allowed for the\nauthenticated key, team, and provider policy; otherwise the request fails\nclosed.\n\nManual provider switching happens in the Admin provider section or by posting `{ \"id\": \"openai-env\" }` to `/__molenkopf/providers/select`. Explicit provider profiles, API-key scopes, team allowlists, and routing mode are enforced before forwarding; manual selection remains the default route when no explicit profile is attached.\n\nMultiple provider profiles can be declared with `molenkopf.config.json` or\n`MOLENKOPF_PROVIDER_IDS`. JSON profiles must reference credentials with\n`auth.credentialRef` such as `env:OPENAI_API_KEY`; inline credentials are\nrejected in file config. Local API responses hide credential values and show\nonly `credentialRef` plus configured state. Selected configured profiles inject\ntheir credential at the forwarding boundary.\n\nUsers, teams, projects, and Molenkopf API keys are managed in the Dashboard.\nOverview is the signed-in user's status, usage, teams, members, and project-key\nsurface. Admin contains provider, plugin, user, team, and system controls.\nProjects are required key/workload labels; teams carry provider policy and usage\nscope. See `docs/MOLENKOPF_USAGE.md` for the workflow and Local API endpoints.\n\nPlugin toggles happen in the Admin plugin section or by posting `{ \"id\": \"context-reducer-plugin\", \"enabled\": true }` to `/__molenkopf/plugins/toggle`. Plugins are optional extensions; core safety, storage, audit, event, and routing code is not exposed as plugins and cannot be disabled through plugin controls. Remote plugin loading is disabled.\n\nAgent drafts are stored as local proxy metadata through `/__molenkopf/agents/draft`; raw token fields are rejected and only `tokenHash` is accepted. The dashboard keeps a `localStorage` fallback if the local API is unavailable. These drafts are routing metadata, not provider credentials.\n\nPlugin pages open in standalone windows from `/__molenkopf/plugins/context-reducer-plugin/page`, `/__molenkopf/plugins/token-optimizer-plugin/page`, and `/__molenkopf/plugins/project-memory-plugin/page`. Plugin pages group by project/key where available and surface plugin-data failures explicitly.\n\n## Limitations\n\nProvider token accounting uses upstream `usage` when present and falls back to bounded estimates for local reducer pressure. JSON summaries are readable summaries, not guaranteed valid JSON. v0.1 does not retry provider failures automatically and request-side reduction remains opt-in.\n\nBe careful with secrets and private repositories. Molenkopf reduces accidental\nexposure, but local retrieval stores still contain bounded redacted excerpts.\nThey do not support full-original recovery and should be treated as sensitive\nlocal artifacts.\n\n## License\n\nMIT License. Copyright (c) 2026 bothat.io and Molenkopf contributors.\n","readmeFilename":"README.md"}