cnhkmcp 2.3.5__py3-none-any.whl → 2.3.7__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.
Files changed (24) hide show
  1. cnhkmcp/__init__.py +1 -1
  2. cnhkmcp/untracked/AI/321/206/320/231/320/243/321/205/342/225/226/320/265/321/204/342/225/221/342/225/221/BRAIN_AI/321/206/320/231/320/243/321/205/342/225/226/320/265/321/204/342/225/221/342/225/221Mac_Linux/321/207/320/231/320/230/321/206/320/254/320/274.zip +0 -0
  3. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242/main.py +6 -3
  4. cnhkmcp/untracked/AI/321/206/320/261/320/234/321/211/320/255/320/262/321/206/320/237/320/242/321/204/342/225/227/342/225/242//321/211/320/266/320/246/321/206/320/274/320/261/321/210/342/224/220/320/240/321/210/320/261/320/234/321/206/320/231/320/243/321/205/342/225/235/320/220/321/206/320/230/320/241.py +5 -3
  5. cnhkmcp/untracked/APP/Tranformer/validator.py +43 -8
  6. cnhkmcp/untracked/APP/ace_lib.py +5 -3
  7. cnhkmcp/untracked/APP/blueprints/validator.py +43 -8
  8. cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/scripts/validator.py +44 -8
  9. cnhkmcp/untracked/APP//321/210/342/224/220/320/240/321/210/320/261/320/234/321/206/320/231/320/243/321/205/342/225/235/320/220/321/206/320/230/320/241.py +5 -3
  10. cnhkmcp/untracked/arxiv_api.py +5 -3
  11. cnhkmcp/untracked/back_up/forum_functions.py +5 -3
  12. cnhkmcp/untracked/forum_functions.py +5 -3
  13. cnhkmcp/untracked/mcp/321/206/320/246/320/227/321/204/342/225/227/342/225/242/321/210/320/276/342/225/221/321/205/320/255/320/253/321/207/320/231/320/2302_/321/205/320/266/320/222/321/206/320/256/320/254/321/205/320/236/320/257/321/207/320/231/320/230/321/205/320/240/320/277/321/205/320/232/320/270/321/204/342/225/225/320/235/321/204/342/225/221/320/226/321/206/342/225/241/320/237/321/210/320/267/320/230/321/205/320/251/320/270/321/205/342/226/221/342/226/222/321/210/320/277/320/245/321/210/342/224/220/320/251/321/204/342/225/225/320/272/forum_functions.py +5 -3
  14. cnhkmcp/untracked/platform_functions.py +5 -3
  15. cnhkmcp/untracked/skills/alpha-expression-verifier/scripts/validator.py +43 -8
  16. cnhkmcp/untracked/skills/brain-inspectRawTemplate-create-Setting/scripts/validator.py +43 -8
  17. cnhkmcp/untracked//321/211/320/225/320/235/321/207/342/225/234/320/276/321/205/320/231/320/235/321/210/342/224/220/320/240/321/210/320/261/320/234/321/206/320/230/320/241_/321/205/320/276/320/231/321/210/320/263/320/225/321/205/342/224/220/320/225/321/210/320/266/320/221/321/204/342/225/233/320/255/321/210/342/225/241/320/246/321/205/320/234/320/225.py +5 -3
  18. {cnhkmcp-2.3.5.dist-info → cnhkmcp-2.3.7.dist-info}/METADATA +1 -1
  19. {cnhkmcp-2.3.5.dist-info → cnhkmcp-2.3.7.dist-info}/RECORD +23 -24
  20. cnhkmcp/untracked/AI/321/206/320/231/320/243/321/205/342/225/226/320/265/321/204/342/225/221/342/225/221//321/205/320/237/320/234/321/205/320/227/342/225/227/321/205/320/276/320/231/321/210/320/263/320/225AI/321/206/320/231/320/243/321/205/342/225/226/320/265/321/204/342/225/221/342/225/221_Windows/321/207/320/231/320/230/321/206/320/254/320/274.exe +0 -0
  21. {cnhkmcp-2.3.5.dist-info → cnhkmcp-2.3.7.dist-info}/WHEEL +0 -0
  22. {cnhkmcp-2.3.5.dist-info → cnhkmcp-2.3.7.dist-info}/entry_points.txt +0 -0
  23. {cnhkmcp-2.3.5.dist-info → cnhkmcp-2.3.7.dist-info}/licenses/LICENSE +0 -0
  24. {cnhkmcp-2.3.5.dist-info → cnhkmcp-2.3.7.dist-info}/top_level.txt +0 -0
cnhkmcp/__init__.py CHANGED
@@ -50,7 +50,7 @@ from .untracked.forum_functions import (
50
50
  read_full_forum_post
51
51
  )
52
52
 
53
- __version__ = "2.3.5"
53
+ __version__ = "2.3.7"
54
54
  __author__ = "CNHK"
55
55
  __email__ = "cnhk@example.com"
56
56
 
@@ -14,9 +14,12 @@ import sys
14
14
 
15
15
  # try set gbk problem
16
16
  try:
17
- sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
18
- except Exception as e:
19
- print(e)
17
+ import io
18
+ if hasattr(sys.stdout, 'reconfigure'):
19
+ sys.stdout.reconfigure(encoding='utf-8')
20
+ elif hasattr(sys.stdout, 'buffer'):
21
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
22
+ except Exception:
20
23
  pass
21
24
 
22
25
  # --- Auto-Install Dependencies ---
@@ -18,9 +18,11 @@ import io
18
18
 
19
19
  # try set gbk problem
20
20
  try:
21
- sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
22
- except Exception as e:
23
- print(e)
21
+ if hasattr(sys.stdout, 'reconfigure'):
22
+ sys.stdout.reconfigure(encoding='utf-8')
23
+ elif hasattr(sys.stdout, 'buffer'):
24
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
25
+ except Exception:
24
26
  pass
25
27
 
26
28
  # 获取脚本所在目录(项目根目录)
