cnhkmcp 2.1.0__tar.gz → 2.1.1__tar.gz

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 (124) hide show
  1. {cnhkmcp-2.1.0/cnhkmcp.egg-info → cnhkmcp-2.1.1}/PKG-INFO +1 -1
  2. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/main.py +0 -5
  3. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/rag_engine.py +96 -5
  4. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/requirements.txt +0 -5
  5. cnhkmcp-2.1.1/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/vector_db/_manifest.json +326 -0
  6. cnhkmcp-2.1.1/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/vector_db/_meta.json +1 -0
  7. cnhkmcp-2.1.1/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/vector_db/be5d957c-b724-46e3-91d1-999e9f5f7d28/index_metadata.pickle +0 -0
  8. cnhkmcp-2.1.1/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/vector_db/chroma.sqlite3 +0 -0
  9. cnhkmcp-2.1.1/cnhkmcp/untracked/APP/Tranformer/ace.log +0 -0
  10. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1/cnhkmcp.egg-info}/PKG-INFO +1 -1
  11. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp.egg-info/SOURCES.txt +4 -0
  12. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/setup.py +1 -1
  13. cnhkmcp-2.1.0/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/vector_db/chroma.sqlite3 +0 -0
  14. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/LICENSE +0 -0
  15. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/MANIFEST.in +0 -0
  16. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/README.md +0 -0
  17. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/__init__.py +0 -0
  18. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/README.md" +0 -0
  19. /cnhkmcp-2.1.0/cnhkmcp/untracked/APP/Tranformer/ace.log → /cnhkmcp-2.1.1/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/ace.log" +0 -0
  20. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/config.json" +0 -0
  21. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/get_knowledgeBase_tool/ace_lib.py" +0 -0
  22. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/get_knowledgeBase_tool/fetch_all_datasets.py" +0 -0
  23. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/get_knowledgeBase_tool/fetch_all_documentation.py" +0 -0
  24. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/get_knowledgeBase_tool/fetch_all_operators.py" +0 -0
  25. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/get_knowledgeBase_tool/helpful_functions.py" +0 -0
  26. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/icon.ico" +0 -0
  27. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/icon.png" +0 -0
  28. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/knowledge/test.txt" +0 -0
  29. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/process_knowledge_base.py" +0 -0
  30. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266/run.bat" +0 -0
  31. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/AI/346/241/214/351/235/242/346/217/222/344/273/266//351/246/226/346/254/241/350/277/220/350/241/214/346/211/223/345/274/200/346/210/221.py" +0 -0
  32. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/.gitignore +0 -0
  33. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/MODULAR_STRUCTURE.md +0 -0
  34. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/README.md +0 -0
  35. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/Tranformer/Transformer.py +0 -0
  36. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/Tranformer/ace_lib.py +0 -0
  37. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/Tranformer/helpful_functions.py +0 -0
  38. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/Tranformer/output/Alpha_candidates.json +0 -0
  39. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/Tranformer/output/Alpha_candidates_/347/244/272/344/276/213.json" +0 -0
  40. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/Tranformer/output/Alpha_generated_expressions_error.json +0 -0
  41. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/Tranformer/output/Alpha_generated_expressions_success.json +0 -0
  42. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/Tranformer/output/Alpha_generated_expressions_/347/244/272/344/276/213/345/217/257/347/233/264/346/216/245/350/275/275/345/205/245Machine_lib.json" +0 -0
  43. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/Tranformer/parsetab.py +0 -0
  44. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/Tranformer/template_summary.txt +0 -0
  45. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/Tranformer/transformer_config.json +0 -0
  46. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/Tranformer/validator.py +0 -0
  47. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/ace.log +0 -0
  48. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/ace_lib.py +0 -0
  49. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/blueprints/__init__.py +0 -0
  50. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/blueprints/feature_engineering.py +0 -0
  51. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/blueprints/idea_house.py +0 -0
  52. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/blueprints/inspiration_house.py +0 -0
  53. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/blueprints/paper_analysis.py +0 -0
  54. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/custom_templates/templates.json +0 -0
  55. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/give_me_idea/BRAIN_Alpha_Template_Expert_SystemPrompt.md +0 -0
  56. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/give_me_idea/ace_lib.py +0 -0
  57. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/give_me_idea/alpha_data_specific_template_master.py +0 -0
  58. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/give_me_idea/fetch_all_datasets.py +0 -0
  59. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/give_me_idea/fetch_all_operators.py +0 -0
  60. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/give_me_idea/helpful_functions.py +0 -0
  61. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/give_me_idea/what_is_Alpha_template.md +0 -0
  62. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/helpful_functions.py +0 -0
  63. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/hkSimulator/ace_lib.py +0 -0
  64. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/hkSimulator/autosimulator.py +0 -0
  65. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/hkSimulator/helpful_functions.py +0 -0
  66. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/mirror_config.txt +0 -0
  67. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/operaters.csv +0 -0
  68. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/requirements.txt +0 -0
  69. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/run_app.bat +0 -0
  70. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/run_app.sh +0 -0
  71. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/setup_tsinghua.bat +0 -0
  72. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/setup_tsinghua.sh +0 -0
  73. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/simulator/alpha_submitter.py +0 -0
  74. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/simulator/simulator_wqb.py +0 -0
  75. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/ssrn-3332513.pdf +0 -0
  76. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/static/brain.js +0 -0
  77. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/static/decoder.js +0 -0
  78. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/static/feature_engineering.js +0 -0
  79. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/static/idea_house.js +0 -0
  80. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/static/inspiration.js +0 -0
  81. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/static/inspiration_house.js +0 -0
  82. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/static/paper_analysis.js +0 -0
  83. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/static/script.js +0 -0
  84. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/static/simulator.js +0 -0
  85. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/static/styles.css +0 -0
  86. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/static/usage_widget.js +0 -0
  87. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/templates/alpha_inspector.html +0 -0
  88. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/templates/feature_engineering.html +0 -0
  89. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/templates/idea_house.html +0 -0
  90. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/templates/index.html +0 -0
  91. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/templates/inspiration_house.html +0 -0
  92. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/templates/paper_analysis.html +0 -0
  93. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/templates/simulator.html +0 -0
  94. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/templates/transformer_web.html +0 -0
  95. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP/usage.md +0 -0
  96. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP//347/274/230/345/210/206/344/270/200/351/201/223/346/241/245/ace_lib.py" +0 -0
  97. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP//347/274/230/345/210/206/344/270/200/351/201/223/346/241/245/brain_alpha_inspector.py" +0 -0
  98. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP//347/274/230/345/210/206/344/270/200/351/201/223/346/241/245/helpful_functions.py" +0 -0
  99. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/APP//350/277/220/350/241/214/346/211/223/345/274/200/346/210/221.py" +0 -0
  100. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/arXiv_API_Tool_Manual.md +0 -0
  101. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/arxiv_api.py +0 -0
  102. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/forum_functions.py +0 -0
  103. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/mcp/346/226/207/344/273/266/350/256/272/345/235/233/347/211/2102_/345/246/202/346/236/234/345/216/237/347/211/210/345/220/257/345/212/250/344/270/215/344/272/206/346/265/217/350/247/210/345/231/250/345/260/261/350/257/225/350/277/231/344/270/252/forum_functions.py" +0 -0
  104. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/mcp/346/226/207/344/273/266/350/256/272/345/235/233/347/211/2102_/345/246/202/346/236/234/345/216/237/347/211/210/345/220/257/345/212/250/344/270/215/344/272/206/346/265/217/350/247/210/345/231/250/345/260/261/350/257/225/350/277/231/344/270/252/platform_functions.py" +0 -0
  105. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/mcp/346/226/207/344/273/266/350/256/272/345/235/233/347/211/2102_/345/246/202/346/236/234/345/216/237/347/211/210/345/220/257/345/212/250/344/270/215/344/272/206/346/265/217/350/247/210/345/231/250/345/260/261/350/257/225/350/277/231/344/270/252/user_config.json" +0 -0
  106. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/mcp/346/226/207/344/273/266/350/256/272/345/235/233/347/211/2102_/345/246/202/346/236/234/345/216/237/347/211/210/345/220/257/345/212/250/344/270/215/344/272/206/346/265/217/350/247/210/345/231/250/345/260/261/350/257/225/350/277/231/344/270/252//350/256/251AI/350/257/273/350/277/231/344/270/252/346/226/207/346/241/243/346/235/245/345/255/246/344/274/232/344/270/213/350/275/275/346/265/217/350/247/210/345/231/250.md" +0 -0
  107. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/mcp/346/226/207/344/273/266/350/256/272/345/235/233/347/211/2102_/345/246/202/346/236/234/345/216/237/347/211/210/345/220/257/345/212/250/344/270/215/344/272/206/346/265/217/350/247/210/345/231/250/345/260/261/350/257/225/350/277/231/344/270/252//351/205/215/347/275/256/345/211/215/350/277/220/350/241/214/346/210/221_/345/256/211/350/243/205/345/277/205/350/246/201/344/276/235/350/265/226/345/214/205.py" +0 -0
  108. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/platform_functions.py +0 -0
  109. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/sample_mcp_config.json +0 -0
  110. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked/user_config.json +0 -0
  111. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked//347/244/272/344/276/213/345/217/202/350/200/203/346/226/207/346/241/243_BRAIN_Alpha_Test_Requirements_and_Tips.md" +0 -0
  112. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked//347/244/272/344/276/213/345/267/245/344/275/234/346/265/201_Alpha_explaination_workflow.md" +0 -0
  113. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked//347/244/272/344/276/213/345/267/245/344/275/234/346/265/201_BRAIN_6_Tips_Datafield_Exploration_Guide.md" +0 -0
  114. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked//347/244/272/344/276/213/345/267/245/344/275/234/346/265/201_BRAIN_Alpha_Improvement_Workflow.md" +0 -0
  115. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked//347/244/272/344/276/213/345/267/245/344/275/234/346/265/201_Dataset_Exploration_Expert_Manual.md" +0 -0
  116. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked//347/244/272/344/276/213/345/267/245/344/275/234/346/265/201_daily_report_workflow.md" +0 -0
  117. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp/untracked//351/205/215/347/275/256/345/211/215/350/277/220/350/241/214/346/210/221_/345/256/211/350/243/205/345/277/205/350/246/201/344/276/235/350/265/226/345/214/205.py" +0 -0
  118. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp.egg-info/dependency_links.txt +0 -0
  119. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp.egg-info/entry_points.txt +0 -0
  120. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp.egg-info/not-zip-safe +0 -0
  121. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp.egg-info/requires.txt +0 -0
  122. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/cnhkmcp.egg-info/top_level.txt +0 -0
  123. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/requirements.txt +0 -0
  124. {cnhkmcp-2.1.0 → cnhkmcp-2.1.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cnhkmcp
3
- Version: 2.1.0
3
+ Version: 2.1.1
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
@@ -4,7 +4,6 @@ import base64
4
4
  import tkinter as tk
5
5
  from tkinter import scrolledtext, messagebox, Toplevel
6
6
  from PIL import Image, ImageTk, ImageGrab
7
- import pyautogui
8
7
  from openai import OpenAI
9
8
  import threading
10
9
  import io
@@ -21,14 +20,10 @@ def install_dependencies():
21
20
  # Mapping of package names to their import names (if different)
22
21
  packages = {
23
22
  "openai": "openai",
24
- "pyautogui": "pyautogui",
25
23
  "Pillow": "PIL",
26
- "pyperclip": "pyperclip",
27
- "keyboard": "keyboard",
28
24
  "fastembed": "fastembed",
29
25
  "chromadb": "chromadb",
30
26
  "watchdog": "watchdog",
31
- "urllib3": "urllib3",
32
27
  "pypdf": "pypdf",
33
28
  "python-docx": "docx"
34
29
  }
@@ -34,6 +34,8 @@ class KnowledgeBase:
34
34
  def __init__(self, kb_path="knowledge", db_path="vector_db"):
35
35
  self.kb_path = os.path.abspath(kb_path)
36
36
  self.db_path = os.path.abspath(db_path)
37
+ self.meta_path = os.path.join(self.db_path, "_meta.json")
38
+ self.manifest_path = os.path.join(self.db_path, "_manifest.json")
37
39
  self._collection_reset_guard = False
38
40
 
39
41
  if not os.path.exists(self.kb_path):
@@ -71,6 +73,13 @@ class KnowledgeBase:
71
73
  # Store chosen model name for reference
72
74
  global MODEL_NAME
73
75
  MODEL_NAME = chosen
76
+
77
+ # Cache embedding dimension (detects library/model changes that corrupt existing indexes)
78
+ self.embed_dim = self._get_embedding_dim()
79
+ self.chroma_version = getattr(chromadb, "__version__", "unknown")
80
+
81
+ # If the stored index was built with a different model/dimension/chromadb version, wipe it
82
+ self._maybe_reset_for_incompatibility(chosen, self.embed_dim, self.chroma_version)
74
83
 
75
84
  # Initialize Vector DB
76
85
  self._init_collection()
@@ -85,19 +94,73 @@ class KnowledgeBase:
85
94
  """(Re)initialize Chroma client/collection. If recreate=True, wipe on-disk index."""
86
95
  if recreate and os.path.exists(self.db_path):
87
96
  shutil.rmtree(self.db_path, ignore_errors=True)
88
- self.client = chromadb.PersistentClient(path=self.db_path)
89
- self.collection = self.client.get_or_create_collection(
90
- name=COLLECTION_NAME,
91
- metadata={"hnsw:space": "cosine"}
92
- )
97
+ try:
98
+ self.client = chromadb.PersistentClient(path=self.db_path)
99
+ self.collection = self.client.get_or_create_collection(
100
+ name=COLLECTION_NAME,
101
+ metadata={"hnsw:space": "cosine"}
102
+ )
103
+ except Exception as exc:
104
+ # If collection load itself fails, wipe and retry once to clear corrupted segments
105
+ if not recreate:
106
+ shutil.rmtree(self.db_path, ignore_errors=True)
107
+ return self._init_collection(recreate=True)
108
+ raise
109
+
110
+ # Persist metadata about the embedding model used to build this index
111
+ try:
112
+ os.makedirs(self.db_path, exist_ok=True)
113
+ with open(self.meta_path, "w", encoding="utf-8") as f:
114
+ json.dump({
115
+ "model": MODEL_NAME,
116
+ "embed_dim": self.embed_dim,
117
+ "chroma_version": self.chroma_version,
118
+ }, f)
119
+ except Exception:
120
+ pass # Metadata failure should not block runtime
121
+
122
+ def _maybe_reset_for_incompatibility(self, chosen_model: str, embed_dim: int, chroma_version: str):
123
+ """If existing index meta differs (model/dimension/chromadb), wipe it."""
124
+ if not os.path.exists(self.db_path):
125
+ return
126
+ try:
127
+ with open(self.meta_path, "r", encoding="utf-8") as f:
128
+ meta = json.load(f)
129
+ prev_model = meta.get("model")
130
+ prev_dim = meta.get("embed_dim")
131
+ prev_chroma = meta.get("chroma_version")
132
+ if prev_model != chosen_model or prev_dim != embed_dim or prev_chroma != chroma_version:
133
+ shutil.rmtree(self.db_path, ignore_errors=True)
134
+ except Exception:
135
+ # If meta cannot be read, assume stale/corrupted and rebuild
136
+ shutil.rmtree(self.db_path, ignore_errors=True)
137
+
138
+ def _get_embedding_dim(self) -> int:
139
+ for vec in self.model.embed(["dimension_probe"]):
140
+ try:
141
+ return len(vec)
142
+ except Exception:
143
+ return len(list(vec))
144
+ raise RuntimeError("Failed to determine embedding dimension")
93
145
 
94
146
  def sync_knowledge(self, allow_reset: bool = True):
95
147
  """Scans the knowledge folder and updates the vector database."""
96
148
  print("Syncing knowledge base...")
149
+ manifest = self._load_manifest()
150
+ updated_manifest = {}
97
151
  supported_extensions = (".txt", ".md", ".pdf", ".docx", ".json")
152
+ current_files = []
98
153
  for filename in os.listdir(self.kb_path):
99
154
  file_path = os.path.join(self.kb_path, filename)
100
155
  if os.path.isfile(file_path) and filename.lower().endswith(supported_extensions):
156
+ current_files.append(filename)
157
+ mtime = os.path.getmtime(file_path)
158
+ size = os.path.getsize(file_path)
159
+ prev_meta = manifest.get(filename)
160
+ # Skip unchanged files
161
+ if prev_meta and prev_meta.get("mtime") == mtime and prev_meta.get("size") == size:
162
+ updated_manifest[filename] = prev_meta
163
+ continue
101
164
  try:
102
165
  content = self._extract_text(file_path)
103
166
  if content:
@@ -133,6 +196,7 @@ class KnowledgeBase:
133
196
  embeddings=embeddings
134
197
  )
