@channelfactory/cliend 0.2.0 → 0.3.1
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.
- package/README.md +301 -0
- package/dist/src/auth/auth-manager.js +1 -1
- package/dist/src/auth/auth-manager.js.map +1 -1
- package/dist/src/config/config.schema.d.ts +5 -0
- package/dist/src/config/config.schema.d.ts.map +1 -1
- package/dist/src/config/config.schema.js +1 -0
- package/dist/src/config/config.schema.js.map +1 -1
- package/dist/src/config/defaults.d.ts.map +1 -1
- package/dist/src/config/defaults.js +2 -0
- package/dist/src/config/defaults.js.map +1 -1
- package/dist/src/integrations/atlassian/mcp-client.d.ts +40 -0
- package/dist/src/integrations/atlassian/mcp-client.d.ts.map +1 -0
- package/dist/src/integrations/atlassian/mcp-client.js +198 -0
- package/dist/src/integrations/atlassian/mcp-client.js.map +1 -0
- package/dist/src/providers/codex.provider.js +1 -1
- package/dist/src/providers/codex.provider.js.map +1 -1
- package/dist/src/repl/commands/breakdown.d.ts +3 -0
- package/dist/src/repl/commands/breakdown.d.ts.map +1 -0
- package/dist/src/repl/commands/breakdown.js +141 -0
- package/dist/src/repl/commands/breakdown.js.map +1 -0
- package/dist/src/repl/commands/help.d.ts.map +1 -1
- package/dist/src/repl/commands/help.js +2 -0
- package/dist/src/repl/commands/help.js.map +1 -1
- package/dist/src/repl/commands/search.d.ts +3 -0
- package/dist/src/repl/commands/search.d.ts.map +1 -0
- package/dist/src/repl/commands/search.js +49 -0
- package/dist/src/repl/commands/search.js.map +1 -0
- package/dist/src/repl/commands/ticket.d.ts.map +1 -1
- package/dist/src/repl/commands/ticket.js +12 -2
- package/dist/src/repl/commands/ticket.js.map +1 -1
- package/dist/src/repl/repl.d.ts.map +1 -1
- package/dist/src/repl/repl.js +4 -0
- package/dist/src/repl/repl.js.map +1 -1
- package/dist/src/types/config.d.ts +1 -0
- package/dist/src/types/config.d.ts.map +1 -1
- package/dist/src/ui/welcome.js +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
# cliend
|
|
2
|
+
|
|
3
|
+
Internal interactive CLI tool that orchestrates multiple AI coding systems. Type `cliend` in any project directory to start an AI-assisted development session.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
Requires **Node.js >= 22**.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install -g @channelfactory/cliend
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
On first run, a setup wizard will prompt you for the required API keys and configuration. You can re-run it anytime with `/config setup`.
|
|
14
|
+
|
|
15
|
+
## Update
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm update -g @channelfactory/cliend
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Quick Start
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
$ cliend
|
|
25
|
+
|
|
26
|
+
╭──────────────────────────────────────────╮
|
|
27
|
+
│ cliend v0.3.0 — AI Development Agent │
|
|
28
|
+
│ Project: my-app │
|
|
29
|
+
│ Type /help for commands │
|
|
30
|
+
╰──────────────────────────────────────────╯
|
|
31
|
+
|
|
32
|
+
> implement the login form for ticket PROJ-123
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## How It Works
|
|
36
|
+
|
|
37
|
+
### Flow
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
┌─────────────────────────────────────────────────────────────────────┐
|
|
41
|
+
│ User types a message in the REPL │
|
|
42
|
+
└──────────────────────────┬──────────────────────────────────────────┘
|
|
43
|
+
│
|
|
44
|
+
▼
|
|
45
|
+
┌────────────────────────┐
|
|
46
|
+
│ First message? │
|
|
47
|
+
│ Detect ticket ID │
|
|
48
|
+
│ (e.g. PROJ-123) │
|
|
49
|
+
└──────────┬─────────────┘
|
|
50
|
+
│
|
|
51
|
+
┌──────────▼─────────────┐
|
|
52
|
+
│ Gather context (once) │
|
|
53
|
+
│ │
|
|
54
|
+
│ ● Jira ticket info │
|
|
55
|
+
│ (via REST API) │
|
|
56
|
+
│ │
|
|
57
|
+
│ ● Obsidian docs │
|
|
58
|
+
│ (from Bitbucket) │
|
|
59
|
+
│ │
|
|
60
|
+
│ ● Memory │
|
|
61
|
+
│ (global + project │
|
|
62
|
+
│ + session) │
|
|
63
|
+
└──────────┬─────────────┘
|
|
64
|
+
│
|
|
65
|
+
┌──────────▼─────────────┐
|
|
66
|
+
│ Context Builder │
|
|
67
|
+
│ Assembles system │
|
|
68
|
+
│ prompt from all │
|
|
69
|
+
│ gathered context │
|
|
70
|
+
└──────────┬─────────────┘
|
|
71
|
+
│
|
|
72
|
+
┌─────────────┼─────────────┐
|
|
73
|
+
▼ ▼ ▼
|
|
74
|
+
┌──────────┐ ┌──────────┐ ┌──────────┐
|
|
75
|
+
│ Claude │ │ Codex │ │ ChatGPT │
|
|
76
|
+
│ (Sonnet) │ │ (Mini) │ │ (GPT-4o)│
|
|
77
|
+
└────┬─────┘ └────┬─────┘ └────┬─────┘
|
|
78
|
+
│ │ │
|
|
79
|
+
└─────────────┼─────────────┘
|
|
80
|
+
│
|
|
81
|
+
┌──────────▼─────────────┐
|
|
82
|
+
│ AI Judge │
|
|
83
|
+
│ (Claude Sonnet) │
|
|
84
|
+
│ │
|
|
85
|
+
│ Scores each output: │
|
|
86
|
+
│ ● Readability 25% │
|
|
87
|
+
│ ● Standards 25% │
|
|
88
|
+
│ ● Performance 20% │
|
|
89
|
+
│ ● Completeness 20% │
|
|
90
|
+
│ ● Security 10% │
|
|
91
|
+
└──────────┬─────────────┘
|
|
92
|
+
│
|
|
93
|
+
┌──────────▼─────────────┐
|
|
94
|
+
│ Score Table + Winner │
|
|
95
|
+
└────────────────────────┘
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Example Output
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
Sending to 3 AI providers...
|
|
102
|
+
|
|
103
|
+
┌──────────────┬──────┬──────┬──────┬──────┬──────┬───────┐
|
|
104
|
+
│ Provider │ Read │ Perf │ Stds │ Comp │ Sec │ TOTAL │
|
|
105
|
+
├──────────────┼──────┼──────┼──────┼──────┼──────┼───────┤
|
|
106
|
+
│ Claude Code │ 9 │ 8 │ 9 │ 9 │ 8 │ 87 │
|
|
107
|
+
│ Codex │ 8 │ 7 │ 8 │ 8 │ 7 │ 77 │
|
|
108
|
+
│ ChatGPT │ 7 │ 8 │ 7 │ 7 │ 8 │ 73 │
|
|
109
|
+
└──────────────┴──────┴──────┴──────┴──────┴──────┴───────┘
|
|
110
|
+
|
|
111
|
+
Winner: Claude Code (87/100)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Conversation Context
|
|
115
|
+
|
|
116
|
+
Context is gathered **once** on the first message and reused for the entire session:
|
|
117
|
+
|
|
118
|
+
- **Jira ticket**: Auto-detected from your message (e.g. `PROJ-123`) or set with `/ticket`
|
|
119
|
+
- **Obsidian docs**: Fetched from a Bitbucket repo, ranked by relevance to the task
|
|
120
|
+
- **Memory**: Three-tier system (global, project, session) loaded into every prompt
|
|
121
|
+
|
|
122
|
+
Follow-up messages reuse the stored context — no re-fetching.
|
|
123
|
+
|
|
124
|
+
## Commands
|
|
125
|
+
|
|
126
|
+
| Command | Description |
|
|
127
|
+
|---------|-------------|
|
|
128
|
+
| `/help` | Show available commands |
|
|
129
|
+
| `/ticket <ID>` | Fetch/switch Jira ticket context |
|
|
130
|
+
| `/obsidian` | Refresh Obsidian docs from Bitbucket |
|
|
131
|
+
| `/sessions` | List all chat sessions for this project |
|
|
132
|
+
| `/resume <N>` | Resume a previous session |
|
|
133
|
+
| `/new [name]` | Start a new session |
|
|
134
|
+
| `/memory` | Show/edit session memory |
|
|
135
|
+
| `/status` | Check auth and service connectivity |
|
|
136
|
+
| `/breakdown <ID>` | Break down a Jira ticket into subtasks (AI + Rovo) |
|
|
137
|
+
| `/search <query>` | Search Jira & Confluence via Rovo AI |
|
|
138
|
+
| `/config` | View current configuration |
|
|
139
|
+
| `/config setup` | Re-run the setup wizard |
|
|
140
|
+
| `/auth` | Authenticate with Atlassian (OAuth) |
|
|
141
|
+
| `/clear` | Clear the screen |
|
|
142
|
+
| `/exit` | End the session |
|
|
143
|
+
|
|
144
|
+
## Rovo Integration (Jira Read/Write)
|
|
145
|
+
|
|
146
|
+
cliend connects to the **Atlassian Rovo MCP Server** for full Jira read/write access:
|
|
147
|
+
|
|
148
|
+
### `/breakdown PROJ-123`
|
|
149
|
+
|
|
150
|
+
Breaks a ticket into subtasks:
|
|
151
|
+
|
|
152
|
+
1. Fetches the parent ticket from Jira via Rovo
|
|
153
|
+
2. Sends the ticket context to AI providers (Claude, Codex, ChatGPT)
|
|
154
|
+
3. AI generates a list of subtasks
|
|
155
|
+
4. You review and confirm
|
|
156
|
+
5. Subtasks are created directly in Jira under the parent ticket
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
> /breakdown PROJ-123
|
|
160
|
+
|
|
161
|
+
PROJ-123 — Add user login form with email/password
|
|
162
|
+
|
|
163
|
+
Generating subtask breakdown via AI...
|
|
164
|
+
|
|
165
|
+
Proposed subtasks for PROJ-123:
|
|
166
|
+
|
|
167
|
+
1. Set up login form component with email/password fields
|
|
168
|
+
2. Add client-side validation (email format, password length)
|
|
169
|
+
3. Implement "Remember me" checkbox with localStorage
|
|
170
|
+
4. Add forgot password link and routing
|
|
171
|
+
5. Handle API error responses and display messages
|
|
172
|
+
|
|
173
|
+
Create 5 subtasks in Jira? (y/N) y
|
|
174
|
+
|
|
175
|
+
✓ Created PROJ-124: Set up login form component
|
|
176
|
+
✓ Created PROJ-125: Add client-side validation
|
|
177
|
+
✓ Created PROJ-126: Implement remember me checkbox
|
|
178
|
+
✓ Created PROJ-127: Add forgot password link
|
|
179
|
+
✓ Created PROJ-128: Handle API error responses
|
|
180
|
+
|
|
181
|
+
Done. Subtasks created under PROJ-123.
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### `/search <query>`
|
|
185
|
+
|
|
186
|
+
AI-powered semantic search across Jira and Confluence:
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
> /search how does the auth flow work
|
|
190
|
+
|
|
191
|
+
3 results found:
|
|
192
|
+
|
|
193
|
+
1. [Jira] PROJ-89 — Implement OAuth 2.0 login flow
|
|
194
|
+
Covers the full auth flow including token refresh...
|
|
195
|
+
2. [Confluence] Authentication Architecture
|
|
196
|
+
Describes the auth patterns used across services...
|
|
197
|
+
3. [Jira] PROJ-45 — Fix token expiration handling
|
|
198
|
+
Tokens were not being refreshed correctly when...
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Prerequisites
|
|
202
|
+
|
|
203
|
+
- Your Atlassian Cloud workspace must have a **paid plan** (Standard, Premium, or Enterprise) — Rovo is included at no extra cost
|
|
204
|
+
- An org admin must have AI features enabled in **Atlassian Administration > Apps > AI settings**
|
|
205
|
+
- Run `/auth` in cliend to connect your Atlassian account
|
|
206
|
+
|
|
207
|
+
## Setup Wizard
|
|
208
|
+
|
|
209
|
+
On first launch (when `~/.cliend/config.json` doesn't exist), cliend prompts for:
|
|
210
|
+
|
|
211
|
+
1. **Anthropic API Key** — get it at [console.anthropic.com/settings/keys](https://console.anthropic.com/settings/keys)
|
|
212
|
+
2. **OpenAI API Key** — get it at [platform.openai.com/api-keys](https://platform.openai.com/api-keys)
|
|
213
|
+
3. **Atlassian Client ID & Secret** — create an OAuth 2.0 app at [developer.atlassian.com/console/myapps](https://developer.atlassian.com/console/myapps)
|
|
214
|
+
4. **Bitbucket Workspace & Repo** — the repo where your Obsidian docs live
|
|
215
|
+
|
|
216
|
+
Config is saved to `~/.cliend/config.json` and persists across all projects.
|
|
217
|
+
|
|
218
|
+
### Atlassian OAuth App Setup
|
|
219
|
+
|
|
220
|
+
When creating the Atlassian OAuth app:
|
|
221
|
+
|
|
222
|
+
1. Go to [developer.atlassian.com/console/myapps](https://developer.atlassian.com/console/myapps)
|
|
223
|
+
2. Click **Create** > **OAuth 2.0 integration**
|
|
224
|
+
3. Under **Authorization**, add callback URL: `http://localhost:3456/callback`
|
|
225
|
+
4. Under **Permissions**, add scopes: `read:jira-work`, `read:jira-user`
|
|
226
|
+
5. Copy the **Client ID** and **Secret** for the setup wizard
|
|
227
|
+
|
|
228
|
+
After setup, run `/auth` inside cliend to connect your Atlassian account.
|
|
229
|
+
|
|
230
|
+
## Per-Directory Sessions
|
|
231
|
+
|
|
232
|
+
Each project directory gets its own `.cliend/` folder with isolated sessions:
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
my-project/
|
|
236
|
+
└── .cliend/
|
|
237
|
+
├── config.json # Project-level config overrides
|
|
238
|
+
├── memory.md # Project-level memory (shared across sessions)
|
|
239
|
+
└── sessions/
|
|
240
|
+
├── session-abc123/
|
|
241
|
+
│ ├── meta.json # Session metadata
|
|
242
|
+
│ ├── history.jsonl # Conversation log (append-only)
|
|
243
|
+
│ ├── memory.md # Session-specific memory
|
|
244
|
+
│ └── context/
|
|
245
|
+
│ ├── ticket.json # Cached Jira ticket
|
|
246
|
+
│ └── docs.json # Cached Obsidian docs
|
|
247
|
+
└── session-def456/
|
|
248
|
+
└── ...
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Memory Hierarchy
|
|
252
|
+
|
|
253
|
+
1. **Global** (`~/.cliend/memory.md`) — cross-project preferences
|
|
254
|
+
2. **Project** (`.cliend/memory.md`) — project conventions, architecture notes
|
|
255
|
+
3. **Session** (`.cliend/sessions/<id>/memory.md`) — task-specific decisions
|
|
256
|
+
|
|
257
|
+
All three levels are loaded into every AI prompt.
|
|
258
|
+
|
|
259
|
+
## Configuration
|
|
260
|
+
|
|
261
|
+
Config is loaded in layers (highest priority wins):
|
|
262
|
+
|
|
263
|
+
1. Environment variables (`CLIEND_ANTHROPIC_API_KEY`, etc.)
|
|
264
|
+
2. Project config (`.cliend/config.json`)
|
|
265
|
+
3. Global config (`~/.cliend/config.json`)
|
|
266
|
+
4. Built-in defaults
|
|
267
|
+
|
|
268
|
+
### Environment Variables
|
|
269
|
+
|
|
270
|
+
| Variable | Description |
|
|
271
|
+
|----------|-------------|
|
|
272
|
+
| `CLIEND_ANTHROPIC_API_KEY` | Anthropic API key (Claude) |
|
|
273
|
+
| `CLIEND_OPENAI_API_KEY` | OpenAI API key (Codex + ChatGPT) |
|
|
274
|
+
| `CLIEND_ATLASSIAN_CLIENT_ID` | Atlassian OAuth Client ID |
|
|
275
|
+
| `CLIEND_ATLASSIAN_CLIENT_SECRET` | Atlassian OAuth Client Secret |
|
|
276
|
+
| `CLIEND_BITBUCKET_WORKSPACE` | Bitbucket workspace slug |
|
|
277
|
+
| `CLIEND_BITBUCKET_REPO_SLUG` | Bitbucket repo with Obsidian docs |
|
|
278
|
+
| `CLIEND_BITBUCKET_OBSIDIAN_PATH` | Path within repo (default: `docs/obsidian`) |
|
|
279
|
+
| `CLIEND_LOG_LEVEL` | Logging level: `debug`, `info`, `warn`, `error` |
|
|
280
|
+
|
|
281
|
+
## Development
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
git clone git@bitbucket.org:sigmacf/cliend.git
|
|
285
|
+
cd cliend
|
|
286
|
+
npm install
|
|
287
|
+
npm run dev # Run with tsx (hot reload)
|
|
288
|
+
npm run build # Compile TypeScript
|
|
289
|
+
npm test # Run tests
|
|
290
|
+
npm run typecheck # Type-check without emitting
|
|
291
|
+
npm run lint # ESLint
|
|
292
|
+
npm run format # Prettier
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### Docker
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
docker compose up cliend # Dev mode with hot reload
|
|
299
|
+
docker compose --profile test up # Run tests
|
|
300
|
+
docker compose --profile build up # Production build
|
|
301
|
+
```
|
|
@@ -4,7 +4,7 @@ import { startCallbackServer } from './local-server.js';
|
|
|
4
4
|
import { TokenExpiredError, OAuthFlowError } from '../errors/auth-error.js';
|
|
5
5
|
const AUTH_URL = 'https://auth.atlassian.com/authorize';
|
|
6
6
|
const TOKEN_URL = 'https://auth.atlassian.com/oauth/token';
|
|
7
|
-
const SCOPES = ['read:jira-work', 'read:jira-user', 'offline_access'];
|
|
7
|
+
const SCOPES = ['read:jira-work', 'read:jira-user', 'write:jira-work', 'offline_access'];
|
|
8
8
|
export class AuthManager {
|
|
9
9
|
config;
|
|
10
10
|
logger;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-manager.js","sourceRoot":"","sources":["../../../src/auth/auth-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE5E,MAAM,QAAQ,GAAG,sCAAsC,CAAC;AACxD,MAAM,SAAS,GAAG,wCAAwC,CAAC;AAC3D,MAAM,MAAM,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-manager.js","sourceRoot":"","sources":["../../../src/auth/auth-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,16 +5,19 @@ export declare const appConfigSchema: z.ZodObject<{
|
|
|
5
5
|
clientSecret: z.ZodDefault<z.ZodString>;
|
|
6
6
|
callbackUrl: z.ZodDefault<z.ZodString>;
|
|
7
7
|
cloudId: z.ZodOptional<z.ZodString>;
|
|
8
|
+
mcpServerUrl: z.ZodDefault<z.ZodString>;
|
|
8
9
|
}, "strip", z.ZodTypeAny, {
|
|
9
10
|
clientId: string;
|
|
10
11
|
callbackUrl: string;
|
|
11
12
|
clientSecret: string;
|
|
13
|
+
mcpServerUrl: string;
|
|
12
14
|
cloudId?: string | undefined;
|
|
13
15
|
}, {
|
|
14
16
|
clientId?: string | undefined;
|
|
15
17
|
callbackUrl?: string | undefined;
|
|
16
18
|
clientSecret?: string | undefined;
|
|
17
19
|
cloudId?: string | undefined;
|
|
20
|
+
mcpServerUrl?: string | undefined;
|
|
18
21
|
}>;
|
|
19
22
|
bitbucket: z.ZodObject<{
|
|
20
23
|
workspace: z.ZodDefault<z.ZodString>;
|
|
@@ -204,6 +207,7 @@ export declare const appConfigSchema: z.ZodObject<{
|
|
|
204
207
|
clientId: string;
|
|
205
208
|
callbackUrl: string;
|
|
206
209
|
clientSecret: string;
|
|
210
|
+
mcpServerUrl: string;
|
|
207
211
|
cloudId?: string | undefined;
|
|
208
212
|
};
|
|
209
213
|
bitbucket: {
|
|
@@ -251,6 +255,7 @@ export declare const appConfigSchema: z.ZodObject<{
|
|
|
251
255
|
callbackUrl?: string | undefined;
|
|
252
256
|
clientSecret?: string | undefined;
|
|
253
257
|
cloudId?: string | undefined;
|
|
258
|
+
mcpServerUrl?: string | undefined;
|
|
254
259
|
};
|
|
255
260
|
bitbucket: {
|
|
256
261
|
workspace?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../../src/config/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyBxB,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../../src/config/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyBxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0B1B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
|
|
@@ -23,6 +23,7 @@ export const appConfigSchema = z.object({
|
|
|
23
23
|
clientSecret: z.string().default(''),
|
|
24
24
|
callbackUrl: z.string().url().default('http://localhost:3456/callback'),
|
|
25
25
|
cloudId: z.string().optional(),
|
|
26
|
+
mcpServerUrl: z.string().url().default('https://mcp.atlassian.com/v1/mcp'),
|
|
26
27
|
}),
|
|
27
28
|
bitbucket: z.object({
|
|
28
29
|
workspace: z.string().default(''),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.schema.js","sourceRoot":"","sources":["../../../src/config/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;CAClD,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC;KACzB,MAAM,CAAC;IACN,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACnD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IAClD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACjD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACnD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;CAChD,CAAC;KACD,MAAM,CACL,CAAC,CAAC,EAAE,EAAE;IACJ,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC;IACtF,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;AACpC,CAAC,EACD,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAC7C,CAAC;AAEJ,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,gCAAgC,CAAC;QACvE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"config.schema.js","sourceRoot":"","sources":["../../../src/config/config.schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,eAAO,MAAM,cAAc,EAAE,SA8C5B,CAAC"}
|
|
@@ -3,6 +3,7 @@ export const DEFAULT_CONFIG = {
|
|
|
3
3
|
clientId: '',
|
|
4
4
|
clientSecret: '',
|
|
5
5
|
callbackUrl: 'http://localhost:3456/callback',
|
|
6
|
+
mcpServerUrl: 'https://mcp.atlassian.com/v1/mcp',
|
|
6
7
|
},
|
|
7
8
|
bitbucket: {
|
|
8
9
|
workspace: '',
|
|
@@ -20,6 +21,7 @@ export const DEFAULT_CONFIG = {
|
|
|
20
21
|
codex: {
|
|
21
22
|
enabled: true,
|
|
22
23
|
apiKey: '',
|
|
24
|
+
model: 'gpt-5.3-codex',
|
|
23
25
|
timeoutMs: 120_000,
|
|
24
26
|
},
|
|
25
27
|
chatgpt: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../src/config/defaults.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAc;IACvC,SAAS,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,gCAAgC;
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../src/config/defaults.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAc;IACvC,SAAS,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,gCAAgC;QAC7C,YAAY,EAAE,kCAAkC;KACjD;IACD,SAAS,EAAE;QACT,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,eAAe;QAC7B,MAAM,EAAE,MAAM;KACf;IACD,SAAS,EAAE;QACT,MAAM,EAAE;YACN,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,mBAAmB;YAC1B,SAAS,EAAE,OAAO;SACnB;QACD,KAAK,EAAE;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,eAAe;YACtB,SAAS,EAAE,OAAO;SACnB;QACD,OAAO,EAAE;YACP,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,OAAO;SACnB;KACF;IACD,KAAK,EAAE;QACL,KAAK,EAAE,mBAAmB;QAC1B,OAAO,EAAE;YACP,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,IAAI;YACf,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;SACf;KACF;IACD,OAAO,EAAE;QACP,KAAK,EAAE,MAAM;KACd;CACF,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Logger } from 'pino';
|
|
2
|
+
import type { AppConfig } from '../../types/config.js';
|
|
3
|
+
import type { JiraTicket } from '../../types/ticket.js';
|
|
4
|
+
import { AuthManager } from '../../auth/auth-manager.js';
|
|
5
|
+
interface CreateIssueParams {
|
|
6
|
+
projectKey: string;
|
|
7
|
+
issueType: string;
|
|
8
|
+
summary: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
parentKey?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface SearchResult {
|
|
13
|
+
type: 'jira-issue' | 'confluence-page' | 'unknown';
|
|
14
|
+
title: string;
|
|
15
|
+
url?: string;
|
|
16
|
+
excerpt: string;
|
|
17
|
+
}
|
|
18
|
+
export declare class McpClient {
|
|
19
|
+
private readonly serverUrl;
|
|
20
|
+
private readonly authManager;
|
|
21
|
+
private readonly logger;
|
|
22
|
+
private requestId;
|
|
23
|
+
private initialized;
|
|
24
|
+
private sessionId;
|
|
25
|
+
constructor(config: AppConfig, authManager: AuthManager, logger: Logger);
|
|
26
|
+
private ensureInitialized;
|
|
27
|
+
getJiraIssue(issueKey: string): Promise<JiraTicket>;
|
|
28
|
+
searchJql(jql: string): Promise<string>;
|
|
29
|
+
search(query: string): Promise<SearchResult[]>;
|
|
30
|
+
createIssue(params: CreateIssueParams): Promise<string>;
|
|
31
|
+
editIssue(issueKey: string, fields: Record<string, string>): Promise<string>;
|
|
32
|
+
addComment(issueKey: string, comment: string): Promise<string>;
|
|
33
|
+
transitionIssue(issueKey: string, transitionId: string): Promise<string>;
|
|
34
|
+
private callTool;
|
|
35
|
+
private send;
|
|
36
|
+
private parseIssueFromText;
|
|
37
|
+
private parseSearchResults;
|
|
38
|
+
}
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=mcp-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../../../src/integrations/atlassian/mcp-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAczD,UAAU,iBAAiB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,YAAY,GAAG,iBAAiB,GAAG,SAAS,CAAC;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAuB;gBAE5B,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM;YAMzD,iBAAiB;IAmBzB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAMnD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAM9C,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAavD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAK5E,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK9D,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAKhE,QAAQ;YAkBR,IAAI;IA6ClB,OAAO,CAAC,kBAAkB;IAsD1B,OAAO,CAAC,kBAAkB;CAyB3B"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
export class McpClient {
|
|
2
|
+
serverUrl;
|
|
3
|
+
authManager;
|
|
4
|
+
logger;
|
|
5
|
+
requestId = 0;
|
|
6
|
+
initialized = false;
|
|
7
|
+
sessionId = null;
|
|
8
|
+
constructor(config, authManager, logger) {
|
|
9
|
+
this.serverUrl = config.atlassian.mcpServerUrl;
|
|
10
|
+
this.authManager = authManager;
|
|
11
|
+
this.logger = logger;
|
|
12
|
+
}
|
|
13
|
+
async ensureInitialized() {
|
|
14
|
+
if (this.initialized)
|
|
15
|
+
return;
|
|
16
|
+
const result = await this.send('initialize', {
|
|
17
|
+
protocolVersion: '2025-03-26',
|
|
18
|
+
capabilities: {},
|
|
19
|
+
clientInfo: { name: 'cliend', version: '0.3.0' },
|
|
20
|
+
});
|
|
21
|
+
if (result.error) {
|
|
22
|
+
throw new Error(`MCP init failed: ${result.error.message}`);
|
|
23
|
+
}
|
|
24
|
+
// Send initialized notification (no response expected, but we send it as a request)
|
|
25
|
+
await this.send('notifications/initialized', {});
|
|
26
|
+
this.initialized = true;
|
|
27
|
+
this.logger.info('MCP client initialized');
|
|
28
|
+
}
|
|
29
|
+
async getJiraIssue(issueKey) {
|
|
30
|
+
await this.ensureInitialized();
|
|
31
|
+
const result = await this.callTool('getJiraIssue', { issueIdOrKey: issueKey });
|
|
32
|
+
return this.parseIssueFromText(result, issueKey);
|
|
33
|
+
}
|
|
34
|
+
async searchJql(jql) {
|
|
35
|
+
await this.ensureInitialized();
|
|
36
|
+
return this.callTool('searchJiraIssuesUsingJql', { jql });
|
|
37
|
+
}
|
|
38
|
+
async search(query) {
|
|
39
|
+
await this.ensureInitialized();
|
|
40
|
+
const text = await this.callTool('search', { query });
|
|
41
|
+
return this.parseSearchResults(text);
|
|
42
|
+
}
|
|
43
|
+
async createIssue(params) {
|
|
44
|
+
await this.ensureInitialized();
|
|
45
|
+
const args = {
|
|
46
|
+
projectKey: params.projectKey,
|
|
47
|
+
issueType: params.issueType,
|
|
48
|
+
summary: params.summary,
|
|
49
|
+
};
|
|
50
|
+
if (params.description)
|
|
51
|
+
args.description = params.description;
|
|
52
|
+
if (params.parentKey)
|
|
53
|
+
args.parentKey = params.parentKey;
|
|
54
|
+
return this.callTool('createJiraIssue', args);
|
|
55
|
+
}
|
|
56
|
+
async editIssue(issueKey, fields) {
|
|
57
|
+
await this.ensureInitialized();
|
|
58
|
+
return this.callTool('editJiraIssue', { issueIdOrKey: issueKey, ...fields });
|
|
59
|
+
}
|
|
60
|
+
async addComment(issueKey, comment) {
|
|
61
|
+
await this.ensureInitialized();
|
|
62
|
+
return this.callTool('addCommentToJiraIssue', { issueIdOrKey: issueKey, comment });
|
|
63
|
+
}
|
|
64
|
+
async transitionIssue(issueKey, transitionId) {
|
|
65
|
+
await this.ensureInitialized();
|
|
66
|
+
return this.callTool('transitionJiraIssue', { issueIdOrKey: issueKey, transitionId });
|
|
67
|
+
}
|
|
68
|
+
async callTool(name, args) {
|
|
69
|
+
const result = await this.send('tools/call', { name, arguments: args });
|
|
70
|
+
if (result.error) {
|
|
71
|
+
throw new Error(`MCP tool ${name} failed: ${result.error.message}`);
|
|
72
|
+
}
|
|
73
|
+
const content = result.result?.content;
|
|
74
|
+
if (!content || content.length === 0) {
|
|
75
|
+
return '';
|
|
76
|
+
}
|
|
77
|
+
return content
|
|
78
|
+
.filter((c) => c.type === 'text')
|
|
79
|
+
.map((c) => c.text)
|
|
80
|
+
.join('\n');
|
|
81
|
+
}
|
|
82
|
+
async send(method, params) {
|
|
83
|
+
const token = await this.authManager.getAccessToken();
|
|
84
|
+
const id = ++this.requestId;
|
|
85
|
+
const body = JSON.stringify({
|
|
86
|
+
jsonrpc: '2.0',
|
|
87
|
+
id,
|
|
88
|
+
method,
|
|
89
|
+
params,
|
|
90
|
+
});
|
|
91
|
+
const headers = {
|
|
92
|
+
'Content-Type': 'application/json',
|
|
93
|
+
Accept: 'application/json',
|
|
94
|
+
Authorization: `Bearer ${token}`,
|
|
95
|
+
};
|
|
96
|
+
if (this.sessionId) {
|
|
97
|
+
headers['Mcp-Session-Id'] = this.sessionId;
|
|
98
|
+
}
|
|
99
|
+
this.logger.debug({ method, id }, 'MCP request');
|
|
100
|
+
const response = await fetch(this.serverUrl, {
|
|
101
|
+
method: 'POST',
|
|
102
|
+
headers,
|
|
103
|
+
body,
|
|
104
|
+
});
|
|
105
|
+
// Capture session ID from response headers
|
|
106
|
+
const sid = response.headers.get('mcp-session-id');
|
|
107
|
+
if (sid) {
|
|
108
|
+
this.sessionId = sid;
|
|
109
|
+
}
|
|
110
|
+
if (!response.ok) {
|
|
111
|
+
const errorText = await response.text().catch(() => '');
|
|
112
|
+
throw new Error(`MCP server returned ${response.status}: ${errorText}`);
|
|
113
|
+
}
|
|
114
|
+
const data = (await response.json());
|
|
115
|
+
this.logger.debug({ method, id, hasError: !!data.error }, 'MCP response');
|
|
116
|
+
return data;
|
|
117
|
+
}
|
|
118
|
+
parseIssueFromText(text, issueKey) {
|
|
119
|
+
// The MCP server returns issue details as text. Parse what we can.
|
|
120
|
+
const lines = text.split('\n');
|
|
121
|
+
let summary = '';
|
|
122
|
+
let description = '';
|
|
123
|
+
let status = 'Unknown';
|
|
124
|
+
let type = 'Unknown';
|
|
125
|
+
let priority = 'Medium';
|
|
126
|
+
let assignee;
|
|
127
|
+
const labels = [];
|
|
128
|
+
let acceptanceCriteria;
|
|
129
|
+
for (const line of lines) {
|
|
130
|
+
const lower = line.toLowerCase();
|
|
131
|
+
if (lower.startsWith('summary:') || lower.startsWith('title:')) {
|
|
132
|
+
summary = line.split(':').slice(1).join(':').trim();
|
|
133
|
+
}
|
|
134
|
+
else if (lower.startsWith('status:')) {
|
|
135
|
+
status = line.split(':').slice(1).join(':').trim();
|
|
136
|
+
}
|
|
137
|
+
else if (lower.startsWith('type:') || lower.startsWith('issue type:')) {
|
|
138
|
+
type = line.split(':').slice(1).join(':').trim();
|
|
139
|
+
}
|
|
140
|
+
else if (lower.startsWith('priority:')) {
|
|
141
|
+
priority = line.split(':').slice(1).join(':').trim();
|
|
142
|
+
}
|
|
143
|
+
else if (lower.startsWith('assignee:')) {
|
|
144
|
+
assignee = line.split(':').slice(1).join(':').trim() || undefined;
|
|
145
|
+
}
|
|
146
|
+
else if (lower.startsWith('labels:')) {
|
|
147
|
+
const labelText = line.split(':').slice(1).join(':').trim();
|
|
148
|
+
if (labelText)
|
|
149
|
+
labels.push(...labelText.split(',').map((l) => l.trim()));
|
|
150
|
+
}
|
|
151
|
+
else if (lower.startsWith('acceptance criteria:')) {
|
|
152
|
+
acceptanceCriteria = line.split(':').slice(1).join(':').trim();
|
|
153
|
+
}
|
|
154
|
+
else if (lower.startsWith('description:')) {
|
|
155
|
+
description = line.split(':').slice(1).join(':').trim();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// If structured parsing didn't work, use the full text as description
|
|
159
|
+
if (!summary && !description) {
|
|
160
|
+
description = text;
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
key: issueKey,
|
|
164
|
+
summary,
|
|
165
|
+
description,
|
|
166
|
+
status,
|
|
167
|
+
type,
|
|
168
|
+
priority,
|
|
169
|
+
assignee,
|
|
170
|
+
labels,
|
|
171
|
+
acceptanceCriteria,
|
|
172
|
+
projectKey: issueKey.split('-')[0],
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
parseSearchResults(text) {
|
|
176
|
+
if (!text.trim())
|
|
177
|
+
return [];
|
|
178
|
+
const results = [];
|
|
179
|
+
// The MCP search tool returns results as text blocks.
|
|
180
|
+
// Split by double newlines or numbered items to get individual results.
|
|
181
|
+
const blocks = text.split(/\n\n+/).filter((b) => b.trim());
|
|
182
|
+
for (const block of blocks) {
|
|
183
|
+
const lines = block.split('\n');
|
|
184
|
+
const title = lines[0]?.replace(/^\d+\.\s*/, '').trim() || 'Untitled';
|
|
185
|
+
const excerpt = lines.slice(1).join(' ').trim();
|
|
186
|
+
let type = 'unknown';
|
|
187
|
+
if (block.toLowerCase().includes('jira') || /[A-Z]+-\d+/.test(block)) {
|
|
188
|
+
type = 'jira-issue';
|
|
189
|
+
}
|
|
190
|
+
else if (block.toLowerCase().includes('confluence') || block.toLowerCase().includes('page')) {
|
|
191
|
+
type = 'confluence-page';
|
|
192
|
+
}
|
|
193
|
+
results.push({ type, title, excerpt });
|
|
194
|
+
}
|
|
195
|
+
return results;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=mcp-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../../../src/integrations/atlassian/mcp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ export class CodexProvider {
|
|
|
19
19
|
this.abortController = new AbortController();
|
|
20
20
|
const messages = this.buildMessages(context, history);
|
|
21
21
|
const response = await this.client.responses.create({
|
|
22
|
-
model: this.config.model ?? '
|
|
22
|
+
model: this.config.model ?? 'gpt-5.3-codex',
|
|
23
23
|
instructions: context.prompt,
|
|
24
24
|
input: messages,
|
|
25
25
|
}, { signal: this.abortController.signal });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.provider.js","sourceRoot":"","sources":["../../../src/providers/codex.provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAO5B,MAAM,OAAO,aAAa;IAKK;IAJpB,IAAI,GAAG,OAAO,CAAC;IAChB,MAAM,GAAkB,IAAI,CAAC;IAC7B,eAAe,GAA2B,IAAI,CAAC;IAEvD,YAA6B,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAEvD,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAAyB,EACzB,OAA8B;QAE9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3D,CAAC;YAED,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;YAE7C,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEtD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CACjD;gBACE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"codex.provider.js","sourceRoot":"","sources":["../../../src/providers/codex.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breakdown.d.ts","sourceRoot":"","sources":["../../../../src/repl/commands/breakdown.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAI3E,eAAO,MAAM,gBAAgB,EAAE,YA6F9B,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import * as readline from 'node:readline';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { McpClient } from '../../integrations/atlassian/mcp-client.js';
|
|
4
|
+
import { Orchestrator } from '../../core/orchestrator.js';
|
|
5
|
+
export const breakdownCommand = {
|
|
6
|
+
name: 'breakdown',
|
|
7
|
+
aliases: ['bd'],
|
|
8
|
+
description: 'Break down a Jira ticket into subtasks',
|
|
9
|
+
async execute(args, ctx) {
|
|
10
|
+
if (!args) {
|
|
11
|
+
console.log(chalk.yellow('\n Usage: /breakdown PROJ-123\n'));
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const ticketId = args.trim().toUpperCase();
|
|
15
|
+
console.log(chalk.dim(`\n Fetching ticket ${ticketId}...`));
|
|
16
|
+
try {
|
|
17
|
+
const mcpClient = new McpClient(ctx.config, ctx.authManager, ctx.logger);
|
|
18
|
+
// Step 1: Fetch the parent ticket
|
|
19
|
+
const ticket = await mcpClient.getJiraIssue(ticketId);
|
|
20
|
+
if (ctx.repl.session) {
|
|
21
|
+
ctx.repl.session.setTicket(ticket);
|
|
22
|
+
}
|
|
23
|
+
console.log(` ${chalk.cyan(ticket.key)} — ${ticket.summary}`);
|
|
24
|
+
if (ticket.description) {
|
|
25
|
+
console.log(chalk.dim(` ${ticket.description.slice(0, 200)}`));
|
|
26
|
+
}
|
|
27
|
+
console.log('');
|
|
28
|
+
// Step 2: Ask AI to generate subtask breakdown
|
|
29
|
+
const breakdownPrompt = buildBreakdownPrompt(ticket);
|
|
30
|
+
console.log(chalk.dim(' Generating subtask breakdown via AI...\n'));
|
|
31
|
+
const orchestrator = new Orchestrator(ctx.config, ctx.logger);
|
|
32
|
+
if (!ctx.repl.session) {
|
|
33
|
+
console.log(chalk.red(' No active session. Start a session first.\n'));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const result = await orchestrator.process(ctx.repl.session, breakdownPrompt);
|
|
37
|
+
// Step 3: Parse subtasks from AI output
|
|
38
|
+
const subtasks = parseSubtasks(result.content);
|
|
39
|
+
if (subtasks.length === 0) {
|
|
40
|
+
console.log(chalk.yellow(' Could not parse subtasks from AI output.\n'));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
// Step 4: Display proposed subtasks and ask for confirmation
|
|
44
|
+
console.log(chalk.bold(`\n Proposed subtasks for ${ticketId}:\n`));
|
|
45
|
+
for (let i = 0; i < subtasks.length; i++) {
|
|
46
|
+
console.log(` ${chalk.cyan(`${i + 1}.`)} ${subtasks[i].summary}`);
|
|
47
|
+
if (subtasks[i].description) {
|
|
48
|
+
console.log(chalk.dim(` ${subtasks[i].description.slice(0, 120)}`));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
console.log('');
|
|
52
|
+
const confirmed = await confirm(` Create ${subtasks.length} subtasks in Jira?`);
|
|
53
|
+
if (!confirmed) {
|
|
54
|
+
console.log(chalk.dim(' Cancelled.\n'));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// Step 5: Create subtasks via MCP
|
|
58
|
+
console.log(chalk.dim(' Creating subtasks in Jira...\n'));
|
|
59
|
+
for (const subtask of subtasks) {
|
|
60
|
+
try {
|
|
61
|
+
const response = await mcpClient.createIssue({
|
|
62
|
+
projectKey: ticket.projectKey,
|
|
63
|
+
issueType: 'Subtask',
|
|
64
|
+
summary: subtask.summary,
|
|
65
|
+
description: subtask.description,
|
|
66
|
+
parentKey: ticketId,
|
|
67
|
+
});
|
|
68
|
+
console.log(` ${chalk.green('✓')} ${response || subtask.summary}`);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
const msg = error instanceof Error ? error.message : 'Unknown error';
|
|
72
|
+
console.log(` ${chalk.red('✗')} ${subtask.summary} — ${msg}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
console.log(chalk.green(`\n Done. Subtasks created under ${ticketId}.\n`));
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
const msg = error instanceof Error ? error.message : 'Unknown error';
|
|
79
|
+
console.log(chalk.red(` Failed: ${msg}\n`));
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
function buildBreakdownPrompt(ticket) {
|
|
84
|
+
let prompt = `Break down the following Jira ticket into concrete, actionable subtasks.\n\n`;
|
|
85
|
+
prompt += `Ticket: ${ticket.key} — ${ticket.summary}\n`;
|
|
86
|
+
if (ticket.description) {
|
|
87
|
+
prompt += `Description: ${ticket.description}\n`;
|
|
88
|
+
}
|
|
89
|
+
if (ticket.acceptanceCriteria) {
|
|
90
|
+
prompt += `Acceptance Criteria: ${ticket.acceptanceCriteria}\n`;
|
|
91
|
+
}
|
|
92
|
+
prompt += `\nReturn a numbered list of subtasks. Each subtask should have:\n`;
|
|
93
|
+
prompt += `- A concise summary (one line)\n`;
|
|
94
|
+
prompt += `- A brief description (one line)\n\n`;
|
|
95
|
+
prompt += `Format each subtask as:\n`;
|
|
96
|
+
prompt += `1. Summary: <summary>\n Description: <description>\n`;
|
|
97
|
+
return prompt;
|
|
98
|
+
}
|
|
99
|
+
function parseSubtasks(text) {
|
|
100
|
+
const subtasks = [];
|
|
101
|
+
const lines = text.split('\n');
|
|
102
|
+
let currentSummary = null;
|
|
103
|
+
let currentDescription;
|
|
104
|
+
for (const line of lines) {
|
|
105
|
+
// Match numbered items like "1. Summary: ..." or "1. ..."
|
|
106
|
+
const summaryMatch = line.match(/^\d+\.\s*(?:Summary:\s*)?(.+)/);
|
|
107
|
+
if (summaryMatch) {
|
|
108
|
+
// Save previous subtask
|
|
109
|
+
if (currentSummary) {
|
|
110
|
+
subtasks.push({ summary: currentSummary, description: currentDescription });
|
|
111
|
+
}
|
|
112
|
+
currentSummary = summaryMatch[1].trim();
|
|
113
|
+
currentDescription = undefined;
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
// Match description line
|
|
117
|
+
const descMatch = line.match(/^\s+(?:Description:\s*)?(.+)/);
|
|
118
|
+
if (descMatch && currentSummary && !currentDescription) {
|
|
119
|
+
currentDescription = descMatch[1].trim();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Push last subtask
|
|
123
|
+
if (currentSummary) {
|
|
124
|
+
subtasks.push({ summary: currentSummary, description: currentDescription });
|
|
125
|
+
}
|
|
126
|
+
return subtasks;
|
|
127
|
+
}
|
|
128
|
+
function confirm(question) {
|
|
129
|
+
const rl = readline.createInterface({
|
|
130
|
+
input: process.stdin,
|
|
131
|
+
output: process.stdout,
|
|
132
|
+
terminal: true,
|
|
133
|
+
});
|
|
134
|
+
return new Promise((resolve) => {
|
|
135
|
+
rl.question(`${question} ${chalk.dim('(y/N)')} `, (answer) => {
|
|
136
|
+
rl.close();
|
|
137
|
+
resolve(answer.trim().toLowerCase() === 'y');
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=breakdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breakdown.js","sourceRoot":"","sources":["../../../../src/repl/commands/breakdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../../src/repl/commands/help.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAE3E,eAAO,MAAM,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../../src/repl/commands/help.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAE3E,eAAO,MAAM,WAAW,EAAE,YAkCzB,CAAC"}
|
|
@@ -16,6 +16,8 @@ export const helpCommand = {
|
|
|
16
16
|
{ cmd: '/status', desc: 'Check auth and service connectivity' },
|
|
17
17
|
{ cmd: '/config', desc: 'View configuration' },
|
|
18
18
|
{ cmd: '/config setup', desc: 'Re-run the setup wizard' },
|
|
19
|
+
{ cmd: '/breakdown <ID>', desc: 'Break down a ticket into subtasks (via AI + Rovo)' },
|
|
20
|
+
{ cmd: '/search <query>', desc: 'Search Jira & Confluence via Rovo AI' },
|
|
19
21
|
{ cmd: '/auth', desc: 'Authenticate with Atlassian' },
|
|
20
22
|
{ cmd: '/clear', desc: 'Clear the screen' },
|
|
21
23
|
{ cmd: '/exit', desc: 'End the session' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../../../src/repl/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACnB,WAAW,EAAE,yBAAyB;IACtC,KAAK,CAAC,OAAO,CAAC,KAAyB,EAAE,GAAmB;QAC1D,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAyF,CAAC;QAC/G,MAAM,QAAQ,GAAG;YACf,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE;YAChD,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,kCAAkC,EAAE;YACjE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,sCAAsC,EAAE;YAClE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE;YACpD,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,2BAA2B,EAAE;YACzD,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACnD,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE;YAC/C,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,qCAAqC,EAAE;YAC/D,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE;YAC9C,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,yBAAyB,EAAE;YACzD,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,6BAA6B,EAAE;YACrD,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE;YAC3C,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE;SAC1C,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../../../src/repl/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACnB,WAAW,EAAE,yBAAyB;IACtC,KAAK,CAAC,OAAO,CAAC,KAAyB,EAAE,GAAmB;QAC1D,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAyF,CAAC;QAC/G,MAAM,QAAQ,GAAG;YACf,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE;YAChD,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,kCAAkC,EAAE;YACjE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,sCAAsC,EAAE;YAClE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE;YACpD,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,2BAA2B,EAAE;YACzD,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACnD,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE;YAC/C,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,qCAAqC,EAAE;YAC/D,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE;YAC9C,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,yBAAyB,EAAE;YACzD,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,mDAAmD,EAAE;YACrF,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,sCAAsC,EAAE;YACxE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,6BAA6B,EAAE;YACrD,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE;YAC3C,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE;SAC1C,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../../src/repl/commands/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAG3E,eAAO,MAAM,aAAa,EAAE,YAoD3B,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { McpClient } from '../../integrations/atlassian/mcp-client.js';
|
|
3
|
+
export const searchCommand = {
|
|
4
|
+
name: 'search',
|
|
5
|
+
aliases: ['s', 'find'],
|
|
6
|
+
description: 'Search Jira and Confluence via Rovo AI',
|
|
7
|
+
async execute(args, ctx) {
|
|
8
|
+
if (!args) {
|
|
9
|
+
console.log(chalk.yellow('\n Usage: /search <query>\n'));
|
|
10
|
+
console.log(chalk.dim(' Examples:'));
|
|
11
|
+
console.log(chalk.dim(' /search how does the auth flow work'));
|
|
12
|
+
console.log(chalk.dim(' /search open bugs assigned to me'));
|
|
13
|
+
console.log(chalk.dim(' /search login form design decisions\n'));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const query = args.trim();
|
|
17
|
+
console.log(chalk.dim(`\n Searching: "${query}"...\n`));
|
|
18
|
+
try {
|
|
19
|
+
const mcpClient = new McpClient(ctx.config, ctx.authManager, ctx.logger);
|
|
20
|
+
const results = await mcpClient.search(query);
|
|
21
|
+
if (results.length === 0) {
|
|
22
|
+
console.log(chalk.yellow(' No results found.\n'));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
console.log(chalk.bold(` ${results.length} result${results.length > 1 ? 's' : ''} found:\n`));
|
|
26
|
+
for (let i = 0; i < results.length; i++) {
|
|
27
|
+
const r = results[i];
|
|
28
|
+
const typeLabel = r.type === 'jira-issue'
|
|
29
|
+
? chalk.blue('[Jira]')
|
|
30
|
+
: r.type === 'confluence-page'
|
|
31
|
+
? chalk.magenta('[Confluence]')
|
|
32
|
+
: chalk.dim('[Other]');
|
|
33
|
+
console.log(` ${chalk.cyan(`${i + 1}.`)} ${typeLabel} ${r.title}`);
|
|
34
|
+
if (r.excerpt) {
|
|
35
|
+
console.log(chalk.dim(` ${r.excerpt.slice(0, 150)}`));
|
|
36
|
+
}
|
|
37
|
+
if (r.url) {
|
|
38
|
+
console.log(chalk.dim(` ${r.url}`));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
console.log('');
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
const msg = error instanceof Error ? error.message : 'Unknown error';
|
|
45
|
+
console.log(chalk.red(` Search failed: ${msg}\n`));
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../src/repl/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ticket.d.ts","sourceRoot":"","sources":["../../../../src/repl/commands/ticket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ticket.d.ts","sourceRoot":"","sources":["../../../../src/repl/commands/ticket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAI3E,eAAO,MAAM,aAAa,EAAE,YA4C3B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
+
import { McpClient } from '../../integrations/atlassian/mcp-client.js';
|
|
2
3
|
import { JiraClient } from '../../integrations/atlassian/jira-client.js';
|
|
3
4
|
export const ticketCommand = {
|
|
4
5
|
name: 'ticket',
|
|
@@ -18,8 +19,17 @@ export const ticketCommand = {
|
|
|
18
19
|
const ticketId = args.trim().toUpperCase();
|
|
19
20
|
console.log(chalk.dim(`\n Fetching ticket ${ticketId}...`));
|
|
20
21
|
try {
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
// Try MCP client first, fall back to direct Jira client
|
|
23
|
+
let ticket;
|
|
24
|
+
try {
|
|
25
|
+
const mcpClient = new McpClient(ctx.config, ctx.authManager, ctx.logger);
|
|
26
|
+
ticket = await mcpClient.getJiraIssue(ticketId);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
ctx.logger.debug('MCP client failed, falling back to direct Jira API');
|
|
30
|
+
const jiraClient = new JiraClient(ctx.config, ctx.logger);
|
|
31
|
+
ticket = await jiraClient.getIssue(ticketId);
|
|
32
|
+
}
|
|
23
33
|
if (ctx.repl.session) {
|
|
24
34
|
ctx.repl.session.setTicket(ticket);
|
|
25
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ticket.js","sourceRoot":"","sources":["../../../../src/repl/commands/ticket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,6CAA6C,CAAC;AAEzE,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,CAAC,GAAG,CAAC;IACd,WAAW,EAAE,kCAAkC;IAC/C,KAAK,CAAC,OAAO,CAAC,IAAwB,EAAE,GAAmB;QACzD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;gBACrC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAAC,CAAC;YAC/E,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,QAAQ,KAAK,CAAC,CAAC,CAAC;QAE7D,IAAI,CAAC;YACH,MAAM,
|
|
1
|
+
{"version":3,"file":"ticket.js","sourceRoot":"","sources":["../../../../src/repl/commands/ticket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,6CAA6C,CAAC;AAEzE,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,CAAC,GAAG,CAAC;IACd,WAAW,EAAE,kCAAkC;IAC/C,KAAK,CAAC,OAAO,CAAC,IAAwB,EAAE,GAAmB;QACzD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;gBACrC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAAC,CAAC;YAC/E,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,QAAQ,KAAK,CAAC,CAAC,CAAC;QAE7D,IAAI,CAAC;YACH,wDAAwD;YACxD,IAAI,MAAM,CAAC;YACX,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBACzE,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;gBACvE,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC1D,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACrB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAChG,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9F,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,GAAG,IAAI,CAAC,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../../src/repl/repl.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../../src/repl/repl.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAmB7D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAE5C,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,WAAW;IAY1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YA6Cd,WAAW;YAUX,aAAa;YAoBb,aAAa;IA8C3B,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,iBAAiB;IAiBzB,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAI1C,IAAI,IAAI,IAAI;IAOZ,WAAW,IAAI,IAAI;CAGpB"}
|
package/dist/src/repl/repl.js
CHANGED
|
@@ -14,6 +14,8 @@ import { memoryCommand } from './commands/memory.js';
|
|
|
14
14
|
import { statusCommand } from './commands/status.js';
|
|
15
15
|
import { configCommand } from './commands/config.js';
|
|
16
16
|
import { authCommand } from './commands/auth.js';
|
|
17
|
+
import { breakdownCommand } from './commands/breakdown.js';
|
|
18
|
+
import { searchCommand } from './commands/search.js';
|
|
17
19
|
export class Repl {
|
|
18
20
|
config;
|
|
19
21
|
authManager;
|
|
@@ -147,6 +149,8 @@ export class Repl {
|
|
|
147
149
|
this.commandRegistry.register(statusCommand);
|
|
148
150
|
this.commandRegistry.register(configCommand);
|
|
149
151
|
this.commandRegistry.register(authCommand);
|
|
152
|
+
this.commandRegistry.register(breakdownCommand);
|
|
153
|
+
this.commandRegistry.register(searchCommand);
|
|
150
154
|
}
|
|
151
155
|
getCommandContext() {
|
|
152
156
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repl.js","sourceRoot":"","sources":["../../../src/repl/repl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,eAAe,EAAuB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"repl.js","sourceRoot":"","sources":["../../../src/repl/repl.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/types/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,eAAe,CAAC;IAC3B,SAAS,EAAE,eAAe,CAAC;IAC3B,SAAS,EAAE,eAAe,CAAC;IAC3B,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/types/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,eAAe,CAAC;IAC3B,SAAS,EAAE,eAAe,CAAC;IAC3B,SAAS,EAAE,eAAe,CAAC;IAC3B,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAC5C;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf"}
|
package/dist/src/ui/welcome.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import { basename } from 'node:path';
|
|
3
3
|
export function showWelcome(projectDir) {
|
|
4
|
-
const version = '0.
|
|
4
|
+
const version = '0.3.1';
|
|
5
5
|
const project = basename(projectDir);
|
|
6
6
|
console.log('');
|
|
7
7
|
console.log(chalk.cyan(' ╭──────────────────────────────────────────╮'));
|