{"_id":"@drakonkat/ai-helper","_rev":"17-684435da2ed65e51fc183ee4d6a9bdf6","name":"@drakonkat/ai-helper","dist-tags":{"latest":"1.2.14"},"versions":{"1.0.0":{"name":"@drakonkat/ai-helper","version":"1.0.0","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","mcp","npx","service-manager","dashboard","developer-tools"],"author":{"name":"Mauro"},"license":"MIT","_id":"@drakonkat/ai-helper@1.0.0","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"dist":{"shasum":"ef096de2bc84a47c596cd47ba518b7f6df3948bc","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.0.0.tgz","fileCount":12,"integrity":"sha512-SWrz7cThHEBmQPV/deTnfjgccYKi5biv0ny2cRqDoRJngYOBAHWVZ7FRrWLIJUMbfDmNJ/EXML/b9w5cY/pXQA==","signatures":[{"sig":"MEUCIAMz8XubCVRpydXc8tuPA9ebyv4Vcbv/GzDR/j4gq5s4AiEAkYTADtSNogIVb5vvwrsQDZxNn3kwV+yx0DZyI74a95w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56816},"main":"src/index.js","type":"module","module":"src/index.js","engines":{"node":">=18.0.0"},"scripts":{"dev":"node ./bin/cli.js","test":"bun test","build":"bun build --compile --minify --outfile dist/aih.exe src/index.js","start":"node ./bin/cli.js","install-bin":"bun run scripts/install-bin.js"},"_npmUser":{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"},"_npmVersion":"10.9.2","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory)","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-helper_1.0.0_1787130405660_0.19725429628063318","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@drakonkat/ai-helper","version":"1.0.2","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","mcp","npx","service-manager","dashboard","developer-tools"],"author":{"name":"Mauro"},"license":"MIT","_id":"@drakonkat/ai-helper@1.0.2","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"dist":{"shasum":"1d1bf35a5b973d8a5022dc9e7f51c72549f8a805","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.0.2.tgz","fileCount":12,"integrity":"sha512-fVUlOQF8mat/9EmZVHoD7eBYes9bFRXE01OQo91eaZK6Eoyn+s8LEyVaMjKryvwv4UpzwPGFWZ9alhAVj6e6xQ==","signatures":[{"sig":"MEYCIQCdD+fgpbn8R4Ewhah7lGDKG+LsJT3540rs0haKWdV38wIhALFvrBzJ2S/fyWZ4RKpz7C1to68lAZhUPSbD8kY8Vean","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59432},"main":"src/index.js","type":"module","module":"src/index.js","engines":{"node":">=18.0.0"},"gitHead":"194de8093e96a7522b9be770ee353ef58d9f0a55","scripts":{"dev":"node ./bin/cli.js","test":"bun test","build":"bun build --compile --minify --outfile dist/aih.exe src/index.js","start":"node ./bin/cli.js","install-bin":"bun run scripts/install-bin.js"},"_npmUser":{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"},"_npmVersion":"10.9.2","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory)","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-helper_1.0.2_1787132259141_0.5325724880463807","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@drakonkat/ai-helper","version":"1.0.4","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","mcp","npx","service-manager","dashboard","developer-tools"],"author":{"name":"Mauro"},"license":"MIT","_id":"@drakonkat/ai-helper@1.0.4","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"homepage":"https://github.com/drakonkat/ai-helper#readme","bugs":{"url":"https://github.com/drakonkat/ai-helper/issues"},"bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"dist":{"shasum":"c17be9097f5037fbe95991387c6f6295dfa458ea","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.0.4.tgz","fileCount":12,"integrity":"sha512-wMg7U6DesMo9bMyTO+DMoHzeRpYWEPKK8oGmCbTGXb/qynaxkk4e++xrfbeHo/7gJvEHJsQvvNH9p0ZpWe5PZQ==","signatures":[{"sig":"MEQCIEJLHyy6f6JGcktreQgW3w+vSIRyR6J/H6++5JvVHNH7AiBomdmPamcxIK1gax1ZuzKzW5s1kNmq/f3ABqRJZE/Vaw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drakonkat%2fai-helper@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":61075},"main":"src/index.js","type":"module","module":"src/index.js","engines":{"node":">=18.0.0"},"gitHead":"1c373916ed1ddc5aeb3bf6a054084bc59ddfe334","scripts":{"dev":"node ./bin/cli.js","test":"bun test","build":"bun build --compile --minify --outfile dist/aih.exe src/index.js","start":"node ./bin/cli.js","install-bin":"bun run scripts/install-bin.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a911e865-2587-4209-a091-324bb75b1e85"}},"repository":{"url":"git+https://github.com/drakonkat/ai-helper.git","type":"git"},"_npmVersion":"11.17.0","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory)","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-helper_1.0.4_1787816698566_0.9111619763082155","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@drakonkat/ai-helper","version":"1.1.0","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","headroom","mcp","npx","service-manager","dashboard","developer-tools"],"author":{"name":"Mauro"},"license":"MIT","_id":"@drakonkat/ai-helper@1.1.0","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"homepage":"https://github.com/drakonkat/ai-helper#readme","bugs":{"url":"https://github.com/drakonkat/ai-helper/issues"},"bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"dist":{"shasum":"f4849b7dd917a123a1f3eb6c5f96be7dbf2ddcdb","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.1.0.tgz","fileCount":12,"integrity":"sha512-xFeAmImR0Oo+sMK/yholsS+AaOhhHIhZhVICeKS70L4pJh/rZgyVrP7cSDLDJ5eI4OC9ZNAB1Ep3uv012KfWtg==","signatures":[{"sig":"MEQCIC3Omb5tt2UCVwdyIyt2K6ZgEggYRCw3GtMX/tPX8LJUAiAQKuQoroAno1+hJM3QTo2TziKgAFLgZ/b4932PXe3wfA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drakonkat%2fai-helper@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":62916},"main":"src/index.js","type":"module","module":"src/index.js","engines":{"node":">=18.0.0"},"gitHead":"c83f9a0618135132af02c7d940c5c19b0d7e06eb","scripts":{"dev":"node ./bin/cli.js","test":"bun test","build":"bun build --compile --minify --outfile dist/aih.exe src/index.js","start":"node ./bin/cli.js","install-bin":"bun run scripts/install-bin.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a911e865-2587-4209-a091-324bb75b1e85"}},"repository":{"url":"git+https://github.com/drakonkat/ai-helper.git","type":"git"},"_npmVersion":"11.17.0","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory, headroom)","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-helper_1.1.0_1787817152193_0.0005369943659376819","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@drakonkat/ai-helper","version":"1.1.1","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","headroom","mcp","npx","service-manager","dashboard","developer-tools"],"author":{"name":"Mauro"},"license":"MIT","_id":"@drakonkat/ai-helper@1.1.1","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"homepage":"https://github.com/drakonkat/ai-helper#readme","bugs":{"url":"https://github.com/drakonkat/ai-helper/issues"},"bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"dist":{"shasum":"6c4c1c9728541945f7d0f7918414ec79e0e74820","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.1.1.tgz","fileCount":14,"integrity":"sha512-56I/2xHeZrn26CPfsIw9rw7dDHvEE7E4XdGxqNbHeAoxnFDN/2sXEsYI8LdjLR2yhj1BlMlRFaNShsUsT7U2gw==","signatures":[{"sig":"MEYCIQCNpf6gg28Cc7ninV+oM316k9UDNB1RPY6seGRFJzR37wIhAJArO9aU1OJzBk0Dq0NzvsGYtPMvL/LiNqde7ZCtsl6r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drakonkat%2fai-helper@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":90691},"main":"src/index.js","type":"module","module":"src/index.js","engines":{"node":">=18.0.0"},"gitHead":"eddedf481e7e721f52878b0d48d3d378a7d01c90","scripts":{"dev":"node ./bin/cli.js","test":"bun test","build":"bun build --compile --minify --outfile dist/aih.exe src/index.js","start":"node ./bin/cli.js","install-bin":"bun run scripts/install-bin.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a911e865-2587-4209-a091-324bb75b1e85"}},"repository":{"url":"git+https://github.com/drakonkat/ai-helper.git","type":"git"},"_npmVersion":"11.17.0","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory, headroom)","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-helper_1.1.1_1787834408247_0.44910633106648423","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@drakonkat/ai-helper","version":"1.2.2","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","headroom","mcp","npx","service-manager","dashboard","developer-tools"],"author":{"name":"Mauro"},"license":"MIT","_id":"@drakonkat/ai-helper@1.2.2","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"homepage":"https://github.com/drakonkat/ai-helper#readme","bugs":{"url":"https://github.com/drakonkat/ai-helper/issues"},"bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"dist":{"shasum":"5f5970dd469c5f7c6a18f76a340d84746840bb3a","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.2.2.tgz","fileCount":32,"integrity":"sha512-6ArH/D/I2ntpU57/S4CXHnGH0GjqwyRMdF61FRI0Df3vMO1RAvAOa/swX7eG6fdkFmCplt9ZXykOeGp9uz5XeQ==","signatures":[{"sig":"MEYCIQCNK63gBjgqkorxCgXytukBu39hLr3MUspvo32YkDXxKQIhAJpHfDWUGf4Wo+5PHgJaHkn+0GqXqulzf73RlB5ugOZo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCID7wOBTVHPBSjNW4RWgIKzMP/ttIwQqQcmSuNOMgovWiAiEA8LAOkadfl/DZc09eHSb7vfI6Xp9GMiZMWZvo5WbzLEA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drakonkat%2fai-helper@1.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":283100},"main":"src/index.js","type":"module","module":"src/index.js","engines":{"node":">=20.19.0"},"gitHead":"712d6dcaf9e932c59ef85e1ef22cb4950d6a22f5","scripts":{"dev":"node ./bin/cli.js","test":"bun test test/aih.test.js test/metrics.test.js test/discovery.test.js test/tui-pipeline.test.js test/tui-versions.test.js test/versions.test.js test/repositories.test.js && node --test test/proxy.test.js test/codex-config.test.js test/codex-routing.test.js test/codex-manager.test.js test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js","build":"bun run scripts/build.js","start":"node ./bin/cli.js","bench:proxy":"node scripts/bench-proxy.js","install-bin":"bun run scripts/install-bin.js","bench:models":"node scripts/bench-proxy.js --compare-models gpt-6-astra,anthropic/claude-fable-5-1 --formats responses","test:benchmark":"node --test test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a911e865-2587-4209-a091-324bb75b1e85"}},"repository":{"url":"git+https://github.com/drakonkat/ai-helper.git","type":"git"},"_npmVersion":"11.19.0","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory, headroom)","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.3","pxpipe-proxy":"0.13.2","gpt-tokenizer":"3.4.0","toml-eslint-parser":"1.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-helper_1.2.2_1788950427478_0.6417993817685919","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@drakonkat/ai-helper","version":"1.2.3","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","headroom","mcp","npx","service-manager","dashboard","developer-tools"],"author":{"name":"Mauro"},"license":"MIT","_id":"@drakonkat/ai-helper@1.2.3","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"homepage":"https://github.com/drakonkat/ai-helper#readme","bugs":{"url":"https://github.com/drakonkat/ai-helper/issues"},"bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"dist":{"shasum":"b071ce3cb83993d0efdbb277fd6d491865e88cbf","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.2.3.tgz","fileCount":35,"integrity":"sha512-2awNVhDc5M4D4s483qXM1PhFw9GXyElalELcASqir7kEbtXVCpfFy4m/L1BdrlYm0dpCp0yCIi3EUj4ctpXu6g==","signatures":[{"sig":"MEQCIBdIoeAQ+KHvnTddjDtYo6xk6gJYXGUMBe7wLOpcaBKdAiB8M+r/dudWNc2MtK/ngq5yme5BFX9O81bwAl8w2iBHtg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC6pilme+UUeDoie9jFEnhW7ltDtn3AEWulFJriZJjPSAIgRPWtbzmZZAQpuCLudfhrvaj/a4P8m28VP+F0eKVrvzM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drakonkat%2fai-helper@1.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":343624},"main":"src/index.js","type":"module","module":"src/index.js","engines":{"node":">=20.19.0"},"gitHead":"a961ca42bbed064124b9b31adedaceee2a7777d4","scripts":{"dev":"node ./bin/cli.js","test":"bun test test/aih.test.js test/metrics.test.js test/discovery.test.js test/tui-pipeline.test.js test/tui-versions.test.js test/versions.test.js test/repositories.test.js test/service-updates.test.js && node --test test/proxy.test.js test/codex-config.test.js test/codex-routing.test.js test/codex-manager.test.js test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js","build":"bun run scripts/build.js","start":"node ./bin/cli.js","bench:proxy":"node scripts/bench-proxy.js","install-bin":"bun run scripts/install-bin.js","bench:models":"node scripts/bench-proxy.js --compare-models gpt-6-astra,anthropic/claude-fable-5-1 --formats responses","test:benchmark":"node --test test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a911e865-2587-4209-a091-324bb75b1e85"}},"repository":{"url":"git+https://github.com/drakonkat/ai-helper.git","type":"git"},"_npmVersion":"11.19.0","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory, headroom)","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.3","pxpipe-proxy":"0.13.2","gpt-tokenizer":"3.4.0","toml-eslint-parser":"1.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-helper_1.2.3_1788961173397_0.42500140979051215","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@drakonkat/ai-helper","version":"1.2.4","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","headroom","mcp","npx","service-manager","dashboard","developer-tools"],"author":{"name":"Mauro"},"license":"MIT","_id":"@drakonkat/ai-helper@1.2.4","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"homepage":"https://github.com/drakonkat/ai-helper#readme","bugs":{"url":"https://github.com/drakonkat/ai-helper/issues"},"bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"dist":{"shasum":"04d057d4cdae0dc45c49368118c40b0c61d35632","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.2.4.tgz","fileCount":35,"integrity":"sha512-wUQ8qVfpzfj4T18jh43fHJ0668xQwEEgf/8/F6tI3h+KcdQmqAcbsrYBRHH/ZM/Zg3jPyx32zozyAsbgTd4VQA==","signatures":[{"sig":"MEUCIQDIjZJAMLTQz3HH0lWD3sw81ITnwnDQ8w8u9+Eaf5LXlgIgVnLO1v9WErj1QXspPiqJrGfkFidTHJHVUTmnIgdzqq0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHEVE1U1FVipfbSL436Bc507wAKZCDoCfSYp4Acc9QP8AiEAniL4w0LRSd38Qm4cI/U/YDrFwINp42h9w5dPxSdZkgs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drakonkat%2fai-helper@1.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":343624},"main":"src/index.js","type":"module","module":"src/index.js","engines":{"node":">=20.19.0"},"gitHead":"fefeee9429b92d1f9892854f4598eabdfdfb1321","scripts":{"dev":"node ./bin/cli.js","test":"bun test test/aih.test.js test/metrics.test.js test/discovery.test.js test/tui-pipeline.test.js test/tui-versions.test.js test/versions.test.js test/repositories.test.js test/service-updates.test.js && node --test test/proxy.test.js test/codex-config.test.js test/codex-routing.test.js test/codex-manager.test.js test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js","build":"bun run scripts/build.js","start":"node ./bin/cli.js","bench:proxy":"node scripts/bench-proxy.js","install-bin":"bun run scripts/install-bin.js","bench:models":"node scripts/bench-proxy.js --compare-models gpt-6-astra,anthropic/claude-fable-5-1 --formats responses","test:benchmark":"node --test test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a911e865-2587-4209-a091-324bb75b1e85"}},"repository":{"url":"git+https://github.com/drakonkat/ai-helper.git","type":"git"},"_npmVersion":"11.19.0","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory, headroom)","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.3","pxpipe-proxy":"0.13.2","gpt-tokenizer":"3.4.0","toml-eslint-parser":"1.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-helper_1.2.4_1788962509521_0.7791013658634882","host":"s3://npm-registry-packages-npm-production"}},"1.2.6":{"name":"@drakonkat/ai-helper","version":"1.2.6","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","headroom","mcp","npx","service-manager","dashboard","developer-tools"],"author":{"name":"Mauro"},"license":"MIT","_id":"@drakonkat/ai-helper@1.2.6","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"homepage":"https://github.com/drakonkat/ai-helper#readme","bugs":{"url":"https://github.com/drakonkat/ai-helper/issues"},"bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"dist":{"shasum":"2a2475a4d06a57954ace7a9d514319e0a83c2b90","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.2.6.tgz","fileCount":35,"integrity":"sha512-+PudyMHfsYZ36zbmE1sL3K9rNUOpLy2TbxUX0yRFyLZfCWVByQsdeTNWdW1tDeXVgE5HmE6CxSh/5gyoJkDZNg==","signatures":[{"sig":"MEUCIQCUBiRd3bRHC23sXK8tTi7J2Tc1ZfHS0UmL5ESQL7EbDgIgN1/jVWgHjaY9MMpmnZkbvuvQBBrDnnIGcJW/PPPDou0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFrvQklzgXz1WZ1HLx3UUT11VhmNprr3LJ9S7mJkWo8oAiAWIvyI7p0cHmQfxUqhv3EPlHyhlhMRj5itMTtIAFhwdQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drakonkat%2fai-helper@1.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":344312},"main":"src/index.js","type":"module","module":"src/index.js","engines":{"node":">=20.19.0"},"gitHead":"532a0a70ef74157b0fe70d0c26934c8abc51aebe","scripts":{"dev":"node ./bin/cli.js","test":"bun test test/aih.test.js test/metrics.test.js test/discovery.test.js test/tui-pipeline.test.js test/tui-versions.test.js test/versions.test.js test/repositories.test.js test/service-updates.test.js && node --test test/proxy.test.js test/codex-config.test.js test/codex-routing.test.js test/codex-manager.test.js test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js","build":"bun run scripts/build.js","start":"node ./bin/cli.js","bench:proxy":"node scripts/bench-proxy.js","install-bin":"bun run scripts/install-bin.js","bench:models":"node scripts/bench-proxy.js --compare-models gpt-6-astra,anthropic/claude-fable-5-1 --formats responses","test:benchmark":"node --test test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a911e865-2587-4209-a091-324bb75b1e85"}},"repository":{"url":"git+https://github.com/drakonkat/ai-helper.git","type":"git"},"_npmVersion":"11.19.0","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory, headroom)","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.3","pxpipe-proxy":"0.13.2","gpt-tokenizer":"3.4.0","toml-eslint-parser":"1.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-helper_1.2.6_1789295725929_0.14181674033128933","host":"s3://npm-registry-packages-npm-production"}},"1.2.7":{"name":"@drakonkat/ai-helper","version":"1.2.7","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","headroom","mcp","npx","service-manager","dashboard","developer-tools"],"author":{"name":"Mauro"},"license":"MIT","_id":"@drakonkat/ai-helper@1.2.7","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"homepage":"https://github.com/drakonkat/ai-helper#readme","bugs":{"url":"https://github.com/drakonkat/ai-helper/issues"},"bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"dist":{"shasum":"247d5fbc34fac155f0ff117509bfe37cc7a2710c","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.2.7.tgz","fileCount":36,"integrity":"sha512-5u9uTRIKeferqQohVfUKg198whpIrSAMgLdbo1STSWGnyfK7GWmLbxqs6Ht2t7JhYG3zlWsqSqRhUC9yUavKNw==","signatures":[{"sig":"MEUCIH7xlOJi00oTFw5Tj6Skhj5OLyZPdBOhdQ5NUmna4+1MAiEAw/fwnOunW+gJu1TYS7qlr9W8UosODoatbIHn6hAwRt8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDqogwPm1xOdCnCIVyVtYneU19hruU01+TXCRwRHCwFxwIgTMZ1JtC3VZ6kmfoHJPgIVjtM1Wdxh24bJzs5A2rWAWo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drakonkat%2fai-helper@1.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":354192},"main":"src/index.js","type":"module","module":"src/index.js","engines":{"node":">=20.19.0"},"gitHead":"bf7f37737afd716ae8ff02a973810c0975bbc4e3","scripts":{"dev":"node ./bin/cli.js","test":"bun test test/aih.test.js test/metrics.test.js test/discovery.test.js test/tui-pipeline.test.js test/tui-versions.test.js test/versions.test.js test/repositories.test.js test/service-updates.test.js && node --test test/proxy.test.js test/codex-config.test.js test/codex-routing.test.js test/codex-manager.test.js test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js","build":"bun run scripts/build.js","start":"node ./bin/cli.js","bench:proxy":"node scripts/bench-proxy.js","install-bin":"bun run scripts/install-bin.js","bench:models":"node scripts/bench-proxy.js --compare-models gpt-6-astra,anthropic/claude-fable-5-1 --formats responses","test:benchmark":"node --test test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a911e865-2587-4209-a091-324bb75b1e85"}},"repository":{"url":"git+https://github.com/drakonkat/ai-helper.git","type":"git"},"_npmVersion":"11.19.0","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory, headroom)","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.3","pxpipe-proxy":"0.13.2","gpt-tokenizer":"3.4.0","toml-eslint-parser":"1.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-helper_1.2.7_1789381764337_0.7929785271003413","host":"s3://npm-registry-packages-npm-production"}},"1.2.8":{"name":"@drakonkat/ai-helper","version":"1.2.8","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","headroom","mcp","npx","service-manager","dashboard","developer-tools"],"author":{"name":"Mauro"},"license":"MIT","_id":"@drakonkat/ai-helper@1.2.8","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"homepage":"https://github.com/drakonkat/ai-helper#readme","bugs":{"url":"https://github.com/drakonkat/ai-helper/issues"},"bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"dist":{"shasum":"5ef204700948d7adade60b2a29d1fc1fed69c9f3","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.2.8.tgz","fileCount":36,"integrity":"sha512-XB2P5mDl0kLHC32Qrs6DyOngE6nv24qGBVSIjQbDaj8wQ0c+FUiEdv5wJMhVFYjqo3szNneKWoCW8vv3ld9C9Q==","signatures":[{"sig":"MEQCIAX766V+RyTtKvJ7/O9ZsriuUku/xPLWq1P7tnCeSJvSAiBXZ5FbK1Y2l9wVYCe7StxROZWNy7dmsoXTuVow9nJO4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFIMrwP6FKVkBDYOZmyswzXPeI5+i65vYaeAt97q/dtrAiEA5BaRDcdtSK6yb1PLAOfjIuWJo5ZRROZqw5JtYa//kg4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drakonkat%2fai-helper@1.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":355819},"main":"src/index.js","type":"module","module":"src/index.js","engines":{"node":">=20.19.0"},"gitHead":"ff2f2dd08284a280cf2b1e73511adf80b8709f00","scripts":{"dev":"node ./bin/cli.js","test":"bun test test/aih.test.js test/metrics.test.js test/discovery.test.js test/tui-pipeline.test.js test/tui-versions.test.js test/versions.test.js test/repositories.test.js test/service-updates.test.js && node --test test/proxy.test.js test/codex-config.test.js test/codex-routing.test.js test/codex-manager.test.js test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js","build":"bun run scripts/build.js","start":"node ./bin/cli.js","bench:proxy":"node scripts/bench-proxy.js","install-bin":"bun run scripts/install-bin.js","bench:models":"node scripts/bench-proxy.js --compare-models gpt-6-astra,anthropic/claude-fable-5-1 --formats responses","test:benchmark":"node --test test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a911e865-2587-4209-a091-324bb75b1e85"}},"repository":{"url":"git+https://github.com/drakonkat/ai-helper.git","type":"git"},"_npmVersion":"11.19.0","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory, headroom)","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.3","pxpipe-proxy":"0.13.2","gpt-tokenizer":"3.4.0","toml-eslint-parser":"1.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-helper_1.2.8_1790259606394_0.12263179916968503","host":"s3://npm-registry-packages-npm-production"}},"1.2.9":{"name":"@drakonkat/ai-helper","version":"1.2.9","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","headroom","mcp","npx","service-manager","dashboard","developer-tools"],"author":{"name":"Mauro"},"license":"MIT","_id":"@drakonkat/ai-helper@1.2.9","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"homepage":"https://github.com/drakonkat/ai-helper#readme","bugs":{"url":"https://github.com/drakonkat/ai-helper/issues"},"bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"dist":{"shasum":"38b7d5be123e1542e4304482860e80470bbc92dd","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.2.9.tgz","fileCount":38,"integrity":"sha512-Dn54JvrnAomOYiG5m9ntdk98MzzOVTDwAuAjCgOijBAaj1mXuX+RRhSp98V0l9V1i3zE3uvQJnU4jTpI8PhnnQ==","signatures":[{"sig":"MEUCICWYlHnz5bN3TN8WtdSVvkizb6FT0DXRC3tBcEvUX6bjAiEAzLXZ6lk3u/1M402Ia9AaVKJulZ8xpK0ZSZXTW8DVLlg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC1SUNu0GW3y1dPvl8Fmyv8+a07j5nh7nxL3QJIkh6usAIhAMHfIw4oqVshSZrqifqSP5rJGjySNp9zL5V5/KM4Bl+Y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drakonkat%2fai-helper@1.2.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":384053},"main":"src/index.js","type":"module","module":"src/index.js","engines":{"node":">=20.19.0"},"gitHead":"1fa8c735a64330adee0064fdf1413b7ef3df940d","scripts":{"dev":"node ./bin/cli.js","test":"bun test test/aih.test.js test/metrics.test.js test/discovery.test.js test/tui-pipeline.test.js test/tui-versions.test.js test/versions.test.js test/repositories.test.js test/service-updates.test.js && node --test test/proxy.test.js test/codex-config.test.js test/codex-routing.test.js test/codex-manager.test.js test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js","build":"bun run scripts/build.js","start":"node ./bin/cli.js","bench:proxy":"node scripts/bench-proxy.js","install-bin":"bun run scripts/install-bin.js","bench:models":"node scripts/bench-proxy.js --compare-models gpt-6-astra,anthropic/claude-fable-5-1 --formats responses","test:benchmark":"node --test test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"a911e865-2587-4209-a091-324bb75b1e85"}},"repository":{"url":"git+https://github.com/drakonkat/ai-helper.git","type":"git"},"_npmVersion":"11.19.0","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory, headroom)","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.3","pxpipe-proxy":"0.13.2","gpt-tokenizer":"3.4.0","toml-eslint-parser":"1.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-helper_1.2.9_1790684467878_0.34789970938532044","host":"s3://npm-registry-packages-npm-production"}},"1.2.10":{"name":"@drakonkat/ai-helper","version":"1.2.10","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","headroom","mcp","npx","service-manager","dashboard","developer-tools"],"author":{"name":"Mauro"},"license":"MIT","_id":"@drakonkat/ai-helper@1.2.10","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"homepage":"https://github.com/drakonkat/ai-helper#readme","bugs":{"url":"https://github.com/drakonkat/ai-helper/issues"},"bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"dist":{"shasum":"865ff058e0d1d8bbd03d372a651caf78a9cf60b3","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.2.10.tgz","fileCount":38,"integrity":"sha512-ZiPpGxQ2dfg3LGvuq2q5n5CQBg0YDH17y2s+QeTgYa8DZv59oQk5Fsy3Ymc12jza4HcdW2hX5zRnV32gDQOxdA==","signatures":[{"sig":"MEUCIQCMMyZGToFY8mTVs9Hxe0whcWWBR+3UcMzA9uiTILKnaAIgFfeR8jVs9b4ZoFJvL71RqdE1nR9YB+VA3m2536M7cCA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDgcLWr12v0llhemGlGJvAWTQKp4VhtshTIfrBDwdTwUwIhAOba5NR6Ziz66nI1LGxrmWYzGXc9ESgKxyXPr0FCpvli","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drakonkat%2fai-helper@1.2.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":389999},"main":"src/index.js","type":"module","module":"src/index.js","engines":{"node":">=20.19.0"},"gitHead":"9f006316e762f7588a812cde16f35d371d6850f2","scripts":{"dev":"node ./bin/cli.js","test":"bun test test/aih.test.js test/metrics.test.js test/discovery.test.js test/tui-pipeline.test.js test/tui-versions.test.js test/versions.test.js test/repositories.test.js test/service-updates.test.js && node --test test/proxy.test.js test/codex-config.test.js test/codex-routing.test.js test/codex-manager.test.js test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js","build":"bun run scripts/build.js","start":"node ./bin/cli.js","bench:proxy":"node scripts/bench-proxy.js","install-bin":"bun run scripts/install-bin.js","bench:models":"node scripts/bench-proxy.js --compare-models gpt-6-astra,anthropic/claude-fable-5-1 --formats responses","test:benchmark":"node --test test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"a911e865-2587-4209-a091-324bb75b1e85"}},"repository":{"url":"git+https://github.com/drakonkat/ai-helper.git","type":"git"},"_npmVersion":"11.19.0","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory, headroom)","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.3","pxpipe-proxy":"0.13.2","gpt-tokenizer":"3.4.0","toml-eslint-parser":"1.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-helper_1.2.10_1790698591085_0.5741397220976932","host":"s3://npm-registry-packages-npm-production"}},"1.2.11":{"name":"@drakonkat/ai-helper","version":"1.2.11","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","headroom","mcp","npx","service-manager","dashboard","developer-tools"],"author":{"name":"Mauro"},"license":"MIT","_id":"@drakonkat/ai-helper@1.2.11","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"homepage":"https://github.com/drakonkat/ai-helper#readme","bugs":{"url":"https://github.com/drakonkat/ai-helper/issues"},"bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"dist":{"shasum":"d8f4501e858e9cc1688825ba2205f58695950b35","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.2.11.tgz","fileCount":39,"integrity":"sha512-M+CHwpFwC38b9kCVT01xLhk/+6wORSyot8TZZsR+AEqhAnrDFVIaYQp4PggGmjRKmv8l6TBuY5aJ2yxOsysWrw==","signatures":[{"sig":"MEUCIQCfrSpt8Vo/NLagdh/NZgBAyNg60O4ukH/wQkL/D6AoewIgPeNknjOPtPVk8J5YJmEWVdFm9RnAaspgurVx1yTpAXc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEk2GigrGvqi/rpWawGQMkEbQ7ms7GD2oltrln9l5gw7AiEAgoaF/CAZe6Rrx0bT1u0P9eT6OoABb3ytXIkxoSwpRF0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drakonkat%2fai-helper@1.2.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":401684},"main":"src/index.js","type":"module","module":"src/index.js","engines":{"node":">=20.19.0"},"gitHead":"275278b2210eabb7f42aed56addaac7077667b12","scripts":{"dev":"node ./bin/cli.js","test":"bun test test/aih.test.js test/metrics.test.js test/discovery.test.js test/tui-pipeline.test.js test/tui-versions.test.js test/versions.test.js test/repositories.test.js test/service-updates.test.js && node --test test/proxy.test.js test/codex-config.test.js test/codex-routing.test.js test/codex-manager.test.js test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js","build":"bun run scripts/build.js","start":"node ./bin/cli.js","bench:proxy":"node scripts/bench-proxy.js","install-bin":"bun run scripts/install-bin.js","bench:models":"node scripts/bench-proxy.js --compare-models gpt-6-astra,anthropic/claude-fable-5-1 --formats responses","test:benchmark":"node --test test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"a911e865-2587-4209-a091-324bb75b1e85"}},"repository":{"url":"git+https://github.com/drakonkat/ai-helper.git","type":"git"},"_npmVersion":"11.19.0","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory, headroom)","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.3","pxpipe-proxy":"0.14.0","gpt-tokenizer":"3.4.0","toml-eslint-parser":"1.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-helper_1.2.11_1790757363189_0.38221136383740517","host":"s3://npm-registry-packages-npm-production"}},"1.2.12":{"name":"@drakonkat/ai-helper","version":"1.2.12","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","headroom","mcp","npx","service-manager","dashboard","developer-tools"],"author":{"name":"Mauro"},"license":"MIT","_id":"@drakonkat/ai-helper@1.2.12","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"homepage":"https://github.com/drakonkat/ai-helper#readme","bugs":{"url":"https://github.com/drakonkat/ai-helper/issues"},"bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"dist":{"shasum":"065f283fc908339c2b5d4eeb5e9c29663e20ee1b","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.2.12.tgz","fileCount":42,"integrity":"sha512-ZCQdwFxv687ceWYTUrlVJPkMwn8RbZTkNyeXFFB8DtswXmnOI0b+dJd9kZVSN2g7G0chmIXITmZtYdrL7/qbiQ==","signatures":[{"sig":"MEYCIQD8Xx0BYPaQUfFRNCggYoiY2yGa7oXy4grcwoo6Jp8SwwIhAK2vIlrKwqA1GEYxy1jCEX0cwsDl0Wa/S+Abdp1GpwM1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDnl+bHsRsM1kz7maB4c0GgHrtX8G9nE2yAKW2gnihB4AiAgD08lfl9pS7KNjE+3IPSGDM90EWvL9YYAnw9I5z5OYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drakonkat%2fai-helper@1.2.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":417833},"main":"src/index.js","type":"module","module":"src/index.js","engines":{"node":">=20.19.0"},"gitHead":"3ebfd038d66a552b8d55d909f85bfd5304980e77","scripts":{"dev":"node ./bin/cli.js","test":"bun test test/aih.test.js test/metrics.test.js test/discovery.test.js test/tui-pipeline.test.js test/tui-versions.test.js test/versions.test.js test/repositories.test.js test/service-updates.test.js && node --test test/proxy.test.js test/pxpipe-performance.test.js test/codex-config.test.js test/codex-routing.test.js test/codex-manager.test.js test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js","build":"bun run scripts/build.js","start":"node ./bin/cli.js","bench:proxy":"node scripts/bench-proxy.js","install-bin":"bun run scripts/install-bin.js","postinstall":"node scripts/patch-pxpipe.js","bench:models":"node scripts/bench-proxy.js --compare-models gpt-6-astra,anthropic/claude-fable-5-1 --formats responses","test:benchmark":"node --test test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"a911e865-2587-4209-a091-324bb75b1e85"}},"repository":{"url":"git+https://github.com/drakonkat/ai-helper.git","type":"git"},"_npmVersion":"11.19.0","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory, headroom)","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.3","pxpipe-proxy":"0.14.0","gpt-tokenizer":"3.4.0","toml-eslint-parser":"1.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-helper_1.2.12_1790762394698_0.23599018248769155","host":"s3://npm-registry-packages-npm-production"}},"1.2.13":{"name":"@drakonkat/ai-helper","version":"1.2.13","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","headroom","mcp","npx","service-manager","dashboard","developer-tools"],"author":{"name":"Mauro"},"license":"MIT","_id":"@drakonkat/ai-helper@1.2.13","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"homepage":"https://github.com/drakonkat/ai-helper#readme","bugs":{"url":"https://github.com/drakonkat/ai-helper/issues"},"bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"dist":{"shasum":"17b9f4b19a619366bd9c75eb2ed0ec2e197548d5","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.2.13.tgz","fileCount":42,"integrity":"sha512-dhIrlhyCAQk0ZiQ59RrGAGlwiAEEvm+ztgSHIEqmV+JnvI4R44fVa8XaxOMGrr2fdQbjzBxTZiqaPwgsy7/C7A==","signatures":[{"sig":"MEUCIDefCX8HSfo63HuEVlFtJeJ9MTXXsieXJmnYjj26Tb89AiEA/SXY2UvMzgug/T78aq0iZG1pAsKjkXVdmCAnjI6Re+Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGUT0+iT+jXmWQi1D1jG6qKltnlBsAiYC91tMvpPbucCAiEAhGLYNrG1UU4JLskh+2jYCl6njCz0oQZvo//NRXLxDIk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drakonkat%2fai-helper@1.2.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":424976},"main":"src/index.js","type":"module","module":"src/index.js","engines":{"node":">=20.19.0"},"gitHead":"b53a66f17e80d3e46e6602e53cc7107d45b71e38","scripts":{"dev":"node ./bin/cli.js","test":"bun test test/aih.test.js test/metrics.test.js test/discovery.test.js test/tui-pipeline.test.js test/tui-versions.test.js test/versions.test.js test/repositories.test.js test/service-updates.test.js && node --test test/proxy.test.js test/pxpipe-performance.test.js test/codex-config.test.js test/codex-routing.test.js test/codex-manager.test.js test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js","build":"bun run scripts/build.js","start":"node ./bin/cli.js","bench:proxy":"node scripts/bench-proxy.js","install-bin":"bun run scripts/install-bin.js","postinstall":"node scripts/patch-pxpipe.js","bench:models":"node scripts/bench-proxy.js --compare-models gpt-6-astra,anthropic/claude-fable-5-1 --formats responses","test:benchmark":"node --test test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"a911e865-2587-4209-a091-324bb75b1e85"}},"repository":{"url":"git+https://github.com/drakonkat/ai-helper.git","type":"git"},"_npmVersion":"11.19.0","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory, headroom)","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.3","pxpipe-proxy":"0.14.0","gpt-tokenizer":"3.4.0","toml-eslint-parser":"1.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-helper_1.2.13_1790771113972_0.04991183706494229","host":"s3://npm-registry-packages-npm-production"}},"1.2.14":{"_id":"@drakonkat/ai-helper@1.2.14","bin":{"aih":"bin/cli.js","ai-helper":"bin/cli.js"},"bugs":{"url":"https://github.com/drakonkat/ai-helper/issues"},"dist":{"shasum":"ec3782a973c95751bff8a33c8a562d656a09be02","tarball":"https://registry.npmjs.org/@drakonkat/ai-helper/-/ai-helper-1.2.14.tgz","fileCount":42,"integrity":"sha512-CPsqiFyHtYHSFDw+xhZ6BflVTzxbiZwhoh9GU365hJm8Vt+Pj8xL7YAenvj6j37VmTlC2DULzPE4qTgLzt2oZA==","signatures":[{"sig":"MEUCIQDVzSIZ1Hq/AOyf49NSMEPFWa2BDRQNWZ4uDXbSvgH/TQIgFP9u7JX7Gn498DuahHW5iKeRiwwV3GG908u1U00+yog=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDXXYFFyBj2TddN2I6FRYl+roTVzGODZgK2qP0htm6bOwIhANxvtbja/0r7wsuQ3ZahZ9/FmPMfUj9XCfzgYrSmsJVW"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drakonkat%2fai-helper@1.2.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":425958},"main":"src/index.js","name":"@drakonkat/ai-helper","type":"module","author":{"name":"Mauro"},"module":"src/index.js","engines":{"node":">=20.19.0"},"gitHead":"029acc363f6a9cebf8397ffb18066be186a932f5","license":"MIT","scripts":{"dev":"node ./bin/cli.js","test":"bun test test/aih.test.js test/metrics.test.js test/discovery.test.js test/tui-pipeline.test.js test/tui-versions.test.js test/versions.test.js test/repositories.test.js test/service-updates.test.js && node --test test/proxy.test.js test/pxpipe-performance.test.js test/codex-config.test.js test/codex-routing.test.js test/codex-manager.test.js test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js","build":"bun run scripts/build.js","start":"node ./bin/cli.js","bench:proxy":"node scripts/bench-proxy.js","install-bin":"bun run scripts/install-bin.js","postinstall":"node scripts/patch-pxpipe.js","bench:models":"node scripts/bench-proxy.js --compare-models gpt-6-astra,anthropic/claude-fable-5-1 --formats responses","test:benchmark":"node --test test/benchmark-live.test.js test/benchmark-measurement.test.js test/benchmark-quality.test.js test/benchmark-report.test.js test/benchmark-runner.test.js test/benchmark-multimodal.test.js"},"version":"1.2.14","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"a911e865-2587-4209-a091-324bb75b1e85"}},"homepage":"https://github.com/drakonkat/ai-helper#readme","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","headroom","mcp","npx","service-manager","dashboard","developer-tools"],"repository":{"url":"git+https://github.com/drakonkat/ai-helper.git","type":"git"},"_npmVersion":"11.19.0","description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory, headroom)","directories":{},"maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.3","pxpipe-proxy":"0.14.0","gpt-tokenizer":"3.4.0","toml-eslint-parser":"1.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ai-helper_1.2.14_1790774253170_0.9844315418296596"}}},"time":{"created":"2026-08-19T09:06:44.865Z","modified":"2026-09-30T13:17:33.761Z","1.0.0":"2026-08-19T09:06:45.793Z","1.0.2":"2026-08-19T09:37:39.294Z","1.0.4":"2026-08-27T07:44:58.708Z","1.1.0":"2026-08-27T07:52:32.309Z","1.1.1":"2026-08-27T12:40:08.401Z","1.2.2":"2026-09-09T10:40:27.582Z","1.2.3":"2026-09-09T13:39:33.479Z","1.2.4":"2026-09-09T14:01:49.630Z","1.2.6":"2026-09-13T10:35:26.027Z","1.2.7":"2026-09-14T10:29:24.445Z","1.2.8":"2026-09-24T14:20:06.488Z","1.2.9":"2026-09-29T12:21:07.999Z","1.2.10":"2026-09-29T16:16:31.254Z","1.2.11":"2026-09-30T08:36:03.325Z","1.2.12":"2026-09-30T09:59:54.785Z","1.2.13":"2026-09-30T12:25:14.068Z","1.2.14":"2026-09-30T13:17:33.269Z"},"bugs":{"url":"https://github.com/drakonkat/ai-helper/issues"},"author":{"name":"Mauro"},"license":"MIT","homepage":"https://github.com/drakonkat/ai-helper#readme","keywords":["cli","ai","agent","pxpipe","ocx","agentmemory","headroom","mcp","npx","service-manager","dashboard","developer-tools"],"repository":{"url":"git+https://github.com/drakonkat/ai-helper.git","type":"git"},"description":"Zero-config background service manager, auto-discovery daemon & dashboard launcher for AI agent ecosystems (pxpipe, ocx, agentmemory, headroom)","maintainers":[{"name":"drakonkat","email":"adamo.mazzocchetti@gmail.com"}],"readme":"# ⚡ ai-helper (`aih`)\n\n<p align=\"center\">\n  <strong>Zero-config background service manager, auto-discovery daemon & web dashboard launcher for AI agent ecosystems.</strong>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@drakonkat/ai-helper\"><img src=\"https://img.shields.io/npm/v/@drakonkat/ai-helper.svg?color=blue&style=flat-square\" alt=\"NPM Version\" /></a>\n  <a href=\"https://nodejs.org/\"><img src=\"https://img.shields.io/badge/node-%3E%3D20.19.0-brightgreen.svg?style=flat-square\" alt=\"Node Version\" /></a>\n  <a href=\"https://bun.sh/\"><img src=\"https://img.shields.io/badge/bun-compatible-f472b6.svg?style=flat-square\" alt=\"Bun Compatible\" /></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-green.svg?style=flat-square\" alt=\"License: MIT\" /></a>\n  <img src=\"https://img.shields.io/badge/platform-windows%20%7C%20macos%20%7C%20linux-lightgrey.svg?style=flat-square\" alt=\"Platforms\" />\n</p>\n\n---\n\n## 📖 Table of Contents\n- [Why ai-helper?](#-why-ai-helper)\n- [Quick Start](#-quick-start)\n- [Managed Services & Dashboards](#-managed-services--dashboards)\n- [Key Features](#-key-features)\n- [CLI Reference](#-cli-reference)\n- [HTTP / WebSocket Proxy](#http--websocket-proxy)\n  - [Proxy option values](#proxy-option-values)\n  - [Start a compression pipeline](#start-a-compression-pipeline)\n  - [Select models](#select-models)\n  - [Proxy token savings](#proxy-token-savings)\n  - [Troubleshooting](#proxy-troubleshooting)\n- [Programmatic JSON API](#-programmatic-json-api)\n- [Architecture & Documentation](#-architecture--documentation)\n- [Configuration & State](#-configuration--state)\n- [Contributing](#-contributing)\n- [License](#-license)\n\n---\n\n## 💡 Why ai-helper?\n\nWhen building, testing, and collaborating with local AI agents, coding assistants, and MCP servers, multiple background services must run simultaneously:\n1. **`pxpipe`**: LLM & MCP protocol reverse proxy bridge (`npx pxpipe-proxy`).\n2. **`ocx`**: OpenCode interpreter and execution daemon (`ocx start`).\n3. **`agentmemory`**: Persistent long-term agent memory server (`npx @agentmemory/agentmemory`).\n4. **`headroom`**: LLM context optimization & compression proxy (`headroom proxy`).\n\nManually opening separate terminal tabs for each service is messy, clutters your workspace, and easily leads to orphaned background processes and blocked ports.\n\n**`aih`** solves this with a lightweight CLI that:\n- **Spawns and backgrounds** all services independently.\n- **Auto-discovers** existing instances already running in external PowerShell / CMD / terminal windows.\n- **Terminates process trees cleanly** (`taskkill /T /F` on Windows, process groups on Unix) so no child workers or ports remain trapped.\n- **Opens web dashboards in your browser** with a single command (`aih open`).\n- **Streams live unified logs** (`aih logs <service> -f`).\n\n---\n\n## 🚀 Quick Start\n\nYou can run `ai-helper` immediately using **`npx`** without cloning or installing anything:\n\n```bash\n# View services status and active dashboards\nnpx @drakonkat/ai-helper status\n\n# Open service web dashboards in your default browser\nnpx @drakonkat/ai-helper open\n\n# Start ocx, agentmemory and the pxpipe proxy\nnpx @drakonkat/ai-helper start\n```\n\nThe CLI manages existing service commands: install/configure `ocx`, `headroom`\nand any other services you want to use separately. The built-in proxy includes\nthe pxpipe library; its presets do not require a separate pxpipe proxy process.\n\n### Global Installation\n\nTo use the compact `aih` command globally anywhere in your terminal:\n\n```bash\n# Install globally via npm\nnpm install -g @drakonkat/ai-helper\n\n# Or via bun\nbun add -g @drakonkat/ai-helper\n```\n\n---\n\n## 📦 Managed Services & Dashboards\n\n| Service | Background Command | Default Port / URL | GitHub | Description |\n| :--- | :--- | :--- | :--- | :--- |\n| **`pxpipe`** | `npx pxpipe-proxy` | [`http://localhost:47821`](http://localhost:47821) | [teamchong/pxpipe](https://github.com/teamchong/pxpipe) | AI LLM & MCP protocol reverse proxy bridge |\n| **`ocx`** | `ocx start` | [`http://localhost:10100`](http://localhost:10100) | [lidge-jun/opencodex](https://github.com/lidge-jun/opencodex) | OpenCode interpreter execution daemon |\n| **`agentmemory`** | `npx @agentmemory/agentmemory` | [`http://localhost:3113`](http://localhost:3113) | [rohitg00/agentmemory](https://github.com/rohitg00/agentmemory) | Persistent agent long-term memory server & viewer |\n| **`headroom`** | `headroom proxy` | [`http://localhost:8787/dashboard`](http://localhost:8787/dashboard) | [headroomlabs-ai/headroom](https://github.com/headroomlabs-ai/headroom) | Context optimization & LLM compression proxy |\n| **`proxy`** | `aih start proxy <upstream>` | `http://127.0.0.1:10101` | [drakonkat/ai-helper](https://github.com/drakonkat/ai-helper) | HTTP/SSE/WebSocket forwarding with optional presets; **no web dashboard** |\n\n---\n\n## ✨ Key Features\n\n- 🔍 **Real-Time Auto-Discovery**: Automatically queries OS process tables (`Win32_Process` and TCP listening connections on Windows, `ps` on Unix) to discover and manage processes started from external terminal windows.\n- 🌐 **One-Click Dashboard Launcher**: Run `aih open` to launch service dashboards in your browser in separate tabs.\n- 🛡️ **Clean Process Tree Termination**: Kills parent and all nested child worker processes (`node.exe`, `iii.exe`, etc.) ensuring no ports remain locked.\n- 📜 **Live Log Streaming**: Unified stdout/stderr log capture per service with live real-time tailing (`aih logs <service> -f`).\n- 🤖 **Agent & Automation Friendly**: Native `--json` output format for IDE integrations, subagents, and automated workflows.\n- 🔀 **Compression Presets**: pxpipe as a library, Headroom compression, RTK stdin filtering, or ordered combinations.\n- 📊 **Proxy Savings**: Per-stage token estimates in `aih stats proxy`, the interactive UI and proxy logs.\n\n---\n\n## 💻 CLI Reference\n\nRun `aih --help` for the command summary and examples. Replace `<values>` with\nyour own values; brackets below mark optional arguments. Quote values containing\nspaces, such as `--interceptor \"./my hooks/interceptor.mjs\"`.\n\n| Command syntax | Example |\n| --- | --- |\n| `status [services...] [--json] [--ui]` | `aih status ocx proxy --json`; `aih status --ui` |\n| `start [services...] [--models <list>] [--json]` | `aih start --models \"gpt-6-astra,anthropic/claude-fable*\"` |\n| `start proxy [upstream] [proxy options] [--json]` | `aih start proxy http://127.0.0.1:10100/ --listen http://127.0.0.1:10102 --preset pxpipe` |\n| `stop [services...]` | `aih stop ocx agentmemory` |\n| `restart [services...] [--json]` | `aih restart ocx agentmemory --json` |\n| `restart proxy [upstream] [proxy options] [--json]` | `aih restart proxy --models=\"gpt-6-astra,anthropic/claude-fable*\"` |\n| `update [--json]` | `aih update` (update aih itself from npm) |\n| `update <services...> [--json]` | `aih update ocx agentmemory --json`; `aih ocx update` |\n| `open [services...] [--repo]` | `aih open agentmemory`; `aih open proxy --repo` |\n| `logs <service> [-n <lines>] [-f]` | `aih logs proxy --lines=100 --follow` |\n| `stats proxy [--json]` | `aih stats proxy --json` |\n| `install` | `aih install` (build/install the standalone binary; requires Bun) |\n| `version`, `help` | `aih --version`; `aih --help` |\n\nAliases: `ps`, `ls`, `list` for `status`; `up` for `start`; `down` for `stop`;\n`dashboard`, `dash` for `open`; `log` for `logs`. `-ui` also enables the status\ndashboard, `--lines`/`--follow` are the long log options, and `-v`/`-h` show\nversion/help. Proxy URL and option values are detailed [below](#proxy-option-values).\n\n### 1. Status Overview\n\n```bash\naih status\n# Interactive view (press q to exit)\naih status -ui\n# or simply\naih\n```\n\n*Output:*\n```text\nai-helper v1.2.6 — Background AI Ecosystem Service Manager\n\nSERVICE       STATUS        PID   UPTIME   ADDRESS                  REPO                                       COMMAND\n───────────   ─────────   ─────   ──────   ──────────────────────   ─────────────────────────────────────────  ────────────────────────────\npxpipe        ● RUNNING   36212   1h 42m   http://localhost:47821   https://github.com/teamchong/pxpipe         npx pxpipe-proxy\nocx           ● RUNNING   31540      54s   http://localhost:10100   https://github.com/lidge-jun/opencodex      ocx start\nagentmemory   ● RUNNING   44600   1h 32m   http://localhost:3113    https://github.com/rohitg00/agentmemory     npx @agentmemory/agentmemory\n\nUse 'aih open [service]' to open dashboards in browser or 'aih start' to launch.\n```\n\nRun `aih status --ui` in a terminal for the interactive live dashboard. Its\n`REPO` column shows the GitHub owner/repository; the selected service's full\nrepository and dashboard URLs appear below the table. Press **`g`** to open its\nrepository. Plain `status` prints full repository links, and `status --json`\nincludes `repositoryUrl` (null for custom services without metadata). The built-in\nproxy links to ai-helper's repository, not its forwarding address.\n\nThe dashboard's\n`VERSION` column shows the running service version when available, otherwise the\ninstalled version. `UPDATE` shows `↑ <version>` for an available update,\n`aggiornato` when no newer version is found, or `n/d` when the check cannot be\ncompleted. Checks query npm/PyPI in the background every five minutes and after\na service restart; they never install or update services.\n\nPress **`u`** to update the selected service to the latest available release.\nThe action checks the registry again, reports progress/results in the footer,\nand refreshes version information even for stopped services. Repeated action\nkeys are ignored while an operation is in progress. Only services that were\nrunning are stopped and restarted; stopped services stay stopped.\n\nBoth `PIPELINE` and `STREAM RICHIESTE` read the native AIH proxy snapshot,\n`~/.aih/proxy-stats.json` (`AIH_HOME` overrides the directory), not Headroom's\nmetrics or savings event log. `PIPELINE` shows recorded requests, changed requests,\npreset errors, estimated token savings and each stage's application/measurement\ncounts. `elab/s` measures preset processing between successful samples, not all\nproxy traffic or token-generation speed. Counters persist across restarts.\n\n`STREAM RICHIESTE` shows the latest recorded events with local time, model,\nHTTP/WS transport, preset, changed/unchanged/error outcome, estimated savings\nand stage reasons. When Codex supplies `x-codex-turn-metadata`, events also show\nthe session ID (falling back to the thread ID) and Git project (`owner/repo` from\nthe first available workspace remote). These fields are recorded only for new\nrequests; older events or clients without this metadata omit them. After an\nupgrade, restart the proxy and reopen the updated dashboard; a source checkout\ncan be run directly with `node bin/cli.js status --ui` to avoid an older global\ninstallation taking precedence on PATH.\n\nRequest timings use a monotonic clock and appear on new events:\n\n- `proxy`: preset processing, including request decompression and serialization,\n  but excluding client upload, custom interceptors and forwarding.\n- `header`: time from dispatching the upstream HTTP request to receiving its\n  response headers, including connection setup and upstream request upload.\n  This is **not** time to first model token; SSE headers can arrive before output.\n- `tot`: time from receiving the client's HTTP request headers until the proxy\n  finishes sending the response (or the connection fails/closes). Includes client\n  upload, preset/interceptor work, upstream waiting and streaming/downstream\n  backpressure; it does not confirm delivery to the client application.\n\nHTTP/SSE entries also show the upstream HTTP status and incomplete/error states.\nThe existing event is updated without counting another request. A pending state\nonly means no completion was recorded (for example after a proxy crash), not a\nglobal count of active calls. Updates do not bring evicted events back into the\nbounded recent list. WebSocket events report **only preset time**: connection\nduration and arbitrary response frames cannot safely be attributed to individual\ncalls. Missing/older timings remain `n/d`. Error responses that arrive normally\n(such as HTTP 500) retain their status; a transport failure is marked separately\nfrom a preset error. Preset `none` remains unrecorded.\n\nPress **`d`** for source/configuration details and per-stage\nbefore/after token counts, percentages and measurement methods. Unknown savings\nremain unknown; partial estimates and token increases are explicitly marked.\nThe panels do not infer provider cache savings, costs, model-only latency or\nactive request counts. Preset `none` and interceptor-only traffic are not recorded.\n\nA running process is not a health check, and the final upstream is not monitored.\nSnapshot read time is separate from last-event time: an idle proxy is not stale\njust because no new event arrived. After a failed read, five seconds without a\nsample or a stopped proxy, totals/events are historical and live rates are hidden.\nNarrow terminals keep space for the newest events and service controls.\n\n---\n\n### Update aih\n\n```bash\naih update                         # update aih itself to the latest npm release\naih update --json                  # JSON result array, exit code 1 on failure\naih --version                      # verify the installed version\n```\n\nWithout service targets, `aih update` runs\n`npm install --global @drakonkat/ai-helper@latest --no-audit --no-fund`.\nIt does not update or restart managed services. npm must be on PATH and its\nglobal installation directory writable. Installer output is captured in\n`~/.aih/logs/aih.log` (or under `AIH_HOME`), with failure details in the result.\n\nThis updates the global npm installation, not a source checkout, local dependency,\nor standalone executable. Rebuild standalone executables separately and ensure\nyour shell resolves `aih` to the installation you intend to use. Restart a running\nbuilt-in proxy with `aih restart proxy` to load the updated code.\n\n### Update Managed Services\n\n```bash\naih ocx update                     # update OpenCodex to the latest available release\naih update ocx                     # equivalent command-first form\naih update ocx agentmemory         # update selected services\naih update pxpipe ocx agentmemory headroom  # all managed services, not aih itself\naih update ocx --json              # JSON result array, exit code 1 on any failure\n```\n\nUpdates are explicit: automatic version checks remain read-only. A current\ninstallation is left unchanged. Running services are restarted after an update;\nstopped services are not started. If installation fails after stopping a running\nservice, aih attempts to start it again and reports any recovery failure.\nUnknown/custom service targets are rejected before any selected service is\nchanged. The built-in `proxy` is part of ai-helper itself and cannot be updated\nas a service: use `aih update` without targets or rebuild the standalone executable\ninstead. The proxy's bundled pxpipe library is likewise updated with ai-helper,\nnot by updating the separate `pxpipe` service.\n\nThe Node services use `npm install --global <package>@latest` (`pxpipe-proxy`,\n`@bitkyc08/opencodex`, `@agentmemory/agentmemory`), so npm must be available and\nits global installation directory writable and on PATH. Headroom uses its own\n`headroom update --yes` command to respect the existing Python installation.\nInstaller output is captured in `aih logs <service>` rather than mixed into\nJSON or the live dashboard. An explicitly updated npx service is launched with\nthe verified package version so an older project dependency/cache cannot win.\n\n---\n\n### 2. Open Dashboards in Browser\n\n```bash\n# Open service dashboards (proxy is excluded)\naih open\n\n# Open only a specific dashboard\naih open agentmemory      # Opens http://localhost:3113\naih open ocx              # Opens http://localhost:10100\naih open pxpipe           # Opens http://localhost:47821\n\n# Open a repository instead of a dashboard (also works for the built-in proxy)\naih open ocx --repo\naih open proxy --repo\n```\n\n---\n\n### 3. Start Services\n\n```bash\n# Start ocx, agentmemory and the pxpipe proxy\naih start\n\n# Start a specific service\naih start pxpipe\naih start agentmemory\n```\n\nWithout service targets, `aih start` (or `aih up`) starts `ocx`, `agentmemory`,\nthen the built-in proxy with these options:\n\n```bash\naih start proxy http://127.0.0.1:10100/ --listen http://127.0.0.1:10102 --preset pxpipe --models \"gpt-6-astra,google-antigravity/gemini-3.8*,anthropic/claude-fable*\"\n```\n\nThe built-in proxy uses the pinned `pxpipe-proxy` **0.14.0** library. Update aih\nto receive this embedded version; updating the separate global `pxpipe` command\ndoes not update an older aih installation or standalone binary. See the\n[offline CPU profiling report](docs/pxpipe-performance-2026-09-30.md) for measured\ntokenization costs and worker-thread experiments.\n\nPxpipe transformations and their token estimates run in up to **two persistent\nCPU workers**. Excluded models bypass the worker queue; HTTP and SSE streaming\nremain on the main thread. Sessions have stable worker affinity to reuse caches.\nThe queue is limited to 32 waiting requests and `--max-body-bytes` of waiting\ninput; overload returns HTTP 503. Disconnecting cancels queued work or terminates\nand replaces the active worker. Shutdown closes both workers.\n\nInstallation applies a version-checked correction to pxpipe 0.14.0: diagnostic\ncomposition counts exclude encrypted reasoning, opaque compaction and media data,\nincluding JSON-serialized tool media. Forwarded payloads keep these values intact.\n`responsesComposition.partial` and `excludedBytes` identify incomplete diagnostic\ncounts. Lifecycle scripts must be enabled for this correction; standalone builds\ninclude it automatically. Dependency upgrades require reviewing the correction.\n\nThe request stream separates total preset time (`proxy`), worker queue time\n(`coda`), transformation time (`pxpipe`) and, on supporting Node versions, worker\nCPU time (`CPU`). Header and total response times retain their existing meaning;\nworker isolation does not shorten provider generation time.\n`loop max` is the maximum sampled main-thread scheduling delay since the preceding\npreset event beyond the 20 ms sampling interval, shared across requests. Queue\ntime includes cold worker startup.\n\nPass `--models` to `aih start` (or `aih up`) to override the proxy's model list:\n\n```bash\naih start --models \"gpt-6-astra,anthropic/claude-fable*\"\naih up --models=\"gpt-6-astra,anthropic/claude-fable*\"  # Equivalent value syntax\naih start --models=  # Use pxpipe's default model selection\n```\n\nTo save a model list once and reuse it on subsequent starts:\n\n```bash\naih config pxpipe-models=\"gpt-6-astra,claude-opus-5-5\"\naih start\n```\n\nThe preference is saved in `~/.aih/state.json` (or `AIH_HOME/state.json`).\nIt applies to `start`/`up` and proxy starts/restarts; an explicit `--models`\ntakes precedence without changing the preference. `aih config pxpipe-models=`\nsaves pxpipe's default selection. Configuration does not restart a running proxy.\n\nThe value is passed only to the built-in proxy; `ocx` and `agentmemory` start\nnormally. `--models=` passes an empty string; `--models \"\"` also works when your\nshell preserves empty arguments. A bare `--models` without a value is an error.\nSee [Select models](#select-models) for matching and compression behavior.\n\nThe no-target `start`/`up` commands supply the upstream, listener and preset above\non every invocation, plus the configured model list (or the list above if unset),\nunless `--models` overrides it.\nOther saved proxy options are retained.\nA first `aih start proxy <upstream>` instead uses listener `http://127.0.0.1:10101`\nand preset `none` unless specified. After configuration, `aih start proxy` reuses\nsaved options, including the upstream. Use the dedicated `start proxy` /\n`restart proxy` forms for `--listen`, `--preset` and other proxy options.\n\nIf the proxy is already running with different options, use `aih restart proxy`\nto apply changes, for example `aih restart proxy --models \"gpt-6-astra\"`.\nOmitted proxy options retain their saved values.\n\n`aih start` (also `aih up` and starts targeting individual services) checks npm's\n`latest` release of `@drakonkat/ai-helper`. If a newer version exists, it prints\nthe installed/latest versions and the update command to stderr. The check times\nout after 1.5 seconds; network errors never prevent startup. Updates are not\ninstalled automatically. Compiled executables must be rebuilt to update them.\n\n### Astra / `--gpt` (Windows)\n\n```powershell\naih start --gpt\naih start --gpt --json\n```\n\nUses the configured Windows compression stack: starts OCX when needed, then pxpipe on **47822** and Headroom on **8788**, and selects **gpt-6-astra** with the `pxpipe-codex` provider in Codex's user config. Requests follow **Codex → Headroom → pxpipe → OCX → ChatGPT subscription**. OCX retains its canonical OpenAI endpoint and uses account pool mode; Anthropic's OCX endpoint is direct to avoid a routing loop.\n\nThe provider keeps `requires_openai_auth = true` so Codex shows your signed-in ChatGPT profile. `experimental_bearer_token = \"local-proxy\"` keeps model requests using the local placeholder credential; OCX supplies the real upstream credentials. Both settings are needed: enabling OpenAI auth alone sends the ChatGPT token to the proxies and can break Claude routing. Reopen Codex if an already-running app still displays the provider label after this configuration change.\n\nThe startup uses the same banner, colors and per-process output as plain `aih start`, including the actual listening PID:\n\n```text\nStarting service(s): ocx, pxpipe, headroom...\n\n  Launching ocx... already running (PID: 1100)\n  Launching pxpipe... started (PID: 2200)\n  Launching headroom... started (PID: 3300)\n```\n\nThe JavaScript launchers are **included in the package and standalone build**; no external `.ps1` files are required. Install/login to OCX and install Node.js, pxpipe-proxy and Headroom first. AIH finds Node and Headroom through `PATH` (also `~/.local/bin/headroom.exe`), and pxpipe through global npm or its npm cache, without fixed cache hashes or user-specific paths. Missing dependencies produce an installation hint; AIH does not install tools or create subscription credentials.\n\nPaths default to the current user's home and respect `CODEX_HOME`, `APPDATA`, `LOCALAPPDATA`, `XDG_CONFIG_HOME`, and npm's cache/prefix configuration. Nonstandard installations can set `NODE_BINARY`, `PXPIPE_CLI_PATH` (the package's `bin/cli.js`) and `HEADROOM_BINARY`. Existing `PXPIPE_CONFIG`, `PXPIPE_LOG`, `PXPIPE_GPT_PROFILES`, `HEADROOM_WORKSPACE_DIR`, `HEADROOM_CONFIG_DIR` and `HEADROOM_SETTINGS_PATH` overrides are supported. The bundled Astra compression profile matches the previous launcher; Headroom runs with `--lossless --no-cache`.\n\nStartup follows dependency order (OCX, pxpipe, Headroom); **requests flow the other way: Headroom → pxpipe → OCX**, which selects the final endpoint by model. Both pxpipe upstreams point to OCX on 10100. Hidden, on-demand Windows tasks named `AIH-GPT-<user>-pxpipe` and `AIH-GPT-<user>-headroom` keep the proxies alive independently of Codex, without boot/login triggers or external script files. Logs are `gpt-<service>.stdout.log` / `gpt-<service>.stderr.log` in `~/.pxpipe` and the Headroom workspace. Healthy existing instances are reused, including instances started by the old launchers; existing external scripts/tasks are not removed or changed. An occupied but unhealthy port fails its readiness check rather than spawning a duplicate.\n\nPlain `aih start`, stop/restart and the TUI retain their existing service behavior; use `aih start --gpt` to bring up/check this chain and its printed URLs to access its dashboards. `--json` prints only JSON, including a `services` array with process IDs and already-running status.\n\nThe command backs up configuration files under `~/.aih/backups/gpt-*`, checks Headroom's actual upstream settings and verifies that Astra appears in the model catalog through the chain. AIH selects Astra last, after these checks. OCX can also sync Codex config during its own cold startup, so AIH saves the original before starting OCX; that backup remains available if startup fails. **Start a new Codex task** afterward: existing tasks can retain their old provider even after restarting the app. The existing pxpipe compression profile and Headroom compression options are preserved.\n\n---\n\n### 4. Stop Services\n\n```bash\n# Stop all running services (terminates process trees cleanly)\naih stop\n\n# Stop a specific service\naih stop ocx\n```\n\n---\n\n### 5. Restart Services\n\n```bash\n# Restart all services\naih restart\n\n# Restart a specific service\naih restart pxpipe\n```\n\n---\n\n### 6. View & Follow Logs\n\n```bash\n# View last 50 lines of logs\naih logs pxpipe\n\n# View last 100 lines\naih logs agentmemory -n 100\n\n# Stream logs in real-time (like tail -f)\naih logs ocx -f\n\n# Long options and equals syntax\naih logs proxy --lines=100 --follow\n```\n\n---\n\n## HTTP / WebSocket Proxy\n\nRequires **Node.js 20.19+** (also on PATH when using the Bun CLI or compiled executable).\nUse **Node.js 24+ for Codex**, whose Zstandard request compression needs Node.js 22.15+.\n\n### Proxy option values\n\nUse `aih start proxy <upstream> [options]` on first configuration, or\n`aih restart proxy [upstream] [options]` to change it. The upstream is an HTTP(S)\ndestination, for example `http://127.0.0.1:10100/`. Unspecified values reuse saved\noptions; defaults in this table apply when no saved value exists.\n\n| Option and example value | Meaning / default |\n| --- | --- |\n| `--listen http://127.0.0.1:10102` | Loopback HTTP listener; default `http://127.0.0.1:10101`. |\n| `--preset headroom-pxpipe` | Pipeline; default `none`. Choices: `none`, `pxpipe`, `headroom`, `rtk`, `headroom-pxpipe`, `rtk-pxpipe`, `rtk-headroom-pxpipe`. |\n| `--models \"gpt-6-astra,anthropic/claude-fable*\"` | pxpipe model selection; `--models=` restores pxpipe's defaults. Also accepted by generic `start`/`up`. |\n| `--interceptor \"./my hooks/interceptor.mjs\"` | Custom JavaScript hooks, loaded at startup; default none. `--interceptor=` clears the saved path. |\n| `--headroom-url http://127.0.0.1:8787` | Headroom compression service; default shown. |\n| `--rtk-filter grep` | Fixed RTK filter for matching tool output; default auto-detection. `--rtk-filter=` resets it. |\n| `--max-body-bytes 67108864` | Buffered HTTP / WebSocket limit in bytes; default 64 MiB. |\n| `--json` | Emit the proxy start/restart result as JSON. |\n\nString options accept both `--option value` and `--option=value`.\n\n### Start a compression pipeline\n\nFor a local OpenCodex upstream on port `10100`, with the aih listener on `10102`:\n\n```bash\n# Start the upstream and compression service, if not already running\naih start ocx\naih start headroom\n\n# First start: Headroom -> pxpipe library -> OpenCodex\naih start proxy http://127.0.0.1:10100/ --listen http://127.0.0.1:10102 --preset headroom-pxpipe --models \"gpt-6-astra,google-antigravity/gemini-3.8*\"\n\n# Inspect traffic and savings\naih stats proxy\naih status -ui\naih logs proxy -f\n```\n\nCodex's two root base URLs are configured automatically after aih's proxy starts\nsuccessfully (see below). For other clients, set the API base URL to\n**`http://127.0.0.1:10102/v1`**. The client\nmust connect to `10102` for these presets and statistics to run; connecting\ndirectly to OpenCodex (`10100`), Headroom (`8787`) or pxpipe (`47821`) bypasses\nthis aih proxy. Keep the client's existing credentials and selected model.\nOther clients are not configured automatically.\n\n### Automatic Codex configuration\n\nAfter `aih start proxy` / `aih restart proxy`, and after `aih start ocx` /\n`aih restart ocx` when an aih-managed proxy is running, aih sets these **root**\nkeys in `$CODEX_HOME/config.toml` (default: `~/.codex/config.toml`):\n\n```toml\nopenai_base_url = \"http://127.0.0.1:10102/v1\"\nexperimental_realtime_ws_base_url = \"http://127.0.0.1:10102/v1\"\n```\n\nThe URL uses the proxy's **actual bound host and port**, including dynamically\nallocated ports, never its upstream address. Both keys use the HTTP base URL;\nthe realtime client handles the WebSocket transport. `start` on an already-running\nservice also reconciles the settings, and TUI start/restart actions use the same path.\nWhen starting ocx, or a proxy targeting a known running ocx, aih waits up to 30 seconds\nfor ocx's `/readyz` response (`service: opencodex`, `status: ready`) before writing:\na live process or `/healthz` alone can precede ocx's own Codex configuration writes.\nOlder ocx versions without this readiness contract produce a warning rather than\nrisk a competing write. Neither credentials nor ocx's upstream/provider settings\nare changed.\n\nAutomatic configuration targets root upstream URLs. For upstreams with a path\nprefix (for example `/v1` or `/backend-api/codex`), aih warns and leaves Codex's\nURLs unchanged: those routes require an explicitly chosen client base path to\navoid duplicating the API prefix.\n\nComments, line endings and other TOML settings are preserved. A first-write backup\nof an existing file is kept at `config.toml.aih.bak` and never overwritten; a missing\nconfig is created. Writes are locked and atomic. Invalid TOML, conflicting active\nprofile URL overrides, links, concurrent modifications, or filesystem errors leave\nthe config unchanged and produce a warning without stopping a successfully started\nservice. Profile/provider tables are never rewritten. Profiles selected explicitly\nby a client and environment/CLI overrides can still take precedence over these root keys.\n\nSet **`AIH_CODEX_AUTOCONFIG=0`** to disable this behavior, including in automation.\n`status` and discovery are read-only with respect to Codex. Stopping the proxy does\nnot restore previous settings automatically; reconnect/reconfigure Codex before\nusing it without the proxy. Restart an already-open Codex client if it cached its\nconfiguration. JSON start/restart results include a `codexConfig` outcome.\n\nAfter the first start, use `restart` to change options; unspecified options are\nretained. Choose one of these alternatives:\n\n```bash\n# Keep the destination, listener and model selection; change the pipeline\naih restart proxy --preset rtk-pxpipe --rtk-filter=\naih restart proxy --preset pxpipe\naih restart proxy --preset headroom\naih restart proxy --preset rtk --rtk-filter=\n\n# Return to Headroom -> pxpipe\naih restart proxy --preset headroom-pxpipe\n\n# Forward without compression; clear any previously saved custom interceptor\naih restart proxy --preset none --interceptor=\n```\n\nRTK presets require an `rtk` executable with `rtk pipe` support on PATH.\nThe optional `rtk-headroom-pxpipe` recipe runs RTK -> Headroom -> pxpipe, in that\norder, and is included in the [benchmark](docs/benchmark.md). Adding/testing it\ndoes not change the active proxy recipe. Double compression can lose facts and\nshould be evaluated before selecting it for everyday traffic.\nThe benchmark also offers an opt-in `--suite quality` (12 Responses cases) and\n`*-native-bypass` flow variants to compare pxpipe with/without native image\nattachments. These variants do not reconfigure the everyday proxy. See the\n[quality and native-image benchmark](docs/benchmark.md#suite-qualità-e-richieste-con-immagini-native).\n`--rtk-filter=` selects automatic detection; `--rtk-filter grep` applies the\ngrep-output filter to every tool result, so use it only with matching output.\n\n### Select models\n\n**All models are forwarded.** `--models` selects only which models pxpipe may\ncompress; Headroom/RTK still process eligible requests outside that list.\nNames match the `model` in the request, including any provider prefix.\nFor example, an AGY catalog entry can be `google-antigravity/gemini-3.8-flash`,\nwhile Astra is `gpt-6-astra`.\n\n```bash\n# Exact Astra name plus any Gemini 3.8 variant under the AGY prefix\naih restart proxy --models \"gpt-6-astra,google-antigravity/gemini-3.8*\"\n\n# Include the GPT-5.5 and GPT-5.6 selections too\naih restart proxy --models \"gpt-5.5,gpt-5.6*,gpt-6-astra,google-antigravity/gemini-3.8*\"\n\n# Restore pxpipe's own default selection\naih restart proxy --models=\n```\n\nAn explicit list **replaces** the saved list. A trailing `*` matches a prefix:\n`anthropic/claude-fable*` includes `anthropic/claude-fable-5-1`. Other wildcard\npositions are unsupported; use the exact IDs from your client's model catalog.\nSelecting a model allows compression but does not force it: pxpipe can leave short or unprofitable\nrequests unchanged. The upstream must support the selected model/API format.\n\n### Transport and lifecycle\n\n```bash\naih start proxy http://127.0.0.1:10100/\n# Also accepts the shorthand: aih start proxy http:127.0.0.1:10100/\n\naih start proxy http://127.0.0.1:10100/ --listen http://127.0.0.1:10101 --interceptor ./interceptor.mjs\naih status proxy --json\naih logs proxy -f\naih restart proxy\naih stop proxy\n```\n\nThe positional URL is the **upstream destination**. The default listener is\n`http://127.0.0.1:10101`. Point the AI client's API base URL at this listener,\nkeeping its usual API path: for example, `http://127.0.0.1:10101/v1` forwards\n`/v1/responses` to `http://127.0.0.1:10100/v1/responses`. WebSockets use the same\nport and path with `ws://`; an HTTPS upstream automatically uses WSS.\nAn upstream path is a prefix: upstream `https://example.com/backend-api/codex`\nplus client `/responses` becomes `/backend-api/codex/responses`.\n\n`start` runs in the background and reports success only after the socket is\nlistening and the interceptor has loaded. One proxy is managed at a time;\n`restart proxy <upstream> [options]` changes its configuration. Omitted options\nreuse the last successful configuration, stored in `~/.aih/state.json`.\nUse `--interceptor=` to clear an interceptor. Once configured, the proxy also\nparticipates in unqualified `stop`, `restart` and `status` commands. Unqualified\n`start` applies the [default startup options](#3-start-services) described above.\n\nHTTP methods, paths, queries, authentication headers, status codes, cookies and\npayload bytes are forwarded. SSE stays streaming, with backpressure and upstream\ncancellation when the client disconnects. HTTP redirects are returned to the\nclient without following or rewriting `Location`. WebSocket text/binary messages,\nsubprotocol selection, ping/pong and close codes are relayed. `Host`, hop-by-hop\nheaders and WebSocket handshake/framing are regenerated for each connection.\nTLS certificates are verified normally; HTTP body compression is preserved.\n\nThis is a **reverse proxy**: apart from the explicit Codex startup integration\nabove, it does not configure clients, intercept unrelated machine traffic,\nimplement CONNECT/TLS interception, or translate\nbetween AI API formats. Both sides must speak the same protocol. The listener\naccepts loopback addresses only. OpenCodex's\n[HTTP/SSE relay](https://github.com/lidge-jun/opencodex/blob/main/src/server/relay.ts)\nand [WebSocket bridge](https://github.com/lidge-jun/opencodex/blob/main/src/server/ws-bridge.ts)\nwere reviewed as transport references; provider-specific rewriting is left to\nthe upstream service or your interceptor.\n\n### Reproducible proxy benchmarks\n\nCompare the same corpus through real proxy presets without reconfiguring managed services\nor mixing the aih proxy statistics. Offline replay measures common token estimates, latency and\ninformation preservation; explicit `--live` adds provider usage and answer checks.\n\n```powershell\nnpm run bench:proxy -- --presets none,pxpipe --formats responses --warmup 0 --repetitions 1\nnpm run bench:proxy -- --headroom-url http://127.0.0.1:8787 --repetitions 5\n```\n\nResults include JSON, JSONL, CSV and Markdown. Unknown image costs are not counted\nas zero, and offline checks never claim a semantic-quality winner. Benchmark-only\npxpipe allowlisting defaults to all fixture models so imaging is actually exercised.\nSee [benchmark documentation](docs/benchmark.md) for corpus customization, live\nevaluation, privacy, limitations and quality/performance decision thresholds.\n\n### Preset behavior\n\nThe recipes live in [src/proxy-presets.js](src/proxy-presets.js). All support\n`--interceptor ./interceptor.mjs`, which runs **after** the preset for further\nediting or logging. Configuration is saved; `aih restart proxy` reuses it.\nUse `--models=` to restore pxpipe's default model selection and `--rtk-filter=`\nto restore RTK auto-detection.\n\n- **pxpipe:** calls the [pxpipe library](https://github.com/teamchong/pxpipe#library-use-no-proxy),\n  selecting the transformer for Anthropic Messages, OpenAI Chat Completions or\n  OpenAI Responses. `--models` is an explicit allowlist of exact names or trailing\n  `*` prefixes; without it, pxpipe's own supported-model defaults apply. The library\n  decides whether imaging is worthwhile; short/unprofitable requests stay unchanged.\n  An explicit allowlist opts those models into imaging; it is not a quality guarantee.\n- **headroom:** sends messages to [`POST /v1/compress`](https://headroomlabs-ai.github.io/headroom/proxy/)\n  in `lossy_inline` mode, then forwards the result to your original upstream.\n  It carries system prompts and tool definitions unchanged. For Responses it compresses\n  only text in `function_call_output` items, preserving calls, IDs, reasoning and images.\n  This compression endpoint does not provide the full Headroom proxy's tool-schema\n  optimization or cache alignment. Set `HEADROOM_PROXY_TOKEN` before starting aih\n  if Headroom requires its own token; the client's provider credentials are never\n  sent to the compression service.\n- **rtk:** runs [`rtk pipe`](https://github.com/rtk-ai/rtk) with tool-result text on\n  stdin. `--rtk-filter` selects one fixed filter for all results; omit it for detection.\n  Use a fixed filter only when the tool output matches that format. Empty or larger\n  results are discarded. Prompts, tool calls and binary content are left untouched;\n  no command from an AI request is executed.\n- **headroom-pxpipe:** always applies Headroom first; `--models` gates only the\n  following pxpipe stage.\n- **rtk-pxpipe:** applies RTK to tool-result text first, then the pxpipe library.\n  `--rtk-filter` controls RTK and `--models` gates only pxpipe; RTK still runs for\n  models outside the allowlist. This chain needs RTK on PATH, with no Headroom service.\n\nPresets process JSON POSTs on Messages, Chat Completions and Responses routes,\nand outgoing WebSocket `response.create` events (flat or nested under `response`).\nWebSocket model selection uses the event's model, then the last model on that\nconnection, then the URL's `model` query. Requests with no resolvable model pass\nthrough. Binary frames, response events and SSE are unchanged. Gzip, deflate,\nBrotli and Zstandard HTTP request bodies are decoded with the configured size limit only for\ninspection; changed bodies are sent as plain JSON with corrected headers.\nZstandard (`Content-Encoding: zstd`, used by Codex) requires Node.js 22.15+.\nUnsupported encodings pass through with a warning in `aih logs proxy`, without preset processing.\nHeadroom and RTK have a 30-second timeout. A failed stage returns HTTP 502 or\ncloses the WebSocket; it never silently retries the AI request.\n\n### Proxy token savings\n\n```bash\naih stats proxy           # cumulative savings by stage and last five requests\naih stats proxy --json    # counters and last 20 requests, for scripts\naih status -ui           # live proxy savings and configured pipeline\naih logs proxy -f        # per-request [aih stats] lines\n```\n\nStatistics start with the first eligible AI request processed by an active preset.\nThe worker stores counters and the last 20 measurements in `~/.aih/proxy-stats.json`\n(`AIH_HOME` overrides the directory). They survive restarts and preset changes;\nolder traffic cannot be reconstructed. Prompts, tool outputs, images and credentials\nare not stored in these statistics.\n\n- Headroom supplies `tokens_before` and `tokens_after` for the messages sent to its\n  compression endpoint. These are Headroom's counts, not provider billing usage.\n- RTK uses local `o200k_base` token counts on each tool output before/after filtering.\n- pxpipe uses its estimated text baseline minus image tokens and injected text.\n  Where its transformer lacks these totals, a local text count plus the model's\n  image-cost estimate is used. Image base64 is never counted as ordinary text.\n- The total sums **incremental** savings from consecutive stages, including negative\n  savings when a stage increases token use. Missing measurements are marked unknown\n  and the total is marked partial. Model exclusions and unprofitable requests appear\n  as zero savings with a reason.\n\nThese are **preset processing estimates**, before any custom interceptor. They do\nnot measure provider cache savings, prices, actual billed usage, or whether upstream\naccepted the request. Errors in a preset count as processing failures with no credited\nsavings. Requests/events that the preset does not recognize are not counted.\n\nThe proxy has **no web dashboard**: its URL is a forwarding address. `aih open`\nskips it, `aih open proxy` opens nothing, and the interactive UI offers no dashboard\nshortcut when proxy is selected. Its statistics are available through the commands\nabove, without adding HTTP routes that could interfere with forwarded API paths.\n\n### Proxy troubleshooting\n\n| Symptom | What to check |\n| --- | --- |\n| No proxy statistics | Confirm `aih status proxy --json` shows a preset and the expected listener, point the client at that listener, then send a new request. `--preset none` does not produce preset savings. |\n| Traffic in logs, but no statistics | Check content type/encoding in the example interceptor logs and any `[aih preset]` warnings. Zstandard requests require Node.js 22.15+. Unsupported encodings are forwarded without preset processing. |\n| `model_excluded` | Match `--models` to the request's exact model ID, including provider prefixes; a new list replaces the old one. |\n| Headroom shows `no_messages` | For Responses requests, this preset sends only tool-result text to Headroom. A request without tool outputs has nothing for that stage to compress. |\n| Zero savings with `no_static_context`, `below_min_*` or `not_profitable` | The stage was reached but pxpipe chose to preserve the request. Zero savings is valid. |\n| Headroom has traffic but the UI stream stays unchanged | Both UI panels use native proxy preset events. Point the client at the AIH listener and enable a preset; requests sent directly to Headroom are not included. |\n| Startup fails | Read `aih logs proxy -n 100`. Check Node on PATH, upstream/listener ports, and the saved interceptor path. `aih restart proxy --interceptor=` clears a missing interceptor. |\n| Windows build cannot replace `dist/aih.exe` (`EPERM`) | Exit any dashboard using that binary with `q`, then rebuild. |\n\nWith Windows NVM, the compiled CLI resolves the actual Node executable behind\nthe launcher before starting the worker. Node remains required on PATH even\nwhen using the compiled aih executable.\n\n### JavaScript interceptor\n\nCopy [src/proxy-interceptor.example.mjs](src/proxy-interceptor.example.mjs), edit\nit and pass its path with `--interceptor`. Files run as trusted local JavaScript,\nwith normal Node imports and filesystem access. They load once at startup;\nrestart the proxy to apply edits. `.mjs` works regardless of the surrounding\npackage's module type. `.js` follows Node's usual package rules.\n\n```js\nexport async function onRequest(context) {\n  const body = JSON.parse(context.body.toString(\"utf8\"));\n  console.log(context.method, context.path, body);\n  // body.model = \"another-model\";\n  context.body = JSON.stringify(body);\n}\n\nexport function onWebSocketMessage(context) {\n  if (!context.isBinary) {\n    console.log(context.direction, context.body.toString(\"utf8\"));\n  }\n}\n```\n\nAll hooks are optional, may be async, and modify the supplied context in place;\nreturn values are ignored. Unmodified bodies pass through. Body values accept\n`Buffer`, `Uint8Array` or string. Header names use lowercase.\n\n| Export | Context / behavior |\n| --- | --- |\n| `onRequest(context)` | `method`, `path`, `headers`, `upstream`, complete `body` Buffer. Runs for HTTP requests; enables request buffering. |\n| `onResponse(context)` | `request`, `statusCode`, `headers`. Runs before response headers are sent. |\n| `onResponseBody(context)` | Same response context plus complete `body` Buffer. Buffers non-SSE responses only; takes precedence over the chunk hook. Skipped for HEAD, 204 and 304. |\n| `onResponseChunk(context)` | Same response context plus raw `body` chunk. Processes streaming responses without accumulating the whole body. |\n| `onWebSocketMessage(context)` | `request` handshake metadata, `direction` (`request` or `response`), complete `body` Buffer and `isBinary`. Preserves message order, including async hooks. |\n\nHTTP chunks can split JSON, SSE events and UTF-8 characters. Use incremental\ndecoding/parsing for streams; the whole-body response hook deliberately bypasses\nSSE. Bodies remain in their original encoding, so decompress explicitly before\nediting compressed data and update `content-encoding` and any integrity headers\nif you change the representation. The proxy recalculates buffered body lengths\nand removes `content-length` when transforming streamed responses.\n\n`--max-body-bytes 67108864` controls buffered HTTP bodies, individual WebSocket\nmessages and each direction's pending WebSocket queue (64 MiB default).\nWithout body hooks, HTTP streams are not buffered or size-limited by the proxy.\nInterceptor/upstream errors return HTTP 502 (oversized requests: 413), or close\nthe connection if headers have already been sent; failed WebSockets are closed.\nRequests are never retried automatically.\n\n## 🤖 Programmatic JSON API\n\nFor AI agents, scripts, and CI/CD pipelines, `status`, `start`/`up`, `restart`,\n`update` and `stats proxy` support `--json`:\n\n```bash\naih status --json\n```\n\n*Response:*\n```json\n[\n  {\n    \"id\": \"pxpipe\",\n    \"name\": \"pxpipe\",\n    \"command\": \"npx pxpipe-proxy\",\n    \"status\": \"running\",\n    \"pid\": 36212,\n    \"uptime\": \"1h 42m\",\n    \"url\": \"http://localhost:47821\",\n    \"description\": \"AI LLM / MCP reverse proxy bridge (pxpipe-proxy)\",\n    \"logPath\": \"C:\\\\Users\\\\user\\\\.aih\\\\logs\\\\pxpipe.log\",\n    \"logSize\": 48392\n  },\n  {\n    \"id\": \"ocx\",\n    \"name\": \"ocx\",\n    \"command\": \"ocx start\",\n    \"status\": \"running\",\n    \"pid\": 31540,\n    \"uptime\": \"54s\",\n    \"url\": \"http://localhost:10100\",\n    \"description\": \"OpenCode Interpreter daemon service (ocx start)\",\n    \"logPath\": \"C:\\\\Users\\\\user\\\\.aih\\\\logs\\\\ocx.log\",\n    \"logSize\": 12480\n  },\n  {\n    \"id\": \"agentmemory\",\n    \"name\": \"agentmemory\",\n    \"command\": \"npx @agentmemory/agentmemory\",\n    \"status\": \"running\",\n    \"pid\": 44600,\n    \"uptime\": \"1h 32m\",\n    \"url\": \"http://localhost:3113\",\n    \"description\": \"Long-term persistent agent memory service (@agentmemory/agentmemory)\",\n    \"logPath\": \"C:\\\\Users\\\\user\\\\.aih\\\\logs\\\\agentmemory.log\",\n    \"logSize\": 85190\n  }\n]\n```\n\n---\n\n## 📁 Configuration & State\n\nState and log files are stored in the user's home directory under `~/.aih`:\n- **State File**: `~/.aih/state.json` (records active PIDs, start timestamps, URLs, and status).\n- **Proxy Statistics**: `~/.aih/proxy-stats.json` (cumulative estimates and the last 20 measurements).\n- **Log Directory**: `~/.aih/logs/<service>.log` (stdout and stderr captured with startup banners).\n\nYou can override the storage directory by setting the `AIH_HOME` environment variable:\n```bash\nexport AIH_HOME=/custom/path/.aih\n```\n\n---\n\n## 📚 Architecture & Documentation\n\n- [ARCHITECTURE.md](ARCHITECTURE.md) - Deep dive into process tree management, auto-discovery engine, and TCP port mapping.\n- [CONTRIBUTING.md](CONTRIBUTING.md) - Guidelines for development, local testing, and pull requests.\n- [CHANGELOG.md](CHANGELOG.md) - Version release history and updates.\n\n---\n\n## 🛠️ Development & Testing\n\n```bash\n# Clone the repo\ngit clone https://github.com/drakonkat/ai-helper.git\ncd ai-helper\n\n# Install dependencies (Bun is also required for tests and compilation)\nnpm ci\n\n# Run CLI directly\nnode bin/cli.js status\n# or with bun\nbun dev status\n\n# Run test suite (existing CLI checks on Bun, proxy integration checks on Node)\nnpm test\n\n# Optional: compile standalone binary (Windows/macOS/Linux)\nbun run build\n```\n\nTo test the checkout before publishing or installing it globally, use\n`node bin/cli.js` in place of `aih`, or the freshly compiled binary:\n\n```powershell\n# Windows / PowerShell, from the repository directory\n.\\dist\\aih.exe restart proxy http://127.0.0.1:10100/ --listen http://127.0.0.1:10102 --preset headroom-pxpipe --models \"gpt-6-astra,google-antigravity/gemini-3.8*\"\n.\\dist\\aih.exe stats proxy\n.\\dist\\aih.exe status -ui\n```\n\nUse `./dist/aih` on macOS/Linux. Running an existing global `aih` does not test\nchanges in this checkout. Close the compiled UI with `q` before rebuilding it\non Windows; after a rebuild, restart the proxy to load the updated worker.\n\n---\n\n## 📄 License\n\nDistributed under the **MIT License**. See [LICENSE](LICENSE) for more information.\n","readmeFilename":"README.md"}