@@ -25,7 +25,8 @@ except ImportError:
25
25
  supported_functions = {
26
26
  # Group 类别函数
27
27
  'group_min': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
28
- 'group_mean': {'min_args': 3, 'max_args': 3, 'arg_types': ['expression', 'expression', 'expression']},
28
+ # group_mean(x, w, group)
29
+ 'group_mean': {'min_args': 3, 'max_args': 3, 'arg_types': ['expression', 'expression', 'category']},
29
30
  'group_median': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
30
31
  'group_max': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
31
32
  'group_rank': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
@@ -715,19 +716,53 @@ class ExpressionValidator:
715
716
  return cached
716
717
 
717
718
  derived = False
718
- if node.node_type == 'function' and node.value in {'bucket', 'group_cartesian_product'}:
719
- derived = True
719
+ if node.node_type == 'function':
720
+ if node.value in {'bucket', 'group_cartesian_product'}:
721
+ derived = True
722
+ else:
723
+ function_info = supported_functions.get(node.value, {})
724
+ arg_types = function_info.get('arg_types', [])
725
+ param_names = function_info.get('param_names', [])
726
+
727
+ positional_index = 0
728
+ for child in node.children:
729
+ if isinstance(child, dict):
730
+ if child.get('type') == 'named':
731
+ name = child.get('name')
732
+ value = child.get('value')
733
+
734
+ expected_type = None
735
+ if name in param_names:
736
+ param_index = param_names.index(name)
737
+ if param_index < len(arg_types):
738
+ expected_type = arg_types[param_index]
739
+
740
+ if expected_type == 'category':
741
+ continue
742
+
743
+ if self._is_derived_category(value):
744
+ derived = True
745
+ break
746
+ elif child.get('type') == 'positional':
747
+ value = child.get('value')
748
+ expected_type = arg_types[positional_index] if positional_index < len(arg_types) else None
749
+
750
+ if expected_type != 'category' and self._is_derived_category(value):
751
+ derived = True
752
+ break
753
+ positional_index += 1
754
+ else:
755
+ expected_type = arg_types[positional_index] if positional_index < len(arg_types) else None
756
+ if expected_type != 'category' and self._is_derived_category(child):
757
+ derived = True
758
+ break
759
+ positional_index += 1
720
760
  elif node.node_type in {'unop', 'binop'}:
721
761
  derived = any(
722
762
  self._is_derived_category(child)
723
763
  for child in node.children
724
764
  if hasattr(child, 'node_type')
725
765
  )
726
- elif node.node_type == 'function':
727
- derived = any(
728
- self._is_derived_category(child.get('value')) if isinstance(child, dict) else self._is_derived_category(child)
729
- for child in node.children
730
- )
731
766
 
732
767
  self._derived_category_cache[cache_key] = derived
733
768
  return derived
@@ -17,9 +17,11 @@ import sys
17
17
  import io
18
18
  # try set gbk problem
19
19
  try:
20
- sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
21
- except Exception as e:
22
- print(e)
20
+ if hasattr(sys.stdout, 'reconfigure'):
21
+ sys.stdout.reconfigure(encoding='utf-8')
22
+ elif hasattr(sys.stdout, 'buffer'):
23
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
24
+ except Exception:
23
25
  pass
24
26
  from helpful_functions import (
25
27
  expand_dict_columns,
@@ -25,7 +25,8 @@ except ImportError:
25
25
  supported_functions = {
26
26
  # Group 类别函数
27
27
  'group_min': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
28
- 'group_mean': {'min_args': 3, 'max_args': 3, 'arg_types': ['expression', 'expression', 'expression']},
28
+ # group_mean(x, w, group)
29
+ 'group_mean': {'min_args': 3, 'max_args': 3, 'arg_types': ['expression', 'expression', 'category']},
29
30
  'group_median': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
30
31
  'group_max': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
31
32
  'group_rank': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
@@ -715,19 +716,53 @@ class ExpressionValidator:
715
716
  return cached
716
717
 
717
718
  derived = False
718
- if node.node_type == 'function' and node.value in {'bucket', 'group_cartesian_product'}:
719
- derived = True
719
+ if node.node_type == 'function':
720
+ if node.value in {'bucket', 'group_cartesian_product'}:
721
+ derived = True
722
+ else:
723
+ function_info = supported_functions.get(node.value, {})
724
+ arg_types = function_info.get('arg_types', [])
725
+ param_names = function_info.get('param_names', [])
726
+
727
+ positional_index = 0
728
+ for child in node.children:
729
+ if isinstance(child, dict):
730
+ if child.get('type') == 'named':
731
+ name = child.get('name')
732
+ value = child.get('value')
733
+
734
+ expected_type = None
735
+ if name in param_names:
736
+ param_index = param_names.index(name)
737
+ if param_index < len(arg_types):
738
+ expected_type = arg_types[param_index]
739
+
740
+ if expected_type == 'category':
741
+ continue
742
+
743
+ if self._is_derived_category(value):
744
+ derived = True
745
+ break
746
+ elif child.get('type') == 'positional':
747
+ value = child.get('value')
748
+ expected_type = arg_types[positional_index] if positional_index < len(arg_types) else None
749
+
750
+ if expected_type != 'category' and self._is_derived_category(value):
751
+ derived = True
752
+ break
753
+ positional_index += 1
754
+ else:
755
+ expected_type = arg_types[positional_index] if positional_index < len(arg_types) else None
756
+ if expected_type != 'category' and self._is_derived_category(child):
757
+ derived = True
758
+ break
759
+ positional_index += 1
720
760
  elif node.node_type in {'unop', 'binop'}:
721
761
  derived = any(
722
762
  self._is_derived_category(child)
723
763
  for child in node.children
724
764
  if hasattr(child, 'node_type')
725
765
  )
726
- elif node.node_type == 'function':
727
- derived = any(
728
- self._is_derived_category(child.get('value')) if isinstance(child, dict) else self._is_derived_category(child)
729
- for child in node.children
730
- )
731
766
 
732
767
  self._derived_category_cache[cache_key] = derived
733
768
  return derived
@@ -25,7 +25,8 @@ except ImportError:
25
25
  supported_functions = {
26
26
  # Group 类别函数
27
27
  'group_min': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
28
- 'group_mean': {'min_args': 3, 'max_args': 3, 'arg_types': ['expression', 'expression', 'expression']},
28
+ # group_mean(x, w, group)
29
+ 'group_mean': {'min_args': 3, 'max_args': 3, 'arg_types': ['expression', 'expression', 'category']},
29
30
  'group_median': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
30
31
  'group_max': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
31
32
  'group_rank': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
@@ -719,19 +720,54 @@ class ExpressionValidator:
719
720
  return cached
720
721
 
721
722
  derived = False
722
- if node.node_type == 'function' and node.value in {'bucket', 'group_cartesian_product'}:
723
- derived = True
723
+ if node.node_type == 'function':
724
+ if node.value in {'bucket', 'group_cartesian_product'}:
725
+ derived = True
726
+ else:
727
+ function_info = supported_functions.get(node.value, {})
728
+ arg_types = function_info.get('arg_types', [])
729
+ param_names = function_info.get('param_names', [])
730
+
731
+ positional_index = 0
732
+ for child in node.children:
733
+ if isinstance(child, dict):
734
+ if child.get('type') == 'named':
735
+ name = child.get('name')
736
+ value = child.get('value')
737
+
738
+ expected_type = None
739
+ if name in param_names:
740
+ param_index = param_names.index(name)
741
+ if param_index < len(arg_types):
742
+ expected_type = arg_types[param_index]
743
+
744
+ # Do not propagate "derived" through allowed category/grouping-key inputs.
745
+ if expected_type == 'category':
746
+ continue
747
+
748
+ if self._is_derived_category(value):
749
+ derived = True
750
+ break
751
+ elif child.get('type') == 'positional':
752
+ value = child.get('value')
753
+ expected_type = arg_types[positional_index] if positional_index < len(arg_types) else None
754
+
755
+ if expected_type != 'category' and self._is_derived_category(value):
756
+ derived = True
757
+ break
758
+ positional_index += 1
759
+ else:
760
+ expected_type = arg_types[positional_index] if positional_index < len(arg_types) else None
761
+ if expected_type != 'category' and self._is_derived_category(child):
762
+ derived = True
763
+ break
764
+ positional_index += 1
724
765
  elif node.node_type in {'unop', 'binop'}:
725
766
  derived = any(
726
767
  self._is_derived_category(child)
727
768
  for child in node.children
728
769
  if hasattr(child, 'node_type')
729
770
  )
730
- elif node.node_type == 'function':
731
- derived = any(
732
- self._is_derived_category(child.get('value')) if isinstance(child, dict) else self._is_derived_category(child)
733
- for child in node.children
734
- )
735
771
 
736
772
  self._derived_category_cache[cache_key] = derived
737
773
  return derived
@@ -11,9 +11,11 @@ import io
11
11
 
12
12
  # try set gbk problem
13
13
  try:
14
- sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
15
- except Exception as e:
16
- print(e)
14
+ if hasattr(sys.stdout, 'reconfigure'):
15
+ sys.stdout.reconfigure(encoding='utf-8')
16
+ elif hasattr(sys.stdout, 'buffer'):
17
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
18
+ except Exception:
17
19
  pass
18
20
 
19
21
  def install_requirements():
@@ -6,9 +6,11 @@ import argparse
6
6
  import io
7
7
  # try set gbk problem
8
8
  try:
9
- sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
10
- except Exception as e:
11
- print(e)
9
+ if hasattr(sys.stdout, 'reconfigure'):
10
+ sys.stdout.reconfigure(encoding='utf-8')
11
+ elif hasattr(sys.stdout, 'buffer'):
12
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
13
+ except Exception:
12
14
  pass
13
15
 
14
16
  def search_arxiv(query, max_results=10):
@@ -26,9 +26,11 @@ import io
26
26
 
27
27
  # try set gbk problem
28
28
  try:
29
- sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
30
- except Exception as e:
31
- print(e)
29
+ if hasattr(sys.stdout, 'reconfigure'):
30
+ sys.stdout.reconfigure(encoding='utf-8')
31
+ elif hasattr(sys.stdout, 'buffer'):
32
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
33
+ except Exception:
32
34
  pass
33
35
 
34
36
  # Initialize forum MCP server
@@ -19,9 +19,11 @@ import io
19
19
 
20
20
  # try set gbk problem
21
21
  try:
22
- sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
23
- except Exception as e:
24
- print(e)
22
+ if hasattr(sys.stdout, 'reconfigure'):
23
+ sys.stdout.reconfigure(encoding='utf-8')
24
+ elif hasattr(sys.stdout, 'buffer'):
25
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
26
+ except Exception:
25
27
  pass
26
28
 
27
29
  def log(message: str, level: str = "INFO"):
@@ -19,9 +19,11 @@ import io
19
19
 
20
20
  # try set gbk problem
21
21
  try:
22
- sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
23
- except Exception as e:
24
- print(e)
22
+ if hasattr(sys.stdout, 'reconfigure'):
23
+ sys.stdout.reconfigure(encoding='utf-8')
24
+ elif hasattr(sys.stdout, 'buffer'):
25
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
26
+ except Exception:
25
27
  pass
26
28
 
27
29
  def log(message: str, level: str = "INFO"):
@@ -21,9 +21,11 @@ from time import sleep
21
21
  import io
22
22
  # try set gbk problem
23
23
  try:
24
- sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
25
- except Exception as e:
26
- print(e)
24
+ if hasattr(sys.stdout, 'reconfigure'):
25
+ sys.stdout.reconfigure(encoding='utf-8')
26
+ elif hasattr(sys.stdout, 'buffer'):
27
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
28
+ except Exception:
27
29
  pass
28
30
 
29
31
  import requests
@@ -25,7 +25,8 @@ except ImportError:
25
25
  supported_functions = {
26
26
  # Group 类别函数
27
27
  'group_min': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
28
- 'group_mean': {'min_args': 3, 'max_args': 3, 'arg_types': ['expression', 'expression', 'expression']},
28
+ # group_mean(x, w, group)
29
+ 'group_mean': {'min_args': 3, 'max_args': 3, 'arg_types': ['expression', 'expression', 'category']},
29
30
  'group_median': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
30
31
  'group_max': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
31
32
  'group_rank': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
@@ -715,19 +716,53 @@ class ExpressionValidator:
715
716
  return cached
716
717
 
717
718
  derived = False
718
- if node.node_type == 'function' and node.value in {'bucket', 'group_cartesian_product'}:
719
- derived = True
719
+ if node.node_type == 'function':
720
+ if node.value in {'bucket', 'group_cartesian_product'}:
721
+ derived = True
722
+ else:
723
+ function_info = supported_functions.get(node.value, {})
724
+ arg_types = function_info.get('arg_types', [])
725
+ param_names = function_info.get('param_names', [])
726
+
727
+ positional_index = 0
728
+ for child in node.children:
729
+ if isinstance(child, dict):
730
+ if child.get('type') == 'named':
731
+ name = child.get('name')
732
+ value = child.get('value')
733
+
734
+ expected_type = None
735
+ if name in param_names:
736
+ param_index = param_names.index(name)
737
+ if param_index < len(arg_types):
738
+ expected_type = arg_types[param_index]
739
+
740
+ if expected_type == 'category':
741
+ continue
742
+
743
+ if self._is_derived_category(value):
744
+ derived = True
745
+ break
746
+ elif child.get('type') == 'positional':
747
+ value = child.get('value')
748
+ expected_type = arg_types[positional_index] if positional_index < len(arg_types) else None
749
+
750
+ if expected_type != 'category' and self._is_derived_category(value):
751
+ derived = True
752
+ break
753
+ positional_index += 1
754
+ else:
755
+ expected_type = arg_types[positional_index] if positional_index < len(arg_types) else None
756
+ if expected_type != 'category' and self._is_derived_category(child):
757
+ derived = True
758
+ break
759
+ positional_index += 1
720
760
  elif node.node_type in {'unop', 'binop'}:
721
761
  derived = any(
722
762
  self._is_derived_category(child)
723
763
  for child in node.children
724
764
  if hasattr(child, 'node_type')
725
765
  )
726
- elif node.node_type == 'function':
727
- derived = any(
728
- self._is_derived_category(child.get('value')) if isinstance(child, dict) else self._is_derived_category(child)
729
- for child in node.children
730
- )
731
766
 
732
767
  self._derived_category_cache[cache_key] = derived
733
768
  return derived
@@ -25,7 +25,8 @@ except ImportError:
25
25
  supported_functions = {
26
26
  # Group 类别函数
27
27
  'group_min': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
28
- 'group_mean': {'min_args': 3, 'max_args': 3, 'arg_types': ['expression', 'expression', 'expression']},
28
+ # group_mean(x, w, group)
29
+ 'group_mean': {'min_args': 3, 'max_args': 3, 'arg_types': ['expression', 'expression', 'category']},
29
30
  'group_median': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
30
31
  'group_max': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
31
32
  'group_rank': {'min_args': 2, 'max_args': 2, 'arg_types': ['expression', 'category']},
@@ -719,19 +720,53 @@ class ExpressionValidator:
719
720
  return cached
720
721
 
721
722
  derived = False
722
- if node.node_type == 'function' and node.value in {'bucket', 'group_cartesian_product'}:
723
- derived = True
723
+ if node.node_type == 'function':
724
+ if node.value in {'bucket', 'group_cartesian_product'}:
725
+ derived = True
726
+ else:
727
+ function_info = supported_functions.get(node.value, {})
728
+ arg_types = function_info.get('arg_types', [])
729
+ param_names = function_info.get('param_names', [])
730
+
731
+ positional_index = 0
732
+ for child in node.children:
733
+ if isinstance(child, dict):
734
+ if child.get('type') == 'named':
735
+ name = child.get('name')
736
+ value = child.get('value')
737
+
738
+ expected_type = None
739
+ if name in param_names:
740
+ param_index = param_names.index(name)
741
+ if param_index < len(arg_types):
742
+ expected_type = arg_types[param_index]
743
+
744
+ if expected_type == 'category':
745
+ continue
746
+
747
+ if self._is_derived_category(value):
748
+ derived = True
749
+ break
750
+ elif child.get('type') == 'positional':
751
+ value = child.get('value')
752
+ expected_type = arg_types[positional_index] if positional_index < len(arg_types) else None
753
+
754
+ if expected_type != 'category' and self._is_derived_category(value):
755
+ derived = True
756
+ break
757
+ positional_index += 1
758
+ else:
759
+ expected_type = arg_types[positional_index] if positional_index < len(arg_types) else None
760
+ if expected_type != 'category' and self._is_derived_category(child):
761
+ derived = True
762
+ break
763
+ positional_index += 1
724
764
  elif node.node_type in {'unop', 'binop'}:
725
765
  derived = any(
726
766
  self._is_derived_category(child)
727
767
  for child in node.children
728
768
  if hasattr(child, 'node_type')
729
769
  )
730
- elif node.node_type == 'function':
731
- derived = any(
732
- self._is_derived_category(child.get('value')) if isinstance(child, dict) else self._is_derived_category(child)
733
- for child in node.children
734
- )
735
770
 
736
771
  self._derived_category_cache[cache_key] = derived
737
772
  return derived
@@ -23,9 +23,11 @@ import io
23
23
 
24
24
  # try set gbk problem
25
25
  try:
26
- sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
27
- except Exception as e:
28
- print(e)
26
+ if hasattr(sys.stdout, 'reconfigure'):
27
+ sys.stdout.reconfigure(encoding='utf-8')
28
+ elif hasattr(sys.stdout, 'buffer'):
29
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
30
+ except Exception:
29
31
  pass
30
32
 
31
33
  # Hardcoded package requirements (merged from workspace requirements)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cnhkmcp
3
- Version: 2.3.5
3
+ Version: 2.3.7
4
4
  Summary: A comprehensive Model Context Protocol (MCP) server for quantitative trading platform integration
5
5
  Home-page: https://github.com/cnhk/cnhkmcp
6
6
  Author: CNHK
@@ -1,10 +1,10 @@
1
- cnhkmcp/__init__.py,sha256=ri_A1xbEZ3ib4C_ZbyRXHIpvLxrRL_8ashAJ86Vyor8,2759
1
+ cnhkmcp/__init__.py,sha256=13ULgeeyONpZWNtJMNnbw8quqeWiTEvC7Jx3rxgy4Gk,2759
2
2
  cnhkmcp/untracked/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  cnhkmcp/untracked/arXiv_API_Tool_Manual.md,sha256=I3hvI5mpmIjBuWptufoVSWFnuhyUc67oCGHEuR0p_xs,13552
4
- cnhkmcp/untracked/arxiv_api.py,sha256=Q_jBHaX5c12cikS-TZ4poBYo4ydPRD1P6WW5CPGEvEI,9180
4
+ cnhkmcp/untracked/arxiv_api.py,sha256=ka2TCUMNdPFSsqgsDxZyLoIXCKaiX9OKuAx6IMEjCdI,9300
5
5
  cnhkmcp/untracked/brain-consultant.md,sha256=6eqVPT-EVLZgP_kOt1HSibXixbIMeoubX8mS5o4OxBs,3696
6
- cnhkmcp/untracked/forum_functions.py,sha256=wbq74R_xYWUI48WBhKNoRy1zS9Sz1SP4WFx33f4rubA,19129
7
- cnhkmcp/untracked/platform_functions.py,sha256=FejdICmKGNpqg7pUzB6cF1ZQAB67CbjLmtP36bMBJY8,111354
6
+ cnhkmcp/untracked/forum_functions.py,sha256=exHnSDXjnvNNoPxcpXKIesxU4uXGjvLcNjQysdL48JQ,19247
7
+ cnhkmcp/untracked/platform_functions.py,sha256=l9r3_sF59A5v2CrlPXVg971kKBbvkgntKWwTAFw-YHs,111472
8
8
  cnhkmcp/untracked/sample_mcp_config.json,sha256=QSFvZ086bxUQsvmLjcE6pL9ObzKn4FGnt9npWPo7Eps,1044
9
9
  cnhkmcp/untracked/user_config.json,sha256=_INn1X1qIsITrmEno-BRlQOAGm9wnNCw-6B333DEvnk,695
10
10
  cnhkmcp/untracked/示例参考文档_BRAIN_Alpha_Test_Requirements_and_Tips.md,sha256=W4dtQrqoTN72UyvIsvkGRF0HFOJLHSDeeSlbR3gqQg0,17133
@@ -13,20 +13,19 @@ cnhkmcp/untracked/示例工作流_BRAIN_6_Tips_Datafield_Exploration_Guide.md,sh
13
13
  cnhkmcp/untracked/示例工作流_BRAIN_Alpha_Improvement_Workflow.md,sha256=XlWYREd_qXe1skdXIhkiGY05oDr_6KiBs1WkerY4S8U,5092
14
14
  cnhkmcp/untracked/示例工作流_Dataset_Exploration_Expert_Manual.md,sha256=-C4fWdaBe9UzA5BDZz0Do2z8RaPWLslb6D0nTz6fqk4,24403
15
15
  cnhkmcp/untracked/示例工作流_daily_report_workflow.md,sha256=6aNmPqWRn09XdQMRxoVTka9IYVOUv5LcWparHu16EfQ,9460
16
- cnhkmcp/untracked/配置前运行我_安装必要依赖包.py,sha256=RGQ_YnLnXEzoNPplKt01DNnW0tM9xRYpzQIGKpzVbf8,7178
17
- cnhkmcp/untracked/AI打工人/BRAIN_AI打工人Mac_Linux版本.zip,sha256=11-7NsaMTPeWOIMWp645v7xQdAGsoKNwEXmhT4vLW8Y,36723
18
- cnhkmcp/untracked/AI打工人/双击安装AI打工人_Windows版本.exe,sha256=gqMFJ9-op4uVuWGRAix_ol5HH4hOS5YjV7bmWFl009c,11242659
16
+ cnhkmcp/untracked/配置前运行我_安装必要依赖包.py,sha256=UPR3gt5H2kBiM6_Ez4KTcvn2yfukNCGfO1riVB9oK18,7298
17
+ cnhkmcp/untracked/AI打工人/BRAIN_AI打工人Mac_Linux版本.zip,sha256=0IDtotaSZG62BWNsHSGfC5XCYuCPbGlEdKZiNvrZ0hY,36723
19
18
  cnhkmcp/untracked/AI桌面插件/README.md,sha256=9Iu_XFpK0MyAtnGOxo3BxEo9ibEOSBkPvW9IuTrDPmw,1234
20
19
  cnhkmcp/untracked/AI桌面插件/ace.log,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
20
  cnhkmcp/untracked/AI桌面插件/config.json,sha256=tMF0TRyfQah749dIGkpY9dVfGygQ3YU384Vw-Kv5EDk,1984
22
21
  cnhkmcp/untracked/AI桌面插件/icon.ico,sha256=oPkiKlN_f8zXTZhBmr6BVGjxfWr_wdIe5Flgq02wp-s,3284
23
22
  cnhkmcp/untracked/AI桌面插件/icon.png,sha256=xg3EfFWiXzibPH38JCC0xpQMfGH6asOZbT0lWFVzl00,1628
24
- cnhkmcp/untracked/AI桌面插件/main.py,sha256=61dud1tLWf1HIrzwYN4yGM9WFbF4UpauqL_Uox-qU98,23164
23
+ cnhkmcp/untracked/AI桌面插件/main.py,sha256=ONdOB1BSKUaz2R-Yk7BlgsnEeDYtsmGJvzUDzCD1kUw,23299
25
24
  cnhkmcp/untracked/AI桌面插件/process_knowledge_base.py,sha256=hKY3Uus81cfhBIxuCPiOV-5RDNAM3NxQ_VD0T3BezwQ,10073
26
25
  cnhkmcp/untracked/AI桌面插件/rag_engine.py,sha256=fQiA817OOv9dNkNfR6M7oiXz2WaNZ78mEgwcnrF946E,18865
27
26
  cnhkmcp/untracked/AI桌面插件/requirements.txt,sha256=jLAbyxGnvi_f05YakzmC_vfVUbfaBUmHBULAmKl0N2o,82
28
27
  cnhkmcp/untracked/AI桌面插件/run.bat,sha256=6Zj0DvBzq86mcptoxWPjmIQms8hYboMWDECM3xA8cr4,32
29
- cnhkmcp/untracked/AI桌面插件/首次运行打开我.py,sha256=bmSO-745EF89ecxCs7jU-2LKYofs58ka74Xg5_rHlNM,9732
28
+ cnhkmcp/untracked/AI桌面插件/首次运行打开我.py,sha256=Y6Yb5OMbeWS60EaRxfuWvNlhecXhpOs3xxTetpbGfcs,9852
30
29
  cnhkmcp/untracked/AI桌面插件/get_knowledgeBase_tool/ace_lib.py,sha256=nSnmM5zfI6lxIln1vctz7TCwjAWcljVXITy7R4gS3Q0,53947
31
30
  cnhkmcp/untracked/AI桌面插件/get_knowledgeBase_tool/fetch_all_datasets.py,sha256=NoRN5NoouW62Us1RvsbyTkgGu0w9ZWkARA1j4gDO5EY,5366
32
31
  cnhkmcp/untracked/AI桌面插件/get_knowledgeBase_tool/fetch_all_documentation.py,sha256=PUviCKtUkGlgyVxznZq5y_wEnn32S9-dzlN91tbbWYs,5260
@@ -114,7 +113,7 @@ cnhkmcp/untracked/APP/.gitignore,sha256=oPCoVTNo82bhkN0c671LdjCpOTVpVhZI5NR75ztc
114
113
  cnhkmcp/untracked/APP/MODULAR_STRUCTURE.md,sha256=b5xV74-_RtXq2K1EsYDwMukO6lxjJ4-lnOAEnTHpFS0,4706
115
114
  cnhkmcp/untracked/APP/README.md,sha256=vb7hmQX0sH5aFNBmDCN5szMSDHm1_h2VKY4UKCt0aMk,11676
116
115
  cnhkmcp/untracked/APP/ace.log,sha256=HXNY3zIjxRA2b4xcRkQbX5qGdrb0Jk3lI-YnkMSVTow,11623
117
- cnhkmcp/untracked/APP/ace_lib.py,sha256=ZkJbzwHvBsJX6ceWRmZ3GGRCMTaYMGgNAl8FQr8NwY0,54111
116
+ cnhkmcp/untracked/APP/ace_lib.py,sha256=AujNE_d_RPOgQJLpq8KRnxLkdfFBJuivizfkOePo_Dc,54229
118
117
  cnhkmcp/untracked/APP/helpful_functions.py,sha256=Jc8gclRkvGx7el0XgTmZ67qwMSHrSluYheCUvzd6mbg,6640
119
118
  cnhkmcp/untracked/APP/mirror_config.txt,sha256=RL1jFYwcvDPkLd6tc_lqVcwjTLORWt5Qu0Ym_BTPaao,504
120
119
  cnhkmcp/untracked/APP/operaters.csv,sha256=g8m6z-u0x-CoqGFSp_g3UMyLJkdFLE5UwsNkueMH1yw,13610
@@ -125,14 +124,14 @@ cnhkmcp/untracked/APP/setup_tsinghua.bat,sha256=9dLWCaQTULf3d2LqiAlvQrA4wuM1dysG
125
124
  cnhkmcp/untracked/APP/setup_tsinghua.sh,sha256=mMDXTqCRIXtSHa_1pU0jCnNF-xajqfZDlUA72XpcAOk,1195
126
125
  cnhkmcp/untracked/APP/ssrn-3332513.pdf,sha256=GEwf1Srtk-fTvF03dhTEjXJstHBARIUg31k7s5kxS98,2082078
127
126
  cnhkmcp/untracked/APP/usage.md,sha256=t7D-5b2P_JZIn6F7ZRFOSZCYl3Vr5fvHGNVy73Nf_N0,16140
128
- cnhkmcp/untracked/APP/运行打开我.py,sha256=XT1LsElUOf0kcPgcAF-hEm4wgF1nZEpBJ3C_ZWMa3JM,118312
127
+ cnhkmcp/untracked/APP/运行打开我.py,sha256=Phyub7shfrmSG23HF9rdfDvmHFpP-FcDxRAQfkHj4os,118430
129
128
  cnhkmcp/untracked/APP/Tranformer/Transformer.py,sha256=C65g1A5iVdEKcDUImL9MOYHws0CtHsFHykvX0FDfrTA,189021
130
129
  cnhkmcp/untracked/APP/Tranformer/ace_lib.py,sha256=nSnmM5zfI6lxIln1vctz7TCwjAWcljVXITy7R4gS3Q0,53947
131
130
  cnhkmcp/untracked/APP/Tranformer/helpful_functions.py,sha256=Jc8gclRkvGx7el0XgTmZ67qwMSHrSluYheCUvzd6mbg,6640
132
131
  cnhkmcp/untracked/APP/Tranformer/parsetab.py,sha256=L_XJWx4AmYWASQ-krdrcyu7cEFbRdKS5MWppZ0Qfjlo,7650
133
132
  cnhkmcp/untracked/APP/Tranformer/template_summary.txt,sha256=gWz5LFlPtOmw0JnLj68hgWsoSFNyA18uCJWIYWHLbe8,111054
134
133
  cnhkmcp/untracked/APP/Tranformer/transformer_config.json,sha256=ene-WntIVbcoN3_H1ztlwtZK6eadSXCfqs1SSgrGAIg,179
135
- cnhkmcp/untracked/APP/Tranformer/validator.py,sha256=QLqu-VUkoiaFQLcy3JsvpDoQaaLRq33-0un-7HknmQs,60344
134
+ cnhkmcp/untracked/APP/Tranformer/validator.py,sha256=lDFLTDWzSnW4h1QJnYjWq12jPjFYxUDGMYrjQL9dVyM,62077
136
135
  cnhkmcp/untracked/APP/Tranformer/output/Alpha_candidates.json,sha256=vMw3zhzcwARGm92ykdGTeYTsrCje_RHt0sWv17R0qUs,368947
137
136
  cnhkmcp/untracked/APP/Tranformer/output/Alpha_candidates_示例.json,sha256=K40tcWPiUKaPnrtMdfsN2BOBG5IzqSz04XT6gRz7FVE,23139
138
137
  cnhkmcp/untracked/APP/Tranformer/output/Alpha_generated_expressions_error.json,sha256=T1PNoYwrqgwDVLtfmj7L5e0Sq02OEbqHPC8RFhICuUU,2
@@ -144,7 +143,7 @@ cnhkmcp/untracked/APP/blueprints/idea_house.py,sha256=P_Pq_kmw2N3YluBOH9e0SwsCsw
144
143
  cnhkmcp/untracked/APP/blueprints/inspiration_house.py,sha256=Zras66ksS3WRUnRcxKNaon2sHFeoZwdlY3K54sgcCyQ,18994
145
144
  cnhkmcp/untracked/APP/blueprints/paper_analysis.py,sha256=tYGh-A1pzvSw6ZzoMKyIJBysbX8xsdBZncWw8ZGKyVQ,22241
146
145
  cnhkmcp/untracked/APP/blueprints/parsetab.py,sha256=qJJR3QDtcqoBafLaIvvTiILY0REfP5VevvesWveEg1A,7650
147
- cnhkmcp/untracked/APP/blueprints/validator.py,sha256=QLqu-VUkoiaFQLcy3JsvpDoQaaLRq33-0un-7HknmQs,60344
146
+ cnhkmcp/untracked/APP/blueprints/validator.py,sha256=lDFLTDWzSnW4h1QJnYjWq12jPjFYxUDGMYrjQL9dVyM,62077
148
147
  cnhkmcp/untracked/APP/custom_templates/templates.json,sha256=ARrpRsxGcUpC2iepS6j6A_0tdu_xUJTIyvLDb8uzL_E,48776
149
148
  cnhkmcp/untracked/APP/give_me_idea/BRAIN_Alpha_Template_Expert_SystemPrompt.md,sha256=vZZFH7_h1PXQIYRA5eFPqJDJflsfVFFFzDjm8bNjZPc,15401
150
149
  cnhkmcp/untracked/APP/give_me_idea/ace_lib.py,sha256=nSnmM5zfI6lxIln1vctz7TCwjAWcljVXITy7R4gS3Q0,53947
@@ -292,16 +291,16 @@ cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/script
292
291
  cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/scripts/implement_idea.py,sha256=8nAyiFE0X6pcGQwZ4m-S9ph7lPSAGzzX7VLKBucBfZ8,8181
293
292
  cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/scripts/merge_expression_list.py,sha256=4NzMqgwdLUx0baVm3CNRBlr17mtdnUzUdi3Depui8pc,3362
294
293
  cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/scripts/parsetab.py,sha256=29clH5xFEmKpqzRvrLN89QE8JFJNYFhH-gEFR4y7448,7650
295
- cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/scripts/validator.py,sha256=O0vXoCxkjYEZQ8KDcoorizk_mxO5m9W_yO4jQDGptcc,60812
294
+ cnhkmcp/untracked/APP/trailSomeAlphas/skills/brain-feature-implementation/scripts/validator.py,sha256=q6zpapSaZwRosCo5D0bumsqkr5dj0nKveNdjekLFJkY,62649
296
295
  cnhkmcp/untracked/APP/trailSomeAlphas/skills/template_final_enhance/op总结.md,sha256=HDc8lhGdMst2QgFCqD5fJWvDZ3w1S2DEk0bMsHziflA,20562
297
296
  cnhkmcp/untracked/APP/trailSomeAlphas/skills/template_final_enhance/sample_prompt.md,sha256=vf6Ps-hzIH-MRf-cv0Dyro7StdTJ-v6RAjHCXkpRwLE,6217
298
297
  cnhkmcp/untracked/APP/trailSomeAlphas/skills/template_final_enhance/单因子思考逻辑链.md,sha256=2IfV6lOKYwoZIlN1tjXjOezJn9pQxX4K3iPmnZh01gA,13232
299
298
  cnhkmcp/untracked/APP/缘分一道桥/ace_lib.py,sha256=nSnmM5zfI6lxIln1vctz7TCwjAWcljVXITy7R4gS3Q0,53947
300
299
  cnhkmcp/untracked/APP/缘分一道桥/brain_alpha_inspector.py,sha256=eSmGEPFQhqjR96hRCDMCbBSp3wmcwmymdC25Mxa5WdQ,24763
301
300
  cnhkmcp/untracked/APP/缘分一道桥/helpful_functions.py,sha256=Jc8gclRkvGx7el0XgTmZ67qwMSHrSluYheCUvzd6mbg,6640
302
- cnhkmcp/untracked/back_up/forum_functions.py,sha256=qqUh8ZWCs_JKolGNLsWZI2VMjcD3BmxPYoeNHHHvgyc,42457
301
+ cnhkmcp/untracked/back_up/forum_functions.py,sha256=4rs4HIwzUbTZFX3k2WDlMAargvtM1VR5iMRjucs9FiE,42575
303
302
  cnhkmcp/untracked/back_up/platform_functions.py,sha256=HvFfS44qGzw2yYKlpUM6oWrMnxrkR37Ht13l3atbTI4,123336
304
- cnhkmcp/untracked/mcp文件论坛版2_如果原版启动不了浏览器就试这个/forum_functions.py,sha256=wbq74R_xYWUI48WBhKNoRy1zS9Sz1SP4WFx33f4rubA,19129
303
+ cnhkmcp/untracked/mcp文件论坛版2_如果原版启动不了浏览器就试这个/forum_functions.py,sha256=exHnSDXjnvNNoPxcpXKIesxU4uXGjvLcNjQysdL48JQ,19247
305
304
  cnhkmcp/untracked/mcp文件论坛版2_如果原版启动不了浏览器就试这个/platform_functions.py,sha256=X9gl7mRC2FSC9rPRhhBqLx5CL7Qc9pUgkZk8A7Qpy3M,111354
306
305
  cnhkmcp/untracked/mcp文件论坛版2_如果原版启动不了浏览器就试这个/user_config.json,sha256=_INn1X1qIsITrmEno-BRlQOAGm9wnNCw-6B333DEvnk,695
307
306
  cnhkmcp/untracked/mcp文件论坛版2_如果原版启动不了浏览器就试这个/让AI读这个文档来学会下载浏览器.md,sha256=v5QPSMjRDh52ZjgC4h8QjImnaqlVRLjTHGxmGjTo36g,3396
@@ -309,7 +308,7 @@ cnhkmcp/untracked/mcp文件论坛版2_如果原版启动不了浏览器就试这
309
308
  cnhkmcp/untracked/skills/Claude_Skill_Creation_Guide.md,sha256=Wx4w8deBkuw0UcSwzNNQdRIuCqDXGk3-fRQBWcPQivw,5025
310
309
  cnhkmcp/untracked/skills/alpha-expression-verifier/SKILL.md,sha256=7oGzMIXUJzDCtbxND6QWmh6azkLqoFJNURIh-F-aPUQ,2213
311
310
  cnhkmcp/untracked/skills/alpha-expression-verifier/scripts/parsetab.py,sha256=L_XJWx4AmYWASQ-krdrcyu7cEFbRdKS5MWppZ0Qfjlo,7650
312
- cnhkmcp/untracked/skills/alpha-expression-verifier/scripts/validator.py,sha256=QLqu-VUkoiaFQLcy3JsvpDoQaaLRq33-0un-7HknmQs,60344
311
+ cnhkmcp/untracked/skills/alpha-expression-verifier/scripts/validator.py,sha256=lDFLTDWzSnW4h1QJnYjWq12jPjFYxUDGMYrjQL9dVyM,62077
313
312
  cnhkmcp/untracked/skills/alpha-expression-verifier/scripts/verify_expr.py,sha256=zDSlYf0XlkyML-fcL4wld445RMbztt4pDSP5b6W6JKQ,1659
314
313
  cnhkmcp/untracked/skills/brain-calculate-alpha-selfcorrQuick/SKILL.md,sha256=UKQhfHPOH8_YXnRotzXuG8BrgFeXhQoxAZIEeaQxGds,1183
315
314
  cnhkmcp/untracked/skills/brain-calculate-alpha-selfcorrQuick/reference.md,sha256=ws9oUgtEdK7aVjw6sNoVzFQ3gyoX5UIlyz3wItI0fxI,3115
@@ -381,7 +380,7 @@ cnhkmcp/untracked/skills/brain-inspectRawTemplate-create-Setting/scripts/parse_i
381
380
  cnhkmcp/untracked/skills/brain-inspectRawTemplate-create-Setting/scripts/parsetab.py,sha256=JvZ5WdYXoDafh4tSl2nw0rzhCCIdA4T_UXabMl9gkYg,7650
382
381
  cnhkmcp/untracked/skills/brain-inspectRawTemplate-create-Setting/scripts/process_template.py,sha256=AbNB9IniG4JuZK8V9xJkOlvvafs8FNkGjMqVKLCL0RM,3627
383
382
  cnhkmcp/untracked/skills/brain-inspectRawTemplate-create-Setting/scripts/resolve_settings.py,sha256=wdhmkHEvIX4OaLTwLbERXUU8RFmL7ezW4YTJXbEs4Fs,2928
384
- cnhkmcp/untracked/skills/brain-inspectRawTemplate-create-Setting/scripts/validator.py,sha256=O0vXoCxkjYEZQ8KDcoorizk_mxO5m9W_yO4jQDGptcc,60812
383
+ cnhkmcp/untracked/skills/brain-inspectRawTemplate-create-Setting/scripts/validator.py,sha256=_OJTcDyO7XVgO0_icUEdUzMHTXkh9V7OWqJVWGYwtqs,62545
385
384
  cnhkmcp/untracked/skills/brain-nextMove-analysis/SKILL.md,sha256=MGmM3HHYTdzxLE6uOxs9mB4i3At4JGjJYzsbzQKTjgc,1685
386
385
  cnhkmcp/untracked/skills/brain-nextMove-analysis/reference.md,sha256=6aNmPqWRn09XdQMRxoVTka9IYVOUv5LcWparHu16EfQ,9460
387
386
  cnhkmcp/untracked/skills/planning-with-files/SKILL.md,sha256=WORMds3daIxA7qRTamVcTSiySAzXvkHlzONC1Kv6ato,6686
@@ -396,9 +395,9 @@ cnhkmcp/untracked/skills/pull_BRAINSkill/SKILL.md,sha256=QyXQ0wr9LeZyKqkvSTto72b
396
395
  cnhkmcp/untracked/skills/pull_BRAINSkill/scripts/pull_skills.py,sha256=6v3Z3cc9_qKvBj7C6y2jWY1pAd76SA3JmiVj_KkZkmw,6341
397
396
  cnhkmcp/vector_db/_manifest.json,sha256=RBNvo1WzZ4oRRq0W9-hknpT7T8If536DEMBg9hyq_4o,2
398
397
  cnhkmcp/vector_db/_meta.json,sha256=xQwhRA0prLtwFAMAGR1ZgCR76jVEFIEfF-1SNPpTMgI,91
399
- cnhkmcp-2.3.5.dist-info/licenses/LICENSE,sha256=QLxO2eNMnJQEdI_R1UV2AOD-IvuA8zVrkHWA4D9gtoc,1081
400
- cnhkmcp-2.3.5.dist-info/METADATA,sha256=1A3dWlcEgS1h3UzWStBE4ksjb2XZVZZHobhzN1Ul7Ko,5171
401
- cnhkmcp-2.3.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
402
- cnhkmcp-2.3.5.dist-info/entry_points.txt,sha256=lTQieVyIvjhSMK4fT-XwnccY-JBC1H4vVQ3V9dDM-Pc,70
403
- cnhkmcp-2.3.5.dist-info/top_level.txt,sha256=x--ibUcSgOS9Z_RWK2Qc-vfs7DaXQN-WMaaxEETJ1Bw,8
404
- cnhkmcp-2.3.5.dist-info/RECORD,,
398
+ cnhkmcp-2.3.7.dist-info/licenses/LICENSE,sha256=QLxO2eNMnJQEdI_R1UV2AOD-IvuA8zVrkHWA4D9gtoc,1081
399
+ cnhkmcp-2.3.7.dist-info/METADATA,sha256=QJtvYs51Cvz14j2Bro0cgzmT6LerISsgNTDPeOQbrcw,5171
400
+ cnhkmcp-2.3.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
401
+ cnhkmcp-2.3.7.dist-info/entry_points.txt,sha256=lTQieVyIvjhSMK4fT-XwnccY-JBC1H4vVQ3V9dDM-Pc,70
402
+ cnhkmcp-2.3.7.dist-info/top_level.txt,sha256=x--ibUcSgOS9Z_RWK2Qc-vfs7DaXQN-WMaaxEETJ1Bw,8
403
+ cnhkmcp-2.3.7.dist-info/RECORD,,