{"_id":"@bilkobibitkov/ai-tool-kit","name":"@bilkobibitkov/ai-tool-kit","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@bilkobibitkov/ai-tool-kit","version":"0.1.0","description":"Substrate for Bilko-style BYOK AI-tool CLIs — Gemini caller, robust JSON parser, rubric runner.","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"build":"tsup","test":"vitest run","typecheck":"tsc --noEmit","prepublishOnly":"pnpm run build && pnpm run test"},"engines":{"node":">=18.0.0"},"peerDependencies":{"zod":">=3.0.0"},"peerDependenciesMeta":{"zod":{"optional":true}},"devDependencies":{"@types/node":"^22.0.0","tsup":"^8.0.0","typescript":"^5.5.0","vitest":"^3.0.0","zod":"^3.25.0"},"publishConfig":{"access":"public","provenance":true},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/StanislavBG/ai-tool-kit.git"},"keywords":["gemini","ai","byok","rubric","cli","bilko"],"_id":"@bilkobibitkov/ai-tool-kit@0.1.0","gitHead":"b4a03a631e10f5576779a91bf28f9427253eb463","bugs":{"url":"https://github.com/StanislavBG/ai-tool-kit/issues"},"homepage":"https://github.com/StanislavBG/ai-tool-kit#readme","_nodeVersion":"22.22.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-rixPGzC++kvgKI+G85GNv64TlNjU55z8upx+0Fnnc/wAOJP2fyAG8SEm89dOCbiHHqXqu5vr63e5iBxhOq2orw==","shasum":"011131364101ddc922eaee1f3052c920367cfec9","tarball":"https://registry.npmjs.org/@bilkobibitkov/ai-tool-kit/-/ai-tool-kit-0.1.0.tgz","fileCount":10,"unpackedSize":63711,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIExoLBC9oxgJdbMiq9GLlmkaAZR/de/K9JlI2dE795ffAiEAjiVK7ojkerCxH7jUzark5z90v3Zd6yDa4xVAeFZS2tM="}]},"_npmUser":{"name":"bilkobibitkov","email":"BilkoBibitkov2000@gmail.com"},"directories":{},"maintainers":[{"name":"bilkobibitkov","email":"BilkoBibitkov2000@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ai-tool-kit_0.1.0_1778397730388_0.49517119120995345"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-10T07:22:10.293Z","0.1.0":"2026-05-10T07:22:10.523Z","modified":"2026-05-10T07:22:10.805Z"},"maintainers":[{"name":"bilkobibitkov","email":"BilkoBibitkov2000@gmail.com"}],"description":"Substrate for Bilko-style BYOK AI-tool CLIs — Gemini caller, robust JSON parser, rubric runner.","homepage":"https://github.com/StanislavBG/ai-tool-kit#readme","keywords":["gemini","ai","byok","rubric","cli","bilko"],"repository":{"type":"git","url":"git+https://github.com/StanislavBG/ai-tool-kit.git"},"bugs":{"url":"https://github.com/StanislavBG/ai-tool-kit/issues"},"license":"MIT","readme":"# @bilkobibitkov/ai-tool-kit\n\nSubstrate for Bilko-style BYOK AI-tool CLIs — Gemini caller, robust JSON parser, rubric runner.\n\n## Install\n\n```bash\nnpm install @bilkobibitkov/ai-tool-kit\n```\n\nZod is an optional peer dependency. Install it if you want schema validation in `parseJsonResponse`:\n\n```bash\nnpm install zod\n```\n\n## Usage\n\n### `callGemini`\n\n```ts\nimport { callGemini } from '@bilkobibitkov/ai-tool-kit';\n\nconst response = await callGemini({\n  apiKey: process.env.GEMINI_API_KEY!,\n  prompt: 'Rate this headline: \"10X your revenue in 30 days\"',\n});\nconst text = response.candidates[0].content.parts[0].text;\n```\n\n### `parseJsonResponse`\n\nHandles markdown-fenced blocks, smart quotes, trailing prose:\n\n```ts\nimport { parseJsonResponse } from '@bilkobibitkov/ai-tool-kit';\n\nparseJsonResponse('```json\\n{\"score\":7}\\n```'); // → { score: 7 }\nparseJsonResponse('{\"score\":7}\\nSome explanation…'); // → { score: 7 }\n```\n\nWith Zod validation:\n\n```ts\nimport { z } from 'zod';\nconst schema = z.object({ score: z.number() });\nconst result = parseJsonResponse(raw, schema); // typed as { score: number }\n```\n\n### `runRubric`\n\n```ts\nimport { runRubric } from '@bilkobibitkov/ai-tool-kit';\n\nconst result = await runRubric({\n  apiKey: process.env.GEMINI_API_KEY!,\n  rubric: {\n    prompt: (input) => `Score this: \"${input}\"`,\n    schema: { type: 'object', properties: { score: { type: 'number' } } },\n    map: (raw) => ({ score: (raw as any).score }),\n  },\n  input: 'My great headline',\n});\nconsole.log(result.scores); // { score: 8 }\n```\n\n### `readApiKeyFromEnv` / `promptForApiKey`\n\n```ts\nimport { readApiKeyFromEnv, promptForApiKey } from '@bilkobibitkov/ai-tool-kit';\n\nconst key = readApiKeyFromEnv(['GEMINI_API_KEY', 'GOOGLE_API_KEY'])\n  ?? await promptForApiKey('Gemini API key');\n```\n\n### CLI formatting\n\n```ts\nimport { printAsTable, printAsJson, printAsMarkdown } from '@bilkobibitkov/ai-tool-kit';\n\nprintAsTable([{ dimension: 'Clarity', score: 8 }, { dimension: 'Impact', score: 7 }]);\nprintAsJson({ score: 7, grade: 'B' });\nprintAsMarkdown([{ dimension: 'Clarity', score: 8 }]);\n```\n\n## BYOK env vars\n\n| Priority | Env var | Notes |\n|---|---|---|\n| 1 | `GEMINI_API_KEY` | Preferred |\n| 2 | `GOOGLE_API_KEY` | Fallback alias |\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-b4292e3ade4c279445eb04e7e1388ef0"}