solidworks-mcp-python 1.5.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. solidworks_mcp/__init__.py +57 -0
  2. solidworks_mcp/adapters/__init__.py +40 -0
  3. solidworks_mcp/adapters/base.py +1882 -0
  4. solidworks_mcp/adapters/circuit_breaker.py +2052 -0
  5. solidworks_mcp/adapters/com_executor.py +252 -0
  6. solidworks_mcp/adapters/complexity_analyzer.py +272 -0
  7. solidworks_mcp/adapters/connection_pool.py +1884 -0
  8. solidworks_mcp/adapters/factory.py +366 -0
  9. solidworks_mcp/adapters/intelligent_router.py +218 -0
  10. solidworks_mcp/adapters/mock_adapter.py +4016 -0
  11. solidworks_mcp/adapters/pywin32_adapter.py +2842 -0
  12. solidworks_mcp/adapters/solidworks/__init__.py +17 -0
  13. solidworks_mcp/adapters/solidworks/bitmap.py +180 -0
  14. solidworks_mcp/adapters/solidworks/com_utils.py +56 -0
  15. solidworks_mcp/adapters/solidworks/dimension_layout.py +753 -0
  16. solidworks_mcp/adapters/solidworks/documentation.py +1476 -0
  17. solidworks_mcp/adapters/solidworks/drawing_standard.py +1993 -0
  18. solidworks_mcp/adapters/solidworks/face_selection.py +392 -0
  19. solidworks_mcp/adapters/solidworks/features.py +3362 -0
  20. solidworks_mcp/adapters/solidworks/io.py +3649 -0
  21. solidworks_mcp/adapters/solidworks/rebuild_diagnostics.py +269 -0
  22. solidworks_mcp/adapters/solidworks/rebuild_inspector.py +146 -0
  23. solidworks_mcp/adapters/solidworks/selection.py +308 -0
  24. solidworks_mcp/adapters/solidworks/sketch.py +2545 -0
  25. solidworks_mcp/adapters/sw_feature_errors.py +66 -0
  26. solidworks_mcp/adapters/sw_type_info.py +317 -0
  27. solidworks_mcp/adapters/vba_adapter.py +318 -0
  28. solidworks_mcp/adapters/vba_macro_executor.py +215 -0
  29. solidworks_mcp/agents/__init__.py +68 -0
  30. solidworks_mcp/agents/design_knowledge/assembly_patterns.md +127 -0
  31. solidworks_mcp/agents/design_knowledge/hinges.md +118 -0
  32. solidworks_mcp/agents/design_knowledge/snap_fits.md +93 -0
  33. solidworks_mcp/agents/design_knowledge/solidworks_basics.md +3 -0
  34. solidworks_mcp/agents/design_knowledge/tolerancing.md +128 -0
  35. solidworks_mcp/agents/harness.py +216 -0
  36. solidworks_mcp/agents/history_db.py +1508 -0
  37. solidworks_mcp/agents/retrieval_index.py +164 -0
  38. solidworks_mcp/agents/schemas.py +165 -0
  39. solidworks_mcp/agents/smoke_test.py +285 -0
  40. solidworks_mcp/agents/soc_exporter.py +650 -0
  41. solidworks_mcp/agents/soc_pickup.py +332 -0
  42. solidworks_mcp/agents/soc_rewind.py +221 -0
  43. solidworks_mcp/agents/vector_rag.py +665 -0
  44. solidworks_mcp/cache/__init__.py +5 -0
  45. solidworks_mcp/cache/response_cache.py +164 -0
  46. solidworks_mcp/config.py +729 -0
  47. solidworks_mcp/exceptions.py +37 -0
  48. solidworks_mcp/security/__init__.py +68 -0
  49. solidworks_mcp/security/auth.py +128 -0
  50. solidworks_mcp/security/cors.py +27 -0
  51. solidworks_mcp/security/rate_limiting.py +90 -0
  52. solidworks_mcp/security/runtime.py +155 -0
  53. solidworks_mcp/server.py +777 -0
  54. solidworks_mcp/server_cli_fixed.py +120 -0
  55. solidworks_mcp/setup/__init__.py +1 -0
  56. solidworks_mcp/setup/cli.py +399 -0
  57. solidworks_mcp/setup/clients.py +157 -0
  58. solidworks_mcp/setup/config_file.py +230 -0
  59. solidworks_mcp/setup/handshake.py +202 -0
  60. solidworks_mcp/setup/launcher.py +102 -0
  61. solidworks_mcp/setup/legacy.py +100 -0
  62. solidworks_mcp/setup/registration.py +193 -0
  63. solidworks_mcp/setup/solidworks.py +49 -0
  64. solidworks_mcp/tools/__init__.py +64 -0
  65. solidworks_mcp/tools/analysis.py +723 -0
  66. solidworks_mcp/tools/automation.py +578 -0
  67. solidworks_mcp/tools/docs_discovery.py +1476 -0
  68. solidworks_mcp/tools/drawing.py +1015 -0
  69. solidworks_mcp/tools/drawing_analysis.py +456 -0
  70. solidworks_mcp/tools/drawing_automation.py +627 -0
  71. solidworks_mcp/tools/engineering_data.py +466 -0
  72. solidworks_mcp/tools/error_classifier.py +232 -0
  73. solidworks_mcp/tools/export.py +833 -0
  74. solidworks_mcp/tools/file_facts.py +40 -0
  75. solidworks_mcp/tools/file_management.py +1473 -0
  76. solidworks_mcp/tools/input_compat.py +17 -0
  77. solidworks_mcp/tools/macro_recording.py +464 -0
  78. solidworks_mcp/tools/modeling.py +2360 -0
  79. solidworks_mcp/tools/sketching.py +1422 -0
  80. solidworks_mcp/tools/template_management.py +367 -0
  81. solidworks_mcp/tools/tool_boundary.py +280 -0
  82. solidworks_mcp/tools/vba_generation.py +1145 -0
  83. solidworks_mcp/ui/__init__.py +9 -0
  84. solidworks_mcp/ui/local_llm.py +725 -0
  85. solidworks_mcp/ui/routers/__init__.py +10 -0
  86. solidworks_mcp/ui/routers/checkpoint.py +24 -0
  87. solidworks_mcp/ui/routers/docs.py +47 -0
  88. solidworks_mcp/ui/routers/llm.py +83 -0
  89. solidworks_mcp/ui/routers/local_model.py +69 -0
  90. solidworks_mcp/ui/routers/model.py +75 -0
  91. solidworks_mcp/ui/routers/preview.py +38 -0
  92. solidworks_mcp/ui/routers/session.py +161 -0
  93. solidworks_mcp/ui/routers/viewer.py +154 -0
  94. solidworks_mcp/ui/schemas.py +502 -0
  95. solidworks_mcp/ui/server.py +298 -0
  96. solidworks_mcp/ui/service.py +481 -0
  97. solidworks_mcp/ui/services/__init__.py +136 -0
  98. solidworks_mcp/ui/services/_utils.py +958 -0
  99. solidworks_mcp/ui/services/checkpoint_service.py +1110 -0
  100. solidworks_mcp/ui/services/docs_service.py +282 -0
  101. solidworks_mcp/ui/services/llm_service.py +956 -0
  102. solidworks_mcp/ui/services/model_service.py +459 -0
  103. solidworks_mcp/ui/services/parameter_repair_service.py +314 -0
  104. solidworks_mcp/ui/services/preview_service.py +489 -0
  105. solidworks_mcp/ui/services/session_service.py +1389 -0
  106. solidworks_mcp/utils/__init__.py +9 -0
  107. solidworks_mcp/utils/feature_tree_classifier.py +342 -0
  108. solidworks_mcp/utils/logging.py +76 -0
  109. solidworks_mcp/utils/validation.py +77 -0
  110. solidworks_mcp/version.py +8 -0
  111. solidworks_mcp_python-1.5.0.dist-info/METADATA +410 -0
  112. solidworks_mcp_python-1.5.0.dist-info/RECORD +115 -0
  113. solidworks_mcp_python-1.5.0.dist-info/WHEEL +4 -0
  114. solidworks_mcp_python-1.5.0.dist-info/entry_points.txt +3 -0
  115. solidworks_mcp_python-1.5.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,164 @@
1
+ """In-memory response cache with TTL support for adapter operations."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import hashlib
6
+ import json
7
+ import time
8
+ from dataclasses import dataclass
9
+ from threading import RLock
10
+
11
+
12
+ @dataclass(frozen=True)
13
+ class CachePolicy:
14
+ """Cache policy options for adapter responses.
15
+
16
+ Attributes:
17
+ default_ttl_seconds (int): The default ttl seconds value.
18
+ enabled (bool): The enabled value.
19
+ max_entries (int): The max entries value.
20
+ """
21
+
22
+ enabled: bool = True
23
+ default_ttl_seconds: int = 60
24
+ max_entries: int = 512
25
+
26
+
27
+ @dataclass
28
+ class _CacheEntry[T]:
29
+ """Internal cache entry with expiration metadata.
30
+
31
+ Attributes:
32
+ created_at (float): The created at value.
33
+ expires_at (float): The expires at value.
34
+ value (T): The value value.
35
+ """
36
+
37
+ value: T
38
+ expires_at: float
39
+ created_at: float
40
+
41
+
42
+ class ResponseCache:
43
+ """Thread-safe in-memory cache for adapter response objects.
44
+
45
+ Args:
46
+ policy (CachePolicy): The policy value.
47
+
48
+ Attributes:
49
+ _lock (Any): The lock value.
50
+ _policy (Any): The policy value.
51
+ """
52
+
53
+ def __init__(self, policy: CachePolicy) -> None:
54
+ """Initialize this cache.
55
+
56
+ Args:
57
+ policy (CachePolicy): The policy value.
58
+
59
+ Returns:
60
+ None: None.
61
+ """
62
+ self._policy = policy
63
+ self._entries: dict[str, _CacheEntry[object]] = {}
64
+ self._lock = RLock()
65
+
66
+ @property
67
+ def enabled(self) -> bool:
68
+ """Return whether caching is enabled.
69
+
70
+ Returns:
71
+ bool: True if enabled, otherwise False.
72
+ """
73
+ return self._policy.enabled
74
+
75
+ def make_key(self, operation: str, payload: object) -> str:
76
+ """Build a deterministic cache key from an operation payload.
77
+
78
+ Args:
79
+ operation (str): Callable object executed by the helper.
80
+ payload (object): The payload value.
81
+
82
+ Returns:
83
+ str: The resulting text value.
84
+ """
85
+ normalized = self._normalize_payload(payload)
86
+ raw = f"{operation}:{normalized}".encode()
87
+ return hashlib.sha256(raw).hexdigest()
88
+
89
+ def get(self, key: str) -> object | None:
90
+ """Fetch a cached value when present and unexpired.
91
+
92
+ Args:
93
+ key (str): The key value.
94
+
95
+ Returns:
96
+ object | None: The result produced by the operation.
97
+ """
98
+ if not self._policy.enabled:
99
+ return None
100
+
101
+ now = time.time()
102
+ with self._lock:
103
+ entry = self._entries.get(key)
104
+ if entry is None:
105
+ return None
106
+ if entry.expires_at <= now:
107
+ self._entries.pop(key, None)
108
+ return None
109
+ return entry.value
110
+
111
+ def set(self, key: str, value: object, ttl_seconds: int | None = None) -> None:
112
+ """Store a cache value with expiration.
113
+
114
+ Args:
115
+ key (str): The key value.
116
+ value (object): The value value.
117
+ ttl_seconds (int | None): The ttl seconds value. Defaults to None.
118
+
119
+ Returns:
120
+ None: None.
121
+ """
122
+ if not self._policy.enabled:
123
+ return
124
+
125
+ ttl = (
126
+ ttl_seconds if ttl_seconds is not None else self._policy.default_ttl_seconds
127
+ )
128
+ now = time.time()
129
+ entry = _CacheEntry(value=value, created_at=now, expires_at=now + max(ttl, 1))
130
+
131
+ with self._lock:
132
+ if len(self._entries) >= self._policy.max_entries:
133
+ self._evict_oldest_unlocked()
134
+ self._entries[key] = entry
135
+
136
+ def _evict_oldest_unlocked(self) -> None:
137
+ """Remove one oldest entry while lock is already held.
138
+
139
+ Returns:
140
+ None: None.
141
+ """
142
+ if not self._entries:
143
+ return
144
+ oldest_key = min(
145
+ self._entries,
146
+ key=lambda cache_key: self._entries[cache_key].created_at,
147
+ )
148
+ self._entries.pop(oldest_key, None)
149
+
150
+ def _normalize_payload(self, payload: object) -> str:
151
+ """Normalize payload into a stable JSON string.
152
+
153
+ Args:
154
+ payload (object): The payload value.
155
+
156
+ Returns:
157
+ str: The resulting text value.
158
+ """
159
+ try:
160
+ return json.dumps(
161
+ payload, sort_keys=True, default=str, separators=(",", ":")
162
+ )
163
+ except (TypeError, ValueError):
164
+ return json.dumps(str(payload), sort_keys=True)