@crypto512/jicon-mcp 1.3.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/README.md +68 -85
  2. package/TOOL_LIST.md +704 -87
  3. package/dist/config/constants.d.ts +18 -7
  4. package/dist/config/constants.d.ts.map +1 -1
  5. package/dist/config/constants.js +21 -8
  6. package/dist/config/constants.js.map +1 -1
  7. package/dist/config/loader.d.ts +11 -11
  8. package/dist/config/loader.d.ts.map +1 -1
  9. package/dist/config/loader.js +53 -93
  10. package/dist/config/loader.js.map +1 -1
  11. package/dist/config/types.d.ts +3 -6
  12. package/dist/config/types.d.ts.map +1 -1
  13. package/dist/config/types.js +2 -4
  14. package/dist/config/types.js.map +1 -1
  15. package/dist/confluence/formatters.js +1 -1
  16. package/dist/confluence/formatters.js.map +1 -1
  17. package/dist/confluence/tools.d.ts +4 -0
  18. package/dist/confluence/tools.d.ts.map +1 -1
  19. package/dist/confluence/tools.js +180 -125
  20. package/dist/confluence/tools.js.map +1 -1
  21. package/dist/index.js +17 -26
  22. package/dist/index.js.map +1 -1
  23. package/dist/jira/formatters.d.ts +1 -0
  24. package/dist/jira/formatters.d.ts.map +1 -1
  25. package/dist/jira/formatters.js +13 -12
  26. package/dist/jira/formatters.js.map +1 -1
  27. package/dist/jira/tools.d.ts +4 -0
  28. package/dist/jira/tools.d.ts.map +1 -1
  29. package/dist/jira/tools.js +189 -50
  30. package/dist/jira/tools.js.map +1 -1
  31. package/dist/permissions/tool-registry.d.ts +2 -2
  32. package/dist/permissions/tool-registry.d.ts.map +1 -1
  33. package/dist/permissions/tool-registry.js +4 -2
  34. package/dist/permissions/tool-registry.js.map +1 -1
  35. package/dist/permissions/write-home-validator.d.ts.map +1 -1
  36. package/dist/permissions/write-home-validator.js +13 -3
  37. package/dist/permissions/write-home-validator.js.map +1 -1
  38. package/dist/tempo/defaults.d.ts +17 -0
  39. package/dist/tempo/defaults.d.ts.map +1 -0
  40. package/dist/tempo/defaults.js +26 -0
  41. package/dist/tempo/defaults.js.map +1 -0
  42. package/dist/tempo/tools.d.ts +5 -0
  43. package/dist/tempo/tools.d.ts.map +1 -1
  44. package/dist/tempo/tools.js +108 -34
  45. package/dist/tempo/tools.js.map +1 -1
  46. package/dist/utils/buffer-pipeline/index.d.ts +30 -0
  47. package/dist/utils/buffer-pipeline/index.d.ts.map +1 -0
  48. package/dist/utils/buffer-pipeline/index.js +317 -0
  49. package/dist/utils/buffer-pipeline/index.js.map +1 -0
  50. package/dist/utils/buffer-pipeline/output/csv.d.ts +20 -0
  51. package/dist/utils/buffer-pipeline/output/csv.d.ts.map +1 -0
  52. package/dist/utils/buffer-pipeline/output/csv.js +117 -0
  53. package/dist/utils/buffer-pipeline/output/csv.js.map +1 -0
  54. package/dist/utils/buffer-pipeline/output/json.d.ts +16 -0
  55. package/dist/utils/buffer-pipeline/output/json.d.ts.map +1 -0
  56. package/dist/utils/buffer-pipeline/output/json.js +48 -0
  57. package/dist/utils/buffer-pipeline/output/json.js.map +1 -0
  58. package/dist/utils/buffer-pipeline/output/markdown.d.ts +15 -0
  59. package/dist/utils/buffer-pipeline/output/markdown.d.ts.map +1 -0
  60. package/dist/utils/buffer-pipeline/output/markdown.js +105 -0
  61. package/dist/utils/buffer-pipeline/output/markdown.js.map +1 -0
  62. package/dist/utils/buffer-pipeline/output/xhtml-list.d.ts +16 -0
  63. package/dist/utils/buffer-pipeline/output/xhtml-list.d.ts.map +1 -0
  64. package/dist/utils/buffer-pipeline/output/xhtml-list.js +81 -0
  65. package/dist/utils/buffer-pipeline/output/xhtml-list.js.map +1 -0
  66. package/dist/utils/buffer-pipeline/output/xhtml-table.d.ts +15 -0
  67. package/dist/utils/buffer-pipeline/output/xhtml-table.d.ts.map +1 -0
  68. package/dist/utils/buffer-pipeline/output/xhtml-table.js +176 -0
  69. package/dist/utils/buffer-pipeline/output/xhtml-table.js.map +1 -0
  70. package/dist/utils/buffer-pipeline/schema.d.ts +1878 -0
  71. package/dist/utils/buffer-pipeline/schema.d.ts.map +1 -0
  72. package/dist/utils/buffer-pipeline/schema.js +168 -0
  73. package/dist/utils/buffer-pipeline/schema.js.map +1 -0
  74. package/dist/utils/buffer-pipeline/stages/filter.d.ts +32 -0
  75. package/dist/utils/buffer-pipeline/stages/filter.d.ts.map +1 -0
  76. package/dist/utils/buffer-pipeline/stages/filter.js +208 -0
  77. package/dist/utils/buffer-pipeline/stages/filter.js.map +1 -0
  78. package/dist/utils/buffer-pipeline/stages/format.d.ts +45 -0
  79. package/dist/utils/buffer-pipeline/stages/format.d.ts.map +1 -0
  80. package/dist/utils/buffer-pipeline/stages/format.js +160 -0
  81. package/dist/utils/buffer-pipeline/stages/format.js.map +1 -0
  82. package/dist/utils/buffer-pipeline/stages/group-by.d.ts +25 -0
  83. package/dist/utils/buffer-pipeline/stages/group-by.d.ts.map +1 -0
  84. package/dist/utils/buffer-pipeline/stages/group-by.js +190 -0
  85. package/dist/utils/buffer-pipeline/stages/group-by.js.map +1 -0
  86. package/dist/utils/buffer-pipeline/stages/select.d.ts +54 -0
  87. package/dist/utils/buffer-pipeline/stages/select.d.ts.map +1 -0
  88. package/dist/utils/buffer-pipeline/stages/select.js +228 -0
  89. package/dist/utils/buffer-pipeline/stages/select.js.map +1 -0
  90. package/dist/utils/buffer-pipeline/stages/sort.d.ts +20 -0
  91. package/dist/utils/buffer-pipeline/stages/sort.d.ts.map +1 -0
  92. package/dist/utils/buffer-pipeline/stages/sort.js +96 -0
  93. package/dist/utils/buffer-pipeline/stages/sort.js.map +1 -0
  94. package/dist/utils/buffer-pipeline/types.d.ts +277 -0
  95. package/dist/utils/buffer-pipeline/types.d.ts.map +1 -0
  96. package/dist/utils/buffer-pipeline/types.js +8 -0
  97. package/dist/utils/buffer-pipeline/types.js.map +1 -0
  98. package/dist/utils/buffer-tools.d.ts +749 -19
  99. package/dist/utils/buffer-tools.d.ts.map +1 -1
  100. package/dist/utils/buffer-tools.js +738 -491
  101. package/dist/utils/buffer-tools.js.map +1 -1
  102. package/dist/utils/content-buffer.d.ts +55 -4
  103. package/dist/utils/content-buffer.d.ts.map +1 -1
  104. package/dist/utils/content-buffer.js +107 -9
  105. package/dist/utils/content-buffer.js.map +1 -1
  106. package/dist/utils/jicon-help.d.ts +1 -1
  107. package/dist/utils/jicon-help.d.ts.map +1 -1
  108. package/dist/utils/jicon-help.js +253 -28
  109. package/dist/utils/jicon-help.js.map +1 -1
  110. package/dist/utils/json-structure.d.ts +121 -0
  111. package/dist/utils/json-structure.d.ts.map +1 -0
  112. package/dist/utils/json-structure.js +637 -0
  113. package/dist/utils/json-structure.js.map +1 -0
  114. package/dist/utils/plantuml/include-expander.d.ts +31 -30
  115. package/dist/utils/plantuml/include-expander.d.ts.map +1 -1
  116. package/dist/utils/plantuml/include-expander.js +167 -133
  117. package/dist/utils/plantuml/include-expander.js.map +1 -1
  118. package/dist/utils/plantuml/index.d.ts +3 -3
  119. package/dist/utils/plantuml/index.d.ts.map +1 -1
  120. package/dist/utils/plantuml/index.js +4 -4
  121. package/dist/utils/plantuml/index.js.map +1 -1
  122. package/dist/utils/plantuml/service.d.ts +13 -24
  123. package/dist/utils/plantuml/service.d.ts.map +1 -1
  124. package/dist/utils/plantuml/service.js +49 -99
  125. package/dist/utils/plantuml/service.js.map +1 -1
  126. package/dist/utils/plantuml/tools.d.ts.map +1 -1
  127. package/dist/utils/plantuml/tools.js +33 -72
  128. package/dist/utils/plantuml/tools.js.map +1 -1
  129. package/dist/utils/plantuml/types.d.ts +1 -35
  130. package/dist/utils/plantuml/types.d.ts.map +1 -1
  131. package/dist/utils/plantuml/types.js +1 -11
  132. package/dist/utils/plantuml/types.js.map +1 -1
  133. package/dist/utils/plantuml/validation-helper.d.ts +1 -1
  134. package/dist/utils/plantuml/validation-helper.js +12 -12
  135. package/dist/utils/plantuml/validation-helper.js.map +1 -1
  136. package/dist/utils/response-formatter.d.ts +61 -6
  137. package/dist/utils/response-formatter.d.ts.map +1 -1
  138. package/dist/utils/response-formatter.js +174 -91
  139. package/dist/utils/response-formatter.js.map +1 -1
  140. package/dist/utils/url-tools.d.ts.map +1 -1
  141. package/dist/utils/url-tools.js +22 -0
  142. package/dist/utils/url-tools.js.map +1 -1
  143. package/dist/utils/xhtml/error-locator.js +2 -2
  144. package/dist/utils/xhtml/error-locator.js.map +1 -1
  145. package/dist/utils/xhtml/index.d.ts +1 -1
  146. package/dist/utils/xhtml/index.d.ts.map +1 -1
  147. package/dist/utils/xhtml/index.js +1 -1
  148. package/dist/utils/xhtml/index.js.map +1 -1
  149. package/dist/utils/xhtml/parser.d.ts +34 -5
  150. package/dist/utils/xhtml/parser.d.ts.map +1 -1
  151. package/dist/utils/xhtml/parser.js +66 -11
  152. package/dist/utils/xhtml/parser.js.map +1 -1
  153. package/dist/utils/xhtml/plantuml.d.ts.map +1 -1
  154. package/dist/utils/xhtml/plantuml.js +5 -3
  155. package/dist/utils/xhtml/plantuml.js.map +1 -1
  156. package/dist/utils/xhtml/serializer.d.ts.map +1 -1
  157. package/dist/utils/xhtml/serializer.js +12 -15
  158. package/dist/utils/xhtml/serializer.js.map +1 -1
  159. package/package.json +12 -4
  160. package/crypto512-jicon-mcp-1.3.0.tgz +0 -0
@@ -6,12 +6,13 @@
6
6
  */
7
7
  import { z } from "zod";
8
8
  import { formatSuccess, formatError } from "./response-formatter.js";
9
- import { ALLOWED_INCLUDE_URLS } from "./plantuml/index.js";
10
9
  // Available topics
11
10
  const TOPICS = ["jql", "cql", "storage", "plantuml", "buffers"];
12
11
  // Default workflow guide (shown when no topic specified)
13
12
  const WORKFLOW_GUIDE = `# Jicon Quick Reference
14
13
 
14
+ TOOLS: jira(16) confluence(18) tempo(11) buffer(14) plantuml(3) url(2) help(1)
15
+
15
16
  ## Decision Tree - Which Topic?
16
17
 
17
18
  | Task | First Step |
@@ -23,6 +24,9 @@ const WORKFLOW_GUIDE = `# Jicon Quick Reference
23
24
  | Search Confluence | \`help(topic="cql")\` |
24
25
  | Search Jira | \`jira_get_issue_types()\` then \`help(topic="jql")\` |
25
26
  | Log/get time | \`tempo_get_user_info()\` first |
27
+ | **Create table from Jira data** | \`buffer_pipeline(bufferId, pipeline={output:{type:"xhtml_table"}})\` |
28
+ | **Iterate items for AI analysis** | \`buffer_get_items(bufferId, start=0, count=50)\` |
29
+ | **Large dataset + AI columns** | Batch workflow - see \`help(topic="buffers")\` |
26
30
 
27
31
  ---
28
32
 
@@ -51,6 +55,11 @@ const WORKFLOW_GUIDE = `# Jicon Quick Reference
51
55
  - \`confluence_review_discard(reviewDraftId)\` - Discard without changes
52
56
  - \`confluence_review_list()\` - Find all review drafts for cleanup
53
57
 
58
+ **Draft Management Tools:**
59
+ - \`confluence_draft_list()\` - List all drafts in your personal space
60
+ - \`confluence_draft_open(draftId)\` - Reopen a draft for editing
61
+ - \`confluence_draft_delete(draftId)\` - Delete a draft
62
+
54
63
  ### Create NEW Confluence Page (Buffer-First)
55
64
  \`\`\`
56
65
  1. buffer_create(content="<h1>Title</h1><p>Content</p>", contentType="xhtml")
@@ -149,7 +158,17 @@ const JQL_HELP = `# JQL Syntax Guide
149
158
  - Relative dates: startOfDay(-7) = 7 days ago
150
159
  - Always quote field values that contain spaces
151
160
  - Issue type names may be localized (e.g., "Epopee" instead of "Epic")
152
- - Results are always buffered - use buffer_get_chunk to read, buffer_grep to search`;
161
+
162
+ ## Response Fields (jira_search_issues)
163
+ - returnedItems: Items available in buffer (max 5000) - USE THIS
164
+ - jiraTotalMatching: Total Jira found (may exceed returnedItems)
165
+ - apiLimit: Maximum per search (5000)
166
+ - If jiraTotalMatching > returnedItems, refine JQL to narrow results
167
+
168
+ ## Date Handling Tips
169
+ - "Last week" in business context = previous Mon-Fri (e.g., Dec 8-12)
170
+ - "Rolling 7 days" = use startOfDay(-7)
171
+ - For exact date ranges, use explicit dates: updated >= "2025-12-08" AND updated <= "2025-12-12"`;
153
172
  // CQL syntax guide
154
173
  const CQL_HELP = `# CQL Syntax Guide
155
174
 
@@ -256,9 +275,37 @@ Confluence uses **XHTML** (strict XML), NOT loose HTML5. This matters!
256
275
  | Line break | \`<br/>\` (self-closing!) |
257
276
  | Horizontal rule | \`<hr/>\` (self-closing!) |
258
277
  | Code inline | \`<code>text</code>\` |
259
- | Link | \`<a href="url">text</a>\` |
260
278
  | List | \`<ul><li>item</li></ul>\` or \`<ol><li>...</li></ol>\` |
261
279
 
280
+ ## Links (IMPORTANT: Two Types!)
281
+
282
+ ### External Links (Jira, Web URLs)
283
+ For links to external sites including Jira issues, use standard HTML anchor tags:
284
+ \`\`\`xml
285
+ <a href="https://jira.example.com/browse/PROJ-123">PROJ-123</a>
286
+ <a href="https://example.com">Example Site</a>
287
+ \`\`\`
288
+
289
+ **Example: Jira links in a table:**
290
+ \`\`\`xml
291
+ <table><tbody>
292
+ <tr><th>Issue</th><th>Summary</th></tr>
293
+ <tr>
294
+ <td><a href="https://jira.example.com/browse/FR-1301">FR-1301</a></td>
295
+ <td>Fix login bug</td>
296
+ </tr>
297
+ </tbody></table>
298
+ \`\`\`
299
+
300
+ ### Confluence Page Links (Internal)
301
+ For links to other Confluence pages, use the ac:link macro:
302
+ \`\`\`xml
303
+ <ac:link><ri:page ri:content-title="Page Title"/>
304
+ <ac:plain-text-link-body><![CDATA[Link Text]]></ac:plain-text-link-body>
305
+ </ac:link>
306
+ \`\`\`
307
+ Cross-space: add \`ri:space-key="KEY"\` to ri:page
308
+
262
309
  ## Tables
263
310
  \`\`\`xml
264
311
  <table><tbody>
@@ -279,14 +326,6 @@ Merge cells: \`colspan="2"\`, \`rowspan="2"\`
279
326
  \`\`\`
280
327
  Types: \`single\`, \`two_equal\`, \`two_left_sidebar\`, \`two_right_sidebar\`, \`three_equal\`
281
328
 
282
- ## Page Links
283
- \`\`\`xml
284
- <ac:link><ri:page ri:content-title="Page Title"/>
285
- <ac:plain-text-link-body><![CDATA[Link Text]]></ac:plain-text-link-body>
286
- </ac:link>
287
- \`\`\`
288
- Cross-space: add \`ri:space-key="KEY"\` to ri:page
289
-
290
329
  ## Images
291
330
  \`\`\`xml
292
331
  <ac:image ac:width="300"><ri:attachment ri:filename="image.png"/></ac:image>
@@ -387,27 +426,28 @@ const PLANTUML_HELP = `# PlantUML in Confluence
387
426
 
388
427
  ## Stdlib Includes (C4, AWS, Azure)
389
428
 
390
- C4-PlantUML, AWS icons, and Azure diagrams are supported via \`!include\`:
429
+ C4-PlantUML, AWS icons, Azure, and Kubernetes diagrams use PlantUML's built-in standard library.
430
+ GitHub URLs are automatically converted to stdlib syntax:
431
+
432
+ | GitHub URL | Converted to |
433
+ |------------|--------------|
434
+ | \`https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/.../C4_Context.puml\` | \`!include <C4/C4_Context>\` |
435
+ | \`https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/.../dist/AWSCommon.puml\` | \`!include <awslib/AWSCommon>\` |
436
+ | \`https://raw.githubusercontent.com/plantuml-stdlib/Azure-PlantUML/.../AzureCommon.puml\` | \`!include <azure/AzureCommon>\` |
437
+ | \`https://raw.githubusercontent.com/plantuml-stdlib/plantuml-kubernetes-sprites/...\` | \`!include <kubernetes/...>\` |
391
438
 
439
+ **Example (either syntax works):**
392
440
  \`\`\`
393
441
  @startuml
394
- !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
442
+ !include <C4/C4_Context>
395
443
  Person(user, "User")
396
444
  System(sys, "My System")
397
445
  Rel(user, sys, "Uses")
398
446
  @enduml
399
447
  \`\`\`
400
448
 
401
- **Requires \`plantumlInclude: true\`** (enabled by default in .jicon.json)
402
-
403
- When enabled, \`!include\` from whitelisted URLs are authorized and expanded client-side
404
- before validation and Confluence upload. Expanded includes are automatically collapsed
405
- back to \`!include\` directives when reading pages.
406
-
407
- **Whitelisted URL prefixes:**
408
- ${ALLOWED_INCLUDE_URLS.map((url) => `- \`${url}\``).join("\n")}
409
-
410
- Non-whitelisted URLs are left unchanged (PlantUML server may reject them due to SSRF restrictions).
449
+ GitHub URLs in diagrams are converted to stdlib syntax before validation and rendering.
450
+ Non-convertible URLs are left unchanged and may fail if the PlantUML server can't fetch them.
411
451
 
412
452
  ## Quick Examples
413
453
 
@@ -431,7 +471,7 @@ User --> Order
431
471
  **C4 Context Diagram:**
432
472
  \`\`\`
433
473
  @startuml
434
- !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
474
+ !include <C4/C4_Context>
435
475
  Person(user, "Customer", "Uses the system")
436
476
  System(sys, "E-Commerce", "Online store")
437
477
  System_Ext(pay, "Payment Gateway", "Processes payments")
@@ -576,9 +616,10 @@ When editing existing pages, you can create content in a separate buffer and mer
576
616
 
577
617
  | Tool | Use |
578
618
  |------|-----|
579
- | \`buffer_get_structure(bufferId)\` | View current element IDs |
619
+ | \`buffer_get_structure(bufferId)\` | View current element IDs (XHTML) |
580
620
  | \`buffer_get_element(bufferId, elementId)\` | Get raw XHTML of specific element |
581
- | \`buffer_get_chunk(bufferId, offset, limit)\` | Read content in chunks |
621
+ | \`buffer_get_items(bufferId, start, count)\` | Get complete JSON items (not truncated) |
622
+ | \`buffer_get_chunk(bufferId, offset, limit)\` | Read raw content in character chunks |
582
623
  | \`buffer_grep(bufferId, pattern, "-C"=2)\` | Search with context |
583
624
  | \`buffer_validate_xhtml(bufferId)\` | Check XHTML validity |
584
625
  | \`buffer_list()\` | See all active buffers |
@@ -586,16 +627,200 @@ When editing existing pages, you can create content in a separate buffer and mer
586
627
 
587
628
  ## Plain/JSON Editing (non-XHTML)
588
629
 
630
+ **String replacement:**
589
631
  \`\`\`
590
632
  buffer_edit(bufferId, old_string="foo", new_string="bar", replace_all=true)
591
633
  \`\`\`
592
634
 
635
+ **Append content:**
636
+ \`\`\`
637
+ buffer_edit(bufferId, append=true, content="text to add at end")
638
+ \`\`\`
639
+
640
+ ## JSON Pipeline (buffer_pipeline) - RECOMMENDED
641
+
642
+ Transform JSON buffers with a declarative pipeline: filter, group, sort, format, output.
643
+
644
+ **98% token reduction** for data transformations - no need to iterate through items!
645
+
646
+ **Basic workflow:**
647
+ \`\`\`
648
+ 1. jira_search_issues(jql="...") → { bufferId, structure: { itemCount: 578 } }
649
+
650
+ 2. buffer_pipeline(bufferId, pipeline={
651
+ filter: [{ field: "status.name", operator: "ne", value: "Done" }],
652
+ sort: [{ field: "priority.name", direction: "asc" }],
653
+ output: {
654
+ type: "xhtml_table",
655
+ table: {
656
+ title: "Open Issues",
657
+ columns: [
658
+ { field: "key", header: "Issue", link: { type: "jira" } },
659
+ { field: "summary", header: "Summary" },
660
+ { field: "priority.name", header: "Priority" }
661
+ ]
662
+ }
663
+ }
664
+ })
665
+ → { bufferId: "buf_new", outputItems: 45, preview: "..." }
666
+
667
+ 3. Insert into Confluence page or use directly
668
+ \`\`\`
669
+
670
+ **Pipeline stages (all optional except output):**
671
+ - \`select\`: Extract and rename fields
672
+ - \`filter\`: Filter items (eq, ne, contains, in, regex, etc.)
673
+ - \`groupBy\`: Group and aggregate (count, sum, avg, list, etc.)
674
+ - \`sort\`: Sort by fields
675
+ - \`limit\`: Limit results
676
+ - \`format\`: Conditional styling (colors, bold, icons)
677
+ - \`output\`: Generate output (xhtml_table, xhtml_list, json, csv, markdown)
678
+
679
+ **Schema Quick Reference:**
680
+ \`\`\`
681
+ pipeline: {
682
+ select?: { fields: [{from: "path", as: "name", transform?: "..."}] },
683
+ filter?: [{ field, operator, value }],
684
+ groupBy?: { field, aggregations: [{function, field?, as}] },
685
+ sort?: [{ field, direction: "asc"|"desc" }], // NOT "sortBy"!
686
+ limit?: number,
687
+ format?: [...],
688
+ output: { type: "xhtml_table"|"json"|"csv"|..., table?: {...} }
689
+ }
690
+ \`\`\`
691
+
692
+ **Common Mistakes:**
693
+ | Wrong | Correct |
694
+ |-------|---------|
695
+ | sortBy: [...] | sort: [...] |
696
+ | transform: "map" | transform: "date" (or uppercase, lowercase, number, boolean, string) |
697
+ | No output | output: {...} (REQUIRED) |
698
+ | pipeline: "{...}" | pipeline: {...} (object, not string) |
699
+
700
+ **After select renames fields, use NEW names in subsequent stages:**
701
+ - select: {from: "issueType", as: "Type"}
702
+ - sort: [{field: "Type"}] ✓ (not "issueType")
703
+
704
+ **Filter operators:** eq, ne, gt, lt, gte, lte, contains, startsWith, endsWith, in, notIn, exists, notExists, regex, empty, notEmpty
705
+
706
+ **Aggregations:** count, sum, avg, min, max, first, last, list, unique
707
+
708
+ **Example - Statistics by assignee:**
709
+ \`\`\`
710
+ buffer_pipeline(bufferId, pipeline={
711
+ filter: [{ field: "status.name", operator: "ne", value: "Done" }],
712
+ groupBy: {
713
+ field: "assignee.displayName",
714
+ aggregations: [
715
+ { function: "count", as: "total" },
716
+ { function: "list", field: "key", as: "issues" }
717
+ ]
718
+ },
719
+ sort: [{ field: "total", direction: "desc" }],
720
+ output: {
721
+ type: "xhtml_table",
722
+ table: {
723
+ title: "Work Distribution",
724
+ columns: [
725
+ { field: "displayName", header: "Assignee" },
726
+ { field: "total", header: "Open Issues" },
727
+ { field: "issues", header: "Issue Keys" }
728
+ ]
729
+ }
730
+ }
731
+ })
732
+ \`\`\`
733
+
734
+ **When to use buffer_pipeline:**
735
+ - Generating tables/lists for Confluence
736
+ - Creating CSV/Markdown exports
737
+ - Aggregating statistics
738
+ - Filtering and sorting large result sets server-side
739
+
740
+ **When NOT to use buffer_pipeline:**
741
+ - When you need LLM judgment on each item
742
+ - When decisions require analyzing content (use buffer_get_items instead)
743
+
744
+ ## Decision Forks (Choose Your Path)
745
+
746
+ After jira_search_issues/tempo_get_worklogs returns a bufferId, you have OPTIONS:
747
+
748
+ | What You Need | Tool to Use | Result |
749
+ |---------------|-------------|--------|
750
+ | READ/ANALYZE items with AI | buffer_get_items(start=0, count=50) | Get items for analysis |
751
+ | SEARCH within results | buffer_grep(pattern) | Find matching items |
752
+ | FORMAT for Confluence | buffer_pipeline → xhtml_table | TERMINAL: publish-ready |
753
+ | TRANSFORM and keep flexible | buffer_pipeline → json | Can process again |
754
+ | EXPORT to file | buffer_pipeline → csv/markdown | TERMINAL: file-ready |
755
+
756
+ **⚠️ OUTPUT TYPE CONSEQUENCES:**
757
+ | Type | Can Iterate Items? | Can Edit? | Next Steps |
758
+ |------|-------------------|-----------|------------|
759
+ | json | ✓ buffer_get_items | ✓ buffer_pipeline | Further processing, re-transform |
760
+ | xhtml_* | ✗ (not iterable) | ✓ buffer_edit | confluence_draft_create |
761
+ | csv/md | ✗ (not iterable) | ✓ buffer_edit | buffer_get_chunk |
762
+
763
+ **Choose json** if you need to iterate items for AI analysis (buffer_get_items).
764
+ **Choose xhtml_*** when ready to publish - you can still edit elements, but can't iterate.
765
+
766
+ ---
767
+
768
+ ## Large Dataset Patterns
769
+
770
+ ### Simple table (no AI analysis)
771
+ Use \`buffer_pipeline\` - generates complete table in **ONE tool call**:
772
+ \`\`\`
773
+ jira_search_issues(jql="...") → bufferId (500+ items)
774
+ buffer_pipeline(bufferId, pipeline={output:{type:"xhtml_table",...}}) → complete table!
775
+ \`\`\`
776
+
777
+ ### Table with AI-enhanced columns (complexity, impact)
778
+ Use **batch accumulation workflow** - analyze items in batches, compose results:
779
+
780
+ \`\`\`
781
+ 1. jira_search_issues(jql="...") → sourceBufferId (578 items)
782
+
783
+ 2. buffer_create(content="<table><thead>...</thead><tbody></tbody></table>", contentType="xhtml")
784
+ → accumulatorBufferId, structure (note tbody element ID)
785
+
786
+ 3. For each batch of 50 items:
787
+ buffer_get_items(sourceBufferId, start=X, count=50) → items[]
788
+ // AI analyzes items, builds XHTML rows with AI columns
789
+ buffer_create(content=rowsXHTML, contentType="xhtml") → batchBufferId
790
+ buffer_edit(accumulatorBufferId, after=lastRowId, fromBufferId=batchBufferId)
791
+
792
+ 4. buffer_edit(pageBufferId, after=ID, fromBufferId=accumulatorBufferId)
793
+ confluence_draft_create(pageId, pageBufferId) → draft for review
794
+ \`\`\`
795
+
796
+ ---
797
+
798
+ ## Reading JSON Data (buffer_get_items, buffer_grep)
799
+
800
+ For cases where you need to read and analyze the data (not just transform it):
801
+
802
+ \`\`\`
803
+ 1. jira_search_issues(jql="...")
804
+ → { bufferId, structure: { itemCount: 519 } }
805
+
806
+ 2. buffer_get_items(bufferId, start=0, count=50)
807
+ → Get 50 complete items for analysis (not truncated)
808
+
809
+ 3. buffer_grep(bufferId, pattern="urgent")
810
+ → Search within buffer
811
+ \`\`\`
812
+
813
+ Use these when:
814
+ - You need to understand the content to make decisions
815
+ - You're writing custom analysis that can't be expressed as a pipeline
816
+ - You're building tables with AI-enhanced columns (batch workflow)
817
+
593
818
  ## Common Errors & Recovery
594
819
 
595
820
  | Error | Fix |
596
821
  |-------|-----|
597
822
  | "Element not found: N" | Check \`buffer_get_structure\` for valid IDs |
598
- | "Buffer expired" | Re-fetch content, buffers expire in 10 min |
823
+ | "Buffer expired" | Re-fetch content, buffers expire in 1 hour |
599
824
  | Multiple occurrences | Use \`replace_all=true\` for string edit |
600
825
  | XHTML parsing error | Check \`suggestedActions\` in error response |
601
826
 
@@ -608,7 +833,7 @@ buffer_edit(bufferId, old_string="foo", new_string="bar", replace_all=true)
608
833
 
609
834
  - IDs are **stable**: insert between 2 and 3 → new element gets id=5, element 3 unchanged
610
835
  - Use \`buffer_get_structure\` after edits to see updated structure
611
- - Buffers expire in 10 min (24h if modified)
836
+ - Buffers expire in 1 hour (24h if modified)
612
837
  - XHTML syntax: \`help(topic="storage")\`
613
838
  - PlantUML: \`help(topic="plantuml")\``;
614
839
  // Topic content map
@@ -1 +1 @@
1
- {"version":3,"file":"jicon-help.js","sourceRoot":"","sources":["../../src/utils/jicon-help.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,mBAAmB;AACnB,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAU,CAAC;AAGzE,yDAAyD;AACzD,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4FtB,CAAC;AAEF,mBAAmB;AACnB,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oFA6CmE,CAAC;AAErF,mBAAmB;AACnB,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oFAmDmE,CAAC;AAErF,gDAAgD;AAChD,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDAkJsB,CAAC;AAEnD,+EAA+E;AAC/E,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqDpB,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDA+EZ,CAAC;AAEnD,sDAAsD;AACtD,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCA4HkB,CAAC;AAExC,oBAAoB;AACpB,MAAM,aAAa,GAA0B;IAC3C,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,OAAO,EAAE,mBAAmB;IAC5B,QAAQ,EAAE,aAAa;IACvB,OAAO,EAAE,YAAY;CACtB,CAAC;AAEF,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,IAAI,EAAE;YACJ,WAAW,EAAE;;;;;;;;;;;;;;;mDAegC;YAC7C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,KAAK,EAAE,CAAC;qBACL,IAAI,CAAC,MAAM,CAAC;qBACZ,QAAQ,EAAE;qBACV,QAAQ,CACP,yEAAyE,CAC1E;aACJ,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,IAAuB,EAA2B,EAAE;gBAClE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;gBAEvB,kCAAkC;gBAClC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,aAAa,CAAC;wBACnB,KAAK,EAAE,cAAc;qBACtB,CAAC,CAAC;gBACL,CAAC;gBAED,qCAAqC;gBACrC,IAAI,KAAK,IAAI,aAAa,EAAE,CAAC;oBAC3B,OAAO,aAAa,CAAC;wBACnB,KAAK;wBACL,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;qBAC5B,CAAC,CAAC;gBACL,CAAC;gBAED,yEAAyE;gBACzE,OAAO,WAAW,CAAC;oBACjB,KAAK,EAAE,IAAI;oBACX,OAAO,EAAE,mBAAmB,KAAK,wBAAwB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC5E,UAAU,EAAE,GAAG;iBAChB,CAAC,CAAC;YACL,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED,0BAA0B;AAC1B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,CAAU,CAAC;AAElD,uCAAuC;AACvC,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"jicon-help.js","sourceRoot":"","sources":["../../src/utils/jicon-help.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * JSON Structure Operations
3
+ *
4
+ * Provides unified structured access for JSON data (arrays and objects).
5
+ * Similar to XHTML buffer operations but for JSON data.
6
+ *
7
+ * Key design for ARRAYS:
8
+ * - Items get stable numeric IDs (stored in __jicon_id field)
9
+ * - IDs persist through insertions/deletions
10
+ * - Enables ID-based operations: append, insert, replace, remove
11
+ *
12
+ * Key design for OBJECTS:
13
+ * - Key-based access to top-level properties
14
+ * - No IDs needed - keys are the natural identifiers
15
+ */
16
+ import type { JsonStructure } from "./content-buffer.js";
17
+ /**
18
+ * Parse JSON string and build structure with IDs for array items
19
+ * If the JSON is an array, each item gets an ID.
20
+ * If it's an object with array fields, those arrays can be targeted by path.
21
+ */
22
+ export declare function parseJsonStructure(jsonString: string): {
23
+ data: unknown;
24
+ structure: JsonStructure;
25
+ error?: string;
26
+ };
27
+ /**
28
+ * Create a new JSON buffer with structure tracking.
29
+ * Handles both arrays and objects:
30
+ * - Arrays: items get stable IDs for ID-based access
31
+ * - Objects: keys are extracted for key-based access
32
+ *
33
+ * @param data - Array or object to create structure for
34
+ * @returns content string and structure
35
+ */
36
+ export declare function createJsonStructure(data: unknown): {
37
+ content: string;
38
+ structure: JsonStructure;
39
+ };
40
+ /**
41
+ * Append an item to a JSON array buffer
42
+ */
43
+ export declare function appendToJsonArray(currentContent: string, currentStructure: JsonStructure, newItem: unknown): {
44
+ content: string;
45
+ structure: JsonStructure;
46
+ insertedId: number;
47
+ error?: string;
48
+ };
49
+ /**
50
+ * Insert an item into a JSON array relative to an existing item
51
+ */
52
+ export declare function insertIntoJsonArray(currentContent: string, currentStructure: JsonStructure, newItem: unknown, targetId: number, position: "before" | "after"): {
53
+ content: string;
54
+ structure: JsonStructure;
55
+ insertedId: number;
56
+ error?: string;
57
+ };
58
+ /**
59
+ * Replace an item in a JSON array by ID
60
+ */
61
+ export declare function replaceInJsonArray(currentContent: string, currentStructure: JsonStructure, targetId: number, newValue: unknown): {
62
+ content: string;
63
+ structure: JsonStructure;
64
+ error?: string;
65
+ };
66
+ /**
67
+ * Remove an item from a JSON array by ID
68
+ */
69
+ export declare function removeFromJsonArray(currentContent: string, currentStructure: JsonStructure, targetId: number): {
70
+ content: string;
71
+ structure: JsonStructure;
72
+ error?: string;
73
+ };
74
+ /**
75
+ * Get an item from a JSON array by ID (without the internal ID field)
76
+ */
77
+ export declare function getItemById(currentContent: string, currentStructure: JsonStructure, targetId: number): {
78
+ item: unknown;
79
+ error?: string;
80
+ };
81
+ /**
82
+ * Get all items from a JSON array buffer (without internal ID fields)
83
+ * For export/serialization
84
+ */
85
+ export declare function getCleanItems(currentContent: string): {
86
+ items: unknown[];
87
+ error?: string;
88
+ };
89
+ /**
90
+ * Rebuild structure from content (for recovery/validation)
91
+ */
92
+ export declare function rebuildStructure(currentContent: string): {
93
+ structure: JsonStructure;
94
+ error?: string;
95
+ };
96
+ /**
97
+ * Get a value from a JSON object by key
98
+ */
99
+ export declare function getByKey(currentContent: string, currentStructure: JsonStructure, key: string): {
100
+ value: unknown;
101
+ error?: string;
102
+ };
103
+ /**
104
+ * Get items from a JSON array by index range (batch access)
105
+ * Returns items without internal __jicon_id fields
106
+ */
107
+ export declare function getItemsByRange(currentContent: string, currentStructure: JsonStructure, start: number, count: number): {
108
+ items: Array<{
109
+ id: number;
110
+ item: unknown;
111
+ }>;
112
+ progress: {
113
+ start: number;
114
+ count: number;
115
+ total: number;
116
+ hasMore: boolean;
117
+ nextStart?: number;
118
+ };
119
+ error?: string;
120
+ };
121
+ //# sourceMappingURL=json-structure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-structure.d.ts","sourceRoot":"","sources":["../../src/utils/json-structure.ts"],"names":[],"mappings":"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"}