135
198
  print(f" ✓ Indexed {filename}: {len(original_chunks)} chunks")
199
+ updated_manifest[filename] = {"mtime": mtime, "size": size}
136
200
  except Exception as e:
137
201
  err_msg = str(e)
138
202
  print(f"Error processing {filename}: {err_msg}")
@@ -143,6 +207,16 @@ class KnowledgeBase:
143
207
  self._collection_reset_guard = True
144
208
  self._init_collection(recreate=True)
145
209
  return self.sync_knowledge(allow_reset=False)
210
+ # Remove deleted files from the index
211
+ deleted_files = set(manifest.keys()) - set(current_files)
212
+ for filename in deleted_files:
213
+ try:
214
+ self.collection.delete(where={"source": filename})
215
+ print(f" ✓ Removed deleted file from index: {filename}")
216
+ except Exception as e:
217
+ print(f" ! Failed to remove {filename}: {e}")
218
+ # Persist manifest
219
+ self._save_manifest(updated_manifest)
146
220
  print("Knowledge base sync complete.")
147
221
 
148
222
  def _extract_text(self, file_path):
@@ -248,6 +322,23 @@ class KnowledgeBase:
248
322
  self.observer.schedule(event_handler, self.kb_path, recursive=False)
249
323
  self.observer.start()
