jira-pilot 2.0.4 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +216 -173
  2. package/bin/{jira.js → jira.ts} +10 -1
  3. package/dist/bin/jira.js +64 -0
  4. package/package.json +21 -15
  5. package/src/commands/ai-actions/{plan.js → plan.ts} +9 -9
  6. package/src/commands/ai-actions/{review.js → review.ts} +2 -2
  7. package/src/commands/ai-actions/{standup.js → standup.ts} +4 -4
  8. package/src/commands/{ai.js → ai.ts} +11 -11
  9. package/src/commands/{board.js → board.ts} +11 -11
  10. package/src/commands/bulk.ts +230 -0
  11. package/src/commands/{config.js → config.ts} +57 -8
  12. package/src/commands/dashboard.ts +222 -0
  13. package/src/commands/filter.ts +84 -0
  14. package/src/commands/{git.js → git.ts} +4 -4
  15. package/src/commands/issue-attach.ts +44 -0
  16. package/src/commands/issue-pr.ts +87 -0
  17. package/src/commands/issue-worklog.ts +90 -0
  18. package/src/commands/{issue.js → issue.ts} +359 -68
  19. package/src/commands/{mcp.js → mcp.ts} +2 -2
  20. package/src/commands/{project.js → project.ts} +11 -11
  21. package/src/commands/sprint.ts +269 -0
  22. package/src/server/{mcp-server.js → mcp-server.ts} +235 -8
  23. package/src/services/{ai-service.js → ai-service.ts} +16 -16
  24. package/src/services/{api-service.js → api-service.ts} +33 -9
  25. package/src/services/config-service.ts +21 -0
  26. package/src/types.ts +68 -0
  27. package/src/utils/{adf-parser.js → adf-parser.ts} +12 -12
  28. package/src/utils/config-store.ts +109 -0
  29. package/src/utils/{config.js → config.ts} +14 -41
  30. package/src/utils/{error-handler.js → error-handler.ts} +2 -1
  31. package/src/utils/{text-to-adf.js → text-to-adf.ts} +1 -1
  32. package/src/utils/{validators.js → validators.ts} +4 -4
  33. package/src/commands/bulk.js +0 -108
  34. package/src/commands/dashboard.js +0 -89
  35. package/src/commands/sprint.js +0 -153
package/README.md CHANGED
@@ -1,11 +1,16 @@
1
1
  # Jira Pilot ✈️
2
2
 
