excalidraw-mcp 0.1.2__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.
- excalidraw_mcp-0.1.2/.gitignore +26 -0
- excalidraw_mcp-0.1.2/.idea/.gitignore +8 -0
- excalidraw_mcp-0.1.2/.idea/excalidraw-mcp.iml +21 -0
- excalidraw_mcp-0.1.2/.idea/inspectionProfiles/Project_Default.xml +29 -0
- excalidraw_mcp-0.1.2/.idea/inspectionProfiles/profiles_settings.xml +6 -0
- excalidraw_mcp-0.1.2/.idea/misc.xml +7 -0
- excalidraw_mcp-0.1.2/.idea/modules.xml +8 -0
- excalidraw_mcp-0.1.2/.idea/ruff.xml +6 -0
- excalidraw_mcp-0.1.2/.idea/vcs.xml +6 -0
- excalidraw_mcp-0.1.2/.idea/webResources.xml +14 -0
- excalidraw_mcp-0.1.2/.idea/workspace.xml +165 -0
- excalidraw_mcp-0.1.2/.pre-commit-config.yaml +96 -0
- excalidraw_mcp-0.1.2/CLAUDE.md +263 -0
- excalidraw_mcp-0.1.2/LICENSE +29 -0
- excalidraw_mcp-0.1.2/PKG-INFO +595 -0
- excalidraw_mcp-0.1.2/README.md +569 -0
- excalidraw_mcp-0.1.2/RULES.md +267 -0
- excalidraw_mcp-0.1.2/SETUP.md +410 -0
- excalidraw_mcp-0.1.2/example.mcp.json +12 -0
- excalidraw_mcp-0.1.2/excalidraw_mcp/__init__.py +1 -0
- excalidraw_mcp-0.1.2/excalidraw_mcp/__main__.py +9 -0
- excalidraw_mcp-0.1.2/excalidraw_mcp/config.py +200 -0
- excalidraw_mcp-0.1.2/excalidraw_mcp/element_factory.py +262 -0
- excalidraw_mcp-0.1.2/excalidraw_mcp/http_client.py +238 -0
- excalidraw_mcp-0.1.2/excalidraw_mcp/mcp_tools.py +409 -0
- excalidraw_mcp-0.1.2/excalidraw_mcp/process_manager.py +209 -0
- excalidraw_mcp-0.1.2/excalidraw_mcp/server.py +67 -0
- excalidraw_mcp-0.1.2/frontend/index.html +284 -0
- excalidraw_mcp-0.1.2/frontend/src/App.tsx +461 -0
- excalidraw_mcp-0.1.2/frontend/src/main.tsx +14 -0
- excalidraw_mcp-0.1.2/jest.config.cjs +43 -0
- excalidraw_mcp-0.1.2/package.json +110 -0
- excalidraw_mcp-0.1.2/pyproject.toml +257 -0
- excalidraw_mcp-0.1.2/src/config.ts +205 -0
- excalidraw_mcp-0.1.2/src/middleware/auth.ts +171 -0
- excalidraw_mcp-0.1.2/src/middleware/security.ts +187 -0
- excalidraw_mcp-0.1.2/src/middleware/validation.ts +243 -0
- excalidraw_mcp-0.1.2/src/server.ts +535 -0
- excalidraw_mcp-0.1.2/src/storage/element-storage.ts +419 -0
- excalidraw_mcp-0.1.2/src/types.ts +233 -0
- excalidraw_mcp-0.1.2/src/utils/delta-compression.ts +310 -0
- excalidraw_mcp-0.1.2/src/utils/logger.ts +27 -0
- excalidraw_mcp-0.1.2/src/websocket/message-batcher.ts +320 -0
- excalidraw_mcp-0.1.2/test/config.test.ts +90 -0
- excalidraw_mcp-0.1.2/test/setup.ts +123 -0
- excalidraw_mcp-0.1.2/test/storage/element-storage.test.ts +288 -0
- excalidraw_mcp-0.1.2/test/unit/delta-compression.test.ts +397 -0
- excalidraw_mcp-0.1.2/tests/__init__.py +1 -0
- excalidraw_mcp-0.1.2/tests/conftest.py +444 -0
- excalidraw_mcp-0.1.2/tests/integration/test_mcp_tools.py +286 -0
- excalidraw_mcp-0.1.2/tests/performance/test_element_performance.py +366 -0
- excalidraw_mcp-0.1.2/tests/security/test_input_validation.py +293 -0
- excalidraw_mcp-0.1.2/tests/test_config.py +163 -0
- excalidraw_mcp-0.1.2/tests/test_http_client.py +225 -0
- excalidraw_mcp-0.1.2/tests/unit/test_config.py +293 -0
- excalidraw_mcp-0.1.2/tests/unit/test_element_factory.py +213 -0
- excalidraw_mcp-0.1.2/tsconfig.json +65 -0
- excalidraw_mcp-0.1.2/uv.lock +2653 -0
- excalidraw_mcp-0.1.2/vite.config.js +27 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Dependencies
|
|
2
|
+
node_modules/
|
|
3
|
+
package-lock.json
|
|
4
|
+
|
|
5
|
+
# Build artifacts
|
|
6
|
+
dist/
|
|
7
|
+
public/dist/
|
|
8
|
+
|
|
9
|
+
# Environment files
|
|
10
|
+
.env
|
|
11
|
+
|
|
12
|
+
# Logs
|
|
13
|
+
*.log
|
|
14
|
+
|
|
15
|
+
# Editor artifacts
|
|
16
|
+
.cursor/
|
|
17
|
+
.claude/
|
|
18
|
+
|
|
19
|
+
# Development artifacts
|
|
20
|
+
*.excalidraw
|
|
21
|
+
|
|
22
|
+
docs/
|
|
23
|
+
*/__pycache__/
|
|
24
|
+
/.benchmarks/
|
|
25
|
+
/.mcp.json
|
|
26
|
+
/.envrc
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<module type="PYTHON_MODULE" version="4">
|
|
3
|
+
<component name="NewModuleRootManager">
|
|
4
|
+
<content url="file://$MODULE_DIR$">
|
|
5
|
+
<sourceFolder url="file://$MODULE_DIR$/excalidraw_mcp" isTestSource="false" />
|
|
6
|
+
<sourceFolder url="file://$MODULE_DIR$/frontend" isTestSource="false" />
|
|
7
|
+
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
|
8
|
+
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
|
9
|
+
<sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" />
|
|
10
|
+
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
|
11
|
+
<excludeFolder url="file://$MODULE_DIR$/dist" />
|
|
12
|
+
<excludeFolder url="file://$MODULE_DIR$/node_modules" />
|
|
13
|
+
</content>
|
|
14
|
+
<orderEntry type="jdk" jdkName="Python 3.12 (excalidraw-mcp)" jdkType="Python SDK" />
|
|
15
|
+
<orderEntry type="sourceFolder" forTests="false" />
|
|
16
|
+
</component>
|
|
17
|
+
<component name="PyDocumentationSettings">
|
|
18
|
+
<option name="format" value="PLAIN" />
|
|
19
|
+
<option name="myDocStringFormat" value="Plain" />
|
|
20
|
+
</component>
|
|
21
|
+
</module>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<component name="InspectionProjectProfileManager">
|
|
2
|
+
<profile version="1.0">
|
|
3
|
+
<option name="myName" value="Project Default" />
|
|
4
|
+
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
|
|
5
|
+
<inspection_tool class="JSHint" enabled="true" level="ERROR" enabled_by_default="true" />
|
|
6
|
+
<inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
|
7
|
+
<option name="ignoredErrors">
|
|
8
|
+
<list>
|
|
9
|
+
<option value="N802" />
|
|
10
|
+
</list>
|
|
11
|
+
</option>
|
|
12
|
+
</inspection_tool>
|
|
13
|
+
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
|
14
|
+
<option name="ignoredIdentifiers">
|
|
15
|
+
<list>
|
|
16
|
+
<option value="google.cloud.storage" />
|
|
17
|
+
<option value="firebase.ic" />
|
|
18
|
+
<option value="templates.ic" />
|
|
19
|
+
<option value="cloud_storage.ic" />
|
|
20
|
+
<option value="memorystore.ic" />
|
|
21
|
+
<option value="main.ic" />
|
|
22
|
+
<option value="models.ic" />
|
|
23
|
+
<option value="sys._getframe" />
|
|
24
|
+
</list>
|
|
25
|
+
</option>
|
|
26
|
+
</inspection_tool>
|
|
27
|
+
<inspection_tool class="PyprojectInspection" enabled="false" level="WARNING" enabled_by_default="false" />
|
|
28
|
+
</profile>
|
|
29
|
+
</component>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project version="4">
|
|
3
|
+
<component name="Black">
|
|
4
|
+
<option name="sdkName" value="Python 3.12 (excalidraw-mcp)" />
|
|
5
|
+
</component>
|
|
6
|
+
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12 (excalidraw-mcp)" project-jdk-type="Python SDK" />
|
|
7
|
+
</project>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project version="4">
|
|
3
|
+
<component name="ProjectModuleManager">
|
|
4
|
+
<modules>
|
|
5
|
+
<module fileurl="file://$PROJECT_DIR$/.idea/excalidraw-mcp.iml" filepath="$PROJECT_DIR$/.idea/excalidraw-mcp.iml" />
|
|
6
|
+
</modules>
|
|
7
|
+
</component>
|
|
8
|
+
</project>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project version="4">
|
|
3
|
+
<component name="WebResourcesPaths">
|
|
4
|
+
<contentEntries>
|
|
5
|
+
<entry url="file://$PROJECT_DIR$">
|
|
6
|
+
<entryData>
|
|
7
|
+
<resourceRoots>
|
|
8
|
+
<path value="file://$PROJECT_DIR$/node_modules" />
|
|
9
|
+
</resourceRoots>
|
|
10
|
+
</entryData>
|
|
11
|
+
</entry>
|
|
12
|
+
</contentEntries>
|
|
13
|
+
</component>
|
|
14
|
+
</project>
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project version="4">
|
|
3
|
+
<component name="AutoImportSettings">
|
|
4
|
+
<option name="autoReloadType" value="SELECTIVE" />
|
|
5
|
+
</component>
|
|
6
|
+
<component name="ChangeListManager">
|
|
7
|
+
<list default="true" id="1ce40c62-8e46-4cda-886d-fb114b426e4d" name="Changes" comment="">
|
|
8
|
+
<change afterPath="$PROJECT_DIR$/.pre-commit-config.yaml" afterDir="false" />
|
|
9
|
+
<change beforePath="$PROJECT_DIR$/.gitignore" beforeDir="false" afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
|
|
10
|
+
<change beforePath="$PROJECT_DIR$/CLAUDE.md" beforeDir="false" afterPath="$PROJECT_DIR$/CLAUDE.md" afterDir="false" />
|
|
11
|
+
<change beforePath="$PROJECT_DIR$/LICENSE" beforeDir="false" afterPath="$PROJECT_DIR$/LICENSE" afterDir="false" />
|
|
12
|
+
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
|
|
13
|
+
<change beforePath="$PROJECT_DIR$/RULES.md" beforeDir="false" afterPath="$PROJECT_DIR$/RULES.md" afterDir="false" />
|
|
14
|
+
<change beforePath="$PROJECT_DIR$/SETUP.md" beforeDir="false" afterPath="$PROJECT_DIR$/SETUP.md" afterDir="false" />
|
|
15
|
+
<change beforePath="$PROJECT_DIR$/example.mcp.json" beforeDir="false" afterPath="$PROJECT_DIR$/example.mcp.json" afterDir="false" />
|
|
16
|
+
<change beforePath="$PROJECT_DIR$/excalidraw_mcp/__init__.py" beforeDir="false" afterPath="$PROJECT_DIR$/excalidraw_mcp/__init__.py" afterDir="false" />
|
|
17
|
+
<change beforePath="$PROJECT_DIR$/excalidraw_mcp/__main__.py" beforeDir="false" afterPath="$PROJECT_DIR$/excalidraw_mcp/__main__.py" afterDir="false" />
|
|
18
|
+
<change beforePath="$PROJECT_DIR$/excalidraw_mcp/__pycache__/__init__.cpython-313.pyc" beforeDir="false" />
|
|
19
|
+
<change beforePath="$PROJECT_DIR$/excalidraw_mcp/__pycache__/server.cpython-313.pyc" beforeDir="false" />
|
|
20
|
+
<change beforePath="$PROJECT_DIR$/excalidraw_mcp/config.py" beforeDir="false" afterPath="$PROJECT_DIR$/excalidraw_mcp/config.py" afterDir="false" />
|
|
21
|
+
<change beforePath="$PROJECT_DIR$/excalidraw_mcp/element_factory.py" beforeDir="false" afterPath="$PROJECT_DIR$/excalidraw_mcp/element_factory.py" afterDir="false" />
|
|
22
|
+
<change beforePath="$PROJECT_DIR$/excalidraw_mcp/http_client.py" beforeDir="false" afterPath="$PROJECT_DIR$/excalidraw_mcp/http_client.py" afterDir="false" />
|
|
23
|
+
<change beforePath="$PROJECT_DIR$/excalidraw_mcp/mcp_tools.py" beforeDir="false" afterPath="$PROJECT_DIR$/excalidraw_mcp/mcp_tools.py" afterDir="false" />
|
|
24
|
+
<change beforePath="$PROJECT_DIR$/excalidraw_mcp/process_manager.py" beforeDir="false" afterPath="$PROJECT_DIR$/excalidraw_mcp/process_manager.py" afterDir="false" />
|
|
25
|
+
<change beforePath="$PROJECT_DIR$/excalidraw_mcp/server.py" beforeDir="false" afterPath="$PROJECT_DIR$/excalidraw_mcp/server.py" afterDir="false" />
|
|
26
|
+
<change beforePath="$PROJECT_DIR$/frontend/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/frontend/index.html" afterDir="false" />
|
|
27
|
+
<change beforePath="$PROJECT_DIR$/frontend/src/App.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/frontend/src/App.tsx" afterDir="false" />
|
|
28
|
+
<change beforePath="$PROJECT_DIR$/frontend/src/main.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/frontend/src/main.tsx" afterDir="false" />
|
|
29
|
+
<change beforePath="$PROJECT_DIR$/jest.config.cjs" beforeDir="false" afterPath="$PROJECT_DIR$/jest.config.cjs" afterDir="false" />
|
|
30
|
+
<change beforePath="$PROJECT_DIR$/pyproject.toml" beforeDir="false" afterPath="$PROJECT_DIR$/pyproject.toml" afterDir="false" />
|
|
31
|
+
<change beforePath="$PROJECT_DIR$/src/config.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/config.ts" afterDir="false" />
|
|
32
|
+
<change beforePath="$PROJECT_DIR$/src/middleware/auth.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/middleware/auth.ts" afterDir="false" />
|
|
33
|
+
<change beforePath="$PROJECT_DIR$/src/middleware/security.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/middleware/security.ts" afterDir="false" />
|
|
34
|
+
<change beforePath="$PROJECT_DIR$/src/middleware/validation.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/middleware/validation.ts" afterDir="false" />
|
|
35
|
+
<change beforePath="$PROJECT_DIR$/src/server.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/server.ts" afterDir="false" />
|
|
36
|
+
<change beforePath="$PROJECT_DIR$/src/storage/element-storage.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/storage/element-storage.ts" afterDir="false" />
|
|
37
|
+
<change beforePath="$PROJECT_DIR$/src/types.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/types.ts" afterDir="false" />
|
|
38
|
+
<change beforePath="$PROJECT_DIR$/src/utils/delta-compression.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/utils/delta-compression.ts" afterDir="false" />
|
|
39
|
+
<change beforePath="$PROJECT_DIR$/src/utils/logger.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/utils/logger.ts" afterDir="false" />
|
|
40
|
+
<change beforePath="$PROJECT_DIR$/src/websocket/message-batcher.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/websocket/message-batcher.ts" afterDir="false" />
|
|
41
|
+
<change beforePath="$PROJECT_DIR$/test/config.test.ts" beforeDir="false" afterPath="$PROJECT_DIR$/test/config.test.ts" afterDir="false" />
|
|
42
|
+
<change beforePath="$PROJECT_DIR$/test/setup.ts" beforeDir="false" afterPath="$PROJECT_DIR$/test/setup.ts" afterDir="false" />
|
|
43
|
+
<change beforePath="$PROJECT_DIR$/test/storage/element-storage.test.ts" beforeDir="false" afterPath="$PROJECT_DIR$/test/storage/element-storage.test.ts" afterDir="false" />
|
|
44
|
+
<change beforePath="$PROJECT_DIR$/test/unit/delta-compression.test.ts" beforeDir="false" afterPath="$PROJECT_DIR$/test/unit/delta-compression.test.ts" afterDir="false" />
|
|
45
|
+
<change beforePath="$PROJECT_DIR$/tests/__init__.py" beforeDir="false" afterPath="$PROJECT_DIR$/tests/__init__.py" afterDir="false" />
|
|
46
|
+
<change beforePath="$PROJECT_DIR$/tests/conftest.py" beforeDir="false" afterPath="$PROJECT_DIR$/tests/conftest.py" afterDir="false" />
|
|
47
|
+
<change beforePath="$PROJECT_DIR$/tests/integration/test_mcp_tools.py" beforeDir="false" afterPath="$PROJECT_DIR$/tests/integration/test_mcp_tools.py" afterDir="false" />
|
|
48
|
+
<change beforePath="$PROJECT_DIR$/tests/performance/test_element_performance.py" beforeDir="false" afterPath="$PROJECT_DIR$/tests/performance/test_element_performance.py" afterDir="false" />
|
|
49
|
+
<change beforePath="$PROJECT_DIR$/tests/security/test_input_validation.py" beforeDir="false" afterPath="$PROJECT_DIR$/tests/security/test_input_validation.py" afterDir="false" />
|
|
50
|
+
<change beforePath="$PROJECT_DIR$/tests/test_config.py" beforeDir="false" afterPath="$PROJECT_DIR$/tests/test_config.py" afterDir="false" />
|
|
51
|
+
<change beforePath="$PROJECT_DIR$/tests/test_http_client.py" beforeDir="false" afterPath="$PROJECT_DIR$/tests/test_http_client.py" afterDir="false" />
|
|
52
|
+
<change beforePath="$PROJECT_DIR$/tests/unit/__pycache__/test_config.cpython-313-pytest-8.4.1.pyc" beforeDir="false" />
|
|
53
|
+
<change beforePath="$PROJECT_DIR$/tests/unit/__pycache__/test_element_factory.cpython-313-pytest-8.4.1.pyc" beforeDir="false" />
|
|
54
|
+
<change beforePath="$PROJECT_DIR$/tests/unit/test_config.py" beforeDir="false" afterPath="$PROJECT_DIR$/tests/unit/test_config.py" afterDir="false" />
|
|
55
|
+
<change beforePath="$PROJECT_DIR$/tests/unit/test_element_factory.py" beforeDir="false" afterPath="$PROJECT_DIR$/tests/unit/test_element_factory.py" afterDir="false" />
|
|
56
|
+
<change beforePath="$PROJECT_DIR$/tsconfig.json" beforeDir="false" afterPath="$PROJECT_DIR$/tsconfig.json" afterDir="false" />
|
|
57
|
+
<change beforePath="$PROJECT_DIR$/uv.lock" beforeDir="false" afterPath="$PROJECT_DIR$/uv.lock" afterDir="false" />
|
|
58
|
+
<change beforePath="$PROJECT_DIR$/vite.config.js" beforeDir="false" afterPath="$PROJECT_DIR$/vite.config.js" afterDir="false" />
|
|
59
|
+
</list>
|
|
60
|
+
<option name="SHOW_DIALOG" value="false" />
|
|
61
|
+
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
|
62
|
+
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
|
63
|
+
<option name="LAST_RESOLUTION" value="IGNORE" />
|
|
64
|
+
</component>
|
|
65
|
+
<component name="Git.Settings">
|
|
66
|
+
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
|
67
|
+
</component>
|
|
68
|
+
<component name="GitHubPullRequestSearchHistory">{
|
|
69
|
+
"lastFilter": {
|
|
70
|
+
"state": "OPEN",
|
|
71
|
+
"assignee": "lesleslie"
|
|
72
|
+
}
|
|
73
|
+
}</component>
|
|
74
|
+
<component name="GitLabMergeRequestFiltersHistory">{
|
|
75
|
+
"lastFilter": {
|
|
76
|
+
"state": "OPENED",
|
|
77
|
+
"assignee": {
|
|
78
|
+
"type": "org.jetbrains.plugins.gitlab.mergerequest.ui.filters.GitLabMergeRequestsFiltersValue.MergeRequestsMemberFilterValue.MergeRequestsAssigneeFilterValue",
|
|
79
|
+
"username": "lesleslie",
|
|
80
|
+
"fullname": "Les Leslie"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}</component>
|
|
84
|
+
<component name="GitLabMergeRequestsSettings">{
|
|
85
|
+
"selectedUrlAndAccountId": {
|
|
86
|
+
"first": "https://gitlab.com/lesleslie/excalidraw-mcp.git",
|
|
87
|
+
"second": "97b5872b-7573-42a7-9547-7db3d03839d1"
|
|
88
|
+
}
|
|
89
|
+
}</component>
|
|
90
|
+
<component name="GithubPullRequestsUISettings">{
|
|
91
|
+
"selectedUrlAndAccountId": {
|
|
92
|
+
"url": "https://github.com/lesleslie/excalidraw-mcp.git",
|
|
93
|
+
"accountId": "70562ca4-32e7-481d-95b9-6692e8825e1c"
|
|
94
|
+
}
|
|
95
|
+
}</component>
|
|
96
|
+
<component name="ProjectColorInfo">{
|
|
97
|
+
"associatedIndex": 8
|
|
98
|
+
}</component>
|
|
99
|
+
<component name="ProjectId" id="31crBc28ZgsQqqr0YBS650ySaRy" />
|
|
100
|
+
<component name="ProjectViewState">
|
|
101
|
+
<option name="hideEmptyMiddlePackages" value="true" />
|
|
102
|
+
<option name="showLibraryContents" value="true" />
|
|
103
|
+
</component>
|
|
104
|
+
<component name="PropertiesComponent">{
|
|
105
|
+
"keyToString": {
|
|
106
|
+
"ASKED_MARK_IGNORED_FILES_AS_EXCLUDED": "true",
|
|
107
|
+
"ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true",
|
|
108
|
+
"ModuleVcsDetector.initialDetectionPerformed": "true",
|
|
109
|
+
"RunOnceActivity.ShowReadmeOnStart": "true",
|
|
110
|
+
"RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
|
|
111
|
+
"RunOnceActivity.git.unshallow": "true",
|
|
112
|
+
"dart.analysis.tool.window.visible": "false",
|
|
113
|
+
"git-widget-placeholder": "main",
|
|
114
|
+
"junie.onboarding.icon.badge.shown": "true",
|
|
115
|
+
"last_opened_file_path": "/Users/les/Projects/excalidraw-mcp",
|
|
116
|
+
"node.js.detected.package.eslint": "true",
|
|
117
|
+
"node.js.detected.package.tslint": "true",
|
|
118
|
+
"node.js.selected.package.eslint": "(autodetect)",
|
|
119
|
+
"node.js.selected.package.tslint": "(autodetect)",
|
|
120
|
+
"nodejs_package_manager_path": "npm",
|
|
121
|
+
"settings.editor.selected.configurable": "com.intellij.pycharm.community.ide.impl.configuration.PythonContentEntriesConfigurable",
|
|
122
|
+
"to.speed.mode.migration.done": "true",
|
|
123
|
+
"vue.rearranger.settings.migration": "true"
|
|
124
|
+
}
|
|
125
|
+
}</component>
|
|
126
|
+
<component name="RecentsManager">
|
|
127
|
+
<key name="CopyFile.RECENT_KEYS">
|
|
128
|
+
<recent name="$PROJECT_DIR$" />
|
|
129
|
+
</key>
|
|
130
|
+
</component>
|
|
131
|
+
<component name="SharedIndexes">
|
|
132
|
+
<attachedChunks>
|
|
133
|
+
<set>
|
|
134
|
+
<option value="bundled-js-predefined-d6986cc7102b-b598e85cdad2-JavaScript-PY-252.25557.130" />
|
|
135
|
+
<option value="bundled-python-sdk-1bde30d8e611-7b97d883f26b-com.jetbrains.pycharm.pro.sharedIndexes.bundled-PY-252.25557.130" />
|
|
136
|
+
</set>
|
|
137
|
+
</attachedChunks>
|
|
138
|
+
</component>
|
|
139
|
+
<component name="TaskManager">
|
|
140
|
+
<task active="true" id="Default" summary="Default task">
|
|
141
|
+
<changelist id="1ce40c62-8e46-4cda-886d-fb114b426e4d" name="Changes" comment="" />
|
|
142
|
+
<created>1755834070142</created>
|
|
143
|
+
<option name="number" value="Default" />
|
|
144
|
+
<option name="presentableId" value="Default" />
|
|
145
|
+
<updated>1755834070142</updated>
|
|
146
|
+
<workItem from="1755834071260" duration="9017000" />
|
|
147
|
+
<workItem from="1755884632901" duration="245000" />
|
|
148
|
+
<workItem from="1755885415908" duration="2618000" />
|
|
149
|
+
<workItem from="1755991493689" duration="169000" />
|
|
150
|
+
<workItem from="1755992411146" duration="4540000" />
|
|
151
|
+
<workItem from="1756276096436" duration="651000" />
|
|
152
|
+
<workItem from="1756278414341" duration="1239000" />
|
|
153
|
+
<workItem from="1756291782615" duration="119000" />
|
|
154
|
+
<workItem from="1756291931091" duration="436000" />
|
|
155
|
+
<workItem from="1756292439065" duration="501000" />
|
|
156
|
+
<workItem from="1756293019869" duration="37000" />
|
|
157
|
+
<workItem from="1756779302806" duration="2296000" />
|
|
158
|
+
<workItem from="1756789971697" duration="1238000" />
|
|
159
|
+
</task>
|
|
160
|
+
<servers />
|
|
161
|
+
</component>
|
|
162
|
+
<component name="TypeScriptGeneratedFilesManager">
|
|
163
|
+
<option name="version" value="3" />
|
|
164
|
+
</component>
|
|
165
|
+
</project>
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
# File structure and format validators
|
|
3
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
4
|
+
rev: v6.0.0
|
|
5
|
+
hooks:
|
|
6
|
+
- id: trailing-whitespace
|
|
7
|
+
name: trailing-whitespace
|
|
8
|
+
exclude: ^\.venv/
|
|
9
|
+
- id: end-of-file-fixer
|
|
10
|
+
name: end-of-file-fixer
|
|
11
|
+
exclude: ^\.venv/
|
|
12
|
+
- id: check-yaml
|
|
13
|
+
name: check-yaml
|
|
14
|
+
exclude: ^\.venv/
|
|
15
|
+
- id: check-toml
|
|
16
|
+
name: check-toml
|
|
17
|
+
exclude: ^\.venv/
|
|
18
|
+
- id: check-added-large-files
|
|
19
|
+
name: check-added-large-files
|
|
20
|
+
exclude: ^\.venv/
|
|
21
|
+
- repo: https://github.com/astral-sh/uv-pre-commit
|
|
22
|
+
rev: 0.8.14
|
|
23
|
+
hooks:
|
|
24
|
+
- id: uv-lock
|
|
25
|
+
files: ^pyproject\.toml$
|
|
26
|
+
# Security checks
|
|
27
|
+
- repo: https://github.com/gitleaks/gitleaks
|
|
28
|
+
rev: v8.28.0
|
|
29
|
+
hooks:
|
|
30
|
+
- id: gitleaks
|
|
31
|
+
exclude: uv\.lock|pyproject\.toml|tests/.*|docs/.*|.*\.md
|
|
32
|
+
# Security checks
|
|
33
|
+
- repo: https://github.com/PyCQA/bandit
|
|
34
|
+
rev: 1.8.6
|
|
35
|
+
hooks:
|
|
36
|
+
- id: bandit
|
|
37
|
+
args: ["-c", "pyproject.toml", "-r", "-ll"]
|
|
38
|
+
files: ^crackerjack/.*\.py$
|
|
39
|
+
stages: ["pre-push", "manual"]
|
|
40
|
+
# Code formatting and quality
|
|
41
|
+
- repo: https://github.com/codespell-project/codespell
|
|
42
|
+
rev: v2.4.1
|
|
43
|
+
hooks:
|
|
44
|
+
- id: codespell
|
|
45
|
+
exclude: ^\.venv/
|
|
46
|
+
additional_dependencies: ["tomli"]
|
|
47
|
+
# Code formatting and quality
|
|
48
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
49
|
+
rev: v0.12.11
|
|
50
|
+
hooks:
|
|
51
|
+
- id: ruff-check
|
|
52
|
+
exclude: ^\.venv/
|
|
53
|
+
- id: ruff-format
|
|
54
|
+
exclude: ^\.venv/
|
|
55
|
+
# Code formatting and quality
|
|
56
|
+
- repo: https://github.com/executablebooks/mdformat
|
|
57
|
+
rev: 0.7.22
|
|
58
|
+
hooks:
|
|
59
|
+
- id: mdformat
|
|
60
|
+
exclude: ^\.venv/
|
|
61
|
+
additional_dependencies: ["mdformat-ruff"]
|
|
62
|
+
- repo: https://github.com/jendrikseipp/vulture
|
|
63
|
+
rev: v2.14
|
|
64
|
+
hooks:
|
|
65
|
+
- id: vulture
|
|
66
|
+
files: ^crackerjack/.*\.py$
|
|
67
|
+
stages: ["pre-push", "manual"]
|
|
68
|
+
- repo: https://github.com/fredrikaverpil/creosote
|
|
69
|
+
rev: v4.1.0
|
|
70
|
+
hooks:
|
|
71
|
+
- id: creosote
|
|
72
|
+
exclude: ^\.venv/
|
|
73
|
+
stages: ["pre-push", "manual"]
|
|
74
|
+
- repo: https://github.com/rohaquinlop/complexipy-pre-commit
|
|
75
|
+
rev: v3.3.0
|
|
76
|
+
hooks:
|
|
77
|
+
- id: complexipy
|
|
78
|
+
args: ["-d", "low"]
|
|
79
|
+
files: ^crackerjack/.*\.py$
|
|
80
|
+
exclude: ^(\.venv/|tests/)
|
|
81
|
+
stages: ["pre-push", "manual"]
|
|
82
|
+
- repo: https://github.com/dosisod/refurb
|
|
83
|
+
rev: v2.1.0
|
|
84
|
+
hooks:
|
|
85
|
+
- id: refurb
|
|
86
|
+
args: ["--ignore", "FURB184", "--ignore", "FURB120"]
|
|
87
|
+
files: ^crackerjack/.*\.py$
|
|
88
|
+
exclude: ^tests/.*\.py$
|
|
89
|
+
stages: ["pre-push", "manual"]
|
|
90
|
+
- repo: https://github.com/RobertCraigie/pyright-python
|
|
91
|
+
rev: v1.1.404
|
|
92
|
+
hooks:
|
|
93
|
+
- id: pyright
|
|
94
|
+
files: ^crackerjack/.*\.py$
|
|
95
|
+
exclude: ^crackerjack/(mcp|plugins)/.*\.py$|crackerjack/code_cleaner\.py$
|
|
96
|
+
stages: ["pre-push", "manual"]
|