{"_id":"@akitect/cheapai","_rev":"9-f82f9aa3087e4b7b303c8608385404fe","name":"@akitect/cheapai","dist-tags":{"latest":"0.4.2"},"versions":{"0.3.0":{"name":"@akitect/cheapai","version":"0.3.0","keywords":["cheapai","agent","cli","coding-agent"],"license":"MIT","_id":"@akitect/cheapai@0.3.0","maintainers":[{"name":"akitect","email":"akitect45@gmail.com"}],"homepage":"https://github.com/akitect45/cheapai-cli#readme","bugs":{"url":"https://github.com/akitect45/cheapai-cli/issues"},"bin":{"cheapai":"bin/cheapai.js"},"dist":{"shasum":"8e6903ae92959f6709567d02c9f0ff7bcc909b67","tarball":"https://registry.npmjs.org/@akitect/cheapai/-/cheapai-0.3.0.tgz","fileCount":30,"integrity":"sha512-EEDKEbHJ/YX0s0++I/aYAG0WI0lPlNC1ZCon6RUAemNrsEVPKHmY1g8C7yKcKwpgIdAWYT0xdxdT+P7aRIKBSA==","signatures":[{"sig":"MEUCIBKEmF+FEhtdLMPeBc1+t6yhbf0LGBIc01P3z5f6PQ/WAiEA6G3avF+6Bqwlc4A/7rqy5/ggh59p6Q8L712i21elIUw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":266336},"type":"module","engines":{"node":">=20"},"gitHead":"8d1fecde6d6a6381bca54186bf7f386be76528d1","scripts":{"test":"node scripts/test-e2e.mjs","login":"node bin/cheapai.js login","start":"node bin/cheapai.js","cheapai":"node bin/cheapai.js","test:live":"node scripts/test-e2e.mjs --live","test:poll":"node scripts/test-e2e.mjs --poll-shape","test:smoke":"node bin/cheapai.js models"},"_npmUser":{"name":"akitect","email":"akitect45@gmail.com"},"repository":{"url":"git+https://github.com/akitect45/cheapai-cli.git","type":"git"},"_npmVersion":"11.11.0","description":"CheapAI coding agent with a focused terminal workspace","directories":{},"_nodeVersion":"24.14.0","dependencies":{"openai":"^4.104.0","commander":"^13.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cheapai_0.3.0_1786276211434_0.767418961602828","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@akitect/cheapai","version":"0.3.1","keywords":["cheapai","agent","cli","coding-agent"],"license":"MIT","_id":"@akitect/cheapai@0.3.1","maintainers":[{"name":"akitect","email":"akitect45@gmail.com"}],"homepage":"https://github.com/akitect45/cheapai-cli#readme","bugs":{"url":"https://github.com/akitect45/cheapai-cli/issues"},"bin":{"cheapai":"bin/cheapai.js"},"dist":{"shasum":"1346fea6784a70405d4af5dccf1a66decc5e88b6","tarball":"https://registry.npmjs.org/@akitect/cheapai/-/cheapai-0.3.1.tgz","fileCount":31,"integrity":"sha512-5Zt5nQ4WjktTgv3UilqlkWDlW2XEu2LbMnk1plr7AoQIvXPKsaKY1CWxA7Smx/swHUrWGmjKfCyOpAv3q52wHQ==","signatures":[{"sig":"MEQCIDkwkqHzYuln9UIyCdft3WK22EalSpev6eVcSeriL1O9AiBjY11W9X8If/az22OXNMRYsbFpwtuWujtw0SoNfb7lsg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":263598},"type":"module","engines":{"node":">=20"},"gitHead":"a84301c68aad43273d8719ca2008277a5f63e88d","scripts":{"test":"node scripts/test-e2e.mjs","login":"node bin/cheapai.js login","start":"node bin/cheapai.js","cheapai":"node bin/cheapai.js","test:live":"node scripts/test-e2e.mjs --live","test:poll":"node scripts/test-e2e.mjs --poll-shape","test:smoke":"node bin/cheapai.js models"},"_npmUser":{"name":"akitect","email":"akitect45@gmail.com"},"repository":{"url":"git+https://github.com/akitect45/cheapai-cli.git","type":"git"},"_npmVersion":"11.17.0","description":"CheapAI coding agent with a focused terminal workspace","directories":{},"_nodeVersion":"26.5.1","dependencies":{"openai":"^4.104.0","commander":"^13.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cheapai_0.3.1_1786297100711_0.6595652143199677","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@akitect/cheapai","version":"0.3.2","keywords":["cheapai","agent","cli","coding-agent"],"license":"MIT","_id":"@akitect/cheapai@0.3.2","maintainers":[{"name":"akitect","email":"akitect45@gmail.com"}],"homepage":"https://github.com/akitect45/cheapai-cli#readme","bugs":{"url":"https://github.com/akitect45/cheapai-cli/issues"},"bin":{"cheapai":"bin/cheapai.js"},"dist":{"shasum":"e380a2156e79d38bfb9efc3a309f0b10a5ed3b33","tarball":"https://registry.npmjs.org/@akitect/cheapai/-/cheapai-0.3.2.tgz","fileCount":45,"integrity":"sha512-aNGx+wSlC12BjDtRzyqpWnapOmToR4xpIz0G1f0lTIBXRDM1MAZy6FOmzrs+VtLZObk5k26rmsrV6Kuj/Gtjow==","signatures":[{"sig":"MEUCIGYq+ZdVX9465jkleXLu6dN22dA1N2ZtLTPJLSC325NiAiEAxzOhaEeT8T5wFUF8rn+6Lb4dmtofKKdQhzr+P2PKWhU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":417594},"type":"module","engines":{"node":">=20"},"gitHead":"44dc2a381014dcaa4d813cbe476209a9c1ec0751","scripts":{"test":"node scripts/test-unit.mjs && node scripts/test-e2e.mjs","login":"node bin/cheapai.js login","start":"node bin/cheapai.js","cheapai":"node bin/cheapai.js","test:live":"node scripts/test-e2e.mjs --live","test:poll":"node scripts/test-e2e.mjs --poll-shape","test:unit":"node scripts/test-unit.mjs","test:smoke":"node bin/cheapai.js models"},"_npmUser":{"name":"akitect","email":"akitect45@gmail.com"},"repository":{"url":"git+https://github.com/akitect45/cheapai-cli.git","type":"git"},"_npmVersion":"11.11.0","description":"CheapAI coding agent with a focused terminal workspace","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ajv":"^8.20.0","jiti":"^2.7.0","openai":"^4.104.0","commander":"^13.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cheapai_0.3.2_1786382097795_0.22162860591741906","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@akitect/cheapai","version":"0.3.3","keywords":["cheapai","agent","cli","coding-agent"],"license":"MIT","_id":"@akitect/cheapai@0.3.3","maintainers":[{"name":"akitect","email":"akitect45@gmail.com"}],"homepage":"https://github.com/akitect45/cheapai-cli#readme","bugs":{"url":"https://github.com/akitect45/cheapai-cli/issues"},"bin":{"cheapai":"bin/cheapai.js"},"dist":{"shasum":"b7d838f8991fbefaf4ba96270b0e4d698dfc8396","tarball":"https://registry.npmjs.org/@akitect/cheapai/-/cheapai-0.3.3.tgz","fileCount":45,"integrity":"sha512-1NjUaAXrpFsryNkRs6wriBZH9LcCxVw+POpDDNmRWHrC8jONTfl2zkFWF3xILfbtiZUJWahBx1k0/lw1R5qJ4g==","signatures":[{"sig":"MEQCIG0Gs2hJfandw1iKa4viOC3gjuI/G7agUuk1uAniClZCAiB++qClLmrpvE2N7o7JgD2vVlUT0drd0/aZNNOMCmRkBg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":422337},"type":"module","engines":{"node":">=20"},"gitHead":"87bf69f49b45ac88e44691efe6e769d4f6a5e2d8","scripts":{"test":"node scripts/test-unit.mjs && node scripts/test-e2e.mjs","login":"node bin/cheapai.js login","start":"node bin/cheapai.js","cheapai":"node bin/cheapai.js","test:live":"node scripts/test-e2e.mjs --live","test:poll":"node scripts/test-e2e.mjs --poll-shape","test:unit":"node scripts/test-unit.mjs","test:smoke":"node bin/cheapai.js models"},"_npmUser":{"name":"akitect","email":"akitect45@gmail.com"},"repository":{"url":"git+https://github.com/akitect45/cheapai-cli.git","type":"git"},"_npmVersion":"11.11.0","description":"CheapAI coding agent with a focused terminal workspace","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ajv":"^8.20.0","jiti":"^2.7.0","openai":"^4.104.0","commander":"^13.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cheapai_0.3.3_1786549845543_0.09108913509084382","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@akitect/cheapai","version":"0.3.4","keywords":["cheapai","agent","cli","coding-agent"],"license":"MIT","_id":"@akitect/cheapai@0.3.4","maintainers":[{"name":"akitect","email":"akitect45@gmail.com"}],"homepage":"https://github.com/akitect45/cheapai-cli#readme","bugs":{"url":"https://github.com/akitect45/cheapai-cli/issues"},"bin":{"cheapai":"bin/cheapai.js"},"dist":{"shasum":"eda210889fae18192786e622fba4573254466c50","tarball":"https://registry.npmjs.org/@akitect/cheapai/-/cheapai-0.3.4.tgz","fileCount":45,"integrity":"sha512-WPOSny0fF9s/Ct5Kse/jiblcZzV2m/kGDvKYkDTSaNvM9U5lRQcfF1rxavMhtbBPJLKNhyuR1nqQF3QkE3BryA==","signatures":[{"sig":"MEYCIQC6pSJCrCjbDikAZ5JOgkOIzL0906SNJVnCGbHIsOIeQgIhALZ0zj/Dq8vIECjD2P0h3V4x6YOfcJD78upn/hJjCJEJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":434384},"type":"module","engines":{"node":">=20"},"gitHead":"a02bf1005df4274b10aa76c30839768a1b2958dc","scripts":{"test":"node scripts/test-unit.mjs && node scripts/test-e2e.mjs","login":"node bin/cheapai.js login","start":"node bin/cheapai.js","cheapai":"node bin/cheapai.js","test:live":"node scripts/test-e2e.mjs --live","test:poll":"node scripts/test-e2e.mjs --poll-shape","test:unit":"node scripts/test-unit.mjs","test:smoke":"node bin/cheapai.js models"},"_npmUser":{"name":"akitect","email":"akitect45@gmail.com"},"repository":{"url":"git+https://github.com/akitect45/cheapai-cli.git","type":"git"},"_npmVersion":"11.11.0","description":"CheapAI coding agent with a focused terminal workspace","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ajv":"^8.20.0","jiti":"^2.7.0","openai":"^4.104.0","commander":"^13.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cheapai_0.3.4_1787064209776_0.541059648881199","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@akitect/cheapai","version":"0.3.5","keywords":["cheapai","agent","cli","coding-agent"],"license":"MIT","_id":"@akitect/cheapai@0.3.5","maintainers":[{"name":"akitect","email":"akitect45@gmail.com"}],"homepage":"https://github.com/akitect45/cheapai-cli#readme","bugs":{"url":"https://github.com/akitect45/cheapai-cli/issues"},"bin":{"cheapai":"bin/cheapai.js"},"dist":{"shasum":"4c6bc4eaaeb6aa5f6aa52d4d43f6bee4f719a484","tarball":"https://registry.npmjs.org/@akitect/cheapai/-/cheapai-0.3.5.tgz","fileCount":55,"integrity":"sha512-KVX4NX4Y7YgTWXdiJ/32k47PRpv/wde7XCj7q5jRoXcPhRJLo8KsrIYyfuFGJRJkUObYykUMURr4qFvkl9+PmQ==","signatures":[{"sig":"MEUCIQCUqrHxznvGWasuhbwKc7rBThpOnYVpENbwBDtw6zgsNQIgMfebR4AwAuOjAE8gB39sbe4lHVZdZBhqk26IqGx7nZk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":535395},"type":"module","engines":{"node":">=20"},"gitHead":"01dfd966a74ebce671317c842c55ad1dd58bd9e8","scripts":{"test":"node scripts/test-unit.mjs && node scripts/test-e2e.mjs","login":"node bin/cheapai.js login","start":"node bin/cheapai.js","cheapai":"node bin/cheapai.js","test:live":"node scripts/test-e2e.mjs --live","test:poll":"node scripts/test-e2e.mjs --poll-shape","test:unit":"node scripts/test-unit.mjs","test:smoke":"node bin/cheapai.js models"},"_npmUser":{"name":"akitect","email":"akitect45@gmail.com"},"repository":{"url":"git+https://github.com/akitect45/cheapai-cli.git","type":"git"},"_npmVersion":"11.11.0","description":"CheapAI coding agent with a focused terminal workspace","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ws":"^8.21.3","ajv":"^8.20.0","jiti":"^2.7.0","openai":"^4.104.0","commander":"^13.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cheapai_0.3.5_1787383249331_0.03916885091787514","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@akitect/cheapai","version":"0.4.0","keywords":["cheapai","agent","cli","coding-agent"],"license":"MIT","_id":"@akitect/cheapai@0.4.0","maintainers":[{"name":"akitect","email":"akitect45@gmail.com"}],"homepage":"https://github.com/akitect45/cheapai-cli#readme","bugs":{"url":"https://github.com/akitect45/cheapai-cli/issues"},"bin":{"cheapai":"bin/cheapai.js"},"dist":{"shasum":"ff264188b72fb5cb8adce875daf214eea402ce7a","tarball":"https://registry.npmjs.org/@akitect/cheapai/-/cheapai-0.4.0.tgz","fileCount":69,"integrity":"sha512-HStZowkXLxB/gDk3L7FpWrZdcU6/xUK1ah7DG6olIAFgyns97QnqglLJUfmdDJI85AJ7FJSXasXVTerPiW2k7Q==","signatures":[{"sig":"MEUCIH+Gg3ArM/6cRCSYq/xk3Fne6H6clqj5HznjCU8bYA2NAiEAyrbL7gooh1JfQhyE216UrTwpbqX6SFlBWL+n6OdOru0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCFz0rQl6C3LYFEQbusBfEqEA7jeMOCqrdOIt9YxKGFRAIhAPHq0DfdqDK+ScSSuLOnDnaDuEje3gQa2EC/HF70qWF+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":600394},"type":"module","engines":{"node":">=20"},"gitHead":"01dfd966a74ebce671317c842c55ad1dd58bd9e8","scripts":{"test":"node scripts/test-unit.mjs && node scripts/test-e2e.mjs","login":"node bin/cheapai.js login","start":"node bin/cheapai.js","cheapai":"node bin/cheapai.js","test:live":"node scripts/test-e2e.mjs --live","test:poll":"node scripts/test-e2e.mjs --poll-shape","test:unit":"node scripts/test-unit.mjs","test:smoke":"node bin/cheapai.js models"},"_npmUser":{"name":"akitect","email":"akitect45@gmail.com"},"repository":{"url":"git+https://github.com/akitect45/cheapai-cli.git","type":"git"},"_npmVersion":"11.11.0","description":"CheapAI coding agent with a focused terminal workspace","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ws":"^8.21.3","ajv":"^8.20.0","jiti":"^2.7.0","openai":"^4.104.0","commander":"^13.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cheapai_0.4.0_1788194731675_0.15755196922807113","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@akitect/cheapai","version":"0.4.1","keywords":["cheapai","agent","cli","coding-agent"],"license":"MIT","_id":"@akitect/cheapai@0.4.1","maintainers":[{"name":"akitect","email":"akitect45@gmail.com"}],"homepage":"https://github.com/akitect45/cheapai-cli#readme","bugs":{"url":"https://github.com/akitect45/cheapai-cli/issues"},"bin":{"cheapai":"bin/cheapai.js"},"dist":{"shasum":"eae1883664dbc5aadd711c64e6ebe17f25a85565","tarball":"https://registry.npmjs.org/@akitect/cheapai/-/cheapai-0.4.1.tgz","fileCount":70,"integrity":"sha512-LkkuZT8BmDtMbdcbKcnIsEW+mE8UIrLYkV52yn1YMofjoTdzanK7bBvbEhGeBG2JzVSQwUiP8bqqbcGsa6kYEg==","signatures":[{"sig":"MEUCIDOYu3OTHfXuoNp9D+GbRRw0cqmcs/ck9JAAXFLHYvtNAiEAgU8IeQkkcvLOF9wjosc4X+xq5YVWt4xODePVMGAGJaI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDYXN9v+Zv3DeZsVIrRHO68B429IjLplpHebjUEoVD54AiBYTcK921wzrbnbNoG7xIYJc5IjtonhomekJyqUrFLiXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":603637},"type":"module","engines":{"node":">=20"},"gitHead":"01dfd966a74ebce671317c842c55ad1dd58bd9e8","scripts":{"test":"node scripts/test-unit.mjs && node scripts/test-e2e.mjs","login":"node bin/cheapai.js login","start":"node bin/cheapai.js","cheapai":"node bin/cheapai.js","test:live":"node scripts/test-e2e.mjs --live","test:poll":"node scripts/test-e2e.mjs --poll-shape","test:unit":"node scripts/test-unit.mjs","test:smoke":"node bin/cheapai.js models"},"_npmUser":{"name":"akitect","email":"akitect45@gmail.com"},"repository":{"url":"git+https://github.com/akitect45/cheapai-cli.git","type":"git"},"_npmVersion":"11.11.0","description":"CheapAI coding agent with a focused terminal workspace","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ws":"^8.21.3","ajv":"^8.20.0","jiti":"^2.7.0","openai":"^4.104.0","commander":"^13.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cheapai_0.4.1_1788197150633_0.1260894084844213","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"_id":"@akitect/cheapai@0.4.2","bin":{"cheapai":"bin/cheapai.js"},"bugs":{"url":"https://github.com/akitect45/cheapai-cli/issues"},"dist":{"shasum":"01335bb1e550b08cae3f2062d7b1d2bac3726bdd","tarball":"https://registry.npmjs.org/@akitect/cheapai/-/cheapai-0.4.2.tgz","fileCount":70,"integrity":"sha512-wOj9++Ydp9tBovPORP8BatqR7TEx9pybjNBJKnjyfoUFbyJZb6yblIhkKq70pxj77bnJaAtGPNss0lazSJLT2A==","signatures":[{"sig":"MEUCIGl06x9zp60ZU3+Hh/G6b9UjCzlltyeEukonPBzyz7kwAiEAvYlq544HHtpSpgHa6A1aovp8eUymmkLQdXEhyjHVA5w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDg6DZqZbDBneN9PwIMTCQHKCWsTDDasmyUHh7AIp0rTAIhANM2YEi/AoboPa8d08C8+jx2jCGKOlKZ+ZdDjO/VE/Xz"}],"unpackedSize":607494},"name":"@akitect/cheapai","type":"module","engines":{"node":">=20"},"gitHead":"01dfd966a74ebce671317c842c55ad1dd58bd9e8","license":"MIT","scripts":{"test":"node scripts/test-unit.mjs && node scripts/test-e2e.mjs","login":"node bin/cheapai.js login","start":"node bin/cheapai.js","cheapai":"node bin/cheapai.js","test:live":"node scripts/test-e2e.mjs --live","test:poll":"node scripts/test-e2e.mjs --poll-shape","test:unit":"node scripts/test-unit.mjs","test:smoke":"node bin/cheapai.js models"},"version":"0.4.2","_npmUser":{"name":"akitect","email":"akitect45@gmail.com"},"homepage":"https://github.com/akitect45/cheapai-cli#readme","keywords":["cheapai","agent","cli","coding-agent"],"repository":{"url":"git+https://github.com/akitect45/cheapai-cli.git","type":"git"},"_npmVersion":"11.11.0","description":"CheapAI coding agent with a focused terminal workspace","directories":{},"maintainers":[{"name":"akitect","email":"akitect45@gmail.com"}],"_nodeVersion":"24.14.0","dependencies":{"ws":"^8.21.3","ajv":"^8.20.0","jiti":"^2.7.0","openai":"^4.104.0","commander":"^13.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cheapai_0.4.2_1788198613957_0.06599281639698873"}}},"time":{"created":"2026-08-09T11:50:11.252Z","modified":"2026-08-31T17:50:14.267Z","0.3.0":"2026-08-09T11:50:11.602Z","0.3.1":"2026-08-09T17:38:20.862Z","0.3.2":"2026-08-10T17:14:57.950Z","0.3.3":"2026-08-12T15:50:45.718Z","0.3.4":"2026-08-18T14:43:29.912Z","0.3.5":"2026-08-22T07:20:49.489Z","0.4.0":"2026-08-31T16:45:31.768Z","0.4.1":"2026-08-31T17:25:50.806Z","0.4.2":"2026-08-31T17:50:14.099Z"},"bugs":{"url":"https://github.com/akitect45/cheapai-cli/issues"},"license":"MIT","homepage":"https://github.com/akitect45/cheapai-cli#readme","keywords":["cheapai","agent","cli","coding-agent"],"repository":{"url":"git+https://github.com/akitect45/cheapai-cli.git","type":"git"},"description":"CheapAI coding agent with a focused terminal workspace","maintainers":[{"name":"akitect","email":"akitect45@gmail.com"}],"readme":"# CheapAI Agent CLI (`cheapai`)\r\n\r\nOpenCode에서 영감을 받은 키보드 중심 **TUI** + 코딩 에이전트 루프.\r\nAPI: `https://api.cheapai.im/v1`\r\n\r\n- 설계: [docs/AGENT_SYSTEMS.md](./docs/AGENT_SYSTEMS.md)\r\n- 서버 인증: [docs/SERVER_CLI_AUTH.md](./docs/SERVER_CLI_AUTH.md)\r\n- TUI 사용법과 구조: [docs/TUI.md](./docs/TUI.md)\r\n- OpenCode 기능 대조: [docs/OPENCODE_PARITY.md](./docs/OPENCODE_PARITY.md)\r\n- 릴리즈 노트: [CHANGELOG.md](./CHANGELOG.md)\r\n\r\n## 설치\r\n\r\nNode.js `>=20` 필요. macOS 기본 Terminal/iTerm2, Windows Terminal/PowerShell 권장.\r\n\r\n### 사용자 (전역 설치)\r\n\r\n```bash\r\nnpm install -g @akitect/cheapai\r\ncheapai\r\n```\r\n\r\n### 개발자 (이 레포에서)\r\n\r\n```bash\r\ngit clone https://github.com/akitect45/cheapai-cli.git\r\ncd cheapai-cli\r\nnpm install\r\nnpm link\r\n```\r\n\r\n## 시작 흐름\r\n\r\n```powershell\r\ncheapai\r\n```\r\n\r\n1. **Welcome** — 간결한 로고 / 버전 / 연결 상태\r\n2. 미로그인 → **Browser** 또는 **API key**  \r\n3. Browser → device code + `https://cheapai.im/cli/authorize`  \r\n4. 승인 완료 → **Chat TUI**\r\n\r\n기본 TTY 실행은 alternate-screen fullscreen TUI를 사용합니다. stdout이\r\n터미널이 아니거나 `-p`를 사용하면 headless one-shot 모드로 실행됩니다.\r\n자세한 화면 구조, 키보드 단축키, 권한 정책, 세션 저장 위치와 개발 검증\r\n방법은 [TUI 문서](./docs/TUI.md)를 참고하세요.\r\n\r\n```text\r\n  ◆ cheapai / project                          claude-sonnet-5  ask for writes\r\n  session 8f3a2c                                      ● ready  effort off\r\n  ────────────────────────────────────────────────────────────────────────────\r\n\r\n                         What do you want to build?\r\n              Describe a task, ask about the codebase, or type /help.\r\n\r\n  ╭──────────────────────────────────────────────────────────────────────────╮\r\n  │ Ask anything…                                                            │\r\n  │                                                                          │\r\n  ╰──────────────────────────────────────────────────────────────────────────╯\r\n  build  claude-sonnet-5                                        ask for writes\r\n  Enter send  ·  / commands  ·  PgUp scroll  ·  Ctrl+C exit\r\n\r\n  ▌ fix the bug\r\n\r\n  ┊ Thinking · turn 1\r\n  ╰─ ✓ Bash  tests passed\r\n  ✦\r\n  …\r\n\r\n  ❯\r\n```\r\n\r\n## 로그인\r\n\r\n```powershell\r\ncheapai login                 # browser device code (기본)\r\ncheapai login --key csk_...   # API 키 붙여넣기\r\ncheapai whoami\r\ncheapai logout\r\n```\r\n\r\n서버 API (이미 동작 확인됨):\r\n\r\n- `POST /api/auth/device/code`\r\n- `POST /api/auth/device/poll`\r\n\r\n## 채팅 / 헤드리스\r\n\r\n```powershell\r\ncheapai\r\ncheapai \"이 레포 설명해줘\"\r\ncheapai run \"이 레포 설명해줘\" --print\r\ncheapai -p \"한 번만 실행\" --yolo\r\ncheapai -c\r\ncheapai --resume <session-id>\r\ncheapai --resume <session-id> --fork --title \"alternate approach\"\r\ncheapai --agent reviewer\r\n```\r\n\r\n`--continue`는 현재 workspace의 가장 최근 세션을 재개하고, `/sessions`는\r\n저장된 세션을 picker에서 검색하고 재개합니다.\r\n\r\n### 채팅 슬래시 명령\r\n\r\n| 명령 | 설명 |\r\n|------|------|\r\n| `/help` | 도움말 |\r\n| `/exit` | 종료 |\r\n| `/clear` `/new` | 새 세션 |\r\n| `/yolo` | 도구 자동 승인 |\r\n| `/ask` | 도구 확인 |\r\n| `/accept-edits` | 파일 수정 자동 |\r\n| `/status` | 세션 정보 |\r\n| `/usage` | 현재 세션 토큰과 플랜 사용량 |\r\n| `/credits [on|off]` | 플랜 사용량·추가 크레딧 표시 또는 header 표시 설정 |\r\n| `/compact` | 오래된 대화를 요약하고 현재 작업을 유지 |\r\n| `/undo` | 마지막 turn과 `write_file`/`edit_file` 변경 복원 |\r\n| `/redo` | 마지막 undo의 대화와 추적 파일 변경 재적용 |\r\n| `/fork [title]` | 현재 상태에서 새 세션으로 분기 |\r\n| `/retry` | 마지막 prompt를 undo 후 다시 실행 |\r\n| `/copy` | 마지막 assistant 답변을 clipboard에 복사 |\r\n| `/search <text>` | 현재 transcript 검색 |\r\n| `/context` | context 예상량과 자동 compact 상태 |\r\n| `/sessions` | 저장된 세션 선택 / 재개 |\r\n| `/model` | 검색 가능한 모델 선택 |\r\n| `/agent [name]` | 프로젝트 agent profile 선택 |\r\n| `/effort` | 추론 강도 변경 |\r\n| `/thinking` | 추론 표시 전환 |\r\n| `/details` | 도구 실행 상세 정보 전환 |\r\n| `/goal [on|off]` | 읽기·검색 기반 목표 계획 모드 |\r\n| `/docs [on|off]` | `docs/` 프로젝트 문서 모드 |\r\n| `/rename <title>` | 현재 세션 이름 변경 |\r\n| `/export [path]` | Markdown transcript 내보내기 |\r\n\r\n## 도구\r\n\r\n`bash` · `read_file` · `write_file` · `edit_file` · `list_dir` · `delete_file` · `move_file` · `glob` · `grep` · `todo_write` · `git` · `web_fetch` · `ask_question` · `task` · `project_docs` · `research` · `skill` · `mcp_manage` · `list_mcp_tools` · `call_mcp_tool`\r\n\r\n프로젝트 지침: `CHEAPAI.md` / `AGENTS.md` / `CLAUDE.md`\r\n\r\n사용자 command는 프로젝트의 `.opencode/commands/*.md`, `.cheapai/commands/*.md`\r\n또는 `~/.cheapai/commands/*.md`에 둘 수 있습니다. 파일명은 slash command가 되고,\r\n`$ARGUMENTS`와 `$1`, `$2`를 prompt template에 사용할 수 있습니다.\r\nAgent profile은 같은 위치의 `agents/*.md`에서 로드되며 `/agent` 또는\r\n`cheapai --agent <name>`으로 선택합니다.\r\n\r\nSkill은 `.cheapai/skills/<name>/SKILL.md`에서 발견되어 bounded prompt context로만\r\n사용되며 실행되지 않습니다. CLI는 Anthropic 공개 스킬을 참고해 `frontend-design`,\r\n`skill-creator`, `mcp-builder`, `webapp-testing`을 기본 제공하고,\r\nCheapAI 게이트웨이 연동은 `cheapai-api`, 벤치 연구 흐름은 `autoresearch`로\r\n넣었습니다. `research` 도구는 workspace `.cheapai/autoresearch/`에\r\n`METRIC`/`ASI` ledger를 남깁니다. 바깥 세션 supervisor가 아니며 `/goal`\r\n계획 모드와도 다릅니다.\r\n\r\n```powershell\r\ncheapai research init --goal \"cut p95\" --metric latency_ms --direction lower --cmd \"node bench.js\"\r\ncheapai research run\r\ncheapai research status\r\ncheapai research flag <run-id> --reason \"reward-hack\"\r\ncheapai research clear\r\n```\r\n\r\n같은 이름의 프로젝트/사용자 스킬이 있으면 기본 스킬을 덮어씁니다. Local JS/TS extension은 `.cheapai/extensions/`에서\r\n발견되지만 `approvedExtensions`에 path 또는 SHA-256이 명시된 경우에만 trusted code로\r\n로드됩니다. Extension approval은 owner-owned `~/.cheapai/config.json`에서만 읽으며\r\ncanonical absolute path만 허용합니다. Project `.cheapai/config.json`은 스스로 실행\r\n권한을 부여할 수 없습니다. Extension은\r\ntool, command, runtime event hook을 등록할 수 있습니다.\r\n\r\n## 설정\r\n\r\n`~/.cheapai/config.json`, `auth.json`, `sessions/`\r\n\r\n```powershell\r\ncheapai config\r\ncheapai config --set model=claude-sonnet-5\r\ncheapai models\r\ncheapai models --verbose\r\ncheapai models --json\r\ncheapai agent list\r\ncheapai usage\r\ncheapai credits --json\r\ncheapai stats --project\r\ncheapai session list --project --json\r\ncheapai session fork <session-id> --title \"experiment\"\r\ncheapai export <session-id> --sanitize -o session.json\r\ncheapai import session.json\r\n```\r\n\r\n기본 설정 디렉터리는 `~/.cheapai`입니다. 테스트나 격리된 실행에서는\r\n`CHEAPAI_HOME`으로 저장 위치를 변경할 수 있습니다. API 키는\r\n`CHEAPAI_API_KEY`, `CHEAPSUB_API_KEY` 순서로 환경변수도 확인합니다.\r\n세션은 `sessions/<id>.jsonl`의 v2 append log로 저장되고, 기존 `<id>.json`은 처음\r\nresume할 때 v2로 migration됩니다. 세션 writer는 process identity가 포함된 lease를\r\n사용하며 파일과 recovery journal은 owner-only 권한으로 생성됩니다.\r\n기본 `pathMode`는 `workspace`이고 `workspace-plus`에서는 `extraRoots`를 추가할 수\r\n있습니다. `yolo`는 file tool 경로를 `unrestricted`로 전환합니다. Bash는 process\r\ngroup 단위로 취소되지만 filesystem sandbox는 아니며 provider credential을 상속하지 않습니다.\r\n`pathMode`, `extraRoots`, `approvedExtensions`, provider endpoint와 permission mode는\r\nglobal config 전용이며 project config에서는 무시됩니다.\r\n`autoCompact`가 켜져 있으면 모델 context window의 80%에 가까워질 때 CLI가\r\n이전 대화를 요약해 세션을 계속 유지합니다. `--no-auto-compact`로 한 번의\r\n실행에서 끌 수 있고, `compactThreshold`로 기준을 조정할 수 있습니다.\r\n플랜 사용량은 기본적으로 header에 표시하지 않습니다. `/credits`는 남은 주간\r\n허용량(%)과 추가 크레딧을 확인하고, `/credits on`과 `/credits off`는\r\n`showBalance` 설정을 저장합니다. 챗·턴마다 요금은 표시하지 않습니다.\r\n플랜이 100%면 추가 크레딧으로 호출이 이어지고, 둘 다 없으면 대시보드에서\r\n추가 크레딧을 충전합니다.\r\n`/help`, `/config`, `/status` 같은 slash 안내 출력은 1분 뒤 또는 다음 일반 메시지를\r\n전송할 때 conversation viewport에서 자동으로 정리됩니다.\r\n\r\n`Ctrl+K`는 검색 가능한 command palette를 열고, `Ctrl+Z`/`Ctrl+Y`는 마지막\r\nturn을 undo/redo합니다. 실행 중 `Escape` 또는 `Ctrl+C`는 생성과 실행 중인 Bash를\r\n중단합니다. 파일 undo는 CheapAI가 `write_file`/`edit_file`로 직접 변경한 512KB\r\n이하 파일만 추적하며, 이후 사용자가 파일을 바꾼 경우 충돌로 판단해 덮어쓰지\r\n않습니다. Bash가 만든 변경은 자동으로 되돌리거나 재실행하지 않습니다.\r\n\r\nCLI는 하루에 한 번 npm의 `@akitect/cheapai` 최신 버전을 확인합니다. 새 버전이\r\n있으면 TUI에 안내를 남기고 `/update` 또는 `cheapai --update`로 설치할 수 있습니다.\r\n시작 확인은 TUI를 막지 않으며, 네트워크 오류는 실행을 막지 않습니다.\r\n`CHEAPAI_NO_UPDATE_CHECK=1`로 확인을 끌 수 있습니다.\r\n\r\n## 개발\r\n\r\n```powershell\r\nnpm test\r\nnode --check src/ui/fullscreen.js\r\ngit diff --check\r\n```\r\n\r\n`npm test`는 session migration/lease/recovery, runtime event/queue, tool schema와\r\nprocess cleanup, provider retry, resource/extension 경계, terminal wrapping과 fullscreen\r\nresponsive frame을 함께 검사합니다. 구현 상세는 [TUI 문서](./docs/TUI.md)에\r\n정리되어 있습니다.\r\n","readmeFilename":"README.md"}