3
+ [![CI](https://github.com/Aarul5/jira-pilot/actions/workflows/ci.yml/badge.svg)](https://github.com/Aarul5/jira-pilot/actions/workflows/ci.yml)
4
+ [![NPM Version](https://img.shields.io/npm/v/jira-pilot.svg)](https://www.npmjs.com/package/jira-pilot)
5
+ [![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](https://opensource.org/licenses/ISC)
6
+ [![Snyk Security](https://snyk.io/test/github/Aarul5/jira-pilot/badge.svg)](https://snyk.io/test/github/Aarul5/jira-pilot)
7
+
3
8
  **The AI-Powered Jira CLI and MCP Server for Humans and Agents.**
4
9
 
5
10
  `jira-pilot` is a next-generation CLI that combines traditional developer tools with modern AI capabilities.
6
11
 
7
12
  - **For Humans:** A beautiful, interactive CLI to manage issues, sprints, boards, and code. Now with **AI Code Reviews**, **Epic Planning**, **Daily Standups**, and **Natural Language JQL**.
8
- - **For Agents:** A fully compliant **Model Context Protocol (MCP)** server with 8 tools that lets AI assistants (like Claude Desktop or Gemini) interact with your Jira instance safely.
13
+ - **For Agents:** A fully compliant **Model Context Protocol (MCP)** server with **14 tools** that lets AI assistants (like Claude Desktop, Cursor, or Gemini) interact with your Jira instance safely.
9
14
 
10
15
  ---
11
16
 
@@ -15,32 +20,29 @@
15
20
  | Feature | Description |
16
21
  |---------|-------------|
17
22
  | **Issue Management** | Create, edit, view, list, transition, assign, and comment on issues |
18
- | **Power Tools** | Bulk transition, issue linking, watching, and quick search |
23
+ | **Work & Time** | **New:** Log work (`2h 30m`), manage sprints (start/complete), and subtasks |
24
+ | **Developer Tools** | **New:** Open PRs, save local filters, git branch integration |
25
+ | **Power Tools** | **New:** Bulk assign, bulk label, bulk transition matching JQL |
26
+ | **Advanced Data** | **New:** Upload attachments, manage custom fields by alias |
27
+ | **AI Copilot** | Summarize, draft descriptions, suggest actions, review code, plan epics, standup reports |
19
28
  | **Interactive Wizards** | Step-by-step prompts with `enquirer` — no flags required |
20
- | **Board & Sprint Management** | List boards, view active sprint issues |
21
- | **Git Integration** | Create feature branches from issues with smart naming |
22
- | **AI Copilot** | **Pro:** Code review, epic breakdown (plan), standups.<br>**Standard:** Summarize, draft, suggest, NL JQL. |
23
29
  | **Rich Visualization** | Dashboard overview, spinners, and formatted output |
24
30
  | **Export** | Output to JSON or Markdown files, pipeable JSON output |
25
31
 
26
32
  ### 🤖 Agentic Features (MCP)
27
33
  | Feature | Description |
28
34
  |---------|-------------|
29
- | **8 MCP Tools** | list_issues, get_issue, create_issue, transition_issue, assign_issue, add_comment, list_projects, list_sprints |
35
+ | **14 MCP Tools** | list_issues, get_issue, create_issue, update_issue, transition_issue, assign_issue, add_comment, add_worklog, create_subtask, add_attachment, search_users, myself, list_projects, list_sprints |
30
36
  | **LLM-Optimized** | Clean, structured JSON responses for efficient token usage |
31
37
  | **Stdio Transport** | Standard MCP stdio server — works with any MCP client |
32
38
 
33
- ### 🧠 Multi-Provider AI
34
- | Provider | Model |
35
- |----------|-------|
36
- | **OpenAI** | GPT-4o |
37
- | **Google Gemini** | gemini-2.0-flash |
38
- | **Anthropic** | claude-sonnet (claude-sonnet-4-20250514) |
39
-
40
39
  ---
41
40
 
42
41
  ## 🚀 Installation
43
42
 
43
+ ### Prerequisites
44
+ - Node.js 20.0.0 or higher
45
+
44
46
  ### Global Install (Recommended)
45
47
  ```bash
46
48
  npm install -g jira-pilot
@@ -48,14 +50,6 @@ npm install -g jira-pilot
48
50
 
49
51
  After installing, the `jira` command is available globally.
50
52
 
51
- ### Local Development
52
- ```bash
53
- git clone https://github.com/Aarul5/jira-pilot.git
54
- cd jira-pilot
55
- npm install
56
- npm link # Makes 'jira' command available globally
57
- ```
58
-
59
53
  ---
60
54
 
61
55
  ## ⚙️ Configuration
@@ -75,39 +69,79 @@ You will be prompted for:
75
69
  5. **AI Provider** — Choose between `openai`, `gemini`, or `anthropic`
76
70
  6. **AI API Key** — Your API key for the selected provider
77
71
 
78
- ### View / Clear Configuration
72
+ ### Profiles & Management
73
+ Manage credentials for multiple environments (e.g., Work vs. Personal, Prod vs. Dev).
74
+
79
75
  ```bash
80
- jira config view # Show current configuration (keys are masked)
81
- jira config clear # Remove all stored credentials
76
+ jira config view # Show current configuration (keys are masked)
77
+ jira config save work # Save current creds as profile 'work'
78
+ jira config use personal # Switch to profile 'personal'
79
+ jira config profiles # List all saved profiles
80
+ jira config delete-profile work
81
+ jira config clear # Remove all stored credentials
82
82
  ```
83
83
 
84
- ### Config Profiles
85
- Manage credentials for multiple environments (e.g., Work vs. Personal, Prod vs. Dev).
84
+ ### Custom Field Aliases
85
+ Define aliases for custom field IDs to make commands easier:
86
+ ```bash
87
+ jira config field set points customfield_10011
88
+ jira config field list
89
+ ```
90
+
91
+ ---
86
92
 
93
+ ## ✨ Interactive Experience
94
+
95
+ Jira Pilot is designed to be fully interactive. You don't need to remember complex flags.
96
+
97
+ **Just run the command, and we'll guide you:**
98
+
99
+ 1. **Selection**: Use arrow keys `↑` `↓` to navigate lists (Projects, Issue Types, Priorities).
100
+ 2. **Filtering**: Start typing to filter long lists (e.g., finding a specific assignee).
101
+ 3. **Wizards**: Complex flows like creating an issue are broken down into simple steps.
102
+ 4. **Confirmation**: Destructive actions prompt for confirmation (y/N).
103
+
104
+ Example:
87
105
  ```bash
88
- jira config save work # Save current creds as profile 'work'
89
- jira config use personal # Switch to profile 'personal'
90
- jira config profiles # List all saved profiles
91
- jira config delete-profile work
106
+ jira issue create
107
+ ? Select Project: PROJ - My Project
108
+ ? Select Issue Type: Bug
109
+ ? Summary: Login page crashes
110
+ ? Priority: High
111
+ ? Assignee: Me
112
+ ```
113
+
114
+ ---
115
+
116
+ ## 📊 My Dashboard
117
+
118
+ Start your day with a high-level overview of what's on your plate.
119
+
120
+ ```bash
121
+ jira dashboard
92
122
  ```
93
123
 
94
- > **Note:** Credentials are stored securely using the `conf` library in your system's config directory.
124
+ **What you'll see:**
125
+ * **👋 Welcome Message**: Personalized greeting.
126
+ * **🔥 High Priority**: Issues assigned to you that need immediate attention.
127
+ * **📋 Recent Activity**: Your recently viewed or updated issues.
128
+ * **🚀 Sprint Status**: (If applicable) Active sprint progress.
95
129
 
96
130
  ---
97
131
 
98
- ## 📖 Usage
132
+ ## 📖 Usage Guide
99
133
 
100
134
  ### 📋 Issue Management
101
135
 
102
136
  #### List Issues
103
137
  ```bash
104
- # List issues assigned to you in active sprints
138
+ # List issues assigned to you in active sprints (interactive)
105
139
  jira issue list
106
140
 
107
141
  # List with custom JQL
108
142
  jira issue list --jql "project = PROJ AND priority = High"
109
143
 
110
- # Filter by project, assignee, or status
144
+ # Filter by project, assignee, or status via flags
111
145
  jira issue list --project PROJ --assignee "john.doe" --status "In Progress"
112
146
 
113
147
  # Limit results
@@ -131,41 +165,36 @@ jira issue search "login bug"
131
165
  jira issue search "error 500" --project PROJ
132
166
  ```
133
167
 
134
- #### Dashboard Overview
135
- Get a high-level view of your work:
136
- ```bash
137
- jira dashboard # Shows your open issues (by priority) and recent activity
138
- ```
139
-
140
168
  #### View Issue Details
141
169
  ```bash
142
170
  jira issue view PROJ-123
143
171
  ```
144
- Displays: summary, status, priority, assignee, description, and recent comments.
172
+ Displays: summary, status, priority, assignee, description, components, labels, dates, versions, and recent comments.
145
173
 
146
174
  #### Create Issue
147
175
  ```bash
148
176
  # Interactive wizard (recommended)
149
177
  jira issue create
150
178
 
151
- # Non-interactive with flags
179
+ # Non-interactive with flags for speed
152
180
  jira issue create -p PROJ -s "Fix login bug"
153
181
  jira issue create -p PROJ -t Bug -s "Crash on save" --priority High
154
182
  jira issue create -p PROJ -t Story -s "Add dark mode" -d "Users want a dark theme" -a me
155
- jira issue create -p PROJ -s "New feature" -a me
156
183
 
157
- # Edit Issue
158
- jira issue edit PROJ-123 -s "New Summary" --priority High
159
- jira issue edit PROJ-123 # Interactive field picker
184
+ # With Custom Fields (using Alias or ID)
185
+ jira issue create -p PROJ -s "Story" --custom "points=5" --custom "customfield_10022=DevOps"
160
186
  ```
161
187
 
162
- **Interactive Wizard Steps:**
163
- 1. **Select Project** — Choose from your accessible projects
164
- 2. **Select Issue Type** — Bug, Story, Task, Epic, etc.
165
- 3. **Enter Summary** — Required issue title
166
- 4. **Enter Description** — Optional, converted to Jira ADF format
167
- 5. **Select Priority** — High, Medium, Low, etc.
168
- 6. **Assign** Myself, Unassigned, or search by name/email
188
+ #### Edit Issue
189
+ ```bash
190
+ # Interactive Field Picker
191
+ jira issue edit PROJ-123
192
+
193
+ # Quick Edits
194
+ jira issue edit PROJ-123 -s "New Summary" --priority High
195
+ jira issue edit PROJ-123 -d "New description"
196
+ jira issue edit PROJ-123 --custom "points=8"
197
+ ```
169
198
 
170
199
  #### Transition Issue Status
171
200
  ```bash
@@ -177,7 +206,7 @@ jira issue transition PROJ-123 --status "In Progress"
177
206
  jira issue transition PROJ-123 -s Done
178
207
  ```
179
208
 
180
- #### Assign / Reassign Issue
209
+ #### Assign / Reassign
181
210
  ```bash
182
211
  # Interactive — choose Myself, Unassign, or Search
183
212
  jira issue assign PROJ-123
@@ -196,75 +225,146 @@ jira issue comment PROJ-123
196
225
  jira issue comment PROJ-123 -m "Fixed in latest build"
197
226
  ```
198
227
 
199
- #### Link, Watch, & Bulk
228
+ #### Other Actions
200
229
  ```bash
201
230
  # Link Issues
202
- jira issue link PROJ-123 PROJ-456 # Link two issues (interactive type)
203
231
  jira issue link PROJ-123 PROJ-456 -t Blocks
204
232
 
205
233
  # Watchers
206
- jira issue watch PROJ-123 # Start watching
207
- jira issue unwatch PROJ-123 # Stop watching
234
+ jira issue watch PROJ-123
235
+ jira issue unwatch PROJ-123
208
236
 
209
- # Bulk Transition
210
- jira bulk transition -j "project = PROJ AND status = Validated" -s Closed
237
+ # Attachments
238
+ jira issue attach PROJ-123 ./logs/server.log
211
239
  ```
212
240
 
213
241
  ---
214
242
 
215
- ### 📂 Projects & Boards
243
+ ### ⏱️ Work & Time
216
244
 
217
- #### List Projects
245
+ #### Worklogs
246
+ Track time naturally against issues.
218
247
  ```bash
219
- jira project list
248
+ # Add worklog
249
+ jira issue worklog add PROJ-123 2h "Researching API"
250
+ jira issue worklog add PROJ-123 30m "Daily standup"
251
+ jira issue worklog add PROJ-123 1d "Implementation"
252
+
253
+ # List worklogs
254
+ jira issue worklog list PROJ-123
220
255
  ```
221
- Displays: project key, name, lead, and style in a formatted table.
222
256
 
223
- #### List Boards
257
+ #### Subtasks
224
258
  ```bash
225
- # List all boards
226
- jira board list
259
+ # Interactive subtask creation
260
+ jira issue subtask PARENT-123
227
261
 
228
- # Filter by project
229
- jira board list -p PROJ
230
-
231
- # Filter by type
232
- jira board list -t scrum
233
- jira board list -t kanban
262
+ # Quick subtask
263
+ jira issue subtask PARENT-123 -s "Implement backend logic" --assignee me
234
264
  ```
235
265
 
236
- #### List Sprints
266
+ #### Sprint Management
267
+ Manage your Agile boards directly.
237
268
  ```bash
238
- # List active and future sprints
239
- jira sprint list --board 5
240
-
241
- # List by board name
242
- jira sprint list --board "My Team Board"
269
+ # List sprints
270
+ jira sprint list --board "My Board"
271
+ jira sprint list --board 5 --state active
243
272
 
244
273
  # List issues in active sprint
245
- jira sprint issues --board "My Team Board"
246
- jira sprint issues --board 123 --output json
274
+ jira sprint issues --board 5
247
275
 
248
- # Filter by state
249
- jira sprint list --board 5 --state active
250
- jira sprint list --board 5 --state closed
276
+ # Start/Complete Sprints
277
+ jira sprint start 123 --start-date 2023-10-01 --end-date 2023-10-15
278
+ jira sprint complete 123
251
279
  ```
252
280
 
253
281
  ---
254
282
 
255
- ### 🌿 Git Integration
283
+ ### 👨‍💻 Developer Workflow
284
+
285
+ #### Pull Requests
286
+ Open a GitHub PR with title and body pre-filled from the Jira issue.
287
+ ```bash
288
+ jira issue pr PROJ-123
289
+ # Requires 'gh' CLI to be installed and authenticated
290
+ ```
256
291
 
257
- Create feature branches automatically named from the issue summary:
292
+ #### Git Integration
293
+ Create feature branches automatically named from the issue summary.
258
294
  ```bash
259
295
  jira git branch PROJ-123
260
- # Output: Switched to a new branch 'feature/PROJ-123-fix-login-modal'
296
+ # Creates: feature/PROJ-123-issue-summary-slug
297
+ ```
298
+
299
+ #### Saved Filters
300
+ Save complex JQL queries locally for quick access.
301
+ ```bash
302
+ # Save a filter
303
+ jira filter save "My Bugs" "assignee = currentUser() AND issuetype = Bug AND status != Done"
304
+
305
+ # List saved filters
306
+ jira filter list
307
+
308
+ # Use a saved filter
309
+ jira issue list --filter "My Bugs"
310
+
311
+ # Delete a filter
312
+ jira filter delete "My Bugs"
313
+ ```
314
+
315
+ ---
316
+
317
+ ### ⚡ Power Tools (Bulk Actions)
318
+
319
+ Perform actions on multiple issues matching a JQL query. Great for cleanups or mass updates.
320
+
321
+ #### Bulk Transition
322
+ Move multiple issues to a new status.
323
+ ```bash
324
+ jira bulk transition -j "project = PROJ AND status = 'To Do'" -s "In Progress"
325
+ # Optional: -y to skip confirmation
326
+ ```
327
+
328
+ #### Bulk Assign
329
+ Assign a set of issues to a user.
330
+ ```bash
331
+ jira bulk assign -j "priority = High AND assignee is EMPTY" --assignee me
332
+ ```
333
+
334
+ #### Bulk Label
335
+ Add or remove labels from a set of issues.
336
+ ```bash
337
+ jira bulk label -j "fixVersion = 1.0" --add "release-candidate" --remove "wip"
338
+ ```
339
+
340
+ ---
341
+
342
+ ### 📂 Projects & Boards
343
+
344
+ #### List Projects
345
+ ```bash
346
+ jira project list
347
+ # Displays: project key, name, lead, and style in a formatted table.
348
+ ```
349
+
350
+ #### List Boards
351
+ ```bash
352
+ # List all boards
353
+ jira board list
354
+
355
+ # Filter by project
356
+ jira board list -p PROJ
357
+
358
+ # Filter by type
359
+ jira board list -t scrum
360
+ jira board list -t kanban
261
361
  ```
262
362
 
263
363
  ---
264
364
 
265
365
  ### 🤖 AI Features
266
366
 
267
- > **Requires:** AI features must be enabled via `jira config setup` with a valid API key for your chosen provider (OpenAI, Gemini, or Anthropic).
367
+ > **Requires:** AI enabled in `config setup`.
268
368
 
269
369
  #### Summarize an Issue
270
370
  Get an AI-generated TL;DR of long issue threads with comments:
@@ -321,29 +421,34 @@ Outputs: **Yesterday**, **Today**, **Blockers**.
321
421
  jira mcp
322
422
  ```
323
423
 
324
- ### Available MCP Tools
424
+ ### Available MCP Tools (14)
425
+ Everything you need to build a fully autonomous Jira agent:
325
426
 
326
- | Tool | Description | Required Args |
327
- |------|-------------|---------------|
328
- | `jira_list_issues` | Search issues via JQL | `jql` |
329
- | `jira_get_issue` | Get full issue details | `issueKey` |
330
- | `jira_create_issue` | Create a new issue (ADF) | `projectKey`, `summary` |
331
- | `jira_transition_issue` | List or execute transitions | `issueKey` |
332
- | `jira_assign_issue` | Assign/unassign an issue | `issueKey` |
333
- | `jira_add_comment` | Add a comment (ADF) | `issueKey`, `body` |
334
- | `jira_list_projects` | List accessible projects | — |
335
- | `jira_list_sprints` | List sprints for a board | `boardId` |
427
+ 1. `jira_list_issues`: Search via JQL (supports limit)
428
+ 2. `jira_get_issue`: Get full details
429
+ 3. `jira_create_issue`: Create new issue (ADF support)
430
+ 4. `jira_update_issue`: Update summary, desc, priority, assignee
431
+ 5. `jira_transition_issue`: Change status
432
+ 6. `jira_assign_issue`: Change assignee
433
+ 7. `jira_add_comment`: Add comment
434
+ 8. `jira_add_worklog`: Log time
435
+ 9. `jira_create_subtask`: Create subtask
436
+ 10. `jira_add_attachment`: Upload file (absolute path)
437
+ 11. `jira_search_users`: Search for users
438
+ 12. `jira_myself`: Get current user details
439
+ 13. `jira_list_projects`: List accessible projects
440
+ 14. `jira_list_sprints`: List sprints for a board
336
441
 
337
- ### Claude Desktop Configuration
442
+ ### Agent Configuration (Claude Desktop)
338
443
 
339
- Add the following to your `claude_desktop_config.json`:
444
+ Add to your `claude_desktop_config.json`:
340
445
 
341
446
  ```json
342
447
  {
343
448
  "mcpServers": {
344
449
  "jira": {
345
- "command": "node",
346
- "args": ["/absolute/path/to/jira-pilot/bin/jira.js", "mcp"]
450
+ "command": "npx",
451
+ "args": ["-y", "jira-pilot", "mcp"]
347
452
  }
348
453
  }
349
454
  }
@@ -364,34 +469,12 @@ Add to your `.vscode/mcp.json` or equivalent:
364
469
  }
365
470
  ```
366
471
 
367
- ### Example Agent Prompts
368
- Once connected, you can ask your AI assistant things like:
369
- - *"Show me my high-priority Jira issues"*
370
- - *"Create a bug for the login crash on mobile in project PROJ"*
371
- - *"Transition PROJ-123 to In Progress and assign it to me"*
372
- - *"Add a comment to PROJ-456 saying the fix is deployed"*
373
- - *"What sprints are active on board 5?"*
374
-
375
- ---
376
-
377
- ## 🧪 Testing & Verification
378
-
379
- ### Testing the MCP Server
380
- You can test the MCP server functionality using the official [MCP Inspector](https://github.com/modelcontextprotocol/inspector):
381
-
382
- ```bash
383
- npx @modelcontextprotocol/inspector node ./bin/jira.js mcp
384
- ```
385
-
386
- This will launch a web interface where you can:
387
- 1. View all 8 available tools and their schemas
388
- 2. Execute tools with custom arguments
389
- 3. Inspect request/response logs
390
-
391
472
  ---
392
473
 
393
474
  ## 📦 CLI Command Reference
394
475
 
476
+ Run `jira help` or `jira [command] help` to see all options.
477
+
395
478
  ```
396
479
  jira [command]
397
480
 
@@ -406,59 +489,19 @@ Commands:
406
489
  git Git integration for Jira
407
490
  ai AI Helper commands
408
491
  mcp Start MCP Agent Server (Stdio)
409
-
410
- Config Subcommands:
411
- config setup Interactive setup
412
- config view View current configuration
413
- config clear Clear configuration
414
- config save Save current config as a profile
415
- config use Switch to a saved profile
416
- config profiles List saved profiles
417
-
418
- Issue Subcommands:
419
- issue list List issues (JQL, filters, export)
420
- issue view View issue details
421
- issue create Create a new issue (wizard or flags)
422
- issue edit Edit issue fields (interactive or flags)
423
- issue transition Transition issue status
424
- issue assign Assign or reassign an issue
425
- issue comment Add a comment to an issue
426
- issue search Quick text search
427
- issue link Link two issues
428
- issue watch Start watching an issue
429
- issue unwatch Stop watching an issue
430
-
431
- AI Subcommands:
432
- ai summarize Summarize an issue using AI
433
- ai draft Draft issue description from notes
434
- ai suggest Suggest next actions for an issue
435
- ai review AI code review of linked PR
436
- ai plan Break down Epic into stories
437
- ai standup Generate daily standup report
438
-
439
- Board Subcommands:
440
- board list List Jira boards
441
-
442
- Sprint Subcommands:
443
- sprint list List sprints for a board
444
- sprint issues List issues in active sprint
445
-
446
- Bulk Subcommands:
447
- bulk transition Bulk transition issues matching JQL
448
492
  ```
449
493
 
450
494
  ---
451
495
 
452
496
  ## 🤝 Contributing
453
497
 
454
- Contributions are welcome! Please open an issue or submit a pull request.
498
+ We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to submit a pull request and set up your development environment.
455
499
 
456
- ```bash
457
- git clone https://github.com/Aarul5/jira-pilot.git
458
- cd jira-pilot
459
- npm install
460
- npm link
461
- ```
500
+ Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms.
501
+
502
+ ## 🛡️ Security
503
+
504
+ If you discover a security vulnerability within this project, please check [SECURITY.md](SECURITY.md) for our reporting policy.
462
505
 
463
506
  ## 📄 License
464
507
 
@@ -6,8 +6,15 @@ import { join, dirname } from 'path';
6
6
  import { fileURLToPath } from 'url';
7
7
 
8
8
  // Load package.json for version
9
+
10
+ // Load package.json for version
11
+ import { existsSync } from 'fs';
9
12
  const __dirname = dirname(fileURLToPath(import.meta.url));
10
- const pkg = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));
13
+ let pkgPath = join(__dirname, '../package.json');
14
+ if (!existsSync(pkgPath)) {
15
+ pkgPath = join(__dirname, '../../package.json');
16
+ }
17
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
11
18
 
12
19
  const program = new Command();
13
20
 
@@ -38,6 +45,7 @@ import { registerAiCommand } from '../src/commands/ai.js';
38
45
  import { registerMcpCommand } from '../src/commands/mcp.js';
39
46
  import { registerBulkCommand } from '../src/commands/bulk.js';
40
47
  import { registerDashboardCommand } from '../src/commands/dashboard.js';
48
+ import { registerFilterCommand } from '../src/commands/filter.js';
41
49
 
42
50
  // Register Commands
43
51
  registerConfigCommand(program);
@@ -50,6 +58,7 @@ registerAiCommand(program);
50
58
  registerMcpCommand(program);
51
59
  registerBulkCommand(program);
52
60
  registerDashboardCommand(program);
61
+ registerFilterCommand(program);
53
62
 
54
63
  program.on('command:*', () => {
55
64
  console.error(chalk.red('Invalid command: %s\nSee --help for a list of available commands.'), program.args.join(' '));
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { readFileSync } from 'fs';
5
+ import { join, dirname } from 'path';
6
+ import { fileURLToPath } from 'url';
7
+ // Load package.json for version
8
+ // Load package.json for version
9
+ import { existsSync } from 'fs';
10
+ const __dirname = dirname(fileURLToPath(import.meta.url));
11
+ let pkgPath = join(__dirname, '../package.json');
12
+ if (!existsSync(pkgPath)) {
13
+ pkgPath = join(__dirname, '../../package.json');
14
+ }
15
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
16
+ const program = new Command();
17
+ program
18
+ .name('jira')
19
+ .description('AI-powered Jira CLI for humans and agents')
20
+ .version(pkg.version)
21
+ .addHelpText('after', `
22
+ Examples:
23
+ $ jira dashboard
24
+ $ jira issue list
25
+ $ jira issue view PROJ-123
26
+ $ jira issue create
27
+ $ jira issue search "login bug"
28
+ $ jira board list
29
+ $ jira sprint list --board 123
30
+ $ jira bulk transition -j "project = PROJ" -s Done
31
+ $ jira ai summarize PROJ-123
32
+ `);
33
+ import { registerConfigCommand } from '../src/commands/config.js';
34
+ import { registerIssueCommand } from '../src/commands/issue.js';
35
+ import { registerProjectCommand } from '../src/commands/project.js';
36
+ import { registerSprintCommand } from '../src/commands/sprint.js';
37
+ import { registerBoardCommand } from '../src/commands/board.js';
38
+ import { registerGitCommand } from '../src/commands/git.js';
39
+ import { registerAiCommand } from '../src/commands/ai.js';
40
+ import { registerMcpCommand } from '../src/commands/mcp.js';
41
+ import { registerBulkCommand } from '../src/commands/bulk.js';
42
+ import { registerDashboardCommand } from '../src/commands/dashboard.js';
43
+ import { registerFilterCommand } from '../src/commands/filter.js';
44
+ // Register Commands
45
+ registerConfigCommand(program);
46
+ registerIssueCommand(program);
47
+ registerProjectCommand(program);
48
+ registerSprintCommand(program);
49
+ registerBoardCommand(program);
50
+ registerGitCommand(program);
51
+ registerAiCommand(program);
52
+ registerMcpCommand(program);
53
+ registerBulkCommand(program);
54
+ registerDashboardCommand(program);
55
+ registerFilterCommand(program);
56
+ program.on('command:*', () => {
57
+ console.error(chalk.red('Invalid command: %s\nSee --help for a list of available commands.'), program.args.join(' '));
58
+ process.exit(1);
59
+ });
60
+ if (!process.argv.slice(2).length) {
61
+ program.outputHelp();
62
+ }
63
+ program.parse(process.argv);
64
+ //# sourceMappingURL=jira.js.map