cnhkmcp 2.1.4__py3-none-any.whl → 2.1.6__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.
- cnhkmcp/__init__.py +126 -126
- cnhkmcp/untracked/back_up/forum_functions.py +998 -0
- cnhkmcp/untracked/back_up/platform_functions.py +2886 -0
- cnhkmcp/untracked/brain-consultant.md +31 -0
- cnhkmcp/untracked/forum_functions.py +350 -941
- cnhkmcp/untracked/platform_functions.py +445 -730
- cnhkmcp/untracked/skills/Claude_Skill_Creation_Guide.md +140 -0
- cnhkmcp/untracked/skills/expression_verifier/SKILL.md +51 -0
- cnhkmcp/untracked/skills/expression_verifier/scripts/validator.py +889 -0
- cnhkmcp/untracked/skills/expression_verifier/scripts/verify_expr.py +52 -0
- cnhkmcp/untracked/skills/pull_BRAINSkill/SKILL.md +51 -0
- cnhkmcp/untracked/skills/pull_BRAINSkill/scripts/pull_skills.py +188 -0
- 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 +3 -1
- {cnhkmcp-2.1.4.dist-info → cnhkmcp-2.1.6.dist-info}/METADATA +1 -1
- {cnhkmcp-2.1.4.dist-info → cnhkmcp-2.1.6.dist-info}/RECORD +19 -13
- cnhkmcp/untracked/APP/Tranformer/ace.log +0 -0
- cnhkmcp/untracked/APP/Tranformer/parsetab.py +0 -60
- cnhkmcp/untracked/APP/simulator/wqb20260107015647.log +0 -57
- {cnhkmcp-2.1.4.dist-info → cnhkmcp-2.1.6.dist-info}/WHEEL +0 -0
- {cnhkmcp-2.1.4.dist-info → cnhkmcp-2.1.6.dist-info}/entry_points.txt +0 -0
- {cnhkmcp-2.1.4.dist-info → cnhkmcp-2.1.6.dist-info}/licenses/LICENSE +0 -0
- {cnhkmcp-2.1.4.dist-info → cnhkmcp-2.1.6.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import json
|
|
3
|
+
import os
|
|
4
|
+
|
|
5
|
+
# Ensure the current directory is in sys.path so we can import validator locally
|
|
6
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
7
|
+
if current_dir not in sys.path:
|
|
8
|
+
sys.path.insert(0, current_dir)
|
|
9
|
+
|
|
10
|
+
try:
|
|
11
|
+
from validator import ExpressionValidator
|
|
12
|
+
except ImportError as e:
|
|
13
|
+
print(json.dumps({
|
|
14
|
+
"valid": False,
|
|
15
|
+
"errors": [f"Error importing validator module: {e}. Ensure validator.py is in the same directory."],
|
|
16
|
+
"tokens": [],
|
|
17
|
+
"ast": None
|
|
18
|
+
}, ensure_ascii=False))
|
|
19
|
+
sys.exit(1)
|
|
20
|
+
|
|
21
|
+
def main():
|
|
22
|
+
if len(sys.argv) < 2:
|
|
23
|
+
print(json.dumps({
|
|
24
|
+
"valid": False,
|
|
25
|
+
"errors": ["No expression provided. Usage: python verify_expr.py 'expression'"],
|
|
26
|
+
"tokens": [],
|
|
27
|
+
"ast": None
|
|
28
|
+
}, ensure_ascii=False))
|
|
29
|
+
sys.exit(1)
|
|
30
|
+
|
|
31
|
+
# Combine arguments in case the expression was split by shell
|
|
32
|
+
expression = " ".join(sys.argv[1:])
|
|
33
|
+
|
|
34
|
+
try:
|
|
35
|
+
validator = ExpressionValidator()
|
|
36
|
+
result = validator.check_expression(expression)
|
|
37
|
+
|
|
38
|
+
# Serialize the result to JSON
|
|
39
|
+
# default=str is used to handle objects like tokens or AST nodes that might not be directly serializable
|
|
40
|
+
print(json.dumps(result, indent=2, ensure_ascii=False, default=str))
|
|
41
|
+
|
|
42
|
+
except Exception as e:
|
|
43
|
+
print(json.dumps({
|
|
44
|
+
"valid": False,
|
|
45
|
+
"errors": [f"Exception during validation: {str(e)}"],
|
|
46
|
+
"tokens": [],
|
|
47
|
+
"ast": None
|
|
48
|
+
}, ensure_ascii=False))
|
|
49
|
+
sys.exit(1)
|
|
50
|
+
|
|
51
|
+
if __name__ == "__main__":
|
|
52
|
+
main()
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pull_brainskill
|
|
3
|
+
description: Pulls valid Claude Skills from a ZIP URL (preferred), Git repository, or local directory. Only folders containing a strictly named SKILL.md file are imported.
|
|
4
|
+
allowed-tools: Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Pull BRAIN Skill
|
|
8
|
+
|
|
9
|
+
This skill imports skill folders from a remote source or local directory.
|
|
10
|
+
|
|
11
|
+
**Strict Validation**: A folder is considered a valid skill ONLY if it contains a `SKILL.md` file (strictly case-sensitive). Folders with `skill.md` or `Skill.md` will be skipped.
|
|
12
|
+
|
|
13
|
+
## How to use
|
|
14
|
+
|
|
15
|
+
1. **Locate the script**:
|
|
16
|
+
- Project path: `.claude/skills/pull_BRAINSkill/scripts/pull_skills.py`
|
|
17
|
+
- Global path (Windows): `%USERPROFILE%\.claude\skills\pull_BRAINSkill\scripts\pull_skills.py`
|
|
18
|
+
|
|
19
|
+
2. **Run the script**: Provide a ZIP URL (Recommended), Git URL, or local path.
|
|
20
|
+
|
|
21
|
+
### Example 1: Pull via ZIP (Recommended First Choice)
|
|
22
|
+
This method is faster and works best in restricted network environments. To do this, you must firstly parse the repository into a ZIP file URL by appending `/archive/refs/heads/main.zip` to the repo URL. For example, for a repository at `https://github.com/GitRepoAuthorName/RepoName`, the ZIP URL would be `https://github.com/GitRepoAuthorName/RepoName/archive/refs/heads/main.zip`.
|
|
23
|
+
```bash
|
|
24
|
+
python ".claude/skills/pull_BRAINSkill/scripts/pull_skills.py" "https://github.com/GitRepoAuthorName/RepoName/archive/refs/heads/main.zip" --overwrite
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Example 2: Pull via Git
|
|
28
|
+
Use this if you need a specific branch or have git configured.
|
|
29
|
+
```bash
|
|
30
|
+
python ".claude/skills/pull_BRAINSkill/scripts/pull_skills.py" "https://github.com/GitRepoAuthorName/RepoName.git"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Example 3: Import from Local Directory
|
|
34
|
+
```bash
|
|
35
|
+
python ".claude/skills/pull_BRAINSkill/scripts/pull_skills.py" "C:/Downloads/my-skills-repo"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Options:
|
|
39
|
+
- `--dest <path>`: Destination directory for skills (default: `.claude/skills` relative to current project).
|
|
40
|
+
- `--branch <branch>`: Specify branch to checkout.
|
|
41
|
+
- `--overwrite`: Overwrite existing skill folders with the same name.
|
|
42
|
+
|
|
43
|
+
## Behavior
|
|
44
|
+
- Clones the repository shallowly (`--depth 1`) into a temp directory.
|
|
45
|
+
- Scans top-level folders for `SKILL.md`.
|
|
46
|
+
- Copies valid skill folders into the destination `.claude/skills` directory.
|
|
47
|
+
|
|
48
|
+
## Notes
|
|
49
|
+
- Paths use forward slashes for compatibility.
|
|
50
|
+
- Requires `git` in PATH.
|
|
51
|
+
- Only checks for the presence of `SKILL.md`, not content validity.
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
Pull Skill Folders from a Git repository into a local .claude/skills directory.
|
|
5
|
+
|
|
6
|
+
Usage:
|
|
7
|
+
python pull_skills.py <git_repo_url> [--dest <dest_path>] [--branch <branch>] [--overwrite]
|
|
8
|
+
|
|
9
|
+
- git_repo_url: HTTPS git URL, e.g., https://github.com/GitRepoAuthorName/-.git
|
|
10
|
+
- dest_path: Destination folder for skills (default: <cwd>/.claude/skills)
|
|
11
|
+
- branch: Branch to checkout (default: auto, uses repo default)
|
|
12
|
+
- overwrite: If set, overwrite existing skill folders (default: off)
|
|
13
|
+
|
|
14
|
+
Behavior:
|
|
15
|
+
- Clones the repo into a temporary directory (depth=1)
|
|
16
|
+
- Scans top-level subfolders for a SKILL.md file
|
|
17
|
+
- Copies those folders into the destination .claude/skills directory
|
|
18
|
+
|
|
19
|
+
Notes:
|
|
20
|
+
- Requires Git installed and available in PATH.
|
|
21
|
+
- Only validates existence of SKILL.md, does not validate YAML content.
|
|
22
|
+
- Copies one level deep (top-level folders only).
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
import os
|
|
26
|
+
import sys
|
|
27
|
+
import json
|
|
28
|
+
import shutil
|
|
29
|
+
import tempfile
|
|
30
|
+
import subprocess
|
|
31
|
+
from typing import List, Dict
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def run(cmd: List[str], cwd: str | None = None) -> subprocess.CompletedProcess:
|
|
35
|
+
return subprocess.run(cmd, cwd=cwd, capture_output=True, text=True)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def ensure_dir(path: str) -> None:
|
|
39
|
+
os.makedirs(path, exist_ok=True)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def copy_skill_folder(src_folder: str, dest_root: str, overwrite: bool) -> Dict[str, str]:
|
|
43
|
+
name = os.path.basename(src_folder.rstrip("/\\"))
|
|
44
|
+
dest_folder = os.path.join(dest_root, name)
|
|
45
|
+
|
|
46
|
+
# STRICT check for SKILL.md existence (case-sensitive)
|
|
47
|
+
# os.listdir returns the actual filename on the filesystem
|
|
48
|
+
if "SKILL.md" not in os.listdir(src_folder):
|
|
49
|
+
return {"status": "skipped", "folder": name, "reason": "no SKILL.md found (strictly case-sensitive)"}
|
|
50
|
+
|
|
51
|
+
if os.path.exists(dest_folder):
|
|
52
|
+
if overwrite:
|
|
53
|
+
shutil.rmtree(dest_folder)
|
|
54
|
+
else:
|
|
55
|
+
return {"status": "skipped", "folder": name, "reason": "exists"}
|
|
56
|
+
|
|
57
|
+
shutil.copytree(src_folder, dest_folder)
|
|
58
|
+
|
|
59
|
+
return {"status": "copied", "folder": name, "dest": dest_folder}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def main():
|
|
63
|
+
if len(sys.argv) < 2:
|
|
64
|
+
print(json.dumps({
|
|
65
|
+
"ok": False,
|
|
66
|
+
"error": "Missing git repo URL",
|
|
67
|
+
"usage": "python pull_skills.py <git_repo_url> [--dest <dest_path>] [--branch <branch>] [--overwrite]"
|
|
68
|
+
}, ensure_ascii=False))
|
|
69
|
+
sys.exit(1)
|
|
70
|
+
|
|
71
|
+
repo_url = sys.argv[1]
|
|
72
|
+
dest = None
|
|
73
|
+
branch = None
|
|
74
|
+
overwrite = False
|
|
75
|
+
|
|
76
|
+
# Parse optional args
|
|
77
|
+
args = sys.argv[2:]
|
|
78
|
+
i = 0
|
|
79
|
+
while i < len(args):
|
|
80
|
+
a = args[i]
|
|
81
|
+
if a == "--dest" and i + 1 < len(args):
|
|
82
|
+
dest = args[i + 1]
|
|
83
|
+
i += 2
|
|
84
|
+
elif a == "--branch" and i + 1 < len(args):
|
|
85
|
+
branch = args[i + 1]
|
|
86
|
+
i += 2
|
|
87
|
+
elif a == "--overwrite":
|
|
88
|
+
overwrite = True
|
|
89
|
+
i += 1
|
|
90
|
+
else:
|
|
91
|
+
i += 1
|
|
92
|
+
|
|
93
|
+
if not dest:
|
|
94
|
+
dest = os.path.join(os.getcwd(), ".claude", "skills")
|
|
95
|
+
ensure_dir(dest)
|
|
96
|
+
|
|
97
|
+
tempdir = tempfile.mkdtemp(prefix="pull_skills_")
|
|
98
|
+
repo_dir = os.path.join(tempdir, "repo")
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
# Handle local directory vs git URL vs ZIP URL
|
|
102
|
+
if os.path.isdir(repo_url):
|
|
103
|
+
# Case 1: Local directory
|
|
104
|
+
try:
|
|
105
|
+
shutil.copytree(repo_url, repo_dir, dirs_exist_ok=True)
|
|
106
|
+
except Exception as e:
|
|
107
|
+
print(json.dumps({"ok": False, "stage": "copy_local", "error": str(e)}, ensure_ascii=False))
|
|
108
|
+
sys.exit(2)
|
|
109
|
+
|
|
110
|
+
elif repo_url.lower().endswith(".zip"):
|
|
111
|
+
# Case 2: ZIP URL (direct download)
|
|
112
|
+
import urllib.request
|
|
113
|
+
import zipfile
|
|
114
|
+
|
|
115
|
+
try:
|
|
116
|
+
zip_path = os.path.join(tempdir, "repo.zip")
|
|
117
|
+
# print(f"Downloading {repo_url}...", file=sys.stderr)
|
|
118
|
+
urllib.request.urlretrieve(repo_url, zip_path)
|
|
119
|
+
|
|
120
|
+
extract_dir = os.path.join(tempdir, "extracted")
|
|
121
|
+
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
|
|
122
|
+
zip_ref.extractall(extract_dir)
|
|
123
|
+
|
|
124
|
+
# Handle GitHub zip structure: usually extract_dir/<repo-branch>/...
|
|
125
|
+
# We want repo_dir to point to the folder containing the skills
|
|
126
|
+
contents = os.listdir(extract_dir)
|
|
127
|
+
if len(contents) == 1 and os.path.isdir(os.path.join(extract_dir, contents[0])):
|
|
128
|
+
# Move the inner content to repo_dir
|
|
129
|
+
shutil.move(os.path.join(extract_dir, contents[0]), repo_dir)
|
|
130
|
+
else:
|
|
131
|
+
shutil.move(extract_dir, repo_dir)
|
|
132
|
+
|
|
133
|
+
except Exception as e:
|
|
134
|
+
print(json.dumps({
|
|
135
|
+
"ok": False,
|
|
136
|
+
"stage": "download_zip",
|
|
137
|
+
"error": str(e),
|
|
138
|
+
"url": repo_url
|
|
139
|
+
}, ensure_ascii=False))
|
|
140
|
+
sys.exit(2)
|
|
141
|
+
|
|
142
|
+
else:
|
|
143
|
+
# Case 3: Git Clone
|
|
144
|
+
clone_cmd = ["git", "clone", "--depth", "1"]
|
|
145
|
+
if branch:
|
|
146
|
+
clone_cmd += ["--branch", branch]
|
|
147
|
+
clone_cmd += [repo_url, repo_dir]
|
|
148
|
+
|
|
149
|
+
cp = run(clone_cmd)
|
|
150
|
+
if cp.returncode != 0:
|
|
151
|
+
print(json.dumps({
|
|
152
|
+
"ok": False,
|
|
153
|
+
"stage": "clone",
|
|
154
|
+
"cmd": " ".join(clone_cmd),
|
|
155
|
+
"stderr": cp.stderr.strip(),
|
|
156
|
+
"stdout": cp.stdout.strip()
|
|
157
|
+
}, ensure_ascii=False))
|
|
158
|
+
sys.exit(2)
|
|
159
|
+
|
|
160
|
+
# Scan top-level subfolders
|
|
161
|
+
copied: List[Dict[str, str]] = []
|
|
162
|
+
skipped: List[Dict[str, str]] = []
|
|
163
|
+
|
|
164
|
+
for entry in os.listdir(repo_dir):
|
|
165
|
+
sub = os.path.join(repo_dir, entry)
|
|
166
|
+
if os.path.isdir(sub):
|
|
167
|
+
# Check for skill.md case-insensitively
|
|
168
|
+
res = copy_skill_folder(sub, dest, overwrite)
|
|
169
|
+
if res["status"] == "copied":
|
|
170
|
+
copied.append(res)
|
|
171
|
+
else:
|
|
172
|
+
# If "no SKILL.md found", we just skip silently effectively (or log as skipped)
|
|
173
|
+
# But to avoid cluttering output with non-skill folders, strict filtering is good.
|
|
174
|
+
pass
|
|
175
|
+
|
|
176
|
+
result = {
|
|
177
|
+
"ok": True,
|
|
178
|
+
"repo": repo_url,
|
|
179
|
+
"dest": dest,
|
|
180
|
+
"copied": copied,
|
|
181
|
+
"skipped": skipped
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
if __name__ == "__main__":
|
|
188
|
+
main()
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
cnhkmcp/__init__.py,sha256=
|
|
1
|
+
cnhkmcp/__init__.py,sha256=fp9yWADe1jqbEjs7fTd6zO9uISqJv_LSd1TIkv-roD8,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
4
|
cnhkmcp/untracked/arxiv_api.py,sha256=-E-Ub9K-DXAYaCjrbobyfQ9H97gaZBc7pL6xPEyVHec,9020
|
|
5
|
-
cnhkmcp/untracked/
|
|
6
|
-
cnhkmcp/untracked/
|
|
5
|
+
cnhkmcp/untracked/brain-consultant.md,sha256=6eqVPT-EVLZgP_kOt1HSibXixbIMeoubX8mS5o4OxBs,3696
|
|
6
|
+
cnhkmcp/untracked/forum_functions.py,sha256=VuyUaguA0OjJbVRN5Vy8UEFXSAviS3jhDSRWyyPOtfo,18975
|
|
7
|
+
cnhkmcp/untracked/platform_functions.py,sha256=bm7IOuUAfPqj9BmlViCD8e3J0mi3BGb4xh0vuL1H-Yk,111205
|
|
7
8
|
cnhkmcp/untracked/sample_mcp_config.json,sha256=QSFvZ086bxUQsvmLjcE6pL9ObzKn4FGnt9npWPo7Eps,1044
|
|
8
9
|
cnhkmcp/untracked/user_config.json,sha256=_INn1X1qIsITrmEno-BRlQOAGm9wnNCw-6B333DEvnk,695
|
|
9
10
|
cnhkmcp/untracked/示例参考文档_BRAIN_Alpha_Test_Requirements_and_Tips.md,sha256=W4dtQrqoTN72UyvIsvkGRF0HFOJLHSDeeSlbR3gqQg0,17133
|
|
@@ -12,7 +13,7 @@ cnhkmcp/untracked/示例工作流_BRAIN_6_Tips_Datafield_Exploration_Guide.md,sh
|
|
|
12
13
|
cnhkmcp/untracked/示例工作流_BRAIN_Alpha_Improvement_Workflow.md,sha256=XlWYREd_qXe1skdXIhkiGY05oDr_6KiBs1WkerY4S8U,5092
|
|
13
14
|
cnhkmcp/untracked/示例工作流_Dataset_Exploration_Expert_Manual.md,sha256=-C4fWdaBe9UzA5BDZz0Do2z8RaPWLslb6D0nTz6fqk4,24403
|
|
14
15
|
cnhkmcp/untracked/示例工作流_daily_report_workflow.md,sha256=6aNmPqWRn09XdQMRxoVTka9IYVOUv5LcWparHu16EfQ,9460
|
|
15
|
-
cnhkmcp/untracked/配置前运行我_安装必要依赖包.py,sha256=
|
|
16
|
+
cnhkmcp/untracked/配置前运行我_安装必要依赖包.py,sha256=OhIB-55xLcGov6KzWdl59NL5bmtveJXhRnHkk-5QvsY,6646
|
|
16
17
|
cnhkmcp/untracked/AI桌面插件/README.md,sha256=HMeOogrMdlPCcbWoeCwJaWgnkmsEOO4bGyfzqpLP4h4,1246
|
|
17
18
|
cnhkmcp/untracked/AI桌面插件/ace.log,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
19
|
cnhkmcp/untracked/AI桌面插件/config.json,sha256=NzuPhGVv3YFDBHvsSDdIX15SCbesxI9P_L9YGh1ateE,1986
|
|
@@ -124,10 +125,8 @@ cnhkmcp/untracked/APP/ssrn-3332513.pdf,sha256=GEwf1Srtk-fTvF03dhTEjXJstHBARIUg31
|
|
|
124
125
|
cnhkmcp/untracked/APP/usage.md,sha256=lPpA6qqAMvVsm41ikbRR1ZWFcuPSgqhMXOUig52eZCI,16164
|
|
125
126
|
cnhkmcp/untracked/APP/运行打开我.py,sha256=hNZ6ohu4fe1ySiH_oE5FhRunAUPt_e_zq7BymsiRHzg,100143
|
|
126
127
|
cnhkmcp/untracked/APP/Tranformer/Transformer.py,sha256=ViAu-YZjH3AVAQfZuaQx__w7KbhLNTghvauEiEWYAcc,189045
|
|
127
|
-
cnhkmcp/untracked/APP/Tranformer/ace.log,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
128
|
cnhkmcp/untracked/APP/Tranformer/ace_lib.py,sha256=nSnmM5zfI6lxIln1vctz7TCwjAWcljVXITy7R4gS3Q0,53947
|
|
129
129
|
cnhkmcp/untracked/APP/Tranformer/helpful_functions.py,sha256=Jc8gclRkvGx7el0XgTmZ67qwMSHrSluYheCUvzd6mbg,6640
|
|
130
|
-
cnhkmcp/untracked/APP/Tranformer/parsetab.py,sha256=29clH5xFEmKpqzRvrLN89QE8JFJNYFhH-gEFR4y7448,7650
|
|
131
130
|
cnhkmcp/untracked/APP/Tranformer/template_summary.txt,sha256=gWz5LFlPtOmw0JnLj68hgWsoSFNyA18uCJWIYWHLbe8,111054
|
|
132
131
|
cnhkmcp/untracked/APP/Tranformer/transformer_config.json,sha256=q3Io_1o_BAt-2GNAUKgCs_YR3exkiGFnUqykiPUC1jw,191
|
|
133
132
|
cnhkmcp/untracked/APP/Tranformer/validator.py,sha256=bvQt55-n2FHkeBA6Ui7tc0oLk_cnriDxt5z-IgaeKZA,50789
|
|
@@ -154,7 +153,6 @@ cnhkmcp/untracked/APP/hkSimulator/autosimulator.py,sha256=KHiwi4tCoLeOKg-14ZW06g
|
|
|
154
153
|
cnhkmcp/untracked/APP/hkSimulator/helpful_functions.py,sha256=Jc8gclRkvGx7el0XgTmZ67qwMSHrSluYheCUvzd6mbg,6640
|
|
155
154
|
cnhkmcp/untracked/APP/simulator/alpha_submitter.py,sha256=Wxx7DyFr0VwH709JhxXPj1Jiz8dShaVaYar3HTVMgv4,15652
|
|
156
155
|
cnhkmcp/untracked/APP/simulator/simulator_wqb.py,sha256=NsPSTs9jmVRguN5_y3qJRNr3hSFUs9JFQgh6y_mxyHw,23774
|
|
157
|
-
cnhkmcp/untracked/APP/simulator/wqb20260107015647.log,sha256=MvR-vBL6dz_-ZBvxbXtzsiJ4VnyYPBpymIeD8s0Gc2w,2105
|
|
158
156
|
cnhkmcp/untracked/APP/static/brain.js,sha256=pIRQdvyx6_LFzgRLiYfRhInr2WHd5dEjfM57-9VzUjg,20533
|
|
159
157
|
cnhkmcp/untracked/APP/static/decoder.js,sha256=sKyfgsleHvokCMw6Zp-XfcjixkT8cyMvw6ASDhN6b9I,61987
|
|
160
158
|
cnhkmcp/untracked/APP/static/feature_engineering.js,sha256=X6nis3FmytrNAE8mM-U6-VqmqZMAQ2X59Iy9RmOF5_8,73895
|
|
@@ -177,14 +175,22 @@ cnhkmcp/untracked/APP/templates/transformer_web.html,sha256=de5fNhtbdsMMyW5cygvv
|
|
|
177
175
|
cnhkmcp/untracked/APP/缘分一道桥/ace_lib.py,sha256=nSnmM5zfI6lxIln1vctz7TCwjAWcljVXITy7R4gS3Q0,53947
|
|
178
176
|
cnhkmcp/untracked/APP/缘分一道桥/brain_alpha_inspector.py,sha256=eSmGEPFQhqjR96hRCDMCbBSp3wmcwmymdC25Mxa5WdQ,24763
|
|
179
177
|
cnhkmcp/untracked/APP/缘分一道桥/helpful_functions.py,sha256=Jc8gclRkvGx7el0XgTmZ67qwMSHrSluYheCUvzd6mbg,6640
|
|
178
|
+
cnhkmcp/untracked/back_up/forum_functions.py,sha256=QW-CplAsqDkw-Wcwq-1tuZBq48dEO-vXZ8xw7X65EuE,42303
|
|
179
|
+
cnhkmcp/untracked/back_up/platform_functions.py,sha256=M2U2BWXZsqLBCFlZo_wv-UARDn4bNEM598db7WeBL8I,123340
|
|
180
180
|
cnhkmcp/untracked/mcp文件论坛版2_如果原版启动不了浏览器就试这个/forum_functions.py,sha256=VuyUaguA0OjJbVRN5Vy8UEFXSAviS3jhDSRWyyPOtfo,18975
|
|
181
181
|
cnhkmcp/untracked/mcp文件论坛版2_如果原版启动不了浏览器就试这个/platform_functions.py,sha256=bm7IOuUAfPqj9BmlViCD8e3J0mi3BGb4xh0vuL1H-Yk,111205
|
|
182
182
|
cnhkmcp/untracked/mcp文件论坛版2_如果原版启动不了浏览器就试这个/user_config.json,sha256=_INn1X1qIsITrmEno-BRlQOAGm9wnNCw-6B333DEvnk,695
|
|
183
183
|
cnhkmcp/untracked/mcp文件论坛版2_如果原版启动不了浏览器就试这个/让AI读这个文档来学会下载浏览器.md,sha256=v5QPSMjRDh52ZjgC4h8QjImnaqlVRLjTHGxmGjTo36g,3396
|
|
184
184
|
cnhkmcp/untracked/mcp文件论坛版2_如果原版启动不了浏览器就试这个/配置前运行我_安装必要依赖包.py,sha256=BnUyL5g6PaC62yEuS-8vcDSJ0oKu3k6jqQxi2jginuQ,6612
|
|
185
|
-
cnhkmcp
|
|
186
|
-
cnhkmcp
|
|
187
|
-
cnhkmcp
|
|
188
|
-
cnhkmcp
|
|
189
|
-
cnhkmcp
|
|
190
|
-
cnhkmcp
|
|
185
|
+
cnhkmcp/untracked/skills/Claude_Skill_Creation_Guide.md,sha256=Wx4w8deBkuw0UcSwzNNQdRIuCqDXGk3-fRQBWcPQivw,5025
|
|
186
|
+
cnhkmcp/untracked/skills/expression_verifier/SKILL.md,sha256=7oGzMIXUJzDCtbxND6QWmh6azkLqoFJNURIh-F-aPUQ,2213
|
|
187
|
+
cnhkmcp/untracked/skills/expression_verifier/scripts/validator.py,sha256=bvQt55-n2FHkeBA6Ui7tc0oLk_cnriDxt5z-IgaeKZA,50789
|
|
188
|
+
cnhkmcp/untracked/skills/expression_verifier/scripts/verify_expr.py,sha256=zDSlYf0XlkyML-fcL4wld445RMbztt4pDSP5b6W6JKQ,1659
|
|
189
|
+
cnhkmcp/untracked/skills/pull_BRAINSkill/SKILL.md,sha256=QyXQ0wr9LeZyKqkvSTto72bX33LgtB1UjoeUDj-3igg,2413
|
|
190
|
+
cnhkmcp/untracked/skills/pull_BRAINSkill/scripts/pull_skills.py,sha256=6v3Z3cc9_qKvBj7C6y2jWY1pAd76SA3JmiVj_KkZkmw,6341
|
|
191
|
+
cnhkmcp-2.1.6.dist-info/licenses/LICENSE,sha256=QLxO2eNMnJQEdI_R1UV2AOD-IvuA8zVrkHWA4D9gtoc,1081
|
|
192
|
+
cnhkmcp-2.1.6.dist-info/METADATA,sha256=Ghajp8I_BwXkG4SsH0MXPvEyD1VHh3KOdFNaSJ98FRg,5171
|
|
193
|
+
cnhkmcp-2.1.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
194
|
+
cnhkmcp-2.1.6.dist-info/entry_points.txt,sha256=lTQieVyIvjhSMK4fT-XwnccY-JBC1H4vVQ3V9dDM-Pc,70
|
|
195
|
+
cnhkmcp-2.1.6.dist-info/top_level.txt,sha256=x--ibUcSgOS9Z_RWK2Qc-vfs7DaXQN-WMaaxEETJ1Bw,8
|
|
196
|
+
cnhkmcp-2.1.6.dist-info/RECORD,,
|
|
File without changes
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
# parsetab.py
|
|
3
|
-
# This file is automatically generated. Do not edit.
|
|
4
|
-
# pylint: disable=W,C,R
|
|
5
|
-
_tabversion = '3.10'
|
|
6
|
-
|
|
7
|
-
_lr_method = 'LALR'
|
|
8
|
-
|
|
9
|
-
_lr_signature = 'ASSIGN BOOLEAN CATEGORY COMMA DIVIDE EQUAL FIELD FUNCTION GREATER GREATEREQUAL IDENTIFIER LESS LESSEQUAL LPAREN MINUS NOTEQUAL NUMBER PLUS RPAREN STRING TIMESexpression : comparison\n| expression EQUAL comparison\n| expression NOTEQUAL comparison\n| expression GREATER comparison\n| expression LESS comparison\n| expression GREATEREQUAL comparison\n| expression LESSEQUAL comparisoncomparison : term\n| comparison PLUS term\n| comparison MINUS termterm : factor\n| term TIMES factor\n| term DIVIDE factorfactor : NUMBER\n| STRING\n| FIELD\n| CATEGORY\n| IDENTIFIER\n| BOOLEAN\n| MINUS factor\n| LPAREN expression RPAREN\n| function_callfunction_call : FUNCTION LPAREN args RPARENargs : arg_list\n| emptyarg_list : arg\n| arg_list COMMA argarg : expression\n| IDENTIFIER ASSIGN expressionempty :'
|
|
10
|
-
|
|
11
|
-
_lr_action_items = {'NUMBER':([0,4,12,15,16,17,18,19,20,21,22,23,24,27,46,47,],[6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,]),'STRING':([0,4,12,15,16,17,18,19,20,21,22,23,24,27,46,47,],[7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,]),'FIELD':([0,4,12,15,16,17,18,19,20,21,22,23,24,27,46,47,],[8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,]),'CATEGORY':([0,4,12,15,16,17,18,19,20,21,22,23,24,27,46,47,],[9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,]),'IDENTIFIER':([0,4,12,15,16,17,18,19,20,21,22,23,24,27,46,47,],[10,10,10,10,10,10,10,10,10,10,10,10,10,44,44,10,]),'BOOLEAN':([0,4,12,15,16,17,18,19,20,21,22,23,24,27,46,47,],[11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,]),'MINUS':([0,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,44,45,46,47,],[4,22,-8,4,-11,-14,-15,-16,-17,-18,-19,4,-22,4,4,4,4,4,4,4,4,4,4,-20,4,22,22,22,22,22,22,-9,-10,-12,-13,-21,-18,-23,4,4,]),'LPAREN':([0,4,12,14,15,16,17,18,19,20,21,22,23,24,27,46,47,],[12,12,12,27,12,12,12,12,12,12,12,12,12,12,12,12,12,]),'FUNCTION':([0,4,12,15,16,17,18,19,20,21,22,23,24,27,46,47,],[14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,]),'$end':([1,2,3,5,6,7,8,9,10,11,13,25,28,29,30,31,32,33,34,35,36,37,38,45,],[0,-1,-8,-11,-14,-15,-16,-17,-18,-19,-22,-20,-2,-3,-4,-5,-6,-7,-9,-10,-12,-13,-21,-23,]),'EQUAL':([1,2,3,5,6,7,8,9,10,11,13,25,26,28,29,30,31,32,33,34,35,36,37,38,43,44,45,49,],[15,-1,-8,-11,-14,-15,-16,-17,-18,-19,-22,-20,15,-2,-3,-4,-5,-6,-7,-9,-10,-12,-13,-21,15,-18,-23,15,]),'NOTEQUAL':([1,2,3,5,6,7,8,9,10,11,13,25,26,28,29,30,31,32,33,34,35,36,37,38,43,44,45,49,],[16,-1,-8,-11,-14,-15,-16,-17,-18,-19,-22,-20,16,-2,-3,-4,-5,-6,-7,-9,-10,-12,-13,-21,16,-18,-23,16,]),'GREATER':([1,2,3,5,6,7,8,9,10,11,13,25,26,28,29,30,31,32,33,34,35,36,37,38,43,44,45,49,],[17,-1,-8,-11,-14,-15,-16,-17,-18,-19,-22,-20,17,-2,-3,-4,-5,-6,-7,-9,-10,-12,-13,-21,17,-18,-23,17,]),'LESS':([1,2,3,5,6,7,8,9,10,11,13,25,26,28,29,30,31,32,33,34,35,36,37,38,43,44,45,49,],[18,-1,-8,-11,-14,-15,-16,-17,-18,-19,-22,-20,18,-2,-3,-4,-5,-6,-7,-9,-10,-12,-13,-21,18,-18,-23,18,]),'GREATEREQUAL':([1,2,3,5,6,7,8,9,10,11,13,25,26,28,29,30,31,32,33,34,35,36,37,38,43,44,45,49,],[19,-1,-8,-11,-14,-15,-16,-17,-18,-19,-22,-20,19,-2,-3,-4,-5,-6,-7,-9,-10,-12,-13,-21,19,-18,-23,19,]),'LESSEQUAL':([1,2,3,5,6,7,8,9,10,11,13,25,26,28,29,30,31,32,33,34,35,36,37,38,43,44,45,49,],[20,-1,-8,-11,-14,-15,-16,-17,-18,-19,-22,-20,20,-2,-3,-4,-5,-6,-7,-9,-10,-12,-13,-21,20,-18,-23,20,]),'RPAREN':([2,3,5,6,7,8,9,10,11,13,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,48,49,],[-1,-8,-11,-14,-15,-16,-17,-18,-19,-22,-20,38,-30,-2,-3,-4,-5,-6,-7,-9,-10,-12,-13,-21,45,-24,-25,-26,-28,-18,-23,-27,-29,]),'COMMA':([2,3,5,6,7,8,9,10,11,13,25,28,29,30,31,32,33,34,35,36,37,38,40,42,43,44,45,48,49,],[-1,-8,-11,-14,-15,-16,-17,-18,-19,-22,-20,-2,-3,-4,-5,-6,-7,-9,-10,-12,-13,-21,46,-26,-28,-18,-23,-27,-29,]),'PLUS':([2,3,5,6,7,8,9,10,11,13,25,28,29,30,31,32,33,34,35,36,37,38,44,45,],[21,-8,-11,-14,-15,-16,-17,-18,-19,-22,-20,21,21,21,21,21,21,-9,-10,-12,-13,-21,-18,-23,]),'TIMES':([3,5,6,7,8,9,10,11,13,25,34,35,36,37,38,44,45,],[23,-11,-14,-15,-16,-17,-18,-19,-22,-20,23,23,-12,-13,-21,-18,-23,]),'DIVIDE':([3,5,6,7,8,9,10,11,13,25,34,35,36,37,38,44,45,],[24,-11,-14,-15,-16,-17,-18,-19,-22,-20,24,24,-12,-13,-21,-18,-23,]),'ASSIGN':([44,],[47,]),}
|
|
12
|
-
|
|
13
|
-
_lr_action = {}
|
|
14
|
-
for _k, _v in _lr_action_items.items():
|
|
15
|
-
for _x,_y in zip(_v[0],_v[1]):
|
|
16
|
-
if not _x in _lr_action: _lr_action[_x] = {}
|
|
17
|
-
_lr_action[_x][_k] = _y
|
|
18
|
-
del _lr_action_items
|
|
19
|
-
|
|
20
|
-
_lr_goto_items = {'expression':([0,12,27,46,47,],[1,26,43,43,49,]),'comparison':([0,12,15,16,17,18,19,20,27,46,47,],[2,2,28,29,30,31,32,33,2,2,2,]),'term':([0,12,15,16,17,18,19,20,21,22,27,46,47,],[3,3,3,3,3,3,3,3,34,35,3,3,3,]),'factor':([0,4,12,15,16,17,18,19,20,21,22,23,24,27,46,47,],[5,25,5,5,5,5,5,5,5,5,5,36,37,5,5,5,]),'function_call':([0,4,12,15,16,17,18,19,20,21,22,23,24,27,46,47,],[13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,]),'args':([27,],[39,]),'arg_list':([27,],[40,]),'empty':([27,],[41,]),'arg':([27,46,],[42,48,]),}
|
|
21
|
-
|
|
22
|
-
_lr_goto = {}
|
|
23
|
-
for _k, _v in _lr_goto_items.items():
|
|
24
|
-
for _x, _y in zip(_v[0], _v[1]):
|
|
25
|
-
if not _x in _lr_goto: _lr_goto[_x] = {}
|
|
26
|
-
_lr_goto[_x][_k] = _y
|
|
27
|
-
del _lr_goto_items
|
|
28
|
-
_lr_productions = [
|
|
29
|
-
("S' -> expression","S'",1,None,None,None),
|
|
30
|
-
('expression -> comparison','expression',1,'p_expression','validator.py',383),
|
|
31
|
-
('expression -> expression EQUAL comparison','expression',3,'p_expression','validator.py',384),
|
|
32
|
-
('expression -> expression NOTEQUAL comparison','expression',3,'p_expression','validator.py',385),
|
|
33
|
-
('expression -> expression GREATER comparison','expression',3,'p_expression','validator.py',386),
|
|
34
|
-
('expression -> expression LESS comparison','expression',3,'p_expression','validator.py',387),
|
|
35
|
-
('expression -> expression GREATEREQUAL comparison','expression',3,'p_expression','validator.py',388),
|
|
36
|
-
('expression -> expression LESSEQUAL comparison','expression',3,'p_expression','validator.py',389),
|
|
37
|
-
('comparison -> term','comparison',1,'p_comparison','validator.py',396),
|
|
38
|
-
('comparison -> comparison PLUS term','comparison',3,'p_comparison','validator.py',397),
|
|
39
|
-
('comparison -> comparison MINUS term','comparison',3,'p_comparison','validator.py',398),
|
|
40
|
-
('term -> factor','term',1,'p_term','validator.py',405),
|
|
41
|
-
('term -> term TIMES factor','term',3,'p_term','validator.py',406),
|
|
42
|
-
('term -> term DIVIDE factor','term',3,'p_term','validator.py',407),
|
|
43
|
-
('factor -> NUMBER','factor',1,'p_factor','validator.py',414),
|
|
44
|
-
('factor -> STRING','factor',1,'p_factor','validator.py',415),
|
|
45
|
-
('factor -> FIELD','factor',1,'p_factor','validator.py',416),
|
|
46
|
-
('factor -> CATEGORY','factor',1,'p_factor','validator.py',417),
|
|
47
|
-
('factor -> IDENTIFIER','factor',1,'p_factor','validator.py',418),
|
|
48
|
-
('factor -> BOOLEAN','factor',1,'p_factor','validator.py',419),
|
|
49
|
-
('factor -> MINUS factor','factor',2,'p_factor','validator.py',420),
|
|
50
|
-
('factor -> LPAREN expression RPAREN','factor',3,'p_factor','validator.py',421),
|
|
51
|
-
('factor -> function_call','factor',1,'p_factor','validator.py',422),
|
|
52
|
-
('function_call -> FUNCTION LPAREN args RPAREN','function_call',4,'p_function_call','validator.py',450),
|
|
53
|
-
('args -> arg_list','args',1,'p_args','validator.py',454),
|
|
54
|
-
('args -> empty','args',1,'p_args','validator.py',455),
|
|
55
|
-
('arg_list -> arg','arg_list',1,'p_arg_list','validator.py',462),
|
|
56
|
-
('arg_list -> arg_list COMMA arg','arg_list',3,'p_arg_list','validator.py',463),
|
|
57
|
-
('arg -> expression','arg',1,'p_arg','validator.py',470),
|
|
58
|
-
('arg -> IDENTIFIER ASSIGN expression','arg',3,'p_arg','validator.py',471),
|
|
59
|
-
('empty -> <empty>','empty',0,'p_empty','validator.py',478),
|
|
60
|
-
]
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# INFO 2026-01-07 01:56:51,081
|
|
2
|
-
<WQBSession ['1797590122@qq.com']>.locate_field(...) [
|
|
3
|
-
https://api.worldquantbrain.com/data-fields/open
|
|
4
|
-
]:
|
|
5
|
-
|
|
6
|
-
# INFO 2026-01-07 01:56:51,087
|
|
7
|
-
================================================================================
|
|
8
|
-
|
|
9
|
-
# INFO 2026-01-07 01:56:51,088
|
|
10
|
-
[MULTI-SIMULATION MODE] ������multi simulation�ļ�¼����������1��multi simulation����8��alpha������轫ʵ�ʻز������Ըó������ŵõ�ʵ������ɵ�Alpha������
|
|
11
|
-
|
|
12
|
-
# INFO 2026-01-07 01:56:51,088
|
|
13
|
-
================================================================================
|
|
14
|
-
|
|
15
|
-
# INFO 2026-01-07 01:56:51,130
|
|
16
|
-
<WQBSession ['1797590122@qq.com']>.concurrent_simulate(...) [start 11828, 6]:
|
|
17
|
-
|
|
18
|
-
# INFO 2026-01-07 02:08:55,694
|
|
19
|
-
<WQBSession ['1797590122@qq.com']>.simulate(...) [
|
|
20
|
-
https://api.worldquantbrain.com/simulations/2kWcHLe0Z4KkbAKGsKQxEsm
|
|
21
|
-
]: 10/11828 = 0%
|
|
22
|
-
|
|
23
|
-
# INFO 2026-01-07 02:23:11,423
|
|
24
|
-
<WQBSession ['1797590122@qq.com']>.simulate(...) [
|
|
25
|
-
https://api.worldquantbrain.com/simulations/1Aky9lZk4PEcIh15zvdUIIf
|
|
26
|
-
]: 20/11828 = 0%
|
|
27
|
-
|
|
28
|
-
# INFO 2026-01-07 02:29:55,485
|
|
29
|
-
<WQBSession ['1797590122@qq.com']>.simulate(...) [
|
|
30
|
-
https://api.worldquantbrain.com/simulations/1Umc6I7Ak4OD955sX7QaJIb
|
|
31
|
-
]: 30/11828 = 0%
|
|
32
|
-
|
|
33
|
-
# INFO 2026-01-07 02:43:02,494
|
|
34
|
-
<WQBSession ['1797590122@qq.com']>.simulate(...) [
|
|
35
|
-
https://api.worldquantbrain.com/simulations/1Z61Kb2s651Vb5ObsDyLioG
|
|
36
|
-
]: 40/11828 = 0%
|
|
37
|
-
|
|
38
|
-
# INFO 2026-01-07 02:56:54,333
|
|
39
|
-
<WQBSession ['1797590122@qq.com']>.simulate(...) [
|
|
40
|
-
https://api.worldquantbrain.com/simulations/2WFrTzgAq4z78E93OYPKyTf
|
|
41
|
-
]: 50/11828 = 0%
|
|
42
|
-
|
|
43
|
-
# INFO 2026-01-07 03:08:02,952
|
|
44
|
-
<WQBSession ['1797590122@qq.com']>.simulate(...) [
|
|
45
|
-
https://api.worldquantbrain.com/simulations/4u1BUVfjX5eb8OU35Wdpg4y
|
|
46
|
-
]: 60/11828 = 0%
|
|
47
|
-
|
|
48
|
-
# INFO 2026-01-07 03:16:42,206
|
|
49
|
-
<WQBSession ['1797590122@qq.com']>.simulate(...) [
|
|
50
|
-
https://api.worldquantbrain.com/simulations/1mTPB2bxk4FiaS111Xhc248m
|
|
51
|
-
]: 70/11828 = 0%
|
|
52
|
-
|
|
53
|
-
# INFO 2026-01-07 03:27:58,031
|
|
54
|
-
<WQBSession ['1797590122@qq.com']>.simulate(...) [
|
|
55
|
-
https://api.worldquantbrain.com/simulations/1sRhFo2So4Uk96H185rAX3sq
|
|
56
|
-
]: 80/11828 = 0%
|
|
57
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|