@crypto512/jicon-mcp 2.3.0 → 2.3.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/PROMPT.md +10 -28
  2. package/README.md +35 -7
  3. package/TOOL_LIST.md +206 -136
  4. package/dist/config/constants.d.ts +17 -4
  5. package/dist/config/constants.d.ts.map +1 -1
  6. package/dist/config/constants.js +20 -5
  7. package/dist/config/constants.js.map +1 -1
  8. package/dist/config/loader.d.ts.map +1 -1
  9. package/dist/config/loader.js +6 -2
  10. package/dist/config/loader.js.map +1 -1
  11. package/dist/config/types.d.ts +19 -8
  12. package/dist/config/types.d.ts.map +1 -1
  13. package/dist/config/types.js +10 -8
  14. package/dist/config/types.js.map +1 -1
  15. package/dist/confluence/client.d.ts.map +1 -1
  16. package/dist/confluence/client.js +7 -2
  17. package/dist/confluence/client.js.map +1 -1
  18. package/dist/confluence/tools.d.ts +8 -13
  19. package/dist/confluence/tools.d.ts.map +1 -1
  20. package/dist/confluence/tools.js +19 -37
  21. package/dist/confluence/tools.js.map +1 -1
  22. package/dist/credentials/extractor.d.ts +14 -3
  23. package/dist/credentials/extractor.d.ts.map +1 -1
  24. package/dist/credentials/extractor.js +83 -13
  25. package/dist/credentials/extractor.js.map +1 -1
  26. package/dist/credentials/index.d.ts +1 -1
  27. package/dist/credentials/index.d.ts.map +1 -1
  28. package/dist/credentials/index.js.map +1 -1
  29. package/dist/credentials/types.d.ts +22 -0
  30. package/dist/credentials/types.d.ts.map +1 -1
  31. package/dist/credentials/types.js.map +1 -1
  32. package/dist/index.js +196 -184
  33. package/dist/index.js.map +1 -1
  34. package/dist/jira/activity-tools.d.ts +0 -4
  35. package/dist/jira/activity-tools.d.ts.map +1 -1
  36. package/dist/jira/activity-tools.js +42 -65
  37. package/dist/jira/activity-tools.js.map +1 -1
  38. package/dist/jira/client.d.ts +12 -0
  39. package/dist/jira/client.d.ts.map +1 -1
  40. package/dist/jira/client.js +30 -6
  41. package/dist/jira/client.js.map +1 -1
  42. package/dist/jira/formatters.d.ts +4 -1
  43. package/dist/jira/formatters.d.ts.map +1 -1
  44. package/dist/jira/formatters.js +9 -6
  45. package/dist/jira/formatters.js.map +1 -1
  46. package/dist/jira/tools.d.ts +48 -14
  47. package/dist/jira/tools.d.ts.map +1 -1
  48. package/dist/jira/tools.js +174 -101
  49. package/dist/jira/tools.js.map +1 -1
  50. package/dist/permissions/filter.d.ts.map +1 -1
  51. package/dist/permissions/filter.js +8 -4
  52. package/dist/permissions/filter.js.map +1 -1
  53. package/dist/permissions/tool-registry.d.ts +15 -13
  54. package/dist/permissions/tool-registry.d.ts.map +1 -1
  55. package/dist/permissions/tool-registry.js +16 -8
  56. package/dist/permissions/tool-registry.js.map +1 -1
  57. package/dist/session/context.d.ts +3 -3
  58. package/dist/session/context.d.ts.map +1 -1
  59. package/dist/session/manager.d.ts +58 -27
  60. package/dist/session/manager.d.ts.map +1 -1
  61. package/dist/session/manager.js +177 -79
  62. package/dist/session/manager.js.map +1 -1
  63. package/dist/tempo/client.d.ts.map +1 -1
  64. package/dist/tempo/client.js +3 -1
  65. package/dist/tempo/client.js.map +1 -1
  66. package/dist/tempo/tools.d.ts +4 -4
  67. package/dist/tempo/tools.d.ts.map +1 -1
  68. package/dist/tempo/tools.js +15 -0
  69. package/dist/tempo/tools.js.map +1 -1
  70. package/dist/transport/http.d.ts +17 -18
  71. package/dist/transport/http.d.ts.map +1 -1
  72. package/dist/transport/http.js +135 -120
  73. package/dist/transport/http.js.map +1 -1
  74. package/dist/transport/index.d.ts +7 -2
  75. package/dist/transport/index.d.ts.map +1 -1
  76. package/dist/transport/index.js +10 -4
  77. package/dist/transport/index.js.map +1 -1
  78. package/dist/transport/types.d.ts +0 -2
  79. package/dist/transport/types.d.ts.map +1 -1
  80. package/dist/transport/types.js.map +1 -1
  81. package/dist/utils/buffer-tools.d.ts +2 -2
  82. package/dist/utils/buffer-tools.d.ts.map +1 -1
  83. package/dist/utils/buffer-tools.js +41 -19
  84. package/dist/utils/buffer-tools.js.map +1 -1
  85. package/dist/utils/http-client.d.ts.map +1 -1
  86. package/dist/utils/http-client.js +99 -2
  87. package/dist/utils/http-client.js.map +1 -1
  88. package/dist/utils/jicon-help.d.ts +1 -1
  89. package/dist/utils/jicon-help.d.ts.map +1 -1
  90. package/dist/utils/jicon-help.js +126 -336
  91. package/dist/utils/jicon-help.js.map +1 -1
  92. package/dist/utils/logger.d.ts +43 -0
  93. package/dist/utils/logger.d.ts.map +1 -0
  94. package/dist/utils/logger.js +102 -0
  95. package/dist/utils/logger.js.map +1 -0
  96. package/dist/utils/plantuml/tools.js +2 -2
  97. package/dist/utils/plantuml/tools.js.map +1 -1
  98. package/dist/utils/response-formatter.d.ts +8 -0
  99. package/dist/utils/response-formatter.d.ts.map +1 -1
  100. package/dist/utils/response-formatter.js +65 -7
  101. package/dist/utils/response-formatter.js.map +1 -1
  102. package/dist/utils/schemas/confluence.js +11 -11
  103. package/dist/utils/schemas/confluence.js.map +1 -1
  104. package/dist/utils/schemas/index.d.ts +11 -0
  105. package/dist/utils/schemas/index.d.ts.map +1 -1
  106. package/dist/utils/schemas/index.js.map +1 -1
  107. package/dist/utils/schemas/jira.d.ts +1 -1
  108. package/dist/utils/schemas/jira.d.ts.map +1 -1
  109. package/dist/utils/schemas/jira.js +37 -35
  110. package/dist/utils/schemas/jira.js.map +1 -1
  111. package/dist/utils/schemas/tempo.js +13 -13
  112. package/dist/utils/schemas/tempo.js.map +1 -1
  113. package/dist/utils/whoami-tools.d.ts +17 -0
  114. package/dist/utils/whoami-tools.d.ts.map +1 -0
  115. package/dist/utils/whoami-tools.js +90 -0
  116. package/dist/utils/whoami-tools.js.map +1 -0
  117. package/package.json +3 -3
  118. package/dist/credentials/client-factory.d.ts +0 -64
  119. package/dist/credentials/client-factory.d.ts.map +0 -1
  120. package/dist/credentials/client-factory.js +0 -110
  121. package/dist/credentials/client-factory.js.map +0 -1
  122. package/dist/credentials/context.d.ts +0 -25
  123. package/dist/credentials/context.d.ts.map +0 -1
  124. package/dist/credentials/context.js +0 -35
  125. package/dist/credentials/context.js.map +0 -1
  126. package/dist/utils/buffer-pipeline/index.d.ts +0 -30
  127. package/dist/utils/buffer-pipeline/index.d.ts.map +0 -1
  128. package/dist/utils/buffer-pipeline/index.js +0 -317
  129. package/dist/utils/buffer-pipeline/index.js.map +0 -1
  130. package/dist/utils/buffer-pipeline/output/csv.d.ts +0 -20
  131. package/dist/utils/buffer-pipeline/output/csv.d.ts.map +0 -1
  132. package/dist/utils/buffer-pipeline/output/csv.js +0 -117
  133. package/dist/utils/buffer-pipeline/output/csv.js.map +0 -1
  134. package/dist/utils/buffer-pipeline/output/json.d.ts +0 -16
  135. package/dist/utils/buffer-pipeline/output/json.d.ts.map +0 -1
  136. package/dist/utils/buffer-pipeline/output/json.js +0 -48
  137. package/dist/utils/buffer-pipeline/output/json.js.map +0 -1
  138. package/dist/utils/buffer-pipeline/output/markdown.d.ts +0 -15
  139. package/dist/utils/buffer-pipeline/output/markdown.d.ts.map +0 -1
  140. package/dist/utils/buffer-pipeline/output/markdown.js +0 -105
  141. package/dist/utils/buffer-pipeline/output/markdown.js.map +0 -1
  142. package/dist/utils/buffer-pipeline/output/xhtml-list.d.ts +0 -16
  143. package/dist/utils/buffer-pipeline/output/xhtml-list.d.ts.map +0 -1
  144. package/dist/utils/buffer-pipeline/output/xhtml-list.js +0 -81
  145. package/dist/utils/buffer-pipeline/output/xhtml-list.js.map +0 -1
  146. package/dist/utils/buffer-pipeline/output/xhtml-table.d.ts +0 -15
  147. package/dist/utils/buffer-pipeline/output/xhtml-table.d.ts.map +0 -1
  148. package/dist/utils/buffer-pipeline/output/xhtml-table.js +0 -176
  149. package/dist/utils/buffer-pipeline/output/xhtml-table.js.map +0 -1
  150. package/dist/utils/buffer-pipeline/schema.d.ts +0 -1878
  151. package/dist/utils/buffer-pipeline/schema.d.ts.map +0 -1
  152. package/dist/utils/buffer-pipeline/schema.js +0 -168
  153. package/dist/utils/buffer-pipeline/schema.js.map +0 -1
  154. package/dist/utils/buffer-pipeline/stages/filter.d.ts +0 -32
  155. package/dist/utils/buffer-pipeline/stages/filter.d.ts.map +0 -1
  156. package/dist/utils/buffer-pipeline/stages/filter.js +0 -208
  157. package/dist/utils/buffer-pipeline/stages/filter.js.map +0 -1
  158. package/dist/utils/buffer-pipeline/stages/format.d.ts +0 -45
  159. package/dist/utils/buffer-pipeline/stages/format.d.ts.map +0 -1
  160. package/dist/utils/buffer-pipeline/stages/format.js +0 -160
  161. package/dist/utils/buffer-pipeline/stages/format.js.map +0 -1
  162. package/dist/utils/buffer-pipeline/stages/group-by.d.ts +0 -25
  163. package/dist/utils/buffer-pipeline/stages/group-by.d.ts.map +0 -1
  164. package/dist/utils/buffer-pipeline/stages/group-by.js +0 -190
  165. package/dist/utils/buffer-pipeline/stages/group-by.js.map +0 -1
  166. package/dist/utils/buffer-pipeline/stages/select.d.ts +0 -54
  167. package/dist/utils/buffer-pipeline/stages/select.d.ts.map +0 -1
  168. package/dist/utils/buffer-pipeline/stages/select.js +0 -228
  169. package/dist/utils/buffer-pipeline/stages/select.js.map +0 -1
  170. package/dist/utils/buffer-pipeline/stages/sort.d.ts +0 -20
  171. package/dist/utils/buffer-pipeline/stages/sort.d.ts.map +0 -1
  172. package/dist/utils/buffer-pipeline/stages/sort.js +0 -96
  173. package/dist/utils/buffer-pipeline/stages/sort.js.map +0 -1
  174. package/dist/utils/buffer-pipeline/types.d.ts +0 -277
  175. package/dist/utils/buffer-pipeline/types.d.ts.map +0 -1
  176. package/dist/utils/buffer-pipeline/types.js +0 -8
  177. package/dist/utils/buffer-pipeline/types.js.map +0 -1
  178. package/dist/utils/plantuml/docker-manager.d.ts +0 -37
  179. package/dist/utils/plantuml/docker-manager.d.ts.map +0 -1
  180. package/dist/utils/plantuml/docker-manager.js +0 -284
  181. package/dist/utils/plantuml/docker-manager.js.map +0 -1
