{"_id":"@alhisan/gac","_rev":"13-9079b9146a724d071fbbb3f5cb3c3e72","name":"@alhisan/gac","dist-tags":{"latest":"1.5.5"},"versions":{"1.0.0":{"name":"@alhisan/gac","version":"1.0.0","license":"GPL-3.0-only","_id":"@alhisan/gac@1.0.0","maintainers":[{"name":"faisalh","email":"faisal.alhisan@gmail.com"}],"bin":{"gac":"bin/gac.js"},"dist":{"shasum":"3a903f419ec3ad38aa518013728707cb5b18af2a","tarball":"https://registry.npmjs.org/@alhisan/gac/-/gac-1.0.0.tgz","fileCount":9,"integrity":"sha512-kMORB39jBc07taz8HiZNn8FMse/aBW1B+KlaEPBJBkqbrmGtrAa270MiuJLHWP/7GYFYgEPWRMFW3sGxvccSPg==","signatures":[{"sig":"MEQCIH12bRhYhOeQ7nJO+1uWXieJ348ITQ0lcx0WynuTNyQqAiAFYnVjsxBdCLR5jzzluqdVMr/ouVCOka6LgfSNSn0AOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88877},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"f0ff9edbfdaf25f97a05b65c4a3b49308e1b26b2","_npmUser":{"name":"faisalh","email":"faisal.alhisan@gmail.com"},"_npmVersion":"11.6.2","description":"Terminal client for GPT4All running on localhost","directories":{},"_nodeVersion":"25.2.1","dependencies":{"terminal-kit":"^3.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gac_1.0.0_1766792515507_0.5837612642591834","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@alhisan/gac","version":"1.1.0","license":"GPL-3.0-only","_id":"@alhisan/gac@1.1.0","maintainers":[{"name":"faisalh","email":"faisal.alhisan@gmail.com"}],"bin":{"gac":"bin/gac.js"},"dist":{"shasum":"9849b5cab9dd7634bfa8c3d4d30c57bef78d44ef","tarball":"https://registry.npmjs.org/@alhisan/gac/-/gac-1.1.0.tgz","fileCount":9,"integrity":"sha512-75CB89XsffCx8BLQrvrLJ99A3QkoOyavXENrB4l4PQUwliXrZrDOlTePzthF+lZfJghi6J9bntVQ+Ts5nsB3FQ==","signatures":[{"sig":"MEUCIQD7SPmtY4pttbcy/HF5OJLQxo1F/hsOwSWyTeNR+U/bLQIgLKdvehCKIIHh2eMNxs6UOD2SKP5wwvn2SYCn8eR5iiA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78938},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"e4bb48389440bdd74e128e77faca15b5e0cc35e6","_npmUser":{"name":"faisalh","email":"faisal.alhisan@gmail.com"},"_npmVersion":"10.9.3","description":"Terminal client for GPT4All running on localhost","directories":{},"_nodeVersion":"22.20.0","dependencies":{"terminal-kit":"^3.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gac_1.1.0_1769800160892_0.19321083522842275","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@alhisan/gac","version":"1.1.1","license":"GPL-3.0-only","_id":"@alhisan/gac@1.1.1","maintainers":[{"name":"faisalh","email":"faisal.alhisan@gmail.com"}],"homepage":"https://github.com/kwmx/gac#readme","bugs":{"url":"https://github.com/kwmx/gac/issues"},"bin":{"gac":"bin/gac.js"},"dist":{"shasum":"50b4e250507023550b3968b802899243f2fbd4c9","tarball":"https://registry.npmjs.org/@alhisan/gac/-/gac-1.1.1.tgz","fileCount":9,"integrity":"sha512-BCE5Btzl4JrDG+7CwmH2iwJNGsPMjz09oaepdO9v1F4zaSoI4wUMyE/IJJ+Se24vUt8zcUqtGLOInOWMtj9rgQ==","signatures":[{"sig":"MEYCIQDc355jS1XH3Kng3EEN9XK/YTP5dwFmc2kz55ulRUFCSAIhAMyPg9tGWr+IPXtVCAWln66il98c+EB567czo5QHDzW9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84163},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"c94ce4446e040d7aae84438d65015514c90bd65e","scripts":{"test":"echo \"No tests yet\""},"_npmUser":{"name":"faisalh","email":"faisal.alhisan@gmail.com"},"repository":{"url":"git+https://github.com/kwmx/gac.git","type":"git"},"_npmVersion":"10.9.3","description":"Terminal client for GPT4All running on localhost","directories":{},"_nodeVersion":"22.20.0","dependencies":{"terminal-kit":"^3.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gac_1.1.1_1769841593840_0.8392185926632147","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@alhisan/gac","version":"1.2.1","license":"GPL-3.0-only","_id":"@alhisan/gac@1.2.1","maintainers":[{"name":"faisalh","email":"faisal.alhisan@gmail.com"}],"homepage":"https://github.com/kwmx/gac#readme","bugs":{"url":"https://github.com/kwmx/gac/issues"},"bin":{"gac":"bin/gac.js"},"dist":{"shasum":"2149b6b461d16e5530f5ad61b51e8d391a7e60df","tarball":"https://registry.npmjs.org/@alhisan/gac/-/gac-1.2.1.tgz","fileCount":10,"integrity":"sha512-u0cHvxJRcEo++OsX1jwatULMlaFO5zB3YMJ2MeyoM9OVEXbPuSKp6idARPjXQ2NoILUsHvgyfIxkTjAniF4PWw==","signatures":[{"sig":"MEYCIQCawt5S3jp0St7gbt8dq7CBNfiy+V46TpsaMb8b/sIMAgIhALiPwPVucc7DH0FDQetUd2E9ViJz26Zdx5jdq7xTdWeX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103941},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"69511c9458a610d8de2b41c61e86ef8a6a8ef409","scripts":{"test":"echo \"No tests yet\""},"_npmUser":{"name":"faisalh","email":"faisal.alhisan@gmail.com"},"repository":{"url":"git+https://github.com/kwmx/gac.git","type":"git"},"_npmVersion":"10.9.3","description":"Terminal client for GPT4All running on localhost","directories":{},"_nodeVersion":"22.20.0","dependencies":{"terminal-kit":"^3.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gac_1.2.1_1769851256802_0.7233275352569981","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@alhisan/gac","version":"1.3.0","license":"GPL-3.0-only","_id":"@alhisan/gac@1.3.0","maintainers":[{"name":"faisalh","email":"faisal.alhisan@gmail.com"}],"homepage":"https://github.com/kwmx/gac#readme","bugs":{"url":"https://github.com/kwmx/gac/issues"},"bin":{"gac":"bin/gac.js"},"dist":{"shasum":"ff0841a1d44600c62d5542b9f518e1fd5c32f248","tarball":"https://registry.npmjs.org/@alhisan/gac/-/gac-1.3.0.tgz","fileCount":10,"integrity":"sha512-o8b8McHHqKCIf0yYjE4avKeYboKGsfpRh6fDlHdE8HOytZ5EZEr7L7elX7nGS2UIfW0OB3IlE9ZxcIr13HPSzA==","signatures":[{"sig":"MEUCIAT5YEzbp/IiP+/a2T2FiM1pbIb0x6Hv6MKyvRZwmkeqAiEAnptIG8foOinSpGWZ+40tjMcijnqTxEXSfe/NHO90ChY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104353},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"f11b45679a1c5e2b5bc15fc89efda0fc2a1e5252","scripts":{"test":"echo \"No tests yet\""},"_npmUser":{"name":"faisalh","email":"faisal.alhisan@gmail.com"},"repository":{"url":"git+https://github.com/kwmx/gac.git","type":"git"},"_npmVersion":"11.7.0","description":"Terminal client for GPT4All running on localhost","directories":{},"_nodeVersion":"25.4.0","dependencies":{"terminal-kit":"^3.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gac_1.3.0_1772213792567_0.21430934946265157","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@alhisan/gac","version":"1.2.2","license":"GPL-3.0-only","_id":"@alhisan/gac@1.2.2","maintainers":[{"name":"faisalh","email":"faisal.alhisan@gmail.com"}],"homepage":"https://github.com/kwmx/gac#readme","bugs":{"url":"https://github.com/kwmx/gac/issues"},"bin":{"gac":"bin/gac.js"},"dist":{"shasum":"a9c412592f900a693ec2b813bd5d6420c744ccc6","tarball":"https://registry.npmjs.org/@alhisan/gac/-/gac-1.2.2.tgz","fileCount":11,"integrity":"sha512-ZbhAAabXo8fZw5GHRkmJpnbsk6QOgvNBT40ej9+O4Js/ztSM4Z4ioHqpDD1IefQwt4ViFiGpR6lV8CCY4BUvSA==","signatures":[{"sig":"MEMCIBxb55ULbQwf2AIUa4Cg4zh7li6qhutqbzKykVEGwfjMAh9ZGOzVvSxPMUdPiWDVVsLV4UlcYUBsvGkt9s6c0tdl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118109},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"9df8bf09bb2b07b282432fc4dae48a5fe0830280","scripts":{"test":"echo \"No tests yet\""},"_npmUser":{"name":"faisalh","email":"faisal.alhisan@gmail.com"},"repository":{"url":"git+https://github.com/kwmx/gac.git","type":"git"},"_npmVersion":"10.9.4","description":"Terminal client for GPT4All running on localhost","directories":{},"_nodeVersion":"22.22.0","dependencies":{"terminal-kit":"^3.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gac_1.2.2_1775858507900_0.8322301969419816","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@alhisan/gac","version":"1.2.3","license":"GPL-3.0-only","_id":"@alhisan/gac@1.2.3","maintainers":[{"name":"faisalh","email":"faisal.alhisan@gmail.com"}],"homepage":"https://github.com/kwmx/gac#readme","bugs":{"url":"https://github.com/kwmx/gac/issues"},"bin":{"gac":"bin/gac.js"},"dist":{"shasum":"fdc4f804c947c8dd6aacaf1c476a1161710e09fe","tarball":"https://registry.npmjs.org/@alhisan/gac/-/gac-1.2.3.tgz","fileCount":11,"integrity":"sha512-h6zKl2CREDFgEarolNs9QXEgddtTy8tW+W0gSQS174IlwN5AxVtY4pnPCi1WlU79NsaJeLu+saR+xA2jCScpLg==","signatures":[{"sig":"MEQCIFTaOrxtIKZF+yksyk420STMkYr18mYeVubWUpJf/7otAiAoeMvPW2sYQCvPF+r1V7nPo3rU6uI5vZmk8ZTq00hDyw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126696},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"eb8838fd2c1f56399883060f9a13290b0ed0e759","scripts":{"test":"echo \"No tests yet\""},"_npmUser":{"name":"faisalh","email":"faisal.alhisan@gmail.com"},"repository":{"url":"git+https://github.com/kwmx/gac.git","type":"git"},"_npmVersion":"10.9.4","description":"Terminal client for GPT4All running on localhost","directories":{},"_nodeVersion":"22.22.0","dependencies":{"terminal-kit":"^3.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gac_1.2.3_1775861676310_0.11098284936768321","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@alhisan/gac","version":"1.5.0","license":"GPL-3.0-only","_id":"@alhisan/gac@1.5.0","maintainers":[{"name":"faisalh","email":"faisal.alhisan@gmail.com"}],"homepage":"https://github.com/kwmx/gac#readme","bugs":{"url":"https://github.com/kwmx/gac/issues"},"bin":{"gac":"bin/gac.js"},"dist":{"shasum":"80d6544fc6083ebfe44213ea07836dfc59089854","tarball":"https://registry.npmjs.org/@alhisan/gac/-/gac-1.5.0.tgz","fileCount":59,"integrity":"sha512-lAQQ/586rfiXFMz+v9LA/85aJEcPShsEXOE+4MfHxOdlkZplk8knWpz2RPSFixZRScTgKEW0ttYqVH6+VGoeDw==","signatures":[{"sig":"MEYCIQDU9+QQgfsHiY99p299QDpPFdY6kwQzknWkm9qjxxd+JwIhAP2p7v+EKD9ws2EJGbKf9hK7NNOnATfiAxLtYvLcywH9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alhisan%2fgac@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":522832},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"814c6910f424309efd749da89deca060035ebe9c","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:dacdc0fa-fe35-4b10-bbcf-8cfdb73d05f3"}},"repository":{"url":"git+https://github.com/kwmx/gac.git","type":"git"},"_npmVersion":"11.16.0","description":"AI-powered terminal assistant for OpenAI-compatible APIs, Ollama, and OpenAI Codex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"terminal-kit":"^3.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gac_1.5.0_1784056753891_0.7001961912743437","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@alhisan/gac","version":"1.5.1","license":"GPL-3.0-only","_id":"@alhisan/gac@1.5.1","maintainers":[{"name":"faisalh","email":"faisal.alhisan@gmail.com"}],"homepage":"https://github.com/kwmx/gac#readme","bugs":{"url":"https://github.com/kwmx/gac/issues"},"bin":{"gac":"bin/gac.js"},"dist":{"shasum":"cd91d15e231ef77d89f88acfc9a0e1399a0a8b86","tarball":"https://registry.npmjs.org/@alhisan/gac/-/gac-1.5.1.tgz","fileCount":32,"integrity":"sha512-IgAMxXwo235l3+iUuJ0TnHZLI3Z/mVrEsbdyRHqsSFUoPwvCVXrPYMJmJAuLj/yKYMmK6oN+78f/4hNx+uxaDQ==","signatures":[{"sig":"MEUCIQCmcVi/s6gZmdqWCAuUc6Ws4kRNT25bbSykfHGN90jb7wIgcCa3MPO8kM1bQIc2YOIdBQ8pNbowVBCGos3/ST+dKuY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alhisan%2fgac@1.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":354193},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"c9c1b109261fc509672674fe2a690ff0db77570d","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:dacdc0fa-fe35-4b10-bbcf-8cfdb73d05f3"}},"repository":{"url":"git+https://github.com/kwmx/gac.git","type":"git"},"_npmVersion":"11.16.0","description":"AI-powered terminal assistant for OpenAI-compatible APIs, Ollama, and OpenAI Codex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"terminal-kit":"^3.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gac_1.5.1_1784060690058_0.18643889053818086","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"@alhisan/gac","version":"1.5.2","license":"GPL-3.0-only","_id":"@alhisan/gac@1.5.2","maintainers":[{"name":"faisalh","email":"faisal.alhisan@gmail.com"}],"homepage":"https://github.com/kwmx/gac#readme","bugs":{"url":"https://github.com/kwmx/gac/issues"},"bin":{"gac":"bin/gac.js"},"dist":{"shasum":"3d3c42a0ef563cbf06135af8de5e4ea251a35039","tarball":"https://registry.npmjs.org/@alhisan/gac/-/gac-1.5.2.tgz","fileCount":32,"integrity":"sha512-C8mGMZSjhYwwJWAw4GyjH02bI8PVgyfcfe0OGJIxY/sROmPNtYlIX0LBrGoDUbAgHL1jAM9WJMftKhRTf7z2JA==","signatures":[{"sig":"MEYCIQDv0F9+iGLQ+THfdgHPf6VVxwNZDdOxX8pZigVW8Cst5wIhAOMVUueVTwRtnTFS2EnbYMfYVgN90n0/2KzytviDGsBg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alhisan%2fgac@1.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":360505},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"cf28c333ea49ecd5f107cf40e4977caa6c6bd171","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:dacdc0fa-fe35-4b10-bbcf-8cfdb73d05f3"}},"repository":{"url":"git+https://github.com/kwmx/gac.git","type":"git"},"_npmVersion":"11.16.0","description":"AI-powered terminal assistant for OpenAI-compatible APIs, Ollama, and OpenAI Codex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"terminal-kit":"^3.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gac_1.5.2_1784065903726_0.22859915026215982","host":"s3://npm-registry-packages-npm-production"}},"1.5.3":{"name":"@alhisan/gac","version":"1.5.3","license":"GPL-3.0-only","_id":"@alhisan/gac@1.5.3","maintainers":[{"name":"faisalh","email":"faisal.alhisan@gmail.com"}],"homepage":"https://github.com/kwmx/gac#readme","bugs":{"url":"https://github.com/kwmx/gac/issues"},"bin":{"gac":"bin/gac.js"},"dist":{"shasum":"e81d1f9b03107826899c0ca7437d367a1ffe43ae","tarball":"https://registry.npmjs.org/@alhisan/gac/-/gac-1.5.3.tgz","fileCount":32,"integrity":"sha512-aA9TsN9Aj1MKzvm7R/AV67zrVBQPg89MxHv29J74OqQ6A8W/4pZ8ZcYoTEkQ5w6g1gNbZJWlCgEfLreJx5Vjsg==","signatures":[{"sig":"MEUCIQDauawSlW/RhIe8gjaC3soj5L+6/mWVZwQiom0l15FrVQIgdUCI0i/wN7RN7oBOpl1Txt7tjOcngf+Vl3mUMG5YIq8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alhisan%2fgac@1.5.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":362524},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"02a77c7dd762f26be2030cc11eb16babf4f603b6","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:dacdc0fa-fe35-4b10-bbcf-8cfdb73d05f3"}},"repository":{"url":"git+https://github.com/kwmx/gac.git","type":"git"},"_npmVersion":"11.16.0","description":"AI-powered terminal assistant for OpenAI-compatible APIs, Ollama, and OpenAI Codex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"terminal-kit":"^3.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gac_1.5.3_1784097534139_0.49174434027418523","host":"s3://npm-registry-packages-npm-production"}},"1.5.4":{"name":"@alhisan/gac","version":"1.5.4","license":"GPL-3.0-only","_id":"@alhisan/gac@1.5.4","maintainers":[{"name":"faisalh","email":"faisal.alhisan@gmail.com"}],"homepage":"https://github.com/kwmx/gac#readme","bugs":{"url":"https://github.com/kwmx/gac/issues"},"bin":{"gac":"bin/gac.js"},"dist":{"shasum":"c44bc864169e557c65ca8ec78f176281299850a2","tarball":"https://registry.npmjs.org/@alhisan/gac/-/gac-1.5.4.tgz","fileCount":34,"integrity":"sha512-1F/RUz7AY6FWemQzwbReJIeNtT5tBitP7DggXQOycIPwA5dleIBOzxA52I6BMsUYXv9FO1yQcngofZC1O96qIQ==","signatures":[{"sig":"MEYCIQC2gw3WOOuWBCASvisQTX2rLNZNj90cgqk9zPsstnYIIAIhAIeVFChXct5MVw5sUaHZdRjuaCK72ER1ZwU5bk4ZuSVi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alhisan%2fgac@1.5.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":375452},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"281a4e7829c9e41fd03af4ab23cb9d4595a137d3","scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:dacdc0fa-fe35-4b10-bbcf-8cfdb73d05f3"}},"repository":{"url":"git+https://github.com/kwmx/gac.git","type":"git"},"_npmVersion":"11.16.0","description":"AI-powered terminal assistant for OpenAI-compatible APIs, Ollama, and OpenAI Codex.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"terminal-kit":"^3.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/gac_1.5.4_1784101378949_0.16784362252560991","host":"s3://npm-registry-packages-npm-production"}},"1.5.5":{"name":"@alhisan/gac","version":"1.5.5","description":"AI-powered terminal assistant for OpenAI-compatible APIs, Ollama, and OpenAI Codex.","license":"GPL-3.0-only","type":"module","bin":{"gac":"bin/gac.js"},"engines":{"node":">=18.0.0"},"scripts":{"test":"node --test"},"dependencies":{"terminal-kit":"^3.1.0"},"repository":{"type":"git","url":"git+https://github.com/kwmx/gac.git"},"gitHead":"a5dd01add18e4240fd738b8dd8380524b9a4bc1b","_id":"@alhisan/gac@1.5.5","bugs":{"url":"https://github.com/kwmx/gac/issues"},"homepage":"https://github.com/kwmx/gac#readme","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-WKNWXa4MZ0Q5nZkCR6486hyAExLHHgh47+Z6lkCFxHPqTJkov5yey/Nw9FyatLnRH1nsfpkX9E6qEtOAfYe6gQ==","shasum":"eb70266079b1c6bc2620de58f52df3cae4d752ff","tarball":"https://registry.npmjs.org/@alhisan/gac/-/gac-1.5.5.tgz","fileCount":34,"unpackedSize":376137,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alhisan%2fgac@1.5.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCPXfuMNbECAuq3AKEmpM/pQ1ZlYkb5qGWUYDors/0NigIhAK7YWq6hwXJDdvBGvnHkwsr6EZAfSbczuyRFDUc3lLO2"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:dacdc0fa-fe35-4b10-bbcf-8cfdb73d05f3"}},"directories":{},"maintainers":[{"name":"faisalh","email":"faisal.alhisan@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gac_1.5.5_1788086886533_0.3532800474266313"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-26T23:41:55.411Z","modified":"2026-08-30T10:48:07.081Z","1.0.0":"2025-12-26T23:41:55.666Z","1.1.0":"2026-01-30T19:09:21.044Z","1.1.1":"2026-01-31T06:39:53.989Z","1.2.1":"2026-01-31T09:20:56.988Z","1.3.0":"2026-02-27T17:36:32.713Z","1.2.2":"2026-04-10T22:01:48.043Z","1.2.3":"2026-04-10T22:54:36.445Z","1.5.0":"2026-07-14T19:19:14.099Z","1.5.1":"2026-07-14T20:24:50.218Z","1.5.2":"2026-07-14T21:51:43.910Z","1.5.3":"2026-07-15T06:38:54.293Z","1.5.4":"2026-07-15T07:42:59.084Z","1.5.5":"2026-08-30T10:48:06.742Z"},"bugs":{"url":"https://github.com/kwmx/gac/issues"},"license":"GPL-3.0-only","homepage":"https://github.com/kwmx/gac#readme","repository":{"type":"git","url":"git+https://github.com/kwmx/gac.git"},"description":"AI-powered terminal assistant for OpenAI-compatible APIs, Ollama, and OpenAI Codex.","maintainers":[{"name":"faisalh","email":"faisal.alhisan@gmail.com"}],"readme":"# GAC CLI (gac)\n\nTerminal client for OpenAI-compatible APIs (including GPT4All), Ollama, and OpenAI Codex (sign in with your ChatGPT plan — no API key needed). Supports streaming responses, interactive chat with saved sessions, piped input, AI-generated commit messages, step-by-step runbooks with approval gates, and configurable markdown rendering (tables and syntax highlighting included) using `terminal-kit`.\n\n## Installation\n\nRequirements: Node.js 18+ and a running OpenAI-compatible server (like GPT4All) or Ollama.\n\n```bash\nnpm install -g @alhisan/gac\n```\n\nOr if you don't want to install globally\n\n```bash\nnpm install\nnode bin/gac.js --help\n```\n\nTest if it works:\n\n```bash\ngac --help\n```\n\n## Usage\n\nSingle prompt:\n\n```bash\ngac -a \"Hello gpt4all, how are you doing today?\"\ngac \"How do I push to GitHub?\"\ngac suggest \"How do I connect to ssh server on a custom port 5322?\"\ngac explain \"How do I use rsync?\"\ngac suggest -d \"Give me step-by-step instructions to set up an SSH server on port 5322\"\ngac runbook \"Set up a new Node.js project with eslint\"\n```\n\n### Piped input\n\nAnything piped into gac is attached to the prompt as input — or used as the prompt itself when no prompt is given:\n\n```bash\ncat error.log | gac explain \"why is this failing?\"\ngit diff | gac ask \"summarize these changes\"\ndmesg | tail -50 | gac \"anything wrong here?\"\necho \"how do I list open ports\" | gac\n```\n\nWhen gac's output is piped or redirected, it automatically switches to plain text (no colors, no markdown styling), so it composes with `less`, `grep`, files, and scripts.\n\nNote: piped input is read until the producer closes the pipe, so don't pipe endless streams (`tail -f ... | gac` will wait forever — use `tail -n 50` instead).\n\n### File context\n\nInclude files as context with `-f`/`--file` (repeatable):\n\n```bash\ngac explain -f src/app.js \"what does this file do?\"\ngac ask -f package.json -f src/cli.js \"why might the build fail?\"\n```\n\nOversized input (piped or file) is automatically truncated head-and-tail to fit the model's context window.\n\n### Commit messages\n\nGenerate a commit message from your staged changes:\n\n```bash\ngit add -p\ngac commit            # propose, then [Enter] commit / [e] edit / [r] regenerate / [q] quit\ngac commit --dry-run  # print the message only, never commit\n```\n\n`[e]` opens the message in `$EDITOR`. In a non-interactive shell `gac commit` prints the message and exits without committing.\n\n### Fixing a failed command\n\n```bash\ngac fix                          # fix the last command from shell history\ngac fix \"tar -xvf archive\"       # fix an explicit command\nmycmd 2>&1 | gac fix mycmd       # include the error output as context\n```\n\ngac proposes a corrected command with a one-line explanation, then `[Enter] run / [e] edit / [c] copy / [q] quit`. `[c]` copies via OSC 52 (works over SSH). Corrections matching the blocklist can't be run, only edited or copied. History lookup supports bash, zsh, and fish (note: bash only writes history on shell exit unless you use `history -a` in `PROMPT_COMMAND`).\n\n### Runbooks\n\n`gac runbook` asks the model for a step-by-step command plan, then walks through it with per-step approval:\n\n```text\nStep 1 of 3:\nInstall dependencies\nCommand: npm install\n[Enter] run  [e] edit  [s] skip  [q] quit:\n```\n\n- `[e]` lets you edit the command before running it (fix paths, ports, placeholders).\n- `[s]` skips a step, `[q]` stops and prints the remaining plan.\n- Commands matching the blocklist (`blocked_commands.json`) cannot be run — only edited or skipped.\n- When a step fails, gac offers `[r] ask the model for a fix` — the error output is sent back to the model and the corrected command re-enters the normal approval gate — alongside `[s] skip` and `[q] stop`.\n- Steps run in a persistent shell everywhere: your login shell on Linux/macOS, PowerShell on Windows — `cd` and environment variables persist across steps on both.\n\nPreview or export instead of executing:\n\n```bash\ngac runbook --dry-run \"Install docker\"           # print the plan, run nothing\ngac runbook --export setup.sh \"Install docker\"   # write an executable script (also .ps1 / .bat)\n```\n\nExported scripts comment out blocked commands with the reason.\n\nList models and set a default:\n\n```bash\ngac models\n```\n\nThis opens an interactive selector. Use arrow keys + Enter to choose a model, or Ctrl+C/Esc to cancel. In a non-interactive shell it just prints the list.\n\nInteractive mode:\n\n```bash\ngac chat\n```\n\nExit chat with `exit`, `quit`, or Ctrl+C. Start a line with `\"\"\"` to enter multi-line input (finish with `\"\"\"` on its own line) — handy for pasting code. See `/help` inside chat for all commands (`/new`, `/sessions`, `/rename`, `/system`, `/model`, `/copy`, `/clear`, `/retry`, `/export`): `/model` switches models for the current session, and `/copy` copies the last code block (or the whole last reply) to your clipboard via OSC 52 — which works over SSH in most modern terminals.\n\nLong conversations are automatically trimmed to fit the model's context window — the full history stays saved in the session; only the request to the model drops the oldest turns (a notice is shown when that happens).\n\nFlags (place them before the prompt — once the prompt starts, tokens like `-f` are treated as prompt text, so `gac ask what does -f mean in tar` works):\n\n- `-f, --file <path>` include a file as context (repeatable).\n- `-d, --detailed-suggest` enable more detailed, step-by-step suggestions in `suggest` mode (can also be set via config key `detailedSuggest`).\n- `--detailed-context` include current directory context in `suggest`/`explain` prompts (can also be set via config key `detailedContext`).\n- `--dry-run` runbook/commit: show the result, execute nothing.\n- `--export <path>` runbook: write the plan to a script instead of running it.\n- `--no-render` disables markdown styling for that run.\n- `--debug-render` prints the raw model output after the rendered response.\n- `-V, --version` show version.\n- `-h, --help` show help.\n\n### Shell completions\n\n```bash\n# bash\ngac completions bash > ~/.local/share/bash-completion/completions/gac\n# (or add to ~/.bashrc:  eval \"$(gac completions bash)\")\n\n# zsh — with fpath+=(~/.zfunc) before compinit in ~/.zshrc\ngac completions zsh > ~/.zfunc/_gac\n\n# fish\ngac completions fish > ~/.config/fish/completions/gac.fish\n```\n\nCompletes commands, flags, `config get/set/tui`, and file paths for `-f`/`--export`.\n\n## OpenAI Codex (ChatGPT plan)\n\ngac can talk to OpenAI's Codex backend using the same ChatGPT OAuth sign-in the official Codex CLI uses, so usage is billed to your ChatGPT plan (Plus/Pro/Team) instead of an API key:\n\n```bash\ngac auth login                     # opens the browser; sign in with your ChatGPT account\ngac config set provider codex      # or pick it in `gac config tui`\ngac ask \"how do I list open ports?\"\n```\n\n- `gac auth status` shows who is signed in (and the plan); `gac auth logout` removes the stored credentials.\n- If you already use the Codex CLI, gac reuses your existing `~/.codex/auth.json` login automatically — no second sign-in needed.\n- Tokens are stored in `~/.gac/codex-auth.json` and refreshed automatically when they expire.\n- The Codex provider has its own model setting (`codexModel`, default `gpt-5.6-sol`), so you can switch between `openai`, `ollama`, and `codex` freely without breaking either setup. `gac models` and `/model` in chat edit the right one for the active provider.\n- `gac models` lists the models your ChatGPT plan can actually use right now — gac reads OpenAI's live catalog for your account, so the list stays correct as OpenAI rotates models. If a saved `codexModel` has been retired you'll get a clear error naming the current models and how to switch.\n- On a remote/SSH machine, forward the OAuth callback port before `gac auth login`: `ssh -L 1455:localhost:1455 <host>`.\n- The Codex backend only streams; with `stream: false` gac simply buffers the stream and prints the finished reply.\n- `maxTokens` is honored (sent as `max_output_tokens`; on reasoning models it includes reasoning tokens, so very small caps can cut answers short). `temperature` is not sent — the Codex backend manages sampling.\n- Usage counts against your ChatGPT plan's limits; when a limit is hit the API returns an error and gac reports when it resets.\n\n## Telemetry\n\nGAC can send **optional, opt-in, privacy-preserving usage telemetry**. It is\n**OFF by default** and creates nothing on disk or the network until you\nexplicitly consent.\n\n```bash\ngac telemetry status    # show the saved + effective state (no network request)\ngac telemetry info      # full consent statement, event catalog, and file paths\ngac telemetry enable    # interactive consent (default No); --yes for scripts\ngac telemetry disable   # turn off, delete the queue and local identifier\n```\n\nThe first time you run an interactive, telemetry-eligible command (`ask`,\n`suggest`, `explain`, a direct prompt, `chat`, `runbook`, `commit`, `fix`) you\nare shown a one-time notice and asked once. The default answer is **No**, and\ndeclining is remembered so you are not asked again. The prompt never appears for\n`--help`, `--version`, `config`, `auth`, `models`, `completions`, the\n`telemetry` commands, or any non-interactive / piped / redirected / CI run.\n\n### What is collected\n\nA stable, **random installation identifier** generated by GAC (a UUID hashed to\n`SHA-256(\"gac-telemetry-v1:\" + uuid)`, sent as 64 hex characters — the raw UUID\nnever leaves your machine), plus: GAC version, OS family, CPU architecture,\nNode.js major version, provider category (OpenAI-compatible / Ollama / Codex /\nunknown), action names, success/failure/cancel/no-op outcomes, operation\ntimings, and coarse size/count buckets. Feature events add aggregate counts such\nas runbook steps run/skipped/edited/blocked/failed/repaired, chat message and\nretry activity, the commit generation→commit funnel, and the fix\ngeneration→run funnel. The full, machine-readable contract lives in\n[`docs/telemetry-contract-v1.json`](docs/telemetry-contract-v1.json) (also served\nat `https://api.getgac.dev/v1/telemetry-contract`).\n\nBecause the identifier links events from one installation over time, the metric\nis **active installations, not people** — it is pseudonymous, not a proof of a\nunique person.\n\n### What is never collected\n\nPrompts, model replies, chat/system prompts, commands, command output, files,\npaths, repository details, commit content, model names, server URLs,\nconfiguration values, credentials, account details, environment variables,\nhostnames, usernames, and device identifiers. No geography, no prompt/topic\nanalysis. See `gac telemetry info` for the exhaustive list.\n\n### Source IP\n\nThe telemetry service necessarily receives your source IP while processing the\nHTTPS request, but is designed **not** to store it in its telemetry database or\napplication logs.\n\n### Endpoints, files, and behavior\n\n- Endpoint: `POST https://api.getgac.dev/v1/events/batch`\n- Public contract: `https://api.getgac.dev/v1/telemetry-contract`\n- Docs: <https://getgac.dev/telemetry> · Privacy: <https://getgac.dev/privacy>\n- Local files: `~/.gac/telemetry.json` (state) and\n  `~/.gac/telemetry-queue.ndjson` (queue), created only after consent, mode\n  `0600` where supported.\n- Queue: up to 1,000 events / 1 MiB; oldest dropped first; deduped by event id;\n  batched (≤ 50 events / 64 KiB).\n- Outages are invisible during normal commands. Failed sends are retried with\n  backoff (1m → 5m → 30m → 2h → 8h → max 24h) and never print warnings; only\n  `gac telemetry status` surfaces the coarse saved failure state.\n- Suppression: set `CI`, `DO_NOT_TRACK`, `DNT`, or `GAC_TELEMETRY_DISABLED` to a\n  truthy value (`1`, `true`, `yes`, `on`) to suppress telemetry without changing\n  your saved consent.\n- `gac telemetry disable` removes queued events and the local identifier;\n  re-enabling generates a **new** identifier. Disabling cannot retroactively\n  remove aggregate data already accepted by the backend.\n- If the notice text or collected field set changes materially, the consent\n  version is incremented and older consent becomes ineffective — nothing is\n  collected until you consent again.\n\n> Developed by alhisan >|\n\n## Configuration\n\nConfig file is created on first run:\n\n- Primary: `~/.gac/config.json`\n- Fallback: `.gac/config.json` (when home is not writable)\n\nView and edit:\n\n```bash\ngac config\ngac config tui\ngac config get baseUrl\ngac config set baseUrl http://localhost:4891\ngac config set model \"Llama 3 8B Instruct\"\ngac config set markdownStyles.codeStyles '[\"#8be9fd\"]'\ngac config set detailedSuggest true\ngac config set detailedContext true\n```\n\n### Core settings\n\n- `provider` (string): `openai` (default), `ollama`, or `codex` (ChatGPT plan OAuth — see above)\n- `baseUrl` (string): GPT4All server base, e.g. `http://localhost:4891`\n- `ollamaBaseUrl` (string): Ollama base, e.g. `http://localhost:11434`\n- `codexBaseUrl` (string): Codex backend base (default `https://chatgpt.com/backend-api/codex`)\n- `apiKey` (string): API key for OpenAI-compatible services (empty for local servers; not used by `codex`)\n- `model` (string): model ID from `/v1/models` (used by `openai` and `ollama`)\n- `codexModel` (string): model used when `provider` is `codex` (default `gpt-5.6-sol`; run `gac models` for the current list your plan supports)\n- `codexClientVersion` (`null` or string): Codex CLI version gac reports when fetching the model catalog. `null` (default) claims an always-ahead version so new model generations surface automatically; set a real `\"x.y.z\"` only if the backend ever needs one\n- `temperature` (number)\n- `maxTokens` (`\"auto\"` or number): response token cap. `\"auto\"` (the default) uses the output limit reported by the selected model's definition — re-detected whenever you switch models — and falls back to `2048` when the backend doesn't report one. A positive number pins the cap manually; `0` (or any value ≤ 0) removes it entirely so the model can answer as long as necessary, bounded only by its context window. Either way it is automatically reduced per request when the prompt leaves less room in the context window.\n- `contextWindow` (`\"auto\"` or number): size of the model's context window in tokens. `\"auto\"` (default) asks the backend — Ollama via `/api/show`, OpenAI-compatible servers via context metadata in `/v1/models` (LM Studio, OpenRouter, and others expose it); the `codex` provider uses the GPT-5 family's known ~272k window. Set a number to pin it manually; detection failures fall back to a conservative 8192. This drives chat-history trimming, input truncation, and Ollama's `num_ctx` (sized to the conversation, so large-context models don't waste memory on short chats).\n- `stream` (boolean)\n- `requestTimeoutMs` (number): request timeout in milliseconds (0 to disable). Useful for larger models or slower servers.\n- `defaultAction` (string): default mode for direct prompts (`suggest`, `ask`, or `explain`).\n- `detailedSuggest` (boolean): when `true`, `suggest` mode returns more detailed, step-by-step suggestions.\n- `detailedContext` (boolean): when `true`, `suggest`/`explain` prompts include the current directory and `ls` output.\n- `renderMarkdown` (boolean)\n- `showThinking` (boolean, default `true`): stream the model's `<think>` reasoning as dim text while it thinks, then erase it and show only the answer. Automatically disabled when output is piped.\n\n### Markdown styling\n\nAll markdown options live under `markdownStyles`:\n\n- `headerStyles` (array of styles)\n- `headerStylesByLevel` (object, keys `1`–`6` → array of styles)\n- `headerUnderline` (boolean)\n- `headerUnderlineLevels` (array of levels to underline)\n- `headerUnderlineStyle` (array of styles)\n- `headerUnderlineChar` (string, single character)\n- `codeStyles` (array of styles)\n- `codeBackground` (array of styles)\n- `codeBorder` (boolean)\n- `codeBorderStyle` (array of styles)\n- `codeGutter` (string)\n- `codeBorderChars` (object: `topLeft`, `top`, `topRight`, `bottomLeft`, `bottom`, `bottomRight`)\n- `syntaxHighlight` (boolean, default `true`): per-token highlighting inside fenced code blocks (JavaScript/TypeScript, Python, Bash, Go, Rust, C/C++, Java, SQL, Ruby, PHP, JSON, YAML)\n- `syntaxStyles` (object: `keyword`, `string`, `comment`, `number` → array of styles)\n- `tableBorderStyle` (array of styles): markdown tables render as aligned columns with box-drawing separators\n- `tableHeaderStyles` (array of styles)\n\nStyle values can be:\n\n- Terminal-kit style names like `bold`, `underline`, `dim`, `brightWhite`\n- Foreground hex colors: `\"#ffcc00\"`\n- Background hex colors: `\"bg:#202020\"` or `\"bg#202020\"`\n- Default/transparent: `\"default\"` (fg) or `\"bg:default\"`\n\nExample:\n\n```json\n{\n  \"markdownStyles\": {\n    \"headerStylesByLevel\": {\n      \"1\": [\"bold\", \"brightWhite\"],\n      \"2\": [\"bold\"],\n      \"3\": [\"bold\"],\n      \"4\": [\"dim\"],\n      \"5\": [\"dim\"],\n      \"6\": [\"dim\"]\n    },\n    \"headerUnderline\": true,\n    \"headerUnderlineLevels\": [1],\n    \"codeStyles\": [\"#8be9fd\"],\n    \"codeBackground\": [\"bg:default\"],\n    \"codeBorderStyle\": [\"#444444\"],\n    \"syntaxStyles\": {\n      \"keyword\": [\"#ff79c6\"],\n      \"string\": [\"#f1fa8c\"],\n      \"comment\": [\"dim\"],\n      \"number\": [\"#bd93f9\"]\n    }\n  }\n}\n```\n\n## Troubleshooting\n\nIf you see connection errors, verify the server is reachable:\n\n```bash\ncurl http://[SERVER_ADDRESS]:[SERVER_PORT]/v1/models\n```\n\nFor Ollama:\n\n```bash\ncurl http://[SERVER_ADDRESS]:[SERVER_PORT]/api/tags\n```\n\n## License\n\nGNU General Public License v3.0. See `LICENSE`.\n\n## Disclaimer\n\nThis was mostly vibe coded and I'm treating it as a fun side project / tool that is likely to remain improved and updated by agentic models.\nSome notes on `runbook`: commands come from a language model, so review every step before approving it. Guard rails exist — a blocklist of destructive patterns (`blocked_commands.json`), per-step `[Enter] run / [e] edit / [s] skip / [q] quit` gates, and `--dry-run`/`--export` for previewing without executing — but you are the final check. Blocked commands can't be run from the prompt, only edited or skipped.\n","readmeFilename":"README.md"}