@crypto512/jicon-mcp 0.6.0 → 0.7.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.
- package/CLAUDE.md +252 -27
- package/README.md +229 -18
- package/TOOL_LIST.md +201 -5
- package/dist/config/types.d.ts +6 -6
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +3 -2
- package/dist/config/types.js.map +1 -1
- package/dist/confluence/client.d.ts +8 -16
- package/dist/confluence/client.d.ts.map +1 -1
- package/dist/confluence/client.js +75 -43
- package/dist/confluence/client.js.map +1 -1
- package/dist/confluence/formatters.d.ts +4 -0
- package/dist/confluence/formatters.d.ts.map +1 -1
- package/dist/confluence/formatters.js +19 -0
- package/dist/confluence/formatters.js.map +1 -1
- package/dist/confluence/tools.d.ts +9 -36
- package/dist/confluence/tools.d.ts.map +1 -1
- package/dist/confluence/tools.js +90 -158
- package/dist/confluence/tools.js.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/jira/client.d.ts +9 -9
- package/dist/jira/client.d.ts.map +1 -1
- package/dist/jira/client.js +252 -30
- package/dist/jira/client.js.map +1 -1
- package/dist/jira/formatters.d.ts +4 -0
- package/dist/jira/formatters.d.ts.map +1 -1
- package/dist/jira/formatters.js +24 -0
- package/dist/jira/formatters.js.map +1 -1
- package/dist/jira/tools.d.ts +36 -36
- package/dist/jira/tools.d.ts.map +1 -1
- package/dist/jira/tools.js +161 -139
- package/dist/jira/tools.js.map +1 -1
- package/dist/jira/types.d.ts +50 -0
- package/dist/jira/types.d.ts.map +1 -1
- package/dist/permissions/filter.d.ts.map +1 -1
- package/dist/permissions/filter.js +42 -13
- package/dist/permissions/filter.js.map +1 -1
- package/dist/permissions/tool-registry.d.ts +33 -14
- package/dist/permissions/tool-registry.d.ts.map +1 -1
- package/dist/permissions/tool-registry.js +80 -5
- package/dist/permissions/tool-registry.js.map +1 -1
- package/dist/tempo/client.d.ts +1 -0
- package/dist/tempo/client.d.ts.map +1 -1
- package/dist/tempo/client.js +43 -0
- package/dist/tempo/client.js.map +1 -1
- package/dist/tempo/formatters.d.ts +4 -0
- package/dist/tempo/formatters.d.ts.map +1 -1
- package/dist/tempo/formatters.js +24 -0
- package/dist/tempo/formatters.js.map +1 -1
- package/dist/tempo/tools.d.ts +21 -0
- package/dist/tempo/tools.d.ts.map +1 -1
- package/dist/tempo/tools.js +74 -134
- package/dist/tempo/tools.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/buffer-tools.d.ts +128 -0
- package/dist/utils/buffer-tools.d.ts.map +1 -0
- package/dist/utils/buffer-tools.js +312 -0
- package/dist/utils/buffer-tools.js.map +1 -0
- package/dist/utils/content-buffer.d.ts +132 -0
- package/dist/utils/content-buffer.d.ts.map +1 -0
- package/dist/utils/content-buffer.js +313 -0
- package/dist/utils/content-buffer.js.map +1 -0
- package/dist/utils/response-formatter.d.ts +5 -1
- package/dist/utils/response-formatter.d.ts.map +1 -1
- package/dist/utils/response-formatter.js +52 -2
- package/dist/utils/response-formatter.js.map +1 -1
- package/dist/utils/workload-tools.d.ts +68 -0
- package/dist/utils/workload-tools.d.ts.map +1 -0
- package/dist/utils/workload-tools.js +134 -0
- package/dist/utils/workload-tools.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,35 +17,174 @@ npm install -g @crypto512/jicon-mcp
|
|
|
17
17
|
|
|
18
18
|
## What is Jicon?
|
|
19
19
|
|
|
20
|
-
Jicon is an MCP server that enables AI assistants like Claude to interact with your Jira, Confluence, and Tempo instances. It provides
|
|
20
|
+
Jicon is an MCP server that enables AI assistants like Claude to interact with your Jira, Confluence, and Tempo instances. It provides 52 powerful tools for:
|
|
21
21
|
|
|
22
22
|
- 🎫 **Jira**: Issue management, searching, project operations, Agile boards, sprints
|
|
23
23
|
- 📄 **Confluence**: Page management, content search, spaces, attachments, comments
|
|
24
24
|
- ⏱️ **Tempo**: Time tracking, worklog management, accounts, and teams
|
|
25
|
+
- 📦 **Buffer**: Content pagination for handling large responses
|
|
25
26
|
|
|
26
27
|
## Features at a Glance
|
|
27
28
|
|
|
28
|
-
### Jira (
|
|
29
|
+
### Jira (19 Tools)
|
|
29
30
|
- Search issues with JQL
|
|
30
31
|
- Create, update, and transition issues
|
|
31
|
-
- Manage comments and
|
|
32
|
+
- Manage comments, links, and watchers
|
|
32
33
|
- Access boards and sprints
|
|
33
|
-
- View projects and metadata
|
|
34
|
+
- View projects, issue types, and metadata
|
|
35
|
+
- Track worklogs (individual and recursive totals)
|
|
34
36
|
|
|
35
|
-
### Confluence (
|
|
37
|
+
### Confluence (14 Tools)
|
|
36
38
|
- Search content with CQL
|
|
37
|
-
- Create and
|
|
39
|
+
- Create, update, and delete pages
|
|
38
40
|
- Navigate page hierarchies
|
|
39
41
|
- Manage attachments
|
|
40
42
|
- Add and view comments
|
|
41
43
|
|
|
42
|
-
### Tempo (
|
|
44
|
+
### Tempo (12 Tools)
|
|
43
45
|
- Log and manage work time
|
|
44
46
|
- View and update worklogs
|
|
45
47
|
- Access accounts and teams
|
|
46
|
-
- Retrieve team worklogs
|
|
48
|
+
- Retrieve team and epic worklogs
|
|
47
49
|
- Get user time tracking info
|
|
48
50
|
|
|
51
|
+
### Buffer (5 Tools)
|
|
52
|
+
- Retrieve content chunks from buffered responses
|
|
53
|
+
- List active buffers and their metadata
|
|
54
|
+
- Clear buffers to free memory
|
|
55
|
+
- **Search buffered content with grep-like patterns**
|
|
56
|
+
- **Edit buffered content with find/replace**
|
|
57
|
+
|
|
58
|
+
### Workload (2 Tools)
|
|
59
|
+
- Convert time between units (seconds, hours, days)
|
|
60
|
+
- Sum multiple workload values with mixed units
|
|
61
|
+
|
|
62
|
+
## Content Buffering
|
|
63
|
+
|
|
64
|
+
Tools that return large content (Confluence pages, Jira issues, Tempo worklogs) use an in-memory buffering system for efficient content pagination.
|
|
65
|
+
|
|
66
|
+
### How It Works
|
|
67
|
+
|
|
68
|
+
1. **Initial Call**: When you call a tool like `confluence_get_page`, it fetches the full content and stores it in a buffer
|
|
69
|
+
2. **Chunked Response**: The response includes a `bufferId`, the first chunk of content (default 5000 chars), and pagination info
|
|
70
|
+
3. **Retrieve More**: Use `buffer_get_chunk` with the `bufferId` to get subsequent chunks
|
|
71
|
+
|
|
72
|
+
### Response Format
|
|
73
|
+
|
|
74
|
+
Buffered tools return:
|
|
75
|
+
- `bufferId`: Unique identifier for retrieving more content
|
|
76
|
+
- `content`: The current chunk of content
|
|
77
|
+
- `offset`: Starting position of this chunk
|
|
78
|
+
- `limit`: Maximum characters returned
|
|
79
|
+
- `totalSize`: Total size of buffered content
|
|
80
|
+
- `hasMore`: Whether more content is available
|
|
81
|
+
|
|
82
|
+
### Example Usage
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
// 1. Get a Confluence page (returns first 5000 chars)
|
|
86
|
+
{
|
|
87
|
+
"pageId": "123456"
|
|
88
|
+
}
|
|
89
|
+
// Response: { bufferId: "buf_xxx", content: "...", hasMore: true, totalSize: 15000 }
|
|
90
|
+
|
|
91
|
+
// 2. Get next chunk
|
|
92
|
+
{
|
|
93
|
+
"bufferId": "buf_xxx",
|
|
94
|
+
"offset": 5000,
|
|
95
|
+
"limit": 5000
|
|
96
|
+
}
|
|
97
|
+
// Response: { content: "...", hasMore: true }
|
|
98
|
+
|
|
99
|
+
// 3. Continue until hasMore: false
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Buffered Tools
|
|
103
|
+
|
|
104
|
+
- `confluence_get_page` - Returns page content with buffering
|
|
105
|
+
- `confluence_get_page_by_title` - Returns page content with buffering
|
|
106
|
+
- `jira_get_issue` - Returns issue data with buffering
|
|
107
|
+
- `tempo_get_worklogs` - Returns worklog data with buffering
|
|
108
|
+
- `tempo_get_team_worklogs` - Returns team worklog data with buffering
|
|
109
|
+
|
|
110
|
+
### Buffer Management
|
|
111
|
+
|
|
112
|
+
- **TTL**: Buffers expire after 10 minutes
|
|
113
|
+
- **List Buffers**: Use `buffer_list` to see active buffers
|
|
114
|
+
- **Clear Buffers**: Use `buffer_clear` to free memory
|
|
115
|
+
|
|
116
|
+
### Searching Buffer Content
|
|
117
|
+
|
|
118
|
+
Use `buffer_grep` to search within buffered content with regex patterns:
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
// Search for "meeting" with 2 lines of context before and after
|
|
122
|
+
{
|
|
123
|
+
"bufferId": "buf_xxx",
|
|
124
|
+
"pattern": "meeting",
|
|
125
|
+
"-C": 2
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Case-insensitive search with 3 lines after each match
|
|
129
|
+
{
|
|
130
|
+
"bufferId": "buf_xxx",
|
|
131
|
+
"pattern": "API",
|
|
132
|
+
"-i": true,
|
|
133
|
+
"-A": 3
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Count occurrences only
|
|
137
|
+
{
|
|
138
|
+
"bufferId": "buf_xxx",
|
|
139
|
+
"pattern": "TODO",
|
|
140
|
+
"output_mode": "count"
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Parameters:**
|
|
145
|
+
- `pattern`: Regex pattern to search for
|
|
146
|
+
- `-A`: Lines to show after each match
|
|
147
|
+
- `-B`: Lines to show before each match
|
|
148
|
+
- `-C`: Lines to show before AND after (overrides -A/-B)
|
|
149
|
+
- `-i`: Case insensitive search
|
|
150
|
+
- `-n`: Show line numbers (default: true)
|
|
151
|
+
- `output_mode`: "content" (default) or "count"
|
|
152
|
+
- `multiline`: Enable multiline mode where `.` matches newlines
|
|
153
|
+
- `head_limit`: Limit to first N matches
|
|
154
|
+
- `offset`: Skip first N matches
|
|
155
|
+
|
|
156
|
+
### Editing Buffer Content
|
|
157
|
+
|
|
158
|
+
Use `buffer_edit` to perform find/replace on buffered content:
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
// Replace single occurrence
|
|
162
|
+
{
|
|
163
|
+
"bufferId": "buf_xxx",
|
|
164
|
+
"old_string": "Meeting at 2pm",
|
|
165
|
+
"new_string": "Meeting at 3pm"
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Replace all occurrences
|
|
169
|
+
{
|
|
170
|
+
"bufferId": "buf_xxx",
|
|
171
|
+
"old_string": "TODO",
|
|
172
|
+
"new_string": "DONE",
|
|
173
|
+
"replace_all": true
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**Important:** `buffer_edit` modifies content in memory only. To persist changes:
|
|
178
|
+
- For Confluence: call `confluence_update_page` with the modified content
|
|
179
|
+
- For Jira: call `jira_update_issue` with the modified fields
|
|
180
|
+
|
|
181
|
+
**Workflow Example:**
|
|
182
|
+
1. `confluence_get_page` → get bufferId
|
|
183
|
+
2. `buffer_grep` → find text to replace
|
|
184
|
+
3. `buffer_edit` → replace text in memory
|
|
185
|
+
4. `buffer_get_chunk` → get full modified content
|
|
186
|
+
5. `confluence_update_page` → persist changes
|
|
187
|
+
|
|
49
188
|
## Configuration
|
|
50
189
|
|
|
51
190
|
### Configuration with `.jicon.json` (Recommended)
|
|
@@ -87,28 +226,32 @@ Control which tools are allowed to execute:
|
|
|
87
226
|
```json
|
|
88
227
|
{ "permissions": { "mode": "full" } }
|
|
89
228
|
```
|
|
90
|
-
All
|
|
229
|
+
All 52 tools are available.
|
|
91
230
|
|
|
92
231
|
#### 2. **Read-Only Mode**
|
|
93
232
|
```json
|
|
94
233
|
{ "permissions": { "mode": "readonly" } }
|
|
95
234
|
```
|
|
96
|
-
Only read operations (
|
|
235
|
+
Only read operations (36 read tools + auto-included dependencies: 14 Jira + 9 Confluence + 9 Tempo + 4 Buffer read tools, plus workload utilities).
|
|
97
236
|
|
|
98
237
|
#### 3. **Custom Mode** with Virtual Actions
|
|
99
238
|
|
|
100
239
|
Simplify configuration with **virtual actions** that group related tools:
|
|
101
240
|
|
|
102
|
-
**Virtual Actions Available:**
|
|
103
|
-
- `jira_read` - All
|
|
241
|
+
**Virtual Actions Available (9 total):**
|
|
242
|
+
- `jira_read` - All 14 Jira read tools
|
|
104
243
|
- `jira_write` - All 5 Jira write tools
|
|
105
|
-
- `jira_all` - All
|
|
106
|
-
- `confluence_read` - All
|
|
244
|
+
- `jira_all` - All 19 Jira tools
|
|
245
|
+
- `confluence_read` - All 9 Confluence read tools
|
|
107
246
|
- `confluence_write` - All 5 Confluence write tools
|
|
108
|
-
- `confluence_all` - All
|
|
109
|
-
- `tempo_read` - All
|
|
247
|
+
- `confluence_all` - All 14 Confluence tools
|
|
248
|
+
- `tempo_read` - All 9 Tempo read tools
|
|
110
249
|
- `tempo_write` - All 3 Tempo write tools
|
|
111
|
-
- `tempo_all` - All
|
|
250
|
+
- `tempo_all` - All 12 Tempo tools
|
|
251
|
+
|
|
252
|
+
**Auto-included Dependencies:**
|
|
253
|
+
- Buffer tools (buffer_get_chunk, buffer_grep, etc.) are automatically included with any read/write action
|
|
254
|
+
- Workload tools (workload_convert, workload_sum) are automatically included with any Jira/Confluence/Tempo tool
|
|
112
255
|
|
|
113
256
|
**Example: Read-only access to all services**
|
|
114
257
|
```json
|
|
@@ -197,21 +340,30 @@ Once configured, you can ask Claude to:
|
|
|
197
340
|
- *"Show me my worklogs for this week"*
|
|
198
341
|
- *"Get team worklogs for the development team"*
|
|
199
342
|
|
|
343
|
+
## Documentation
|
|
344
|
+
|
|
345
|
+
- **[CLAUDE.md](CLAUDE.md)** - Complete functional specification
|
|
346
|
+
- **[TOOL_LIST.md](TOOL_LIST.md)** - Comprehensive tool reference with examples
|
|
347
|
+
- **[API Documentation](docs/api.md)** - Detailed API documentation (coming soon)
|
|
348
|
+
|
|
200
349
|
## Tool Categories
|
|
201
350
|
|
|
202
351
|
### Jira Tools
|
|
203
352
|
| Category | Tools |
|
|
204
353
|
|----------|-------|
|
|
354
|
+
| **Help** | `jira_jql_help` |
|
|
205
355
|
| **Search & Retrieval** | `jira_search_issues`, `jira_get_issue`, `jira_get_issue_comments` |
|
|
206
356
|
| **Issue Management** | `jira_create_issue`, `jira_update_issue`, `jira_transition_issue` |
|
|
207
357
|
| **Collaboration** | `jira_add_comment`, `jira_link_issues`, `jira_get_issue_watchers` |
|
|
208
|
-
| **Projects** | `jira_list_projects`, `jira_get_project` |
|
|
358
|
+
| **Projects** | `jira_list_projects`, `jira_get_project`, `jira_get_issue_types` |
|
|
209
359
|
| **Agile** | `jira_get_board`, `jira_get_sprints`, `jira_get_sprint_issues` |
|
|
210
360
|
| **Workflow** | `jira_get_transitions` |
|
|
361
|
+
| **Time Tracking** | `jira_get_issue_worklogs`, `jira_get_total_worklogs` |
|
|
211
362
|
|
|
212
363
|
### Confluence Tools
|
|
213
364
|
| Category | Tools |
|
|
214
365
|
|----------|-------|
|
|
366
|
+
| **Help** | `confluence_cql_help` |
|
|
215
367
|
| **Search & Retrieval** | `confluence_search_content`, `confluence_get_page`, `confluence_get_page_by_title` |
|
|
216
368
|
| **Page Management** | `confluence_create_page`, `confluence_update_page`, `confluence_delete_page` |
|
|
217
369
|
| **Spaces** | `confluence_list_spaces`, `confluence_get_space` |
|
|
@@ -224,9 +376,22 @@ Once configured, you can ask Claude to:
|
|
|
224
376
|
|----------|-------|
|
|
225
377
|
| **Worklog Management** | `tempo_get_worklogs`, `tempo_get_worklog`, `tempo_log_work`, `tempo_update_worklog`, `tempo_delete_worklog` |
|
|
226
378
|
| **Team Tracking** | `tempo_get_team_worklogs`, `tempo_get_teams`, `tempo_get_team` |
|
|
379
|
+
| **Epic Tracking** | `tempo_get_epic_worklogs` |
|
|
227
380
|
| **Accounts** | `tempo_get_accounts`, `tempo_get_account` |
|
|
228
381
|
| **User Info** | `tempo_get_user_info` |
|
|
229
382
|
|
|
383
|
+
### Buffer Tools
|
|
384
|
+
| Category | Tools |
|
|
385
|
+
|----------|-------|
|
|
386
|
+
| **Content Pagination** | `buffer_get_chunk`, `buffer_list`, `buffer_clear` |
|
|
387
|
+
| **Content Search** | `buffer_grep` |
|
|
388
|
+
| **Content Edit** | `buffer_edit` |
|
|
389
|
+
|
|
390
|
+
### Workload Tools
|
|
391
|
+
| Category | Tools |
|
|
392
|
+
|----------|-------|
|
|
393
|
+
| **Time Conversion** | `workload_convert`, `workload_sum` |
|
|
394
|
+
|
|
230
395
|
## Requirements
|
|
231
396
|
|
|
232
397
|
- Node.js 18 or higher
|
|
@@ -257,6 +422,52 @@ Generate a Personal Access Token (PAT):
|
|
|
257
422
|
- ✅ Never commit credentials to version control
|
|
258
423
|
- ✅ Use read-only tokens for search/read operations
|
|
259
424
|
|
|
425
|
+
## Development Status
|
|
426
|
+
|
|
427
|
+
- ✅ **Specification Complete** - Functional spec and tool list defined
|
|
428
|
+
- ✅ **Implementation Complete** - All 52 tools implemented
|
|
429
|
+
- ✅ **Testing** - 157 tests passing
|
|
430
|
+
- ✅ **Configuration System** - Flexible .jicon.json with permissions
|
|
431
|
+
- ✅ **Content Buffering** - In-memory pagination for large responses
|
|
432
|
+
- 📦 **Publishing** - Ready for npm publish
|
|
433
|
+
|
|
434
|
+
## Roadmap
|
|
435
|
+
|
|
436
|
+
### Phase 1: Core Implementation ✅ **COMPLETED**
|
|
437
|
+
- ✅ Project setup and structure
|
|
438
|
+
- ✅ Jira API client implementation (19 tools)
|
|
439
|
+
- ✅ Confluence API client implementation (14 tools)
|
|
440
|
+
- ✅ Tempo API client implementation (12 tools)
|
|
441
|
+
- ✅ Workload utility tools implementation (2 tools)
|
|
442
|
+
- ✅ Buffer tools implementation (5 tools)
|
|
443
|
+
- ✅ MCP server implementation
|
|
444
|
+
- ✅ Basic testing (157 tests, 100% pass rate)
|
|
445
|
+
- ✅ Configuration system (.jicon.json with hierarchy)
|
|
446
|
+
- ✅ Permission system (full, readonly, custom modes)
|
|
447
|
+
- ✅ Virtual actions (jira_read, jira_all, confluence_read, tempo_all, etc.)
|
|
448
|
+
- ✅ Content buffering with pagination support
|
|
449
|
+
- ✅ Development and contributing guides
|
|
450
|
+
|
|
451
|
+
### Phase 2: Enhancement (In Progress)
|
|
452
|
+
- ✅ Advanced error handling (implemented)
|
|
453
|
+
- [ ] Rate limiting and caching
|
|
454
|
+
- [ ] Integration tests with mock servers
|
|
455
|
+
- ✅ Documentation examples (DEVELOPMENT.md added)
|
|
456
|
+
- [ ] CI/CD pipeline
|
|
457
|
+
- [ ] npm package publishing
|
|
458
|
+
|
|
459
|
+
### Phase 3: Advanced Features (Planned)
|
|
460
|
+
- [ ] Bulk operations
|
|
461
|
+
- [ ] Custom field templates
|
|
462
|
+
- [ ] Webhook support
|
|
463
|
+
- [ ] Multi-instance support
|
|
464
|
+
- [ ] CLI tool for configuration testing
|
|
465
|
+
- [ ] Performance optimizations
|
|
466
|
+
|
|
467
|
+
## Contributing
|
|
468
|
+
|
|
469
|
+
Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) for details on our code of conduct and the process for submitting pull requests.
|
|
470
|
+
|
|
260
471
|
## License
|
|
261
472
|
|
|
262
473
|
MIT License - see [LICENSE](LICENSE) file for details.
|
package/TOOL_LIST.md
CHANGED
|
@@ -5,12 +5,13 @@ This document provides a comprehensive reference of all available tools in the J
|
|
|
5
5
|
|
|
6
6
|
## Summary
|
|
7
7
|
|
|
8
|
-
**Total Tools**:
|
|
8
|
+
**Total Tools**: 42
|
|
9
9
|
- **Jira Tools**: 15
|
|
10
10
|
- **Confluence Tools**: 13
|
|
11
11
|
- **Tempo Tools**: 11
|
|
12
|
+
- **Buffer Tools**: 3
|
|
12
13
|
|
|
13
|
-
**Note**:
|
|
14
|
+
**Note**: Tools that return large content use in-memory buffering with pagination support. See the Buffer Tools section for content retrieval.
|
|
14
15
|
|
|
15
16
|
---
|
|
16
17
|
|
|
@@ -29,7 +30,7 @@ This document provides a comprehensive reference of all available tools in the J
|
|
|
29
30
|
---
|
|
30
31
|
|
|
31
32
|
### 2. jira_get_issue
|
|
32
|
-
**Description**: Get detailed information about a specific issue
|
|
33
|
+
**Description**: Get detailed information about a specific issue with buffered content pagination
|
|
33
34
|
**Use Cases**: View issue details, check status, read description and comments
|
|
34
35
|
|
|
35
36
|
| Parameter | Type | Required | Description |
|
|
@@ -37,6 +38,10 @@ This document provides a comprehensive reference of all available tools in the J
|
|
|
37
38
|
| issueKey | string | ✓ | Issue key (e.g., "PROJ-123") |
|
|
38
39
|
| fields | string[] | ✗ | Specific fields to return |
|
|
39
40
|
| expand | string[] | ✗ | Additional data (e.g., "changelog") |
|
|
41
|
+
| offset | number | ✗ | Character offset to start from (default: 0) |
|
|
42
|
+
| limit | number | ✗ | Maximum characters to return (default: 5000) |
|
|
43
|
+
|
|
44
|
+
**Response includes**: `bufferId`, `content`, `offset`, `limit`, `totalSize`, `hasMore`
|
|
40
45
|
|
|
41
46
|
---
|
|
42
47
|
|
|
@@ -209,18 +214,22 @@ This document provides a comprehensive reference of all available tools in the J
|
|
|
209
214
|
---
|
|
210
215
|
|
|
211
216
|
### 2. confluence_get_page
|
|
212
|
-
**Description**: Get a Confluence page by ID
|
|
217
|
+
**Description**: Get a Confluence page by ID with buffered content pagination
|
|
213
218
|
**Use Cases**: Read page content, check version
|
|
214
219
|
|
|
215
220
|
| Parameter | Type | Required | Description |
|
|
216
221
|
|-----------|------|----------|-------------|
|
|
217
222
|
| pageId | string | ✓ | Page ID |
|
|
218
223
|
| expand | string[] | ✗ | Additional data (e.g., "body.storage") |
|
|
224
|
+
| offset | number | ✗ | Character offset to start from (default: 0) |
|
|
225
|
+
| limit | number | ✗ | Maximum characters to return (default: 5000) |
|
|
226
|
+
|
|
227
|
+
**Response includes**: `bufferId`, `content`, `offset`, `limit`, `totalSize`, `hasMore`, page metadata
|
|
219
228
|
|
|
220
229
|
---
|
|
221
230
|
|
|
222
231
|
### 3. confluence_get_page_by_title
|
|
223
|
-
**Description**: Get a page by title and space
|
|
232
|
+
**Description**: Get a page by title and space with buffered content pagination
|
|
224
233
|
**Use Cases**: Find page by name, access documentation
|
|
225
234
|
|
|
226
235
|
| Parameter | Type | Required | Description |
|
|
@@ -228,6 +237,10 @@ This document provides a comprehensive reference of all available tools in the J
|
|
|
228
237
|
| spaceKey | string | ✓ | Space key |
|
|
229
238
|
| title | string | ✓ | Page title |
|
|
230
239
|
| expand | string[] | ✗ | Additional data to expand |
|
|
240
|
+
| offset | number | ✗ | Character offset to start from (default: 0) |
|
|
241
|
+
| limit | number | ✗ | Maximum characters to return (default: 5000) |
|
|
242
|
+
|
|
243
|
+
**Response includes**: `bufferId`, `content`, `offset`, `limit`, `totalSize`, `hasMore`, page metadata
|
|
231
244
|
|
|
232
245
|
---
|
|
233
246
|
|
|
@@ -436,3 +449,186 @@ AND lastModified >= now("-30d")
|
|
|
436
449
|
- **Meeting notes**: Recording decisions, action items
|
|
437
450
|
- **Collaboration**: Comments, feedback on pages
|
|
438
451
|
- **Content organization**: Space and page hierarchy management
|
|
452
|
+
|
|
453
|
+
---
|
|
454
|
+
|
|
455
|
+
## Tempo Tools (11)
|
|
456
|
+
|
|
457
|
+
### 1. tempo_get_worklogs
|
|
458
|
+
**Description**: Get time tracking worklogs with buffered content pagination
|
|
459
|
+
**Use Cases**: View time entries, generate reports, review team work
|
|
460
|
+
|
|
461
|
+
| Parameter | Type | Required | Description |
|
|
462
|
+
|-----------|------|----------|-------------|
|
|
463
|
+
| dateFrom | string | ✗ | Start date (YYYY-MM-DD) |
|
|
464
|
+
| dateTo | string | ✗ | End date (YYYY-MM-DD) |
|
|
465
|
+
| projectKey | string | ✗ | Filter by project key |
|
|
466
|
+
| issueKey | string | ✗ | Filter by issue key |
|
|
467
|
+
| workerKey | string | ✗ | Filter by worker username |
|
|
468
|
+
| offset | number | ✗ | Character offset to start from (default: 0) |
|
|
469
|
+
| limit | number | ✗ | Maximum characters to return (default: 5000) |
|
|
470
|
+
|
|
471
|
+
**Response includes**: `bufferId`, `content`, `offset`, `limit`, `totalSize`, `hasMore`, worklog metadata
|
|
472
|
+
|
|
473
|
+
---
|
|
474
|
+
|
|
475
|
+
### 2. tempo_get_worklog
|
|
476
|
+
**Description**: Get detailed information about a specific worklog entry
|
|
477
|
+
**Use Cases**: View worklog details, check time logged
|
|
478
|
+
|
|
479
|
+
| Parameter | Type | Required | Description |
|
|
480
|
+
|-----------|------|----------|-------------|
|
|
481
|
+
| worklogId | number | ✓ | Tempo worklog ID |
|
|
482
|
+
|
|
483
|
+
---
|
|
484
|
+
|
|
485
|
+
### 3. tempo_log_work
|
|
486
|
+
**Description**: Log time to a Jira issue
|
|
487
|
+
**Use Cases**: Record work time, track daily activities
|
|
488
|
+
|
|
489
|
+
| Parameter | Type | Required | Description |
|
|
490
|
+
|-----------|------|----------|-------------|
|
|
491
|
+
| issueKey | string | ✓ | Jira issue key (e.g., PROJ-123) |
|
|
492
|
+
| hours | number | ✓ | Hours to log (decimal, e.g., 2.5 = 2h 30m) |
|
|
493
|
+
| date | string | ✓ | Date to log work (YYYY-MM-DD) |
|
|
494
|
+
| description | string | ✗ | Work description |
|
|
495
|
+
| startTime | string | ✗ | Start time (HH:MM:SS) |
|
|
496
|
+
| remainingEstimateHours | number | ✗ | Remaining estimate in hours |
|
|
497
|
+
|
|
498
|
+
---
|
|
499
|
+
|
|
500
|
+
### 4. tempo_update_worklog
|
|
501
|
+
**Description**: Update an existing worklog entry
|
|
502
|
+
**Use Cases**: Correct time logged, update descriptions
|
|
503
|
+
|
|
504
|
+
| Parameter | Type | Required | Description |
|
|
505
|
+
|-----------|------|----------|-------------|
|
|
506
|
+
| worklogId | number | ✓ | Tempo worklog ID to update |
|
|
507
|
+
| hours | number | ✗ | New hours (decimal) |
|
|
508
|
+
| description | string | ✗ | New description |
|
|
509
|
+
| date | string | ✗ | New date (YYYY-MM-DD) |
|
|
510
|
+
|
|
511
|
+
---
|
|
512
|
+
|
|
513
|
+
### 5. tempo_delete_worklog
|
|
514
|
+
**Description**: Delete a worklog entry
|
|
515
|
+
**Use Cases**: Remove incorrect entries
|
|
516
|
+
|
|
517
|
+
| Parameter | Type | Required | Description |
|
|
518
|
+
|-----------|------|----------|-------------|
|
|
519
|
+
| worklogId | number | ✓ | Tempo worklog ID to delete |
|
|
520
|
+
|
|
521
|
+
---
|
|
522
|
+
|
|
523
|
+
### 6. tempo_get_accounts
|
|
524
|
+
**Description**: Get all Tempo accounts
|
|
525
|
+
**Use Cases**: List accounts for time tracking, find account keys
|
|
526
|
+
|
|
527
|
+
| Parameter | Type | Required | Description |
|
|
528
|
+
|-----------|------|----------|-------------|
|
|
529
|
+
| (none) | | | |
|
|
530
|
+
|
|
531
|
+
---
|
|
532
|
+
|
|
533
|
+
### 7. tempo_get_account
|
|
534
|
+
**Description**: Get detailed information about a Tempo account
|
|
535
|
+
**Use Cases**: View account details, check status
|
|
536
|
+
|
|
537
|
+
| Parameter | Type | Required | Description |
|
|
538
|
+
|-----------|------|----------|-------------|
|
|
539
|
+
| accountKey | string | ✓ | Account key |
|
|
540
|
+
|
|
541
|
+
---
|
|
542
|
+
|
|
543
|
+
### 8. tempo_get_teams
|
|
544
|
+
**Description**: Get all Tempo teams
|
|
545
|
+
**Use Cases**: List teams, find team IDs
|
|
546
|
+
|
|
547
|
+
| Parameter | Type | Required | Description |
|
|
548
|
+
|-----------|------|----------|-------------|
|
|
549
|
+
| (none) | | | |
|
|
550
|
+
|
|
551
|
+
---
|
|
552
|
+
|
|
553
|
+
### 9. tempo_get_team
|
|
554
|
+
**Description**: Get detailed information about a Tempo team
|
|
555
|
+
**Use Cases**: View team details, check membership
|
|
556
|
+
|
|
557
|
+
| Parameter | Type | Required | Description |
|
|
558
|
+
|-----------|------|----------|-------------|
|
|
559
|
+
| teamId | number | ✓ | Team ID |
|
|
560
|
+
|
|
561
|
+
---
|
|
562
|
+
|
|
563
|
+
### 10. tempo_get_team_worklogs
|
|
564
|
+
**Description**: Get all worklogs for a team with buffered content pagination
|
|
565
|
+
**Use Cases**: Team capacity reports, sprint reviews
|
|
566
|
+
|
|
567
|
+
| Parameter | Type | Required | Description |
|
|
568
|
+
|-----------|------|----------|-------------|
|
|
569
|
+
| teamId | number | ✓ | Team ID |
|
|
570
|
+
| dateFrom | string | ✓ | Start date (YYYY-MM-DD) |
|
|
571
|
+
| dateTo | string | ✓ | End date (YYYY-MM-DD) |
|
|
572
|
+
| offset | number | ✗ | Character offset to start from (default: 0) |
|
|
573
|
+
| limit | number | ✗ | Maximum characters to return (default: 5000) |
|
|
574
|
+
|
|
575
|
+
**Response includes**: `bufferId`, `content`, `offset`, `limit`, `totalSize`, `hasMore`, worklog metadata
|
|
576
|
+
|
|
577
|
+
---
|
|
578
|
+
|
|
579
|
+
### 11. tempo_get_user_info
|
|
580
|
+
**Description**: Get current user information (workerKey, accountId, displayName)
|
|
581
|
+
**Use Cases**: Get workerKey for filtering worklogs, verify authentication
|
|
582
|
+
|
|
583
|
+
| Parameter | Type | Required | Description |
|
|
584
|
+
|-----------|------|----------|-------------|
|
|
585
|
+
| (none) | | | |
|
|
586
|
+
|
|
587
|
+
---
|
|
588
|
+
|
|
589
|
+
## Buffer Tools (3)
|
|
590
|
+
|
|
591
|
+
Buffer tools are used to retrieve content from buffered responses. When tools like `confluence_get_page` or `jira_get_issue` return large content, they store the full data in an in-memory buffer and return a `bufferId` for pagination.
|
|
592
|
+
|
|
593
|
+
### 1. buffer_get_chunk
|
|
594
|
+
**Description**: Retrieve a chunk of buffered content by buffer ID
|
|
595
|
+
**Use Cases**: Get remaining content from large responses
|
|
596
|
+
|
|
597
|
+
| Parameter | Type | Required | Description |
|
|
598
|
+
|-----------|------|----------|-------------|
|
|
599
|
+
| bufferId | string | ✓ | Buffer ID from previous tool response |
|
|
600
|
+
| offset | number | ✗ | Character position to start from (default: 0) |
|
|
601
|
+
| limit | number | ✗ | Maximum characters to return (default: 5000) |
|
|
602
|
+
|
|
603
|
+
**Response includes**: `bufferId`, `content`, `offset`, `limit`, `totalSize`, `hasMore`, `metadata`
|
|
604
|
+
|
|
605
|
+
**Example workflow**:
|
|
606
|
+
```typescript
|
|
607
|
+
// 1. Call confluence_get_page -> returns bufferId, first chunk, hasMore: true
|
|
608
|
+
// 2. Call buffer_get_chunk(bufferId, offset: 5000) -> returns next chunk
|
|
609
|
+
// 3. Repeat until hasMore: false
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
---
|
|
613
|
+
|
|
614
|
+
### 2. buffer_list
|
|
615
|
+
**Description**: List all active buffers with their metadata
|
|
616
|
+
**Use Cases**: View active buffers, check expiration times
|
|
617
|
+
|
|
618
|
+
| Parameter | Type | Required | Description |
|
|
619
|
+
|-----------|------|----------|-------------|
|
|
620
|
+
| (none) | | | |
|
|
621
|
+
|
|
622
|
+
**Response includes**: `count`, list of buffers with `bufferId`, `totalSize`, `createdAt`, `expiresAt`, `metadata`
|
|
623
|
+
|
|
624
|
+
---
|
|
625
|
+
|
|
626
|
+
### 3. buffer_clear
|
|
627
|
+
**Description**: Clear a specific buffer or all buffers
|
|
628
|
+
**Use Cases**: Free up memory, clean up after processing
|
|
629
|
+
|
|
630
|
+
| Parameter | Type | Required | Description |
|
|
631
|
+
|-----------|------|----------|-------------|
|
|
632
|
+
| bufferId | string | ✗ | Buffer ID to clear, or omit to clear all buffers |
|
|
633
|
+
|
|
634
|
+
**Response includes**: `message`, `cleared` (count of buffers cleared)
|
package/dist/config/types.d.ts
CHANGED
|
@@ -28,11 +28,11 @@ export declare const PermissionsConfigSchema: z.ZodObject<{
|
|
|
28
28
|
whitelist: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
29
29
|
blacklist: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
30
30
|
}, "strip", z.ZodTypeAny, {
|
|
31
|
-
mode: "
|
|
31
|
+
mode: "custom" | "full" | "readonly";
|
|
32
32
|
whitelist: string[];
|
|
33
33
|
blacklist: string[];
|
|
34
34
|
}, {
|
|
35
|
-
mode?: "
|
|
35
|
+
mode?: "custom" | "full" | "readonly" | undefined;
|
|
36
36
|
whitelist?: string[] | undefined;
|
|
37
37
|
blacklist?: string[] | undefined;
|
|
38
38
|
}>;
|
|
@@ -75,17 +75,17 @@ export declare const ConfigSchema: z.ZodObject<{
|
|
|
75
75
|
whitelist: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
76
76
|
blacklist: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
77
77
|
}, "strip", z.ZodTypeAny, {
|
|
78
|
-
mode: "
|
|
78
|
+
mode: "custom" | "full" | "readonly";
|
|
79
79
|
whitelist: string[];
|
|
80
80
|
blacklist: string[];
|
|
81
81
|
}, {
|
|
82
|
-
mode?: "
|
|
82
|
+
mode?: "custom" | "full" | "readonly" | undefined;
|
|
83
83
|
whitelist?: string[] | undefined;
|
|
84
84
|
blacklist?: string[] | undefined;
|
|
85
85
|
}>>;
|
|
86
86
|
}, "strip", z.ZodTypeAny, {
|
|
87
87
|
permissions: {
|
|
88
|
-
mode: "
|
|
88
|
+
mode: "custom" | "full" | "readonly";
|
|
89
89
|
whitelist: string[];
|
|
90
90
|
blacklist: string[];
|
|
91
91
|
};
|
|
@@ -115,7 +115,7 @@ export declare const ConfigSchema: z.ZodObject<{
|
|
|
115
115
|
authType?: "basic" | "bearer" | undefined;
|
|
116
116
|
} | undefined;
|
|
117
117
|
permissions?: {
|
|
118
|
-
mode?: "
|
|
118
|
+
mode?: "custom" | "full" | "readonly" | undefined;
|
|
119
119
|
whitelist?: string[] | undefined;
|
|
120
120
|
blacklist?: string[] | undefined;
|
|
121
121
|
} | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,cAAc,gCAA8B,CAAC;AAC1D,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAGtD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAGhE,eAAO,MAAM,oBAAoB,2CAAyC,CAAC;AAC3E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAGlE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAIlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,cAAc,gCAA8B,CAAC;AAC1D,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAGtD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAGhE,eAAO,MAAM,oBAAoB,2CAAyC,CAAC;AAC3E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAGlE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAIlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAIxE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAGlD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB"}
|
package/dist/config/types.js
CHANGED
|
@@ -20,12 +20,13 @@ export const PermissionsConfigSchema = z.object({
|
|
|
20
20
|
blacklist: z.array(z.string()).default([]),
|
|
21
21
|
});
|
|
22
22
|
// Main configuration schema
|
|
23
|
+
// Default: custom mode with jira_read + confluence_read only (Tempo disabled by default)
|
|
23
24
|
export const ConfigSchema = z.object({
|
|
24
25
|
jira: ServiceConfigSchema.optional(),
|
|
25
26
|
confluence: ServiceConfigSchema.optional(),
|
|
26
27
|
permissions: PermissionsConfigSchema.default({
|
|
27
|
-
mode: "
|
|
28
|
-
whitelist: [],
|
|
28
|
+
mode: "custom",
|
|
29
|
+
whitelist: ["jira_read", "confluence_read"],
|
|
29
30
|
blacklist: [],
|
|
30
31
|
}),
|
|
31
32
|
});
|
package/dist/config/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,6BAA6B;AAC7B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAG1D,+BAA+B;AAC/B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAIH,yBAAyB;AACzB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AAG3E,mCAAmC;AACnC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC;IAC9C,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC3C,CAAC,CAAC;AAIH,4BAA4B;AAC5B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,IAAI,EAAE,mBAAmB,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,mBAAmB,CAAC,QAAQ,EAAE;IAC1C,WAAW,EAAE,uBAAuB,CAAC,OAAO,CAAC;QAC3C,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,6BAA6B;AAC7B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAG1D,+BAA+B;AAC/B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAIH,yBAAyB;AACzB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AAG3E,mCAAmC;AACnC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC;IAC9C,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC3C,CAAC,CAAC;AAIH,4BAA4B;AAC5B,yFAAyF;AACzF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,IAAI,EAAE,mBAAmB,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,mBAAmB,CAAC,QAAQ,EAAE;IAC1C,WAAW,EAAE,uBAAuB,CAAC,OAAO,CAAC;QAC3C,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC;QAC3C,SAAS,EAAE,EAAE;KACd,CAAC;CACH,CAAC,CAAC"}
|