250
324
 
325
+ def _load_manifest(self):
326
+ if not os.path.exists(self.manifest_path):
327
+ return {}
328
+ try:
329
+ with open(self.manifest_path, "r", encoding="utf-8") as f:
330
+ return json.load(f)
331
+ except Exception:
332
+ return {}
333
+
334
+ def _save_manifest(self, data):
335
+ try:
336
+ os.makedirs(self.db_path, exist_ok=True)
337
+ with open(self.manifest_path, "w", encoding="utf-8") as f:
338
+ json.dump(data, f, ensure_ascii=False, indent=2)
339
+ except Exception as e:
340
+ print(f" ! Failed to save manifest: {e}")
341
+
251
342
  class KBHandler(FileSystemEventHandler):
252
343
  def __init__(self, kb_instance):
253
344
  self.kb = kb_instance
@@ -1,12 +1,7 @@
1
1
  openai
2
- pyautogui
3
2
  Pillow
4
- pyperclip
5
- keyboard
6
3
  fastembed>=0.3.4
7
4
  chromadb>=0.5.0
8
5
  watchdog
9
- urllib3>=2.5.0
10
6
  pypdf
11
7
  python-docx
12
- pywin32
@@ -0,0 +1,326 @@
1
+ {
2
+ "001_10_Steps_to_Start_on_BRAIN_documentation.json": {
3
+ "mtime": 1767187226.1783848,
4
+ "size": 2483
5
+ },
6
+ "001_Intermediate_Pack_-_Improve_your_Alpha_2_2_documentation.json": {
7
+ "mtime": 1767187225.6750722,
8
+ "size": 9295
9
+ },
10
+ "001_Intermediate_Pack_-_Understand_Results_1_2_documentation.json": {
11
+ "mtime": 1767187225.1160033,
12
+ "size": 9758
13
+ },
14
+ "001_Introduction_to_Alphas_documentation.json": {
15
+ "mtime": 1767187223.7560995,
16
+ "size": 11156
17
+ },
18
+ "001_Introduction_to_BRAIN_Expression_Language_documentation.json": {
19
+ "mtime": 1767187224.277528,
20
+ "size": 4925
21
+ },
22
+ "001_WorldQuant_Challenge_documentation.json": {
23
+ "mtime": 1767187226.6850047,
24
+ "size": 4605
25
+ },
26
+ "001__Read_this_First_-_Starter_Pack_documentation.json": {
27
+ "mtime": 1767187223.2536645,
28
+ "size": 31286
29
+ },
30
+ "002_How_to_choose_the_Simulation_Settings_documentation.json": {
31
+ "mtime": 1767187228.2257776,
32
+ "size": 13775
33
+ },
34
+ "002_Simulate_your_first_Alpha_documentation.json": {
35
+ "mtime": 1767187227.7143147,
36
+ "size": 8701
37
+ },
38
+ "002__Alpha_Examples_for_Beginners_documentation.json": {
39
+ "mtime": 1767187229.1900375,
40
+ "size": 10826
41
+ },
42
+ "002__Alpha_Examples_for_Bronze_Users_documentation.json": {
43
+ "mtime": 1767187229.664476,
44
+ "size": 4795
45
+ },
46
+ "002__Alpha_Examples_for_Silver_Users_documentation.json": {
47
+ "mtime": 1767187230.1425803,
48
+ "size": 3854
49
+ },
50
+ "002__How_BRAIN_works_documentation.json": {
51
+ "mtime": 1767187228.7194252,
52
+ "size": 16929
53
+ },
54
+ "003_Clear_these_tests_before_submitting_an_Alpha_documentation.json": {
55
+ "mtime": 1767187231.1392078,
56
+ "size": 24609
57
+ },
58
+ "003_Parameters_in_the_Simulation_results_documentation.json": {
59
+ "mtime": 1767187231.8167577,
60
+ "size": 16168
61
+ },
62
+ "004_Group_Data_Fields_documentation.json": {
63
+ "mtime": 1767187234.323853,
64
+ "size": 4663
65
+ },
66
+ "004_How_to_use_the_Data_Explorer_documentation.json": {
67
+ "mtime": 1767187233.2908292,
68
+ "size": 6196
69
+ },
70
+ "004_Model77_dataset_documentation.json": {
71
+ "mtime": 1767187234.7999012,
72
+ "size": 3274
73
+ },
74
+ "004_Sentiment1_dataset_documentation.json": {
75
+ "mtime": 1767187235.2783144,
76
+ "size": 2058
77
+ },
78
+ "004_Understanding_Data_in_BRAIN_Key_Concepts_and_Tips_documentation.json": {
79
+ "mtime": 1767187232.782544,
80
+ "size": 9173
81
+ },
82
+ "004_Vector_Data_Fields_documentation.json": {
83
+ "mtime": 1767187233.8419762,
84
+ "size": 6058
85
+ },
86
+ "005_Crowding_Risk-Neutralized_Alphas_documentation.json": {
87
+ "mtime": 1767187239.4696057,
88
+ "size": 3404
89
+ },
90
+ "005_D0_documentation.json": {
91
+ "mtime": 1767187237.8772166,
92
+ "size": 5894
93
+ },
94
+ "005_Double_Neutralization_documentation.json": {
95
+ "mtime": 1767187237.2801647,
96
+ "size": 3308
97
+ },
98
+ "005_Fast_D1_Documentation_documentation.json": {
99
+ "mtime": 1767187244.849411,
100
+ "size": 11325
101
+ },
102
+ "005_Investability_Constrained_Metrics_documentation.json": {
103
+ "mtime": 1767187244.361986,
104
+ "size": 7971
105
+ },
106
+ "005_Must-read_posts_How_to_improve_your_Alphas_documentation.json": {
107
+ "mtime": 1767187236.2457168,
108
+ "size": 2781
109
+ },
110
+ "005_Neutralization_documentation.json": {
111
+ "mtime": 1767187236.7823203,
112
+ "size": 8962
113
+ },
114
+ "005_RAM_Risk-Neutralized_Alphas_documentation.json": {
115
+ "mtime": 1767187240.0576506,
116
+ "size": 4121
117
+ },
118
+ "005_Risk_Neutralization_Default_setting_documentation.json": {
119
+ "mtime": 1767187238.9658227,
120
+ "size": 3796
121
+ },
122
+ "005_Risk_Neutralized_Alphas_documentation.json": {
123
+ "mtime": 1767187238.4253874,
124
+ "size": 11617
125
+ },
126
+ "005_Statistical_Risk-Neutralized_Alphas_documentation.json": {
127
+ "mtime": 1767187240.5924916,
128
+ "size": 5663
129
+ },
130
+ "006_EUR_TOP2500_Universe_documentation.json": {
131
+ "mtime": 1767187247.5703416,
132
+ "size": 2248
133
+ },
134
+ "006_Getting_Started_China_Research_for_Consultants_Gold_documentation.json": {
135
+ "mtime": 1767187248.0169055,
136
+ "size": 8247
137
+ },
138
+ "006_Getting_started_on_Illiquid_Universes_Gold_documentation.json": {
139
+ "mtime": 1767187247.1297894,
140
+ "size": 2224
141
+ },
142
+ "006_Getting_started_with_USA_TOPSP500_universe_Gold_documentation.json": {
143
+ "mtime": 1767187246.6729863,
144
+ "size": 2681
145
+ },
146
+ "006_GLB_TOPDIV3000_Universe_documentation.json": {
147
+ "mtime": 1767187248.4504318,
148
+ "size": 2990
149
+ },
150
+ "006_Global_Alphas_Gold_documentation.json": {
151
+ "mtime": 1767187246.0390387,
152
+ "size": 5531
153
+ },
154
+ "006_India_Alphas_documentation.json": {
155
+ "mtime": 1767187248.8769279,
156
+ "size": 1845
157
+ },
158
+ "007_Consultant_Dos_and_Don_ts_documentation.json": {
159
+ "mtime": 1767187252.9861574,
160
+ "size": 6318
161
+ },
162
+ "007_Consultant_Features_documentation.json": {
163
+ "mtime": 1767187251.6508195,
164
+ "size": 16785
165
+ },
166
+ "007_Consultant_Simulation_Features_documentation.json": {
167
+ "mtime": 1767187251.177272,
168
+ "size": 7226
169
+ },
170
+ "007_Consultant_Submission_Tests_documentation.json": {
171
+ "mtime": 1767187252.1096609,
172
+ "size": 17040
173
+ },
174
+ "007_Finding_Consultant_Alphas_documentation.json": {
175
+ "mtime": 1767187250.6579707,
176
+ "size": 24560
177
+ },
178
+ "007_Power_Pool_Alphas_documentation.json": {
179
+ "mtime": 1767187250.1653683,
180
+ "size": 6398
181
+ },
182
+ "007_Research_Advisory_Program_documentation.json": {
183
+ "mtime": 1767187253.4177225,
184
+ "size": 2637
185
+ },
186
+ "007_Starting_Guide_for_Research_Consultants_documentation.json": {
187
+ "mtime": 1767187249.7283993,
188
+ "size": 3245
189
+ },
190
+ "007_Visualization_Tool_documentation.json": {
191
+ "mtime": 1767187252.5484178,
192
+ "size": 5744
193
+ },
194
+ "007_Your_Advisor_-_Kunqi_Jiang_documentation.json": {
195
+ "mtime": 1767187253.8533716,
196
+ "size": 4746
197
+ },
198
+ "007__Brain_Genius_documentation.json": {
199
+ "mtime": 1767187257.3133671,
200
+ "size": 16460
201
+ },
202
+ "007__Single_Dataset_Alphas_documentation.json": {
203
+ "mtime": 1767187256.8453045,
204
+ "size": 4113
205
+ },
206
+ "008_Advisory_Theme_Calendar_documentation.json": {
207
+ "mtime": 1767187259.502196,
208
+ "size": 584
209
+ },
210
+ "008_Multiplier_Rules_documentation.json": {
211
+ "mtime": 1767187258.6333888,
212
+ "size": 2178
213
+ },
214
+ "008_Overview_of_Themes_documentation.json": {
215
+ "mtime": 1767187258.1852746,
216
+ "size": 1784
217
+ },
218
+ "008_Theme_Calendar_documentation.json": {
219
+ "mtime": 1767187259.0729353,
220
+ "size": 8936
221
+ },
222
+ "009_Combo_Expression_documentation.json": {
223
+ "mtime": 1767187261.4117863,
224
+ "size": 10902
225
+ },
226
+ "009_Global_SuperAlphas_documentation.json": {
227
+ "mtime": 1767187263.181562,
228
+ "size": 3717
229
+ },
230
+ "009_Helpful_Tips_documentation.json": {
231
+ "mtime": 1767187262.3033876,
232
+ "size": 3618
233
+ },
234
+ "009_Selection_Expression_documentation.json": {
235
+ "mtime": 1767187260.918844,
236
+ "size": 47119
237
+ },
238
+ "009_SuperAlpha_Operators_documentation.json": {
239
+ "mtime": 1767187262.748049,
240
+ "size": 18735
241
+ },
242
+ "009_SuperAlpha_Results_documentation.json": {
243
+ "mtime": 1767187261.8593862,
244
+ "size": 3838
245
+ },
246
+ "009_What_is_a_SuperAlpha_documentation.json": {
247
+ "mtime": 1767187260.3861206,
248
+ "size": 13234
249
+ },
250
+ "010_BRAIN_API_documentation.json": {
251
+ "mtime": 1767187264.5490012,
252
+ "size": 36407
253
+ },
254
+ "010_Documentation_for_ACE_API_Library_Gold_documentation.json": {
255
+ "mtime": 1767187264.9810457,
256
+ "size": 1660
257
+ },
258
+ "010__Understanding_simulation_limits_documentation.json": {
259
+ "mtime": 1767187264.0576608,
260
+ "size": 12013
261
+ },
262
+ "arithmetic_operators.json": {
263
+ "mtime": 1767187265.4527013,
264
+ "size": 5302
265
+ },
266
+ "asi_datasets.json": {
267
+ "mtime": 1767187329.8343418,
268
+ "size": 241709
269
+ },
270
+ "chn_datasets.json": {
271
+ "mtime": 1767187329.8464715,
272
+ "size": 112139
273
+ },
274
+ "cross_sectional_operators.json": {
275
+ "mtime": 1767187265.454866,
276
+ "size": 3393
277
+ },
278
+ "eur_datasets.json": {
279
+ "mtime": 1767187329.8725038,
280
+ "size": 268981
281
+ },
282
+ "glb_datasets.json": {
283
+ "mtime": 1767187329.8975177,
284
+ "size": 222049
285
+ },
286
+ "group_operators.json": {
287
+ "mtime": 1767187265.4558804,
288
+ "size": 4058
289
+ },
290
+ "ind_datasets.json": {
291
+ "mtime": 1767187329.930282,
292
+ "size": 259819
293
+ },
294
+ "logical_operators.json": {
295
+ "mtime": 1767187265.4568646,
296
+ "size": 3549
297
+ },
298
+ "reduce_operators.json": {
299
+ "mtime": 1767187265.4588814,
300
+ "size": 8602
301
+ },
302
+ "special_operators.json": {
303
+ "mtime": 1767188164.9683514,
304
+ "size": 893
305
+ },
306
+ "test.txt": {
307
+ "mtime": 1767174050.546388,
308
+ "size": 82
309
+ },
310
+ "time_series_operators.json": {
311
+ "mtime": 1767187265.4623148,
312
+ "size": 12968
313
+ },
314
+ "transformational_operators.json": {
315
+ "mtime": 1767187265.4623148,
316
+ "size": 2080
317
+ },
318
+ "usa_datasets.json": {
319
+ "mtime": 1767187329.9605117,
320
+ "size": 402280
321
+ },
322
+ "vector_operators.json": {
323
+ "mtime": 1767187265.4637623,
324
+ "size": 997
325
+ }
326
+ }
@@ -0,0 +1 @@
1
+ {"model": "jinaai/jina-embeddings-v2-base-zh", "embed_dim": 768, "chroma_version": "1.4.0"}
File without changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cnhkmcp
3
- Version: 2.1.0
3
+ Version: 2.1.1
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
@@ -25,6 +25,7 @@ cnhkmcp/untracked/示例工作流_Dataset_Exploration_Expert_Manual.md
25
25
  cnhkmcp/untracked/示例工作流_daily_report_workflow.md
26
26
  cnhkmcp/untracked/配置前运行我_安装必要依赖包.py
27
27
  cnhkmcp/untracked/AI桌面插件/README.md
28
+ cnhkmcp/untracked/AI桌面插件/ace.log
28
29
  cnhkmcp/untracked/AI桌面插件/config.json
29
30
  cnhkmcp/untracked/AI桌面插件/icon.ico
30
31
  cnhkmcp/untracked/AI桌面插件/icon.png
@@ -40,7 +41,10 @@ cnhkmcp/untracked/AI桌面插件/get_knowledgeBase_tool/fetch_all_documentation.
40
41
  cnhkmcp/untracked/AI桌面插件/get_knowledgeBase_tool/fetch_all_operators.py
41
42
  cnhkmcp/untracked/AI桌面插件/get_knowledgeBase_tool/helpful_functions.py
42
43
  cnhkmcp/untracked/AI桌面插件/knowledge/test.txt
44
+ cnhkmcp/untracked/AI桌面插件/vector_db/_manifest.json
45
+ cnhkmcp/untracked/AI桌面插件/vector_db/_meta.json
43
46
  cnhkmcp/untracked/AI桌面插件/vector_db/chroma.sqlite3
47
+ cnhkmcp/untracked/AI桌面插件/vector_db/be5d957c-b724-46e3-91d1-999e9f5f7d28/index_metadata.pickle
44
48
  cnhkmcp/untracked/APP/.gitignore
45
49
  cnhkmcp/untracked/APP/MODULAR_STRUCTURE.md
46
50
  cnhkmcp/untracked/APP/README.md
@@ -13,7 +13,7 @@ def read_requirements():
13
13
 
14
14
  setup(
15
15
  name="cnhkmcp",
16
- version="2.1.0",
16
+ version="2.1.1",
17
17
  author="CNHK",
18
18
  author_email="cnhk@example.com",
19
19
  description="A comprehensive Model Context Protocol (MCP) server for quantitative trading platform integration",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes