{"_id":"@dev-metwaly/jira-ticket-reviewer","_rev":"4-a73fd745aa2615ef3a686246d87988c6","name":"@dev-metwaly/jira-ticket-reviewer","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.2":{"name":"@dev-metwaly/jira-ticket-reviewer","version":"0.1.2","_id":"@dev-metwaly/jira-ticket-reviewer@0.1.2","maintainers":[{"name":"dev-metwaly","email":"abdohamdymetwaly@gmail.com"}],"bin":{"jira-ticket-reviewer":"dist/index.js"},"dist":{"shasum":"6752cc528ce15f4618cc2edef3449db26f4b0146","tarball":"https://registry.npmjs.org/@dev-metwaly/jira-ticket-reviewer/-/jira-ticket-reviewer-0.1.2.tgz","fileCount":46,"integrity":"sha512-pAGWcn5WtL6BvDUg0Z/yWfQdePLmHwM2jc3Nz4VCih5TgySpS1T7XknMr3xzENXwZb12ydLIqP4xczzLymC7yg==","signatures":[{"sig":"MEQCICdVWd1R34wrCXcGkN0rWdeHm4ZjMNSRdttBrRB9bcKVAiBndnQflHp7cWRjj1pfNiR3ikuBbCjAF4Rc8hsDJw+asQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47002},"main":"src/index.ts","type":"module","types":"src/index.ts","module":"src/index.ts","gitHead":"90d6638f65587482125132ae8a4aad9053ac8bfa","scripts":{"lint":"eslint .","build":"tsc -p tsconfig.json","start":"node dist/index.js","format":"prettier --write .","lint:fix":"eslint . --fix","format:check":"prettier --check ."},"_npmUser":{"name":"dev-metwaly","email":"abdohamdymetwaly@gmail.com"},"_npmVersion":"10.8.2","description":"CLI to review Jira issues using AI models","directories":{},"_nodeVersion":"20.20.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.2","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.7.3","@types/node":"^22.13.0","typescript-eslint":"^8.54.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-ticket-reviewer_0.1.2_1770199105910_0.09889569041232993","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@dev-metwaly/jira-ticket-reviewer","version":"0.1.3","_id":"@dev-metwaly/jira-ticket-reviewer@0.1.3","maintainers":[{"name":"dev-metwaly","email":"abdohamdymetwaly@gmail.com"}],"bin":{"jira-ticket-reviewer":"dist/index.js"},"dist":{"shasum":"5be9e7248e7e5acbd120fb66f3c1c63917df4eaf","tarball":"https://registry.npmjs.org/@dev-metwaly/jira-ticket-reviewer/-/jira-ticket-reviewer-0.1.3.tgz","fileCount":46,"integrity":"sha512-/EPaJQNKtwDYrksXs2Rpjoz+dQYhs4yzXeF6Z75ALj8UaGX5WbUZGUV294zp4g1nXdxAz4OYul1FRmNuN+vEaw==","signatures":[{"sig":"MEUCICF57eZ76RtWwZTuzyTDFTYUwcGFYKwJQKnr6y0042XsAiEAkHvp35B+VNbeOjCM3ZpIUM8UkWppNLG6ZKGT2mNgcNA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47204},"main":"src/index.ts","type":"module","types":"src/index.ts","module":"src/index.ts","gitHead":"2a2a99c0fe548024f6600b7440d0ed649df3c982","scripts":{"lint":"eslint .","build":"tsc -p tsconfig.json && tsc-alias --resolve-full-paths","start":"node dist/index.js","format":"prettier --write .","lint:fix":"eslint . --fix","format:check":"prettier --check ."},"_npmUser":{"name":"dev-metwaly","email":"abdohamdymetwaly@gmail.com"},"_npmVersion":"10.8.2","description":"CLI to review Jira issues using AI models","directories":{},"_nodeVersion":"20.20.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.2","ts-node":"^10.9.2","prettier":"^3.8.1","tsc-alias":"^1.8.16","@eslint/js":"^9.39.2","typescript":"^5.7.3","@types/node":"^22.13.0","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.54.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-ticket-reviewer_0.1.3_1770213016562_0.1544360773225839","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@dev-metwaly/jira-ticket-reviewer","version":"0.1.4","_id":"@dev-metwaly/jira-ticket-reviewer@0.1.4","maintainers":[{"name":"dev-metwaly","email":"abdohamdymetwaly@gmail.com"}],"bin":{"jira-ticket-reviewer":"dist/index.js"},"dist":{"shasum":"30f1c7fc64b895158350cc185714d03bfbb478ef","tarball":"https://registry.npmjs.org/@dev-metwaly/jira-ticket-reviewer/-/jira-ticket-reviewer-0.1.4.tgz","fileCount":46,"integrity":"sha512-miEXALWBh9Gzg5HK38KI/moa+60VdL9WTx8x5/gk3eOPwGz5ZTDjurxPN2Kdm0SGXe2M6p7TKRp4MPkcX0r3Dg==","signatures":[{"sig":"MEUCIQDvRy4hvhAyUw+SVEqRRkZkr3B1PdUITWgXPMI6k12m9AIgHtubsIE9n1RH2zOk+QDj+il+eUSK210V4zwH8PH3rws=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48673},"main":"src/index.ts","type":"module","types":"src/index.ts","module":"src/index.ts","gitHead":"4e53585344293e3b54489bb0af6b89add3bee141","scripts":{"lint":"eslint .","build":"tsc -p tsconfig.json && tsc-alias --resolve-full-paths","start":"node dist/index.js","format":"prettier --write .","lint:fix":"eslint . --fix","format:check":"prettier --check ."},"_npmUser":{"name":"dev-metwaly","email":"abdohamdymetwaly@gmail.com"},"_npmVersion":"10.8.2","description":"CLI to review Jira issues using AI models","directories":{},"_nodeVersion":"20.20.0","dependencies":{"commander":"^12.1.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.2","ts-node":"^10.9.2","prettier":"^3.8.1","tsc-alias":"^1.8.16","@eslint/js":"^9.39.2","typescript":"^5.7.3","@types/node":"^22.13.0","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.54.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-ticket-reviewer_0.1.4_1770221368565_0.36952050360216093","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@dev-metwaly/jira-ticket-reviewer","version":"0.1.5","description":"CLI to review Jira issues using AI models","type":"module","main":"src/index.ts","module":"src/index.ts","types":"src/index.ts","bin":{"jira-ticket-reviewer":"dist/index.js"},"scripts":{"build":"tsc -p tsconfig.json && tsc-alias --resolve-full-paths","start":"node dist/index.js","lint":"eslint .","lint:fix":"eslint . --fix","format":"prettier --write .","format:check":"prettier --check ."},"dependencies":{"commander":"^12.1.0"},"devDependencies":{"@eslint/js":"^9.39.2","@types/node":"^22.13.0","eslint":"^9.39.2","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.5","prettier":"^3.8.1","ts-node":"^10.9.2","tsc-alias":"^1.8.16","tsconfig-paths":"^4.2.0","typescript":"^5.7.3","typescript-eslint":"^8.54.0"},"_id":"@dev-metwaly/jira-ticket-reviewer@0.1.5","gitHead":"b8e58a7439d87008270cc4aa98451432fca649e2","_nodeVersion":"20.20.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-A8lln1GbeE2dYvLM4AGtxUld/jggLAClVPcwGGfW/2VXU6sa2668jMPaJ3UY/gJuA4lq2bhbIjr80oZPkT1LPA==","shasum":"b1873cd6d007bb1a049a9fe133d064977688eddd","tarball":"https://registry.npmjs.org/@dev-metwaly/jira-ticket-reviewer/-/jira-ticket-reviewer-0.1.5.tgz","fileCount":49,"unpackedSize":54280,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB22qja9vSuLuY4GFBuR65As6iMfcgBnwLwjdseFP0weAiEAmqBBEXeCiS2+thp4PdgAlHAFvnn/1AHR2YvKweVVTEA="}]},"_npmUser":{"name":"dev-metwaly","email":"abdohamdymetwaly@gmail.com"},"directories":{},"maintainers":[{"name":"dev-metwaly","email":"abdohamdymetwaly@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/jira-ticket-reviewer_0.1.5_1770239224807_0.7213815752948165"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-04T09:58:25.818Z","modified":"2026-02-04T21:07:05.087Z","0.1.2":"2026-02-04T09:58:26.062Z","0.1.3":"2026-02-04T13:50:16.721Z","0.1.4":"2026-02-04T16:09:28.710Z","0.1.5":"2026-02-04T21:07:04.966Z"},"description":"CLI to review Jira issues using AI models","maintainers":[{"name":"dev-metwaly","email":"abdohamdymetwaly@gmail.com"}],"readme":"# jira-ticket-reviewer\n\nCLI tool to review Jira issues using AI models.\n\n## Installation\n\n```bash\nnpm install -g jira-ticket-reviewer\n\n\n```\n\nOr run locally:\n\n```bash\nnpm install\nnpm run build\n\n\n```\n\n## Demo\n\nTo see the tool in action without a Jira account, you can use the provided demo ticket:\n\n1. Clone the repository:\n\n```bash\ngit clone https://github.com/your-username/jira-ticket-reviewer.git\ncd jira-ticket-reviewer\n\n\n```\n\n2. Install dependencies and build:\n\n```bash\nnpm install\nnpm run build\n\n\n```\n\n3. Run the demo using the example ticket:\n\n```bash\nnode dist/index.js --input demo/ticket.json\n\n```\n\nYou can also try using a custom prompt:\n\n```bash\nnode dist/index.js --input demo/ticket.json --prompt demo/custom-prompt.txt\n\n```\n\n> **Note:** You still need to configure an LLM provider (e.g., OpenAI API key) as described in the [Configuration](#configuration) section. You can use `demo/.jira-ticket-reviewer.json` as a starting point for your configuration.\n\n## Usage\n\n### Basic usage (fetch from Jira)\n\n```bash\njira-ticket-reviewer PROJ-123\n\n\n\n```\n\n### Manual input (JSON file)\n\n```bash\njira-ticket-reviewer --input ticket.json\n\n\n\n```\n\n### Options\n\n| Option                  | Description                                            |\n| ----------------------- | ------------------------------------------------------ |\n| `--jira-base-url <url>` | Jira base URL                                          |\n| `--jira-token <token>`  | Jira API token                                         |\n| `--jira-email <email>`  | Jira account email                                     |\n| `-i, --input <file>`    | Manual input JSON file instead of fetching from Jira   |\n| `-p, --provider <name>` | LLM provider: `openai`, `anthropic`, `gemini`, `local`, `custom` |\n| `--prompt <file>`       | Custom prompt template file                            |\n| `-o, --output <file>`   | Output file path (default: `<ISSUE_KEY>.md`)           |\n| `--no-stdout`           | Disable stdout output                                  |\n| `--no-file`             | Disable file output                                    |\n\n## Configuration\n\n### Config file\n\nCreate `.jira-ticket-reviewer.json` in your project root or home directory:\n\n```json\n{\n  \"jira\": {\n    \"baseUrl\": \"https://your-company.atlassian.net\",\n    \"email\": \"your-email@example.com\",\n    \"token\": \"your-jira-api-token\"\n  },\n  \"provider\": \"openai\",\n  \"providers\": {\n    \"openai\": {\n      \"apiKey\": \"sk-...\",\n      \"model\": \"gpt-4o\"\n    },\n    \"anthropic\": {\n      \"apiKey\": \"sk-ant-...\",\n      \"model\": \"claude-sonnet-4-20250514\"\n    },\n    \"gemini\": {\n      \"apiKey\": \"your-gemini-api-key\",\n      \"model\": \"gemini-2.0-flash\"\n    },\n    \"local\": {\n      \"baseUrl\": \"http://localhost:11434/api\",\n      \"model\": \"llama2\"\n    }\n  }\n}\n\n\n\n```\n\n### Environment variables\n\nEnvironment variables override config file values:\n\n| Variable             | Description                                           |\n| -------------------- | ----------------------------------------------------- |\n| `JIRA_BASE_URL`      | Jira base URL                                         |\n| `JIRA_TOKEN`         | Jira API token                                        |\n| `JIRA_EMAIL`         | Jira account email                                    |\n| `LLM_PROVIDER`       | Default LLM provider                                  |\n| `OPENAI_API_KEY`     | OpenAI API key                                        |\n| `OPENAI_MODEL`       | OpenAI model (default: `gpt-4o`)                      |\n| `ANTHROPIC_API_KEY`  | Anthropic API key                                     |\n| `ANTHROPIC_MODEL`    | Anthropic model (default: `claude-sonnet-4-20250514`) |\n| `GEMINI_API_KEY`     | Google Gemini API key                                 |\n| `GEMINI_MODEL`       | Gemini model (default: `gemini-2.0-flash`)            |\n| `LOCAL_LLM_URL`      | Local LLM endpoint URL                                |\n| `LOCAL_LLM_MODEL`    | Local LLM model name                                  |\n| `CUSTOM_LLM_URL`     | Custom LLM endpoint URL                               |\n| `CUSTOM_LLM_API_KEY` | Custom LLM API key                                    |\n| `CUSTOM_LLM_MODEL`   | Custom LLM model                                      |\n| `PROMPT_FILE`        | Path to custom prompt template                        |\n\n## Custom prompts\n\nCreate a custom prompt template using `{{placeholder}}` syntax:\n\n```text\nReview this Jira ticket:\n\nKey: {{key}}\nSummary: {{summary}}\nDescription: {{description}}\n\nPlease provide:\n1. Clarity issues\n2. Missing requirements\n3. Suggested improvements\n\n\n\n```\n\nAvailable placeholders:\n\n- `{{key}}` - Issue key (e.g., PROJ-123)\n- `{{summary}}` - Issue summary\n- `{{status}}` - Issue status\n- `{{priority}}` - Issue priority\n- `{{issueType}}` - Issue type\n- `{{assignee}}` - Assignee name\n- `{{reporter}}` - Reporter name\n- `{{created}}` - Created date\n- `{{updated}}` - Updated date\n- `{{labels}}` - Labels (comma-separated)\n- `{{components}}` - Components (comma-separated)\n- `{{fixVersions}}` - Fix versions (comma-separated)\n- `{{project}}` - Project name\n- `{{url}}` - Jira issue URL\n- `{{description}}` - Full description\n\n## Manual input format\n\nWhen using `--input`, provide a JSON file with issue details:\n\n```json\n{\n  \"key\": \"PROJ-123\",\n  \"summary\": \"Implement user authentication\",\n  \"status\": \"In Progress\",\n  \"priority\": \"High\",\n  \"issueType\": \"Story\",\n  \"assignee\": \"John Doe\",\n  \"reporter\": \"Jane Smith\",\n  \"description\": \"As a user, I want to...\",\n  \"labels\": [\"backend\", \"security\"],\n  \"components\": [\"auth\"],\n  \"project\": \"My Project\"\n}\n\n\n\n```\n\n## Providers\n\n### OpenAI\n\nUses the OpenAI Chat Completions API. Set `OPENAI_API_KEY` or configure in config file.\n\n### Anthropic\n\nUses the Anthropic Messages API. Set `ANTHROPIC_API_KEY` or configure in config file.\n\n### Gemini\n\nUses the Google Gemini API. Set `GEMINI_API_KEY` or configure in config file. Get your API key from [Google AI Studio](https://aistudio.google.com/app/apikey).\n\n### Local\n\nSupports local LLM servers with OpenAI-compatible APIs or Ollama. Default URL: `http://localhost:11434/api`\n\n### Custom\n\nFor any other LLM endpoint that accepts OpenAI-style requests. Configure `baseUrl`, `apiKey`, and `model`.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}