{"_id":"@abjad-org/research-chef","_rev":"4-450a7f0c4df9b85fd28f91a9d59e603f","name":"@abjad-org/research-chef","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.2":{"name":"@abjad-org/research-chef","version":"0.1.2","keywords":["cli","ai","research","byok","openai","anthropic","claude","gemini","terminal","clack"],"license":"MIT","_id":"@abjad-org/research-chef@0.1.2","maintainers":[{"name":"haqqimuazzam","email":"haqqimuazzam18@gmail.com"}],"homepage":"https://github.com/abjad-org/research-chef#readme","bugs":{"url":"https://github.com/abjad-org/research-chef/issues"},"bin":{"research-chef":"bin/research-chef.js"},"dist":{"shasum":"3ae6de1601b1cfd58d7344596198ee5ee327f4ff","tarball":"https://registry.npmjs.org/@abjad-org/research-chef/-/research-chef-0.1.2.tgz","fileCount":21,"integrity":"sha512-JS+0I/vTTARDPm/mOHoTvzzxzlDqLPVdO1vwpwax3aeooaMQTayEaMlkKZgqOEaJTB6plg/qz59KY+63HSjjlg==","signatures":[{"sig":"MEUCIGWXVY2kmPsvWLs4ZPvz4wDhs60R7yhuud+6zyfJkoiFAiEAvcV+I3UxiGH3oaK30YCtvtcMsMvEuQxJ8c5S8s3jD9g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abjad-org%2fresearch-chef@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":30489},"type":"module","engines":{"node":">=18.17.0"},"gitHead":"243b2fd7c195b240f43fcca86769d9f27ec497e6","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","clean":"rimraf dist","start":"node bin/research-chef.js","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"haqqimuazzam","email":"haqqimuazzam18@gmail.com"},"repository":{"url":"git+https://github.com/abjad-org/research-chef.git","type":"git","directory":"packages/cli"},"_npmVersion":"10.8.2","description":"research-chef: an interactive, BYOK-powered AI research assistant for your terminal","directories":{},"_nodeVersion":"20.20.2","dependencies":{"picocolors":"^1.1.1","@clack/prompts":"^0.9.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","rimraf":"^6.0.1","typescript":"^5.7.3","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/research-chef_0.1.2_1788607387364_0.6339527947324299","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@abjad-org/research-chef","version":"0.2.0","keywords":["cli","ai","research","byok","openai","anthropic","claude","gemini","terminal","clack"],"license":"MIT","_id":"@abjad-org/research-chef@0.2.0","maintainers":[{"name":"haqqimuazzam","email":"haqqimuazzam18@gmail.com"}],"homepage":"https://github.com/abjad-org/research-chef#readme","bugs":{"url":"https://github.com/abjad-org/research-chef/issues"},"bin":{"research-chef":"bin/research-chef.js"},"dist":{"shasum":"a4aaf54c4434a2b5fa53d1b702632faf25981a95","tarball":"https://registry.npmjs.org/@abjad-org/research-chef/-/research-chef-0.2.0.tgz","fileCount":25,"integrity":"sha512-Y5AOYv8ZhgooQvj0SfkUWeKiPzRctK0SCaLMQvRtKc8vG9lIc9nD3i5LSMn/YHUF9W6vrWYMQpW3jWJUzkMRXw==","signatures":[{"sig":"MEYCIQDX28bWiRnRPJv34Kdi/2KltHhMmjljs9RnhPLGAoO28QIhAIDhJQIoDWufiFHkVNzS4yJTI5VVLOfTH4osh9oBHgqd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abjad-org%2fresearch-chef@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53474},"type":"module","engines":{"node":">=18.19.0"},"gitHead":"e7686e5c72ac5231f66e96c457df5db9396a702a","scripts":{"dev":"tsx src/index.ts","test":"tsx --test test/**/*.test.ts","build":"tsc -p tsconfig.json","clean":"rimraf dist","start":"node bin/research-chef.js","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"haqqimuazzam","email":"haqqimuazzam18@gmail.com"},"repository":{"url":"git+https://github.com/abjad-org/research-chef.git","type":"git","directory":"packages/cli"},"_npmVersion":"10.8.2","description":"research-chef: an interactive, BYOK-powered AI research assistant for your terminal","directories":{},"_nodeVersion":"20.20.2","dependencies":{"picocolors":"^1.1.1","@clack/prompts":"^0.9.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","rimraf":"^6.0.1","typescript":"^5.7.3","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/research-chef_0.2.0_1788756588842_0.4083640391018408","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@abjad-org/research-chef","version":"0.2.1","keywords":["cli","ai","research","byok","openai","anthropic","claude","gemini","terminal","clack"],"license":"MIT","_id":"@abjad-org/research-chef@0.2.1","maintainers":[{"name":"haqqimuazzam","email":"haqqimuazzam18@gmail.com"}],"homepage":"https://github.com/abjad-org/research-chef#readme","bugs":{"url":"https://github.com/abjad-org/research-chef/issues"},"bin":{"research-chef":"bin/research-chef.js"},"dist":{"shasum":"461513ad781b38834a23df3b6c51ac9c3d5eefc0","tarball":"https://registry.npmjs.org/@abjad-org/research-chef/-/research-chef-0.2.1.tgz","fileCount":25,"integrity":"sha512-thU1MSyyUA6f4CEzrdZg2dDf699Zg6LkPBwujSK5Olpf5Iy0huY5H2tUP5aFYu5l/1xux39mJx/CWuqXlt6iAg==","signatures":[{"sig":"MEQCIGSRFcpyjc+KENUBS0Nxz4q8t/B6DLIGWsaQst1TcqcOAiBJwI9Mp47Ylflmu//ccN90KnnR2wF4nQOQgQDhbH3wGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abjad-org%2fresearch-chef@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53471},"type":"module","engines":{"node":">=18.19.0"},"gitHead":"c89ea45b29cdaa4c000572a1298160590759b50d","scripts":{"dev":"tsx src/index.ts","test":"tsx scripts/run-tests.mjs","build":"tsc -p tsconfig.json","clean":"rimraf dist","start":"node bin/research-chef.js","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"haqqimuazzam","email":"haqqimuazzam18@gmail.com"},"repository":{"url":"git+https://github.com/abjad-org/research-chef.git","type":"git","directory":"packages/cli"},"_npmVersion":"10.8.2","description":"research-chef: an interactive, BYOK-powered AI research assistant for your terminal","directories":{},"_nodeVersion":"20.20.2","dependencies":{"picocolors":"^1.1.1","@clack/prompts":"^0.9.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","rimraf":"^6.0.1","typescript":"^5.7.3","@types/node":"^22.10.5"},"_npmOperationalInternal":{"tmp":"tmp/research-chef_0.2.1_1788757870196_0.4699388613887361","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"_id":"@abjad-org/research-chef@0.3.0","bin":{"research-chef":"bin/research-chef.js"},"bugs":{"url":"https://github.com/abjad-org/research-chef/issues"},"dist":{"shasum":"6a853df8c428f8aafa43525d4261f6a56ba8ab67","tarball":"https://registry.npmjs.org/@abjad-org/research-chef/-/research-chef-0.3.0.tgz","fileCount":30,"integrity":"sha512-iIRan4rwWRg2KKEwZdEfjCt2fsyqlWTKLWAtjInMGrMZ2EH1RG8vdm0iGI5UdS4obVsUi7qlpGMHoUjAVXaIGQ==","signatures":[{"sig":"MEQCIDwUoVyD5DCQTaZhWqDLx3HmJl7SfDPmg+1PiXtOJOhmAiBIK7sI3XYQxWGJa2b18xMMizf0mcQ7dwntvJQkowGpuQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGMydnbyxbitvsKnm/tSsTXmf3dzKc2y/38mCzrVGJ6+AiEAipqDxuF3pR9YQ19uZLaghCcc2gh02VMtfVhqJBsvW2g="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abjad-org%2fresearch-chef@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":96076},"name":"@abjad-org/research-chef","type":"module","engines":{"node":">=18.19.0"},"gitHead":"52faf46b9b44c0fcea8b9268056b4efacb86c1ec","license":"MIT","scripts":{"dev":"tsx src/index.ts","test":"tsx scripts/run-tests.mjs","build":"tsc -p tsconfig.json","clean":"rimraf dist","start":"node bin/research-chef.js","typecheck":"tsc -p tsconfig.json --noEmit"},"version":"0.3.0","_npmUser":{"name":"haqqimuazzam","email":"haqqimuazzam18@gmail.com"},"homepage":"https://github.com/abjad-org/research-chef#readme","keywords":["cli","ai","research","byok","openai","anthropic","claude","gemini","terminal","clack"],"repository":{"url":"git+https://github.com/abjad-org/research-chef.git","type":"git","directory":"packages/cli"},"_npmVersion":"10.8.2","description":"research-chef: an interactive, BYOK-powered AI research assistant for your terminal","directories":{},"maintainers":[{"name":"haqqimuazzam","email":"haqqimuazzam18@gmail.com"}],"_nodeVersion":"20.20.2","dependencies":{"picocolors":"^1.1.1","@clack/prompts":"^0.9.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","rimraf":"^6.0.1","typescript":"^5.7.3","@types/node":"^22.10.5"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/research-chef_0.3.0_1789197763608_0.4918296281197747"}}},"time":{"created":"2026-09-05T11:23:07.250Z","modified":"2026-09-12T07:22:44.041Z","0.1.2":"2026-09-05T11:23:07.515Z","0.2.0":"2026-09-07T04:49:48.973Z","0.2.1":"2026-09-07T05:11:10.334Z","0.3.0":"2026-09-12T07:22:43.689Z"},"bugs":{"url":"https://github.com/abjad-org/research-chef/issues"},"license":"MIT","homepage":"https://github.com/abjad-org/research-chef#readme","keywords":["cli","ai","research","byok","openai","anthropic","claude","gemini","terminal","clack"],"repository":{"url":"git+https://github.com/abjad-org/research-chef.git","type":"git","directory":"packages/cli"},"description":"research-chef: an interactive, BYOK-powered AI research assistant for your terminal","maintainers":[{"name":"haqqimuazzam","email":"haqqimuazzam18@gmail.com"}],"readme":"# @abjad-org/research-chef\n\nAn interactive terminal AI research assistant with **BYOK** (Bring Your Own\nKey) support, built with [`@clack/prompts`](https://github.com/natemoo-re/clack)\nand [`picocolors`](https://github.com/alexeyraspopov/picocolors).\n\n## Features\n\n- 🔑 **BYOK** — bring your own API key for OpenAI, Anthropic (Claude),\n  Google Gemini, or any OpenAI-compatible endpoint (Groq, Together AI,\n  OpenRouter, a local Ollama server, self-hosted deployments, etc). No key\n  ever leaves your machine except to call the provider's own API directly.\n- 🛡️ **Verified before you start** — your API key and model are tested with\n  a minimal request during setup, so problems surface immediately instead\n  of after you've already typed out a research topic.\n- 🔍 **One-shot research report** — enter a topic and get a clear, structured\n  summary (overview, key points, context, takeaway) backed by live web\n  search, with a clickable `Sources:` section (title + full URL) so every\n  claim can be verified.\n- 🗺️ **Outline-first reports** — approve, edit, or regenerate the proposed\n  outline (sections + sub-questions) before the full report is written;\n  navigate long reports with `/sections` and `/goto <number>`.\n- 💬 **Interactive follow-up chat** — keep asking questions in the same\n  session, switch models with `/model`, start fresh with `/clear`, or save\n  the conversation with `/save` — until you type `/exit`.\n- 🎨 **Polished terminal UI** — spinners, colored output, and boxed panels\n  via `@clack/prompts` and `picocolors`.\n\n## Getting started\n\n### Install from npm (recommended for end users)\n\n```bash\nnpx @abjad-org/research-chef\n```\n\nor install it globally:\n\n```bash\nnpm install -g @abjad-org/research-chef\nresearch-chef\n```\n\n### Run from source (for development)\n\nFrom the monorepo root:\n\n```bash\nnpm install\nnpm run build\nnpm start\n```\n\nOr in dev mode (no build step, powered by `tsx`):\n\n```bash\nnpm run dev\n```\n\n## Usage walkthrough\n\n1. **Welcome screen** — a short banner explains what the tool does.\n2. **Connect your provider** — pick OpenAI, Anthropic, Gemini, or a Custom\n   (OpenAI-compatible) endpoint, then paste your API key (input is masked).\n   Optionally override the default model. For a custom endpoint, you'll\n   also be asked for its base URL; if it looks like a local Ollama server,\n   the API key can be left blank.\n3. **Verification** — a quick, minimal request confirms your key and model\n   actually work together before moving on, so problems are caught here\n   rather than later.\n4. **Enter a research topic** — e.g. *\"The impact of AI on renewable energy\n   adoption\"*.\n5. **Approve the outline** — review the proposed sections and guiding\n   sub-questions, then approve, edit (your own headings separated by `;`),\n   or regenerate before the full report is written.\n6. **Research spinner** — a loading spinner plays while the AI puts together\n   its answer, following your approved outline.\n7. **Research report** — a structured, easy-to-read summary is printed in a\n   boxed panel, ending with a `Sources:` list of full URLs. Built-in\n   providers (OpenAI via the Responses API, Anthropic, Gemini) search the\n   live web automatically; custom endpoints answer from the model's own\n   knowledge (noted once, neutrally, during setup).\n7. **Chat loop** — keep asking follow-up questions (auto-saved after every\n   reply), or use a command:\n    - `/model` — switch to a different AI model mid-conversation\n    - `/clear` — clear the conversation and start a new topic\n    - `/save` — export the conversation to a Markdown file under\n      `~/.research-chef/exports/`\n    - `/history [filter]` — list auto-saved sessions, optionally filtered by topic\n    - `/resume <number>` — resume a past session from `/history`\n    - `/sections` — list the sections of the current report\n    - `/goto <number>` — jump to one section of the current report\n    - `/help` — show all available commands\n    - `/exit` — quit research-chef\n\nSessions are auto-saved as JSON under `~/.research-chef/sessions/` (API\nkeys are never written to disk). At startup, when past sessions exist,\nyou can resume one instead of starting fresh.\n\n## Where does my API key go?\n\nYour key is only ever used, in memory, for the duration of the CLI process\nto call the selected provider's official HTTPS API directly from your\nmachine (`api.openai.com`, `api.anthropic.com`, or\n`generativelanguage.googleapis.com`). It is **never** written to disk, sent\nto any research-chef server (there isn't one), or logged.\n\n## Project structure\n\n```\nsrc/\n├── index.ts              # Entry point: wires the whole flow together\n├── types/                # Shared TypeScript interfaces & error types\n│   └── index.ts\n├── providers/            # BYOK provider adapters (one file per provider)\n│   ├── registry.ts       # Provider metadata (labels, default models, key format)\n│   ├── factory.ts        # Maps a ProviderId -> concrete adapter\n│   ├── openai.provider.ts\n│   ├── anthropic.provider.ts\n│   └── gemini.provider.ts\n├── core/                 # Provider-agnostic research/chat logic\n│   ├── prompts.ts        # System prompt & kickoff message templates\n│   ├── citations.ts      # Dedupe/format/append for web-source citations\n│   ├── outline.ts        # Outline parsing + report section navigation\n│   ├── conversation.ts   # Conversation history state\n│   ├── sessionStore.ts   # Auto-save/list/load/search for past sessions\n│   └── engine.ts         # Orchestrates conversation + provider calls\n└── ui/                   # clack + picocolors presentation layer\n    ├── theme.ts          # Centralized colors & text wrapping helper\n    ├── banner.ts         # Intro/outro screens\n    ├── setup.ts          # Provider selection + API key prompt\n    ├── topic.ts          # Research topic prompt\n    ├── resumeStartup.ts  # Startup resume picker\n    ├── outlineFlow.ts    # Outline approve/edit/regenerate loop\n    ├── researchFlow.ts   # Spinner + initial research report\n    ├── chatLoop.ts       # Interactive follow-up chat loop\n    ├── render.ts         # Renders reports / replies / errors\n    └── cancel.ts         # Shared Ctrl+C / Esc handling\n└── ui/                   # clack + picocolors presentation layer\n    ├── theme.ts          # Centralized colors & text wrapping helper\n    ├── banner.ts         # Intro/outro screens\n    ├── setup.ts          # Provider selection + API key prompt\n    ├── topic.ts          # Research topic prompt\n    ├── researchFlow.ts   # Spinner + initial research report\n    ├── chatLoop.ts       # Interactive follow-up chat loop\n    ├── render.ts         # Renders reports / replies / errors\n    └── cancel.ts         # Shared Ctrl+C / Esc handling\n```\n\n## Adding a new provider\n\n1. Create `src/providers/<name>.provider.ts` implementing the `AiProvider`\n   interface (a `sendMessage()` and a `testConnection()` method).\n2. Register its metadata (label, hint, default model, key format check) in\n   `src/providers/registry.ts`.\n3. Add it to the `ADAPTERS` map in `src/providers/factory.ts`.\n\nNo other file needs to change — the UI and engine work against the\n`AiProvider` interface, not concrete providers.\n\n> **Already OpenAI-compatible?** If the provider speaks the same\n> `/chat/completions` request/response shape as OpenAI (many do — Groq,\n> Together AI, OpenRouter, Ollama, etc.), you likely don't need a new\n> adapter file at all. Reuse\n> `createOpenAiCompatibleProvider(providerId, defaultBaseUrl)` from\n> `src/providers/openai.provider.ts` instead, the same way\n> `src/providers/custom.provider.ts` does.\n\n## Scripts\n\n| Script             | Description                                  |\n| ------------------ | --------------------------------------------- |\n| `npm run dev`       | Run the CLI directly from TypeScript source   |\n| `npm run build`     | Compile TypeScript to `dist/`                 |\n| `npm start`         | Run the compiled CLI from `dist/`             |\n| `npm run typecheck` | Type-check without emitting files             |\n| `npm run clean`     | Remove the `dist/` folder                     |","readmeFilename":"README.md"}