@@ -11,7 +11,7 @@ const TOPICS = ["jql", "cql", "storage", "plantuml", "buffers", "analysis"];
11
11
  // Default workflow guide (shown when no topic specified)
12
12
  const WORKFLOW_GUIDE = `# Jicon Quick Reference
13
13
 
14
- TOOLS: jira(26) confluence(21) tempo(13) buffer(12) plantuml(3) url(2) date(1) help(1)
14
+ TOOLS: jira, confluence, tempo, buffer, workload, plantuml, url, date, help, whoami
15
15
 
16
16
  ## Decision Tree - Which Topic?
17
17
 
@@ -30,6 +30,8 @@ TOOLS: jira(26) confluence(21) tempo(13) buffer(12) plantuml(3) url(2) date(1) h
30
30
  | Search Confluence | \`help(topic="cql")\` |
31
31
  | Search Jira | \`jira_get_issue_types()\` then \`help(topic="jql")\` |
32
32
  | Non-English Jira fields | \`jira_get_fields(search="epic")\` → use cf[ID] syntax |
33
+ | **Find user for JQL query** | \`jira_search_users(query="name")\` → get username for assignee/reporter JQL |
34
+ | **Issues worked on in period** | \`tempo_get_worklogs(workerKey, dateFrom, dateTo)\` ← NOT JQL created/updated |
33
35
  | Log/get time | \`tempo_get_user_info()\` first |
34
36
  | **Create table for Confluence** | \`buffer_transform(..., code="return toTable(issues,{columns:[...]})")\` → XHTML |
35
37
  | **Create table to show user** | \`buffer_transform(..., code="return toMarkdownTable(issues,{columns:[...]})")\` → Markdown |
@@ -130,7 +132,7 @@ const JQL_HELP = `# JQL Syntax Guide
130
132
 
131
133
  Before writing JQL with type/status names:
132
134
  1. Use \`jira_get_issue_types()\` to discover actual type names (e.g., "Epic" vs "Épopée")
133
- 2. Use \`jira_get_fields()\` to discover field names (e.g., "Epic Link" vs "Lien d'épopée")
135
+ 2. Use \`jira_get_fields(search="epic")\` to discover field names (e.g., "Epic Link" vs "Lien d'épopée")
134
136
  3. Use \`cf[ID]\` syntax for language-independent field queries
135
137
 
136
138
  The examples below use English names. Replace with your instance's actual values.
@@ -156,27 +158,32 @@ The examples below use English names. Replace with your instance's actual values
156
158
  4. Recently updated issues (last 7 days):
157
159
  updated >= startOfDay(-7)
158
160
 
159
- 5. Issues by assignee:
161
+ 5. Issues by assignee (current user):
160
162
  assignee = currentUser()
161
163
 
162
- 6. Text search in summary/description:
164
+ 6. Issues by a specific person (find their username first):
165
+ jira_search_users(query="Fabien") → returns username (e.g., "fthuillier")
166
+ assignee = "fthuillier"
167
+
168
+ 7. Text search in summary/description:
163
169
  summary~"login" OR description~"login"
164
170
 
165
- 7. Date range:
171
+ 8. Date range:
166
172
  created >= "2025-01-01" AND created <= "2025-01-31"
167
173
 
168
- 8. Multiple projects:
174
+ 9. Multiple projects:
169
175
  project IN (PROJ1, PROJ2, PROJ3)
170
176
 
171
- 9. Exclude resolved:
172
- resolution = Unresolved
177
+ 10. Exclude resolved (language-independent):
178
+ statusCategory != Done
173
179
 
174
- 10. Issues with specific label:
180
+ 11. Issues with specific label:
175
181
  labels = "urgent" AND status != Done
176
182
 
177
183
  ## Tips
178
184
  - Use jira_get_issue_types first to discover type names for your instance
179
185
  - Use jira_get_fields to discover field names in your language
186
+ - Use jira_search_users to find a person's username for assignee/reporter queries
180
187
  - Date functions: startOfDay(), startOfWeek(), startOfMonth(), now()
181
188
  - Relative dates: startOfDay(-7) = 7 days ago
182
189
  - Always quote field values that contain spaces
@@ -212,7 +219,32 @@ The \`clauseNames\` array shows all valid JQL names for a field.
212
219
  ## Date Handling Tips
213
220
  - "Last week" in business context = previous Mon-Fri (e.g., Dec 8-12)
214
221
  - "Rolling 7 days" = use startOfDay(-7)
215
- - For exact date ranges, use explicit dates: updated >= "2025-12-08" AND updated <= "2025-12-12"`;
222
+ - For exact date ranges, use explicit dates: updated >= "2025-12-08" AND updated <= "2025-12-12"
223
+
224
+ ## Language-Independent Best Practices
225
+
226
+ **Always use these approaches for reliable JQL across all Jira instances:**
227
+ - Use \`statusCategory != Done\` instead of \`resolution = Unresolved\`
228
+ - Use \`cf[ID]\` syntax for custom fields instead of localized names
229
+ - Tools like \`jira_list_epic_children\` automatically try multiple patterns
230
+
231
+ ## Troubleshooting Common JQL Errors
232
+
233
+ ### "Le champ 'X' n'existe pas" / "Field 'X' does not exist"
234
+ **Cause**: Field name is localized or doesn't exist on this instance
235
+ **Solution**:
236
+ 1. Run \`jira_get_fields(search="part_of_name")\` to find the field
237
+ 2. Use the \`clauseNames\` value or \`cf[ID]\` syntax
238
+
239
+ ### Query returns 0 results but issues exist
240
+ **Cause**: Type name mismatch (e.g., searching for "Epic" when locale uses "Épopée")
241
+ **Solution**:
242
+ 1. Run \`jira_get_issue_types()\` to see actual type names
243
+ 2. Use the exact name from the response
244
+
245
+ ### "resolution = Unresolved" not working in non-English instance
246
+ **Cause**: "Unresolved" may not work consistently across all locales
247
+ **Solution**: Use \`statusCategory != Done\` (works in any language)`;
216
248
  // CQL syntax guide
217
249
  const CQL_HELP = `# CQL Syntax Guide
218
250
 
@@ -233,6 +265,8 @@ CQL is largely language-independent:
233
265
  ## Critical Warnings
234
266
  WARNING: Do NOT use 'content~' or 'body~' - they're invalid! Use 'text~' instead.
235
267
 
268
+ WARNING: Do NOT use 'lastmodifiedby' or 'lastmodifier' - they don't exist! Use 'contributor=' instead.
269
+
236
270
  WARNING: WRONG: text~("term1" OR "term2") - Cannot use OR inside the operator
237
271
  OK: (text~"term1" OR text~"term2") - Each term needs its own text~ operator
238
272
 
@@ -243,35 +277,51 @@ OK: (text~"term1" OR text~"term2") - Each term needs its own text~ operator
243
277
  2. Pages created by a person:
244
278
  type=page AND creator="username"
245
279
 
246
- 3. Pages with specific label:
280
+ 3. Pages I created OR edited:
281
+ contributor=currentUser() ORDER BY lastmodified DESC
282
+
283
+ 4. Pages with specific label:
247
284
  type=page AND label="meeting-notes"
248
285
 
249
- 4. Pages in space modified recently:
286
+ 5. Pages in space modified recently:
250
287
  space=DOCS AND lastmodified >= now("-30d") ORDER BY lastmodified DESC
251
288
 
252
- 5. Text search in a space:
289
+ 6. Text search in a space:
253
290
  text~"API" AND space=DOCS AND type=page
254
291
 
255
- 6. Date range:
292
+ 7. Date range:
256
293
  lastmodified >= "2025-01-01" AND lastmodified <= "2025-01-31"
257
294
 
258
- 7. Multiple spaces:
295
+ 8. Multiple spaces:
259
296
  space IN (DOCS, PROJ, WIKI)
260
297
 
261
- 8. Pages by title pattern:
298
+ 9. Pages by title pattern:
262
299
  type=page AND title~"Sprint Review" ORDER BY created DESC
263
300
 
264
- 9. Find by creator name:
265
- creator.fullname~"Alex Morgan"
301
+ 10. Find by creator name:
302
+ creator.fullname~"Alex Morgan"
266
303
 
267
- 10. Pages created this week:
304
+ 11. Pages created this week:
268
305
  type=page AND created >= startOfWeek()
269
306
 
270
307
  ## Tips
271
308
  - Use space KEY (e.g., 'DOCS') not space name (e.g., 'Documentation')
272
309
  - Date functions: now(), startOfDay(), startOfWeek(), startOfMonth()
273
310
  - Relative dates: now("-7d") = 7 days ago
274
- - Results are always buffered - use buffer_get_items to read, buffer_grep to search`;
311
+ - Results are always buffered - use buffer_get_items to read, buffer_grep to search
312
+
313
+ ## User Fields
314
+
315
+ | Field | Meaning |
316
+ |-------|---------|
317
+ | creator | Original author only |
318
+ | contributor | Created OR edited |
319
+
320
+ ## Invalid Fields
321
+
322
+ These do NOT exist in CQL:
323
+ - lastmodifiedby, lastmodifier → use contributor=
324
+ - content~, body~ → use text~`;
275
325
  // Confluence storage format (XHTML syntax only)
276
326
  const STORAGE_FORMAT_HELP = `# Confluence Storage Format (XHTML)
277
327
 
@@ -688,152 +738,40 @@ buffer_edit(bufferId, old_string="foo", new_string="bar", replace_all=true)
688
738
  buffer_edit(bufferId, append=true, content="text to add at end")
689
739
  \`\`\`
690
740
 
691
- ## JavaScript Sandbox (buffer_transform) - RECOMMENDED
741
+ ## JavaScript Sandbox (buffer_transform)
692
742
 
693
- Transform JSON buffers with JavaScript code in a secure sandbox. Write custom transformation logic!
694
-
695
- **Benefits:**
696
- - Full JavaScript expressiveness (filter, map, reduce, etc.)
697
- - Multiple input buffers in single transformation
698
- - Built-in helpers for common operations
699
- - XHTML table/list generation with auto-linking and styling
700
-
701
- **Schema Types:**
702
- All JSON buffers from API tools have a schemaType (e.g., "jira_issue", "tempo_worklog").
703
- Fields are flattened for easy access. Use \`buffer_get_schema(bufferId)\` to see available fields with samples.
743
+ Transform JSON buffers with JavaScript code in a secure sandbox.
704
744
 
705
745
  **Basic workflow:**
706
746
  \`\`\`
707
- 1. jira_search_issues(jql="...")
708
- { bufferId, schemaType: "jira_issue", fields: ["key","summary","status",...] }
709
-
710
- 2. buffer_get_schema(bufferId) # Optional: see all fields with samples
711
- → { fields: { key: {..., sample: "PROJ-1"}, status: {..., sample: "Open"} } }
712
-
713
- 3. buffer_transform(
714
- inputs: { issues: bufferId },
715
- code: \`
716
- const open = issues.filter(i => i.status !== 'Done');
717
- return toTable(open, {
718
- title: 'Open Issues',
719
- columns: [
720
- { field: 'key', header: 'Issue', link: { type: 'jira' } },
721
- { field: 'summary', header: 'Summary' },
722
- { field: 'priority', header: 'Priority' }
723
- ]
724
- });
725
- \`
726
- )
727
- → { bufferId: "buf_new", contentType: "xhtml" }
728
-
729
- 4. Insert into Confluence page or use directly
730
- \`\`\`
731
-
732
- **Built-in helpers (available as globals in sandbox):**
733
- \`\`\`javascript
734
- // Aggregation
735
- groupBy(array, keyOrFn) // → { key: items[] }
736
- sum(array, field?) // → number
737
- avg(array, field?) // → number
738
- min(array, field?) // → value
739
- max(array, field?) // → value
740
- count(array) // → number
741
- unique(array, field?) // → unique values[]
742
-
743
- // Object access
744
- get(obj, 'path.to.field') // → value (dot notation)
745
- pick(obj, ['a', 'b']) // → subset object
746
- omit(obj, ['a']) // → object without keys
747
-
748
- // Date utilities
749
- parseDate(string) // → timestamp (ms)
750
- formatDate(ts, fmt?) // → string (fmt: 'date', 'time', 'datetime', 'iso')
751
- daysBetween(d1, d2) // → number
752
-
753
- // Context (for link generation)
754
- JIRA_URL // → string | undefined
755
- CONFLUENCE_URL // → string | undefined
747
+ 1. jira_search_issues(jql="...") → { bufferId }
748
+ 2. buffer_get_schema(bufferId) # See available fields with samples
749
+ 3. buffer_transform(inputs: { issues: bufferId }, code: "return toTable(...)")
750
+ 4. confluence_draft_create(bufferId) or display to user
756
751
  \`\`\`
757
752
 
758
- **OUTPUT FORMAT - CHOOSE BASED ON DESTINATION:**
753
+ **OUTPUT FORMAT - CHOOSE BY DESTINATION:**
759
754
 
760
- | Destination | Formatters | Result | Next Step |
761
- |-------------|-----------|--------|-----------|
762
- | **Confluence page** | toTable(), toList() | XHTML buffer | confluence_draft_create(bufferId) |
763
- | **Display to user** | toMarkdownTable(), toMarkdownList() | Markdown buffer | buffer_get_items(bufferId, keys=['content']) |
755
+ | Destination | Formatters | Result |
756
+ |-------------|-----------|--------|
757
+ | **Confluence page** | toTable(), toList() | XHTML |
758
+ | **Display to user** | toMarkdownTable(), toMarkdownList() | Markdown |
764
759
 
765
- ⚠️ **Common mistake**: Using toTable() when you want to display results to user. Use toMarkdownTable() instead!
760
+ ⚠️ **Common mistake**: Using toTable() when you want to display to user. Use toMarkdownTable() instead!
766
761
 
767
- **toTable() / toMarkdownTable() - Table Generator:**
768
- \`\`\`javascript
769
- // For Confluence page:
770
- toTable(array, config)
771
-
772
- // For user display (same config!):
773
- toMarkdownTable(array, config)
774
-
775
- // Config options:
776
- {
777
- title: 'Table Title', // Optional title above table
778
- showRowNumbers: true, // Add # column
779
- tableClass: 'confluenceTable',// CSS class (XHTML only)
780
- columns: [
781
- { field: 'key', header: 'Issue', link: { type: 'jira' } },
782
- { field: 'summary', header: 'Summary', width: '40%' },
783
- { field: 'priority', header: 'Priority', align: 'center' } // Flat field!
784
- ],
785
- format: [ // Conditional styling
786
- {
787
- condition: { field: 'priority', operator: 'eq', value: 'Blocker' },
788
- style: { color: '#d04437', bold: true, icon: '🔴' },
789
- fields: ['priority'] // Apply to specific fields (or omit for row)
790
- }
791
- ]
792
- }
793
- \`\`\`
762
+ **Built-in helpers:** groupBy, sum, avg, min, max, count, unique, get, pick, omit, parseDate, formatDate, daysBetween, JIRA_URL, CONFLUENCE_URL
794
763
 
795
- **toList() / toMarkdownList() - List Generator:**
796
- \`\`\`javascript
797
- // For Confluence page:
798
- toList(array, config)
799
-
800
- // For user display (same config!):
801
- toMarkdownList(array, config)
802
-
803
- // Config options:
804
- {
805
- title: 'List Title',
806
- style: 'bullet', // 'bullet', 'numbered', 'none' (or 'task' for Markdown)
807
- template: '{{key}}: {{summary}} ({{assignee.displayName}})'
808
- }
809
- \`\`\`
810
-
811
- **Link types:** jira (auto-links to issue), confluence (to page ID), custom (template with {{field}})
812
-
813
- **Format condition operators:** eq, ne, gt, lt, gte, lte, contains, startsWith, endsWith, in, notIn, exists, notExists, regex, empty, notEmpty
814
-
815
- **Example - Statistics by assignee:**
764
+ **Example - Table for user display:**
816
765
  \`\`\`javascript
817
766
  buffer_transform(
818
767
  inputs: { issues: bufferId },
819
768
  code: \`
820
- const open = issues.filter(i => i.status.name !== 'Done');
821
- const byAssignee = groupBy(open, 'assignee.displayName');
822
-
823
- const stats = Object.entries(byAssignee).map(([name, items]) => ({
824
- assignee: name,
825
- total: items.length,
826
- issues: items.map(i => i.key).join(', ')
827
- }));
828
-
829
- stats.sort((a, b) => b.total - a.total);
830
-
831
- return toTable(stats, {
832
- title: 'Work Distribution',
769
+ const open = issues.filter(i => i.status !== 'Done');
770
+ return toMarkdownTable(open, {
833
771
  columns: [
834
- { field: 'assignee', header: 'Assignee' },
835
- { field: 'total', header: 'Open Issues', align: 'right' },
836
- { field: 'issues', header: 'Issue Keys' }
772
+ { field: 'key', header: 'Issue', link: { type: 'jira' } },
773
+ { field: 'summary', header: 'Summary' },
774
+ { field: 'assignee', header: 'Assignee' }
837
775
  ]
838
776
  });
839
777
  \`
@@ -841,16 +779,16 @@ buffer_transform(
841
779
  \`\`\`
842
780
 
843
781
  **When to use buffer_transform:**
844
- - Generating tables/lists for Confluence use toTable(), toList()
845
- - Generating tables/lists to show user → use toMarkdownTable(), toMarkdownList()
782
+ - Generating tables/lists for Confluence or user display
846
783
  - Custom filtering and transformation logic
847
784
  - Aggregating statistics across multiple buffers
848
- - Complex data manipulation (joins, pivots, etc.)
849
785
 
850
786
  **When NOT to use buffer_transform:**
851
787
  - When you need LLM judgment on each item (use buffer_get_items)
852
788
  - When decisions require analyzing content semantically
853
789
 
790
+ **For formatter details:** See TOOL_LIST.md or tool description for toTable/toList config options.
791
+
854
792
  ## Decision Forks (Choose Your Path)
855
793
 
856
794
  After jira_search_issues/tempo_get_worklogs returns a bufferId, you have OPTIONS:
@@ -958,188 +896,18 @@ These **intelligent entry points** return pre-processed data **directly to the L
958
896
  - **Regular tools** → Buffer data → Use buffer_transform for transformation → Token-efficient
959
897
  - **Analysis tools** → Return markdown directly to LLM → Enable AI insight and synthesis
960
898
 
961
- ## When to Use Analysis Tools
962
-
963
- | Task | Tool | Example Query |
964
- |------|------|---------------|
965
- | What happened on project X? | \`jira_get_activity_digest\` | "What happened on PROJ this week?" |
966
- | Any blockers in discussions? | \`jira_get_recent_comments\` | "Are there blockers mentioned in recent comments?" |
967
- | Track field changes | \`jira_get_changelog\` | "What issues had priority escalations?" |
968
- | Deep Epic analysis | \`jira_analyze_epic\` | "Analyze Epic PROJ-100 for risks and progress" |
969
- | Sprint progress & risks | \`jira_analyze_sprint\` | "How is Sprint 42 progressing?" |
970
- | Quick Epic status | \`jira_epic_summary\` | "Quick status of Epic PROJ-100" |
971
- | List Epic children | \`jira_list_epic_children\` | "List open Stories in PROJ-100" |
972
- | Top issues by workload | \`tempo_get_top_worklogs\` | "Which issues had most work last week?" |
973
-
974
- ## Tool Details
975
-
976
- ### jira_get_activity_digest
977
- Fetches comments, status/priority/assignee changes across issues.
978
-
979
- \`\`\`
980
- jira_get_activity_digest(
981
- projectKey="ACME", // or jql="..." or issueKeys=[...]
982
- since="7d", // "1d", "7d", "30d", or ISO date
983
- includeComments=true,
984
- includeStatusChanges=true,
985
- includePriorityChanges=true,
986
- includeAssigneeChanges=true
987
- )
988
- \`\`\`
989
-
990
- **Returns**: Markdown with activities grouped by issue + summary statistics:
991
- - Issues with activity count
992
- - Status changes (with "to Done" breakdown)
993
- - Priority escalations
994
- - New comments count
995
-
996
- ### jira_get_recent_comments
997
- Aggregates comments across multiple issues for discussion analysis.
998
-
999
- \`\`\`
1000
- jira_get_recent_comments(
1001
- projectKey="ACME",
1002
- since="7d",
1003
- authorKey="john", // optional: filter by author
1004
- maxComments=30
1005
- )
1006
- \`\`\`
1007
-
1008
- **Returns**: Markdown with comments grouped by issue + context (status).
1009
-
1010
- ### jira_get_changelog
1011
- Tracks field changes across issues.
1012
-
1013
- \`\`\`
1014
- jira_get_changelog(
1015
- projectKey="ACME",
1016
- since="7d",
1017
- fields=["status", "priority", "assignee", "resolution"],
1018
- maxChanges=50
1019
- )
1020
- \`\`\`
1021
-
1022
- **Returns**: Markdown with changes grouped by issue + field breakdown.
1023
-
1024
- ### jira_analyze_epic
1025
- Comprehensive Epic/Feature analysis for deep insights.
1026
-
1027
- \`\`\`
1028
- jira_analyze_epic(
1029
- issueKey="PROJ-100",
1030
- includeComments=true,
1031
- commentDays=14,
1032
- maxComments=5
1033
- )
1034
- \`\`\`
1035
-
1036
- **Returns**: Comprehensive markdown analysis including:
1037
- - **Hierarchy**: Epic → Stories → Subtasks with completion %
1038
- - **Time Metrics**: Spent vs estimated, burn rate, overrun warnings
1039
- - **Progress Indicators**: Velocity, in-flight issues
1040
- - **Architecture Context**: Components, labels
1041
- - **Linked Resources**: Confluence pages, related issues
1042
- - **Recent Discussions**: Technical comments for context
1043
-
1044
- **Example output snippet:**
1045
- \`\`\`markdown
1046
- ## Issue Hierarchy
1047
- | Type | Total | Done | In Progress | To Do | Completion |
1048
- |------|-------|------|-------------|-------|------------|
1049
- | Story | 5 | 3 | 1 | 1 | 60% |
1050
- | Sub-task | 12 | 8 | 2 | 2 | 67% |
1051
-
1052
- ## Time Metrics
1053
- - Time Spent: 2w 3d
1054
- - Original Estimate: 3w
1055
- - Burn Rate: 77% of estimate consumed
1056
- - ⚠️ Overrun: 2d over estimate
1057
-
1058
- ## Analysis Summary
1059
- This Epic contains **17 issues** with **65% completion**.
1060
- ⚠️ **77% of time used but only 65% complete** - at risk of overrun.
1061
- \`\`\`
1062
-
1063
- ### jira_analyze_sprint
1064
- Comprehensive Sprint analysis for progress, risks, and team distribution.
1065
-
1066
- \`\`\`
1067
- jira_analyze_sprint(
1068
- sprintId=123, // from jira_get_sprints(boardId)
1069
- includeComments=true,
1070
- commentDays=7,
1071
- includeRisks=true
1072
- )
1073
- \`\`\`
1074
-
1075
- **How to find sprintId**: Call \`jira_get_sprints(boardId)\` first. BoardId can be found in Jira URLs like \`/secure/RapidBoard.jspa?rapidView=123\`.
1076
-
1077
- **Returns**: Comprehensive markdown analysis including:
1078
- - **Sprint Metadata**: Dates, duration, days remaining
1079
- - **Progress**: Completion %, status breakdown (Done/In Progress/To Do)
1080
- - **Issue Breakdown**: By type and status
1081
- - **Time Metrics**: Estimated vs spent vs remaining, burn rate
1082
- - **Team Distribution**: Who's working on what
1083
- - **Risk Indicators**: Stale issues, blocked, high-priority unstarted
1084
- - **Recent Discussions**: Comments from team
1085
-
1086
- **Example output snippet:**
1087
- \`\`\`markdown
1088
- # Sprint Analysis: Sprint 42
1089
-
1090
- **State**: Active
1091
- **Period**: Jan 20 - Feb 3 (14 days)
1092
- **Progress**: Day 10 of 14 (4 days remaining)
899
+ ## Tool Quick Reference
1093
900
 
1094
- ## Sprint Progress
1095
- **Completion**: 65% (13 of 20 issues done)
1096
-
1097
- ## Risk Indicators
1098
- ⚠️ **3 issues at risk:**
1099
- - PROJ-456: In Progress for 5 days without update
1100
- - PROJ-789: High priority, still To Do
1101
- \`\`\`
1102
-
1103
- ### jira_epic_summary
1104
- Lightweight Epic status - no time metrics, no comments, no Confluence links.
1105
-
1106
- \`\`\`
1107
- jira_epic_summary(
1108
- issueKey="PROJ-100",
1109
- includeLinks=true, // cross-project dependencies
1110
- maxDepth=3 // hierarchy depth
1111
- )
1112
- \`\`\`
1113
-
1114
- **Returns**: Quick markdown with hierarchy list, status breakdown, cross-project dependencies.
1115
-
1116
- ### jira_list_epic_children
1117
- List Epic children without needing JQL. Auto-detects Epic Link and Parent Link fields.
1118
-
1119
- \`\`\`
1120
- jira_list_epic_children(
1121
- parentKey="PROJ-100",
1122
- type="Story", // optional: filter by type
1123
- status="open", // "open", "closed", "all"
1124
- recursive=false // true for nested children
1125
- )
1126
- \`\`\`
1127
-
1128
- **Returns**: Buffered results (same format as jira_search_issues).
1129
-
1130
- ### tempo_get_top_worklogs
1131
- Top issues or users by workload. Returns directly to LLM.
1132
-
1133
- \`\`\`
1134
- tempo_get_top_worklogs(
1135
- since="last_week", // date expression
1136
- projectKey="PROJ", // optional filter
1137
- groupBy="issue", // "issue" or "user"
1138
- limit=10
1139
- )
1140
- \`\`\`
1141
-
1142
- **Returns**: Markdown table with ranked results + totals.
901
+ | Tool | Purpose | Best For |
902
+ |------|---------|----------|
903
+ | \`jira_get_activity_digest\` | Recent activity across issues | "What happened on PROJ this week?" |
904
+ | \`jira_get_recent_comments\` | Discussion analysis | "Any blockers in recent discussions?" |
905
+ | \`jira_get_changelog\` | Track field changes | "What issues had priority escalations?" |
906
+ | \`jira_analyze_epic\` | Deep Epic analysis | "Analyze Epic PROJ-100 for risks" |
907
+ | \`jira_analyze_sprint\` | Sprint progress & risks | "How is Sprint 42 progressing?" |
908
+ | \`jira_epic_summary\` | Quick Epic status | "Quick status of Epic PROJ-100" |
909
+ | \`jira_list_epic_children\` | List Epic children | "List open Stories in PROJ-100" |
910
+ | \`tempo_get_top_worklogs\` | Top issues by workload | "Which issues had most work?" |
1143
911
 
1144
912
  ## Scoping Parameters
1145
913
 
@@ -1163,6 +931,27 @@ Use \`date_resolve(expression)\` to preview date ranges:
1163
931
  date_resolve("this_week") → { dateFrom: "2025-01-27", dateTo: "2025-01-31", businessDays: 5 }
1164
932
  \`\`\`
1165
933
 
934
+ ## Choosing the Right Tool
935
+
936
+ ### Activity & Discussions
937
+ - **What happened?** → \`jira_get_activity_digest(projectKey, since="7d")\`
938
+ - **What are people saying?** → \`jira_get_recent_comments(projectKey, since="7d")\`
939
+ - **What changed?** → \`jira_get_changelog(projectKey, fields=["status","priority"])\`
940
+
941
+ ### Epic Analysis
942
+ - **Full Epic analysis** (time, comments, links) → \`jira_analyze_epic(issueKey)\`
943
+ - **Quick Epic status** (no time metrics) → \`jira_epic_summary(issueKey)\`
944
+ - **List Epic children** (buffered for transform) → \`jira_list_epic_children(parentKey)\`
945
+
946
+ ### Sprint Analysis
947
+ - **Sprint health check** → \`jira_analyze_sprint(sprintId)\`
948
+ - Find sprintId: \`jira_get_sprints(boardId)\`
949
+ - Find boardId: \`jira_list_boards()\` or from URL \`/rapidView=123\`
950
+
951
+ ### Time Tracking
952
+ - **Top issues by workload** → \`tempo_get_top_worklogs(since, groupBy="issue")\`
953
+ - **Top contributors** → \`tempo_get_top_worklogs(since, groupBy="user")\`
954
+
1166
955
  ## vs Buffer Transform
1167
956
 
1168
957
  | Need | Use |
@@ -1187,7 +976,8 @@ date_resolve("this_week") → { dateFrom: "2025-01-27", dateTo: "2025-01-31", bu
1187
976
  - Use \`date_resolve\` to understand date ranges before querying
1188
977
  - Start with smaller \`maxActivities\`/\`maxComments\` for faster responses
1189
978
  - Combine with \`jira_search_issues\` to narrow scope first if needed
1190
- - Analysis tools return markdown directly - no buffering needed`;
979
+ - Analysis tools return markdown directly - no buffering needed
980
+ - For parameter details, see tool descriptions or TOOL_LIST.md`;
1191
981
  // Topic content map
1192
982
  const TOPIC_CONTENT = {
1193
983
  jql: JQL_HELP,
@@ -1 +1 @@
1
- {"version":3,"file":"jicon-help.js","sourceRoot":"","sources":["../../src/utils/jicon-help.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jicon-help.js","sourceRoot":"","sources":["../../src/utils/jicon-help.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Logger utility with timestamp and log level support
3
+ *
4
+ * All MCP server logs go to stderr (stdout is reserved for MCP protocol)
5
+ *
6
+ * Log levels (JICON_LOG_LEVEL):
7
+ * - error: Only errors
8
+ * - warn: Errors and warnings
9
+ * - info: Errors, warnings, and info messages (default)
10
+ * - debug: All messages including debug output
11
+ */
12
+ /**
13
+ * Log a message with timestamp prefix (info level)
14
+ * @param args - Arguments to log (same as console.error)
15
+ */
16
+ export declare function log(...args: unknown[]): void;
17
+ /**
18
+ * Log a debug message (only when JICON_LOG_LEVEL=debug)
19
+ * @param args - Arguments to log
20
+ */
21
+ export declare function debug(...args: unknown[]): void;
22
+ /**
23
+ * Log an info message
24
+ * @param message - Message to log
25
+ */
26
+ export declare function info(message: string): void;
27
+ /**
28
+ * Log a warning message
29
+ * @param message - Warning message
30
+ */
31
+ export declare function warn(message: string): void;
32
+ /**
33
+ * Log an error message
34
+ * @param message - Error message
35
+ * @param err - Optional error object
36
+ */
37
+ export declare function error(message: string, err?: unknown): void;
38
+ /**
39
+ * Check if debug logging is enabled
40
+ * Use this to avoid expensive string formatting when debug is disabled
41
+ */
42
+ export declare function isDebugEnabled(): boolean;
43
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAyCH;;;GAGG;AACH,wBAAgB,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAI5C;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAI9C;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI1C;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI1C;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,CAQ1D;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC"}