{"_id":"@dcs-soni/gitscribe","_rev":"2-a0df60b5aa52b14c8e1abceaa5129ea6","name":"@dcs-soni/gitscribe","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@dcs-soni/gitscribe","version":"1.0.0","keywords":["git","commit","ai","changelog","release-notes","conventional-commits","cli","llm","openai","anthropic","gemini","ollama"],"author":{"name":"Divya"},"license":"MIT","_id":"@dcs-soni/gitscribe@1.0.0","maintainers":[{"name":"dcs-soni","email":"divyanshusoni52@gmail.com"}],"bin":{"gitscribe":"dist/cli/index.js"},"dist":{"shasum":"93ff920fc3e48f946dafe419e6e4cd51e690456f","tarball":"https://registry.npmjs.org/@dcs-soni/gitscribe/-/gitscribe-1.0.0.tgz","fileCount":7,"integrity":"sha512-dMelsQa+W68lp2CFDszTD3SGqmUJ3HoaFxk7jKf835jNmw9dvukWv2wxBFOR5xWJKQSqdFpDCDJyqiNkdJrcfA==","signatures":[{"sig":"MEQCIA+hwrClRwCXAaaip/rrNJwD4EtJ0PhggqlXYlB3Z2MjAiBugKr7WGvNwkpWfQ1qqlCXHNZfkLmU5eMlivjJgybw6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225467},"main":"./dist/cli/index.js","type":"module","types":"./dist/cli/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/cli/index.d.ts","import":"./dist/cli/index.js"}},"gitHead":"78551685d31529449f55abea79765cd50f0da2e9","scripts":{"dev":"tsup --watch","lint":"biome check ./src","test":"vitest run","build":"tsup","format":"biome format --write ./src","lint:fix":"biome check --fix ./src","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"dcs-soni","email":"divyanshusoni52@gmail.com"},"_npmVersion":"10.7.0","description":"AI-powered CLI tool for generating commit messages, changelogs, and release notes","directories":{},"_nodeVersion":"22.2.0","dependencies":{"ora":"^9.3.0","zod":"^4.3.6","chalk":"^5.6.2","openai":"^6.25.0","inquirer":"^13.3.0","commander":"^14.0.3","simple-git":"^3.32.3","@anthropic-ai/sdk":"^0.78.0","@google/generative-ai":"^0.24.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.3","@biomejs/biome":"^2.4.6","@types/inquirer":"^9.0.9"},"_npmOperationalInternal":{"tmp":"tmp/gitscribe_1.0.0_1774257386417_0.5515607541691838","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@dcs-soni/gitscribe","version":"1.0.1","description":"AI-powered CLI tool for generating commit messages, changelogs, and release notes","type":"module","main":"./dist/cli/index.js","types":"./dist/cli/index.d.ts","exports":{".":{"import":"./dist/cli/index.js","types":"./dist/cli/index.d.ts"}},"bin":{"gitscribe":"dist/cli/index.js"},"scripts":{"dev":"tsup --watch","build":"tsup","test":"vitest run","test:watch":"vitest","lint":"biome check ./src","lint:fix":"biome check --fix ./src","format":"biome format --write ./src","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"keywords":["git","commit","ai","changelog","release-notes","conventional-commits","cli","llm","openai","anthropic","gemini","ollama"],"author":{"name":"Divya"},"license":"MIT","engines":{"node":">=18.0.0"},"dependencies":{"@anthropic-ai/sdk":"^0.78.0","@google/generative-ai":"^0.24.1","chalk":"^5.6.2","commander":"^14.0.3","inquirer":"^13.3.0","openai":"^6.25.0","ora":"^9.3.0","simple-git":"^3.32.3","zod":"^4.3.6"},"devDependencies":{"@biomejs/biome":"^2.4.6","@types/inquirer":"^9.0.9","@types/node":"^25.3.3","tsup":"^8.5.1","typescript":"^5.9.3","vitest":"^4.0.18"},"_id":"@dcs-soni/gitscribe@1.0.1","gitHead":"81cf5c2109591ddd824b623dceec284bca79e573","_nodeVersion":"22.2.0","_npmVersion":"10.7.0","dist":{"integrity":"sha512-eSWEc8PKq2SgkLS+6MqWPBBXlY2ubZWPnNQR1NIv7aMtDr4WsKQHTZd5ZptC7cADjiJv1rKRrUxQc0Unumvfog==","shasum":"7702d15bdfed5400dbdf0d607b5db68e92ce5784","tarball":"https://registry.npmjs.org/@dcs-soni/gitscribe/-/gitscribe-1.0.1.tgz","fileCount":7,"unpackedSize":226496,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICO8G3WHM72Y5xn6kmfbXqRoPOTX7/aitvtkza7zAIV/AiAGPYOhw87RsGB0IZSzC4cfD3pW+KQBqp3yqFSquokyvA=="}]},"_npmUser":{"name":"dcs-soni","email":"divyanshusoni52@gmail.com"},"directories":{},"maintainers":[{"name":"dcs-soni","email":"divyanshusoni52@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gitscribe_1.0.1_1774257652261_0.18919825166207205"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-23T09:16:26.238Z","modified":"2026-03-23T09:20:52.518Z","1.0.0":"2026-03-23T09:16:26.579Z","1.0.1":"2026-03-23T09:20:52.404Z"},"author":{"name":"Divya"},"license":"MIT","keywords":["git","commit","ai","changelog","release-notes","conventional-commits","cli","llm","openai","anthropic","gemini","ollama"],"description":"AI-powered CLI tool for generating commit messages, changelogs, and release notes","maintainers":[{"name":"dcs-soni","email":"divyanshusoni52@gmail.com"}],"readme":"# ✍️ GitScribe\r\n\r\n> AI-powered CLI tool for generating commit messages, changelogs, and release notes.\r\n\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\r\n[![Node.js](https://img.shields.io/badge/Node.js-%3E%3D18-green.svg)](https://nodejs.org/)\r\n\r\nGitScribe analyzes your Git diffs through LLMs and generates precise, **[Conventional Commits](https://www.conventionalcommits.org/)**-compliant commit messages — so you never write `\"fix stuff\"` again.\r\n\r\n## ✨ Features\r\n\r\n- 🤖 **AI Commit Messages** — Analyze staged diffs → generate conventional commits → confirm → done\r\n- 📋 **Changelog Generation** — Auto-generate `CHANGELOG.md` from commit history (Keep a Changelog format)\r\n- 📝 **Release Notes** — Human-readable, narrative release notes for stakeholders\r\n- ✅ **Commit Validation** — CI-friendly validation with exit codes (0/1)\r\n- 🔒 **Secret Detection** — Scans diffs for leaked API keys, tokens, passwords before sending to LLM\r\n- 🔌 **Multi-Provider** — OpenAI, Anthropic (Claude), Google Gemini, Ollama (local)\r\n- 🛡️ **Security-First** — Input sanitization, response validation, no telemetry, local-only mode\r\n\r\n## 🚀 Quick Start\r\n\r\n```bash\r\n# Try without installing\r\nnpx gitscribe commit\r\n\r\n# Global install\r\nnpm install -g gitscribe\r\n\r\n# First-time setup\r\ngitscribe init\r\n\r\n# Generate a commit message\r\ngit add .\r\ngitscribe commit\r\n\r\n# Generate changelog\r\ngitscribe changelog\r\n\r\n# Validate last commit\r\ngitscribe validate\r\n```\r\n\r\n## 📸 How It Works\r\n\r\n```\r\n$ gitscribe commit\r\n\r\n  ✅ 3 files changed: src/auth/login.ts, src/auth/token.ts, tests/auth.test.ts\r\n\r\n  🤖 Suggested commit message:\r\n\r\n  ┌─────────────────────────────────────────────────────┐\r\n  │  feat(auth): add JWT refresh token rotation         │\r\n  │                                                     │\r\n  │  - Implement automatic token refresh on expiry      │\r\n  │  - Add rotation to prevent replay attacks           │\r\n  │  - Add unit tests for token refresh flow            │\r\n  └─────────────────────────────────────────────────────┘\r\n\r\n  ? What would you like to do?\r\n    ❯ ✅ Accept and commit\r\n      ✏️  Edit message\r\n      🔄 Regenerate\r\n      ❌ Cancel\r\n```\r\n\r\n## 🧰 Commands\r\n\r\n| Command                   | Description                                       |\r\n| ------------------------- | ------------------------------------------------- |\r\n| `gitscribe init`          | Interactive setup wizard                          |\r\n| `gitscribe commit`        | Generate AI commit message from staged changes    |\r\n| `gitscribe changelog`     | Generate CHANGELOG.md from commit history         |\r\n| `gitscribe release-notes` | Generate human-readable release notes             |\r\n| `gitscribe validate`      | Validate commits against conventional commit spec |\r\n\r\n### Commit Options\r\n\r\n```bash\r\ngitscribe commit              # Interactive mode (default)\r\ngitscribe commit --auto       # Auto-accept without confirmation\r\ngitscribe commit --dry-run    # Preview without committing\r\ngitscribe commit --force      # Skip secret detection warnings\r\n```\r\n\r\n### Changelog Options\r\n\r\n```bash\r\ngitscribe changelog                    # Last tag → HEAD\r\ngitscribe changelog --from v1.0.0      # From specific tag\r\ngitscribe changelog --overwrite        # Regenerate entire file\r\ngitscribe changelog -o RELEASE.md      # Custom output file\r\n```\r\n\r\n### Release Notes Options\r\n\r\n```bash\r\ngitscribe release-notes                         # Markdown (default)\r\ngitscribe release-notes --format json           # JSON output\r\ngitscribe release-notes --from v1.0.0 --to v2.0.0\r\ngitscribe release-notes -o release.md           # Write to file\r\n```\r\n\r\n### Validate Options\r\n\r\n```bash\r\ngitscribe validate            # Validate last commit\r\ngitscribe validate --last 5   # Validate last 5 commits\r\n```\r\n\r\n## ⚙️ Configuration\r\n\r\nCreate a `.gitscriberc` file in your project root:\r\n\r\n```json\r\n{\r\n  \"provider\": \"openai\",\r\n  \"model\": \"gpt-4o-mini\",\r\n\r\n  \"conventions\": {\r\n    \"types\": [\"feat\", \"fix\", \"docs\", \"refactor\", \"test\", \"chore\"],\r\n    \"scopes\": [\"auth\", \"api\", \"ui\"],\r\n    \"maxSubjectLength\": 72,\r\n    \"requireScope\": false\r\n  },\r\n\r\n  \"security\": {\r\n    \"scanForSecrets\": true,\r\n    \"maxDiffLines\": 10000\r\n  }\r\n}\r\n```\r\n\r\n### Config Precedence\r\n\r\n1. CLI flags (`--provider openai`)\r\n2. Environment variables (`GITSCRIBE_PROVIDER`)\r\n3. Project `.gitscriberc`\r\n4. Global `~/.gitscribe/config.json`\r\n5. Built-in defaults\r\n\r\n### Environment Variables\r\n\r\n| Variable             | Description         |\r\n| -------------------- | ------------------- |\r\n| `GITSCRIBE_API_KEY`  | LLM API key         |\r\n| `GITSCRIBE_PROVIDER` | Provider name       |\r\n| `GITSCRIBE_MODEL`    | Model name          |\r\n| `GITSCRIBE_VERBOSE`  | Enable verbose mode |\r\n| `NO_COLOR`           | Disable colors      |\r\n\r\n## 🔌 Provider Setup\r\n\r\n### OpenAI (Default)\r\n\r\n```bash\r\nexport GITSCRIBE_API_KEY=\"sk-...\"\r\ngitscribe init  # Select OpenAI\r\n```\r\n\r\n### Anthropic (Claude)\r\n\r\n```bash\r\nexport GITSCRIBE_API_KEY=\"sk-ant-...\"\r\ngitscribe init  # Select Anthropic\r\n```\r\n\r\n### Google Gemini\r\n\r\n```bash\r\nexport GITSCRIBE_API_KEY=\"AI...\"\r\ngitscribe init  # Select Gemini\r\n```\r\n\r\n### Ollama (Local — Free, Private)\r\n\r\n```bash\r\nollama serve                    # Start Ollama\r\nollama pull llama3              # Pull a model\r\ngitscribe init                  # Select Ollama\r\n```\r\n\r\nNo API key required. Your code never leaves your machine.\r\n\r\n## 🔒 Security\r\n\r\n- **No telemetry** — Zero data collection\r\n- **Secret scanning** — Detects API keys, tokens, passwords in diffs before sending to LLM\r\n- **Input sanitization** — Prevents shell injection via crafted filenames/branches\r\n- **Response validation** — Strips prompt injection from AI responses\r\n- **Local mode** — Use Ollama for fully offline operation\r\n- **No eval()** — Zero dynamic code execution\r\n\r\n## 🏗️ Tech Stack\r\n\r\n| Layer             | Technology                                       |\r\n| ----------------- | ------------------------------------------------ |\r\n| Language          | TypeScript                                       |\r\n| Runtime           | Node.js ≥ 18                                     |\r\n| CLI               | Commander.js + Inquirer.js                       |\r\n| Git               | simple-git                                       |\r\n| LLM SDKs          | openai, @anthropic-ai/sdk, @google/generative-ai |\r\n| Testing           | Vitest (61 tests)                                |\r\n| Build             | tsup                                             |\r\n| Config Validation | Zod                                              |\r\n\r\n## 🧪 Development\r\n\r\n```bash\r\ngit clone https://github.com/yourusername/gitscribe.git\r\ncd gitscribe\r\nnpm install\r\nnpm test        # Run tests\r\nnpm run build   # Build\r\n```\r\n\r\n## 📄 License\r\n\r\n[MIT](LICENSE)\r\n","readmeFilename":"README.md"}