fenix-mcp 1.8.0__py3-none-any.whl → 1.9.0__py3-none-any.whl
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.
- fenix_mcp/__init__.py +1 -1
- fenix_mcp/application/tools/knowledge.py +55 -7
- {fenix_mcp-1.8.0.dist-info → fenix_mcp-1.9.0.dist-info}/METADATA +1 -1
- {fenix_mcp-1.8.0.dist-info → fenix_mcp-1.9.0.dist-info}/RECORD +7 -7
- {fenix_mcp-1.8.0.dist-info → fenix_mcp-1.9.0.dist-info}/WHEEL +0 -0
- {fenix_mcp-1.8.0.dist-info → fenix_mcp-1.9.0.dist-info}/entry_points.txt +0 -0
- {fenix_mcp-1.8.0.dist-info → fenix_mcp-1.9.0.dist-info}/top_level.txt +0 -0
fenix_mcp/__init__.py
CHANGED
|
@@ -622,18 +622,66 @@ class KnowledgeTool(Tool):
|
|
|
622
622
|
|
|
623
623
|
items = await self._service.work_bulk_create({"items": payload.work_items})
|
|
624
624
|
|
|
625
|
-
# Format response
|
|
626
|
-
type_counts: Dict[str, int] = {}
|
|
627
|
-
for item in items:
|
|
628
|
-
item_type = item.get("item_type", "unknown")
|
|
629
|
-
type_counts[item_type] = type_counts.get(item_type, 0) + 1
|
|
630
|
-
|
|
625
|
+
# Format response as hierarchical tree
|
|
631
626
|
lines = [f"✅ **{len(items)} work items created**", ""]
|
|
627
|
+
|
|
628
|
+
# Build tree structure
|
|
629
|
+
items_by_id: Dict[str, Dict[str, Any]] = {}
|
|
630
|
+
children_map: Dict[str, List[str]] = {}
|
|
631
|
+
root_ids: List[str] = []
|
|
632
|
+
|
|
632
633
|
for item in items:
|
|
634
|
+
item_id = item.get("id", "")
|
|
635
|
+
items_by_id[item_id] = item
|
|
636
|
+
parent_id = item.get("parent_id")
|
|
637
|
+
if parent_id and parent_id in items_by_id:
|
|
638
|
+
if parent_id not in children_map:
|
|
639
|
+
children_map[parent_id] = []
|
|
640
|
+
children_map[parent_id].append(item_id)
|
|
641
|
+
else:
|
|
642
|
+
root_ids.append(item_id)
|
|
643
|
+
|
|
644
|
+
def format_tree_node(
|
|
645
|
+
item_id: str, prefix: str = "", is_last: bool = True
|
|
646
|
+
) -> List[str]:
|
|
647
|
+
"""Format a node and its children as tree lines."""
|
|
648
|
+
node_lines: List[str] = []
|
|
649
|
+
item = items_by_id.get(item_id, {})
|
|
633
650
|
key = item.get("key", "")
|
|
634
651
|
title = item.get("title", "Untitled")
|
|
635
652
|
item_type = item.get("item_type", "unknown")
|
|
636
|
-
|
|
653
|
+
|
|
654
|
+
# Determine connector
|
|
655
|
+
if prefix == "":
|
|
656
|
+
connector = ""
|
|
657
|
+
child_prefix = ""
|
|
658
|
+
else:
|
|
659
|
+
connector = "└── " if is_last else "├── "
|
|
660
|
+
child_prefix = prefix + (" " if is_last else "│ ")
|
|
661
|
+
|
|
662
|
+
node_lines.append(f"{prefix}{connector}{item_type}: {key} - {title}")
|
|
663
|
+
|
|
664
|
+
# Process children
|
|
665
|
+
child_ids = children_map.get(item_id, [])
|
|
666
|
+
for i, child_id in enumerate(child_ids):
|
|
667
|
+
is_last_child = i == len(child_ids) - 1
|
|
668
|
+
node_lines.extend(
|
|
669
|
+
format_tree_node(child_id, child_prefix, is_last_child)
|
|
670
|
+
)
|
|
671
|
+
|
|
672
|
+
return node_lines
|
|
673
|
+
|
|
674
|
+
# Format root items and their children
|
|
675
|
+
for i, root_id in enumerate(root_ids):
|
|
676
|
+
lines.extend(format_tree_node(root_id))
|
|
677
|
+
if i < len(root_ids) - 1:
|
|
678
|
+
lines.append("") # Add blank line between root trees
|
|
679
|
+
|
|
680
|
+
# Summary by type
|
|
681
|
+
type_counts: Dict[str, int] = {}
|
|
682
|
+
for item in items:
|
|
683
|
+
item_type = item.get("item_type", "unknown")
|
|
684
|
+
type_counts[item_type] = type_counts.get(item_type, 0) + 1
|
|
637
685
|
|
|
638
686
|
lines.append("")
|
|
639
687
|
lines.append("**Summary by type:**")
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
fenix_mcp/__init__.py,sha256=
|
|
1
|
+
fenix_mcp/__init__.py,sha256=RSnCE2xWQoxMXMLP8m8560qoiZO8pwVWFgICK-rSnDw,180
|
|
2
2
|
fenix_mcp/main.py,sha256=iJV-9btNMDJMObvcn7wBQdbLLKjkYCQ1ANGEwHGHlMU,2857
|
|
3
3
|
fenix_mcp/application/presenters.py,sha256=fGME54PdCDhTBhXO-JUB9yLdBHiE1aeXLTC2fCuxnxM,689
|
|
4
4
|
fenix_mcp/application/tool_base.py,sha256=YJk7aSVGjXEvAkXrOHOuUjCFhYni9NPKFyPKiZqkrCc,4235
|
|
@@ -7,7 +7,7 @@ fenix_mcp/application/tools/__init__.py,sha256=Gi1YvYh-KdL9HD8gLVrknHrxiKKEOhHBE
|
|
|
7
7
|
fenix_mcp/application/tools/health.py,sha256=m5DxhoRbdwl6INzd6PISxv1NAv-ljCrezsr773VB0wE,834
|
|
8
8
|
fenix_mcp/application/tools/initialize.py,sha256=YfsE3fVYiqGEwvaI_jg5-0K7pGURXxpB3WNwETmGBPc,5499
|
|
9
9
|
fenix_mcp/application/tools/intelligence.py,sha256=fXfjBwAQmZCn3Zc8BqFnQFAJkpd9JsfOPa_uXJj-bMU,15778
|
|
10
|
-
fenix_mcp/application/tools/knowledge.py,sha256=
|
|
10
|
+
fenix_mcp/application/tools/knowledge.py,sha256=LfyDhjoy3utxZ-AHvcRYsimNd9KFTfIkH0Sc8aCvykQ,60358
|
|
11
11
|
fenix_mcp/application/tools/productivity.py,sha256=wyJ7-2VqgI2cdrliBD_ejwNvQhN1DecpXSQVrCxcUpQ,11231
|
|
12
12
|
fenix_mcp/application/tools/user_config.py,sha256=O5AVg7IUKL9uIoUoBSFovBDHl9jofhKWzhFK7CnKi4s,6470
|
|
13
13
|
fenix_mcp/domain/initialization.py,sha256=AZhdSNITQ7O3clELBuqGvjJc-c8pFKc7zQz-XR2xXPc,6933
|
|
@@ -22,8 +22,8 @@ fenix_mcp/infrastructure/logging.py,sha256=bHrWlSi_0HshRe3--BK_5nzUszW-gh37q6jsd
|
|
|
22
22
|
fenix_mcp/infrastructure/fenix_api/client.py,sha256=GZrrWiUGxMaFM7kT7M8YYeWN1X5EetaJg6Co1-RBI0o,28457
|
|
23
23
|
fenix_mcp/interface/mcp_server.py,sha256=5UM2NJuNbwHkmCEprIFataJ5nFZiO8efTtP_oW3_iX0,2331
|
|
24
24
|
fenix_mcp/interface/transports.py,sha256=PxdhfjH8UMl03f7nuCLc-M6tMx6-Y-btVz_mSqXKrSI,8138
|
|
25
|
-
fenix_mcp-1.
|
|
26
|
-
fenix_mcp-1.
|
|
27
|
-
fenix_mcp-1.
|
|
28
|
-
fenix_mcp-1.
|
|
29
|
-
fenix_mcp-1.
|
|
25
|
+
fenix_mcp-1.9.0.dist-info/METADATA,sha256=A9gBNunNWduimqMBaYWovCv674-R9i9wVvXcB6bzAoQ,7260
|
|
26
|
+
fenix_mcp-1.9.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
27
|
+
fenix_mcp-1.9.0.dist-info/entry_points.txt,sha256=o52x_YHBupEd-1Z1GSfUjv3gJrx5_I-EkHhCgt1WBaE,49
|
|
28
|
+
fenix_mcp-1.9.0.dist-info/top_level.txt,sha256=2G1UtKpwjaIGQyE7sRoHecxaGLeuexfjrOUjv9DDKh4,10
|
|
29
|
+
fenix_mcp-1.9.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|