@hybridlabor-api/bdb-hardware-pcb 0.1.0

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 (192) hide show
  1. package/README.md +116 -0
  2. package/config/mcp/antigravity.json +22 -0
  3. package/config/mcp/claude.json +22 -0
  4. package/config/mcp/codex.toml +25 -0
  5. package/docs/adr/ADR-001-KICAD-OPENSCAD-MCP-STRATEGY.md +334 -0
  6. package/docs/review_documentation.md +121 -0
  7. package/installer.js +358 -0
  8. package/mcp_servers/kicad-mcp-server/.env.example +22 -0
  9. package/mcp_servers/kicad-mcp-server/.github/workflows/ci.yml +36 -0
  10. package/mcp_servers/kicad-mcp-server/CLAUDE.md +487 -0
  11. package/mcp_servers/kicad-mcp-server/README.md +316 -0
  12. package/mcp_servers/kicad-mcp-server/docs/DEVICE_TREE.md +416 -0
  13. package/mcp_servers/kicad-mcp-server/docs/INSTALLATION.md +332 -0
  14. package/mcp_servers/kicad-mcp-server/docs/PIN_ANALYSIS.md +332 -0
  15. package/mcp_servers/kicad-mcp-server/docs/README.md +240 -0
  16. package/mcp_servers/kicad-mcp-server/docs/TESTING.md +613 -0
  17. package/mcp_servers/kicad-mcp-server/docs/VALIDATION.md +268 -0
  18. package/mcp_servers/kicad-mcp-server/pyproject.toml +96 -0
  19. package/mcp_servers/kicad-mcp-server/requirements-dev.txt +16 -0
  20. package/mcp_servers/kicad-mcp-server/requirements-test.txt +24 -0
  21. package/mcp_servers/kicad-mcp-server/requirements.txt +13 -0
  22. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/__init__.py +3 -0
  23. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/__main__.py +17 -0
  24. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/config.py +46 -0
  25. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/models/__init__.py +1 -0
  26. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/models/types.py +87 -0
  27. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/__init__.py +1 -0
  28. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/netlist_parser.py +234 -0
  29. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/pcb_parser.py +375 -0
  30. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/pcb_parser_kicad.py +327 -0
  31. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/schematic_parser.py +902 -0
  32. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/server.py +71 -0
  33. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/__init__.py +1 -0
  34. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/arduino/connectivity_test.cpp.j2 +189 -0
  35. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/atmega.dts.j2 +77 -0
  36. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/esp32.dts.j2 +77 -0
  37. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/nrf52.dts.j2 +77 -0
  38. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/stm32f4.dts.j2 +89 -0
  39. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/esp_idf/test_suite.c.j2 +340 -0
  40. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/pytest/test_connectivity.py.j2 +147 -0
  41. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/st_hal/hal_test.c.j2 +313 -0
  42. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_gpio_test.py.j2 +99 -0
  43. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_i2c_test.py.j2 +117 -0
  44. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_pinmux_test.py.j2 +43 -0
  45. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_spi_test.py.j2 +94 -0
  46. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_gpio_test.c.j2 +113 -0
  47. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_i2c_test.c.j2 +101 -0
  48. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_spi_test.c.j2 +94 -0
  49. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/unittest/test_schematic.py.j2 +172 -0
  50. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/__init__.py +36 -0
  51. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/device_tree.py +1187 -0
  52. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/hierarchical_analysis.py +211 -0
  53. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/netlist.py +320 -0
  54. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/parts_registry.py +142 -0
  55. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pcb.py +955 -0
  56. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pcb_layout.py +308 -0
  57. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pin_analysis.py +765 -0
  58. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/project.py +196 -0
  59. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic.py +319 -0
  60. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic_editor.py +674 -0
  61. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic_search.py +158 -0
  62. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/validation.py +866 -0
  63. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/visualization.py +225 -0
  64. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/__init__.py +1 -0
  65. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/file_handlers.py +65 -0
  66. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/kicad_cli.py +103 -0
  67. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/kicad_version.py +103 -0
  68. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/parts_registry.py +197 -0
  69. package/mcp_servers/kicad-mcp-server/tests/__init__.py +1 -0
  70. package/mcp_servers/kicad-mcp-server/tests/examples/ESP32S3_TEST.md +219 -0
  71. package/mcp_servers/kicad-mcp-server/tests/fixtures/README.md +65 -0
  72. package/mcp_servers/kicad-mcp-server/tests/fixtures/__init__.py +1 -0
  73. package/mcp_servers/kicad-mcp-server/tests/fixtures/example_pcb.kicad_pcb +177 -0
  74. package/mcp_servers/kicad-mcp-server/tests/fixtures/example_schematic.kicad_sch +145 -0
  75. package/mcp_servers/kicad-mcp-server/tests/fixtures/hier/child.kicad_sch +24 -0
  76. package/mcp_servers/kicad-mcp-server/tests/fixtures/hier/root.kicad_sch +38 -0
  77. package/mcp_servers/kicad-mcp-server/tests/test_tools/__init__.py +1 -0
  78. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_hierarchical_labels.py +195 -0
  79. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_kicad_cli.py +116 -0
  80. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_netlist_cache_path.py +29 -0
  81. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_schematic.py +189 -0
  82. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_schematic_hierarchy.py +69 -0
  83. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_visualization.py +136 -0
  84. package/mcp_servers/kicad-mcp-server/uv.lock +2873 -0
  85. package/mcp_servers/openscad-mcp-server/.dockerignore +9 -0
  86. package/mcp_servers/openscad-mcp-server/.github/workflows/test.yml +40 -0
  87. package/mcp_servers/openscad-mcp-server/Dockerfile +29 -0
  88. package/mcp_servers/openscad-mcp-server/LICENSE +21 -0
  89. package/mcp_servers/openscad-mcp-server/README.md +154 -0
  90. package/mcp_servers/openscad-mcp-server/docs/audit.md +56 -0
  91. package/mcp_servers/openscad-mcp-server/docs/docker.md +66 -0
  92. package/mcp_servers/openscad-mcp-server/docs/issue-followup.md +19 -0
  93. package/mcp_servers/openscad-mcp-server/docs/jetson.md +17 -0
  94. package/mcp_servers/openscad-mcp-server/glama.json +4 -0
  95. package/mcp_servers/openscad-mcp-server/legacy/README.md +15 -0
  96. package/mcp_servers/openscad-mcp-server/legacy/README.original.md +294 -0
  97. package/mcp_servers/openscad-mcp-server/legacy/implementation_plan.md +100 -0
  98. package/mcp_servers/openscad-mcp-server/legacy/old/download_sam2_checkpoint.py +115 -0
  99. package/mcp_servers/openscad-mcp-server/legacy/old/src/ai/sam_segmentation.py +209 -0
  100. package/mcp_servers/openscad-mcp-server/legacy/old/src/models/threestudio_generator.py +231 -0
  101. package/mcp_servers/openscad-mcp-server/legacy/old/src/workflow/image_to_model_pipeline.py +260 -0
  102. package/mcp_servers/openscad-mcp-server/legacy/old/test_sam2_segmentation.py +96 -0
  103. package/mcp_servers/openscad-mcp-server/legacy/requirements.txt +57 -0
  104. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/README.md +39 -0
  105. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/decisions/ai-driven-code-generation.md +122 -0
  106. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/decisions/export-formats.md +76 -0
  107. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/ai/ai_service.py.md +51 -0
  108. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/main.py.md +63 -0
  109. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/models/code_generator.py.md +63 -0
  110. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/nlp/parameter_extractor.py.md +63 -0
  111. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/ai/natural-language-processing.md +78 -0
  112. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/nlp/parameter-extraction.md +173 -0
  113. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/export-formats.md +91 -0
  114. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/openscad-basics.md +66 -0
  115. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/primitive-testing.md +79 -0
  116. package/mcp_servers/openscad-mcp-server/legacy/src/__init__.py +0 -0
  117. package/mcp_servers/openscad-mcp-server/legacy/src/ai/ai_service.py +257 -0
  118. package/mcp_servers/openscad-mcp-server/legacy/src/ai/gemini_api.py +161 -0
  119. package/mcp_servers/openscad-mcp-server/legacy/src/ai/venice_api.py +203 -0
  120. package/mcp_servers/openscad-mcp-server/legacy/src/config.py +121 -0
  121. package/mcp_servers/openscad-mcp-server/legacy/src/main.py +1456 -0
  122. package/mcp_servers/openscad-mcp-server/legacy/src/main.py.new +404 -0
  123. package/mcp_servers/openscad-mcp-server/legacy/src/main_remote.py +401 -0
  124. package/mcp_servers/openscad-mcp-server/legacy/src/models/__init__.py +0 -0
  125. package/mcp_servers/openscad-mcp-server/legacy/src/models/code_generator.py +321 -0
  126. package/mcp_servers/openscad-mcp-server/legacy/src/models/cuda_mvs.py +209 -0
  127. package/mcp_servers/openscad-mcp-server/legacy/src/models/scad_templates/basic_shapes.scad +144 -0
  128. package/mcp_servers/openscad-mcp-server/legacy/src/nlp/__init__.py +0 -0
  129. package/mcp_servers/openscad-mcp-server/legacy/src/nlp/parameter_extractor.py +388 -0
  130. package/mcp_servers/openscad-mcp-server/legacy/src/openscad_wrapper/__init__.py +0 -0
  131. package/mcp_servers/openscad-mcp-server/legacy/src/openscad_wrapper/wrapper.py +418 -0
  132. package/mcp_servers/openscad-mcp-server/legacy/src/printer_discovery/__init__.py +1 -0
  133. package/mcp_servers/openscad-mcp-server/legacy/src/printer_discovery/printer_discovery.py +471 -0
  134. package/mcp_servers/openscad-mcp-server/legacy/src/remote/connection_manager.py +537 -0
  135. package/mcp_servers/openscad-mcp-server/legacy/src/remote/cuda_mvs_client.py +435 -0
  136. package/mcp_servers/openscad-mcp-server/legacy/src/remote/cuda_mvs_server.py +787 -0
  137. package/mcp_servers/openscad-mcp-server/legacy/src/remote/error_handling.py +415 -0
  138. package/mcp_servers/openscad-mcp-server/legacy/src/testing/__init__.py +0 -0
  139. package/mcp_servers/openscad-mcp-server/legacy/src/testing/primitive_tester.py +203 -0
  140. package/mcp_servers/openscad-mcp-server/legacy/src/testing/test_primitives.py +98 -0
  141. package/mcp_servers/openscad-mcp-server/legacy/src/utils/__init__.py +1 -0
  142. package/mcp_servers/openscad-mcp-server/legacy/src/utils/cad_exporter.py +241 -0
  143. package/mcp_servers/openscad-mcp-server/legacy/src/utils/format_validator.py +206 -0
  144. package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_exporter.py +140 -0
  145. package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_repair.py +91 -0
  146. package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_validator.py +123 -0
  147. package/mcp_servers/openscad-mcp-server/legacy/src/visualization/__init__.py +0 -0
  148. package/mcp_servers/openscad-mcp-server/legacy/src/visualization/headless_renderer.py +52 -0
  149. package/mcp_servers/openscad-mcp-server/legacy/src/visualization/renderer.py +177 -0
  150. package/mcp_servers/openscad-mcp-server/legacy/src/visualization/web_interface.py +639 -0
  151. package/mcp_servers/openscad-mcp-server/legacy/src/workflow/image_approval.py +148 -0
  152. package/mcp_servers/openscad-mcp-server/legacy/src/workflow/multi_view_to_model_pipeline.py +338 -0
  153. package/mcp_servers/openscad-mcp-server/legacy/test_complete_workflow.py +374 -0
  154. package/mcp_servers/openscad-mcp-server/legacy/test_cuda_mvs.py +191 -0
  155. package/mcp_servers/openscad-mcp-server/legacy/test_gemini_api.py +168 -0
  156. package/mcp_servers/openscad-mcp-server/legacy/test_image_approval.py +192 -0
  157. package/mcp_servers/openscad-mcp-server/legacy/test_image_approval_workflow.py +251 -0
  158. package/mcp_servers/openscad-mcp-server/legacy/test_image_to_model_pipeline.py +145 -0
  159. package/mcp_servers/openscad-mcp-server/legacy/test_model_selection.py +41 -0
  160. package/mcp_servers/openscad-mcp-server/legacy/test_multi_view_pipeline.py +290 -0
  161. package/mcp_servers/openscad-mcp-server/legacy/test_primitives.sh +13 -0
  162. package/mcp_servers/openscad-mcp-server/legacy/test_rabbit_direct.py +71 -0
  163. package/mcp_servers/openscad-mcp-server/legacy/test_remote_cuda_mvs.py +283 -0
  164. package/mcp_servers/openscad-mcp-server/legacy/test_venice_example.py +69 -0
  165. package/mcp_servers/openscad-mcp-server/pyproject.toml +33 -0
  166. package/mcp_servers/openscad-mcp-server/requirements.txt +2 -0
  167. package/mcp_servers/openscad-mcp-server/scad/simple_cube.scad +2 -0
  168. package/mcp_servers/openscad-mcp-server/scripts/test_docker.py +220 -0
  169. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/__init__.py +3 -0
  170. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/__main__.py +3 -0
  171. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/engine.py +94 -0
  172. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/geometry.py +242 -0
  173. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/server.py +245 -0
  174. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/service.py +190 -0
  175. package/mcp_servers/openscad-mcp-server/tests/conftest.py +17 -0
  176. package/mcp_servers/openscad-mcp-server/tests/test_engine.py +37 -0
  177. package/mcp_servers/openscad-mcp-server/tests/test_geometry.py +106 -0
  178. package/mcp_servers/openscad-mcp-server/tests/test_integration.py +172 -0
  179. package/mcp_servers/openscad-mcp-server/tests/test_transports.py +314 -0
  180. package/mcp_servers/openscad-mcp-server/uv.lock +1123 -0
  181. package/package.json +44 -0
  182. package/scripts/install_mcps.sh +86 -0
  183. package/scripts/openscad_wrapper.sh +62 -0
  184. package/scripts/run_kicad_mcp.sh +25 -0
  185. package/scripts/run_openscad_mcp.sh +41 -0
  186. package/scripts/test_mcp_connection.py +626 -0
  187. package/scripts/test_mcp_connection.sh +168 -0
  188. package/skills/code-first-hardware-design/SKILL.md +260 -0
  189. package/skills/pcb-constraint-definition/SKILL.md +236 -0
  190. package/skills/pcb-layout-routing-automation/SKILL.md +153 -0
  191. package/skills/pcb-validation-dfm-signoff/SKILL.md +194 -0
  192. package/skills/schematic-datasheet-analysis/SKILL.md +202 -0
@@ -0,0 +1,78 @@
1
+ # Natural Language Processing for 3D Modeling
2
+
3
+ <metadata>
4
+ author: devin-ai-integration
5
+ timestamp: 2025-03-21T01:30:00Z
6
+ version: 1.0.0
7
+ tags: [nlp, 3d-modeling, parameter-extraction, pattern-matching]
8
+ </metadata>
9
+
10
+ ## Overview
11
+
12
+ Natural Language Processing (NLP) techniques can be applied to extract 3D modeling parameters and intentions from user descriptions. This knowledge document outlines approaches for translating natural language into structured data for 3D model generation.
13
+
14
+ ## Approaches
15
+
16
+ ### Pattern Matching
17
+
18
+ Regular expression pattern matching is effective for identifying:
19
+
20
+ - Dimensions and measurements
21
+ - Shape types and primitives
22
+ - Operations (union, difference, etc.)
23
+ - Transformations (rotate, scale, etc.)
24
+ - Material properties and colors
25
+
26
+ Example patterns:
27
+ ```python
28
+ # Dimension pattern
29
+ dimension_pattern = r'(\d+(?:\.\d+)?)\s*(mm|cm|m|inch|in)'
30
+
31
+ # Shape pattern
32
+ shape_pattern = r'\b(cube|box|sphere|ball|cylinder|tube|cone|pyramid)\b'
33
+ ```
34
+
35
+ ### Contextual Understanding
36
+
37
+ Beyond simple pattern matching, contextual understanding involves:
38
+
39
+ - Identifying relationships between objects
40
+ - Understanding relative positioning
41
+ - Resolving ambiguous references
42
+ - Maintaining dialog state for multi-turn interactions
43
+
44
+ ### Hybrid Approaches
45
+
46
+ Combining pattern matching with contextual rules provides:
47
+
48
+ - Better accuracy than pure pattern matching
49
+ - Lower computational requirements than full ML approaches
50
+ - More maintainable and debuggable systems
51
+ - Flexibility to handle diverse descriptions
52
+
53
+ ## Parameter Extraction
54
+
55
+ Key parameters to extract include:
56
+
57
+ - **Dimensions**: Width, height, depth, radius, diameter
58
+ - **Positions**: Coordinates, relative positions
59
+ - **Operations**: Boolean operations, transformations
60
+ - **Features**: Holes, fillets, chamfers, text
61
+ - **Properties**: Color, material, finish
62
+
63
+ ## Implementation Considerations
64
+
65
+ - **Ambiguity Resolution**: Handle cases where measurements could apply to multiple dimensions
66
+ - **Default Values**: Provide sensible defaults for unspecified parameters
67
+ - **Unit Conversion**: Convert between different measurement units
68
+ - **Error Handling**: Gracefully handle unparseable or contradictory descriptions
69
+ - **Dialog Management**: Maintain state for multi-turn interactions to refine models
70
+
71
+ ## Evaluation Metrics
72
+
73
+ Effective NLP for 3D modeling can be evaluated by:
74
+
75
+ - **Accuracy**: Correctness of extracted parameters
76
+ - **Completeness**: Percentage of required parameters successfully extracted
77
+ - **Robustness**: Ability to handle diverse phrasings and descriptions
78
+ - **User Satisfaction**: Subjective evaluation of the resulting models
@@ -0,0 +1,173 @@
1
+ # Parameter Extraction for 3D Modeling
2
+
3
+ <metadata>
4
+ author: devin-ai-integration
5
+ timestamp: 2025-03-21T01:30:00Z
6
+ version: 1.0.0
7
+ tags: [parameter-extraction, nlp, 3d-modeling, regex]
8
+ </metadata>
9
+
10
+ ## Overview
11
+
12
+ Parameter extraction is the process of identifying and extracting structured data from natural language descriptions of 3D models. This is a critical component in translating user intentions into actionable modeling parameters.
13
+
14
+ ## Extraction Techniques
15
+
16
+ ### Regular Expression Patterns
17
+
18
+ Regular expressions provide a powerful way to extract parameters:
19
+
20
+ ```python
21
+ # Extract dimensions with units
22
+ dimension_pattern = r'(\d+(?:\.\d+)?)\s*(mm|cm|m|inch|in)'
23
+
24
+ # Extract color information
25
+ color_pattern = r'\b(red|green|blue|yellow|black|white|purple|orange|brown)\b'
26
+
27
+ # Extract shape type
28
+ shape_pattern = r'\b(cube|box|sphere|ball|cylinder|tube|cone|pyramid)\b'
29
+ ```
30
+
31
+ ### Contextual Parameter Association
32
+
33
+ After extracting raw values, they must be associated with the correct parameter:
34
+
35
+ ```python
36
+ def associate_dimension(value, description):
37
+ """Associate a dimension value with the correct parameter based on context."""
38
+ if "width" in description or "wide" in description:
39
+ return ("width", value)
40
+ elif "height" in description or "tall" in description:
41
+ return ("height", value)
42
+ elif "depth" in description or "deep" in description:
43
+ return ("depth", value)
44
+ elif "radius" in description:
45
+ return ("radius", value)
46
+ elif "diameter" in description:
47
+ return ("radius", value / 2) # Convert diameter to radius
48
+ else:
49
+ return ("unknown", value)
50
+ ```
51
+
52
+ ### Default Parameters
53
+
54
+ Provide sensible defaults for unspecified parameters:
55
+
56
+ ```python
57
+ default_parameters = {
58
+ "cube": {
59
+ "width": 10,
60
+ "height": 10,
61
+ "depth": 10,
62
+ "center": True
63
+ },
64
+ "sphere": {
65
+ "radius": 10,
66
+ "segments": 32
67
+ },
68
+ "cylinder": {
69
+ "radius": 5,
70
+ "height": 10,
71
+ "center": True,
72
+ "segments": 32
73
+ }
74
+ }
75
+ ```
76
+
77
+ ## Parameter Types
78
+
79
+ Common parameter types to extract include:
80
+
81
+ - **Dimensions**: Width, height, depth, radius, diameter
82
+ - **Positions**: X, Y, Z coordinates
83
+ - **Angles**: Rotation angles
84
+ - **Counts**: Number of sides, segments, iterations
85
+ - **Booleans**: Center, solid/hollow
86
+ - **Colors**: RGB values or named colors
87
+ - **Operations**: Union, difference, intersection
88
+ - **Transformations**: Translate, rotate, scale, mirror
89
+
90
+ ## Challenges and Solutions
91
+
92
+ ### Ambiguity
93
+
94
+ When parameters are ambiguous, use contextual clues or ask clarifying questions:
95
+
96
+ ```python
97
+ def resolve_ambiguity(value, possible_parameters, description):
98
+ """Resolve ambiguity between possible parameters."""
99
+ # Try to resolve using context
100
+ for param in possible_parameters:
101
+ if param in description:
102
+ return param
103
+
104
+ # If still ambiguous, return a question to ask
105
+ return f"Is {value} the {' or '.join(possible_parameters)}?"
106
+ ```
107
+
108
+ ### Unit Conversion
109
+
110
+ Convert all measurements to a standard unit (millimeters):
111
+
112
+ ```python
113
+ def convert_to_mm(value, unit):
114
+ """Convert a value from the given unit to millimeters."""
115
+ if unit in ["mm", "millimeter", "millimeters"]:
116
+ return value
117
+ elif unit in ["cm", "centimeter", "centimeters"]:
118
+ return value * 10
119
+ elif unit in ["m", "meter", "meters"]:
120
+ return value * 1000
121
+ elif unit in ["in", "inch", "inches"]:
122
+ return value * 25.4
123
+ else:
124
+ return value # Assume mm if unit is unknown
125
+ ```
126
+
127
+ ### Dialog State Management
128
+
129
+ Maintain state across multiple interactions:
130
+
131
+ ```python
132
+ class DialogState:
133
+ def __init__(self):
134
+ self.shape_type = None
135
+ self.parameters = {}
136
+ self.questions = []
137
+ self.confirmed = False
138
+
139
+ def add_parameter(self, name, value):
140
+ self.parameters[name] = value
141
+
142
+ def add_question(self, question):
143
+ self.questions.append(question)
144
+
145
+ def is_complete(self):
146
+ """Check if all required parameters are present."""
147
+ if not self.shape_type:
148
+ return False
149
+
150
+ required_params = self.get_required_parameters()
151
+ return all(param in self.parameters for param in required_params)
152
+
153
+ def get_required_parameters(self):
154
+ """Get the required parameters for the current shape type."""
155
+ if self.shape_type == "cube":
156
+ return ["width", "height", "depth"]
157
+ elif self.shape_type == "sphere":
158
+ return ["radius"]
159
+ elif self.shape_type == "cylinder":
160
+ return ["radius", "height"]
161
+ else:
162
+ return []
163
+ ```
164
+
165
+ ## Best Practices
166
+
167
+ - Start with simple pattern matching and add complexity as needed
168
+ - Provide sensible defaults for all parameters
169
+ - Use contextual clues to resolve ambiguity
170
+ - Maintain dialog state for multi-turn interactions
171
+ - Convert all measurements to a standard unit
172
+ - Validate extracted parameters for reasonableness
173
+ - Handle errors gracefully with helpful messages
@@ -0,0 +1,91 @@
1
+ # OpenSCAD Export Formats
2
+
3
+ <metadata>
4
+ author: devin-ai-integration
5
+ timestamp: 2025-03-21T12:00:00Z
6
+ version: 1.0.0
7
+ tags: [openscad, export-formats, 3d-printing, prusa, bambu]
8
+ </metadata>
9
+
10
+ ## Overview
11
+
12
+ OpenSCAD supports exporting 3D models in various formats, each with different capabilities for preserving parametric properties and metadata. This document focuses on formats suitable for Prusa and Bambu printers, with an emphasis on alternatives to STL.
13
+
14
+ ## Recommended Formats
15
+
16
+ ### 3MF (3D Manufacturing Format)
17
+
18
+ 3MF is a modern replacement for STL that addresses many of its limitations:
19
+
20
+ - **Metadata Support**: Includes model information, materials, colors
21
+ - **Compact Size**: More efficient encoding than STL
22
+ - **Multiple Objects**: Can contain multiple parts in a single file
23
+ - **Printer Compatibility**: Widely supported by Prusa and Bambu printers
24
+ - **Implementation**: ZIP archive containing XML files
25
+
26
+ ```openscad
27
+ // Export to 3MF from command line
28
+ // openscad -o model.3mf model.scad
29
+ ```
30
+
31
+ ### AMF (Additive Manufacturing File Format)
32
+
33
+ AMF is another modern format that supports:
34
+
35
+ - **Material Information**: Material properties and colors
36
+ - **Curved Surfaces**: Better representation than STL's triangles
37
+ - **Metadata**: Design information and parameters
38
+ - **Implementation**: XML-based format
39
+
40
+ ```openscad
41
+ // Export to AMF from command line
42
+ // openscad -o model.amf model.scad
43
+ ```
44
+
45
+ ### CSG (Constructive Solid Geometry)
46
+
47
+ CSG is OpenSCAD's native format:
48
+
49
+ - **Fully Parametric**: Preserves all construction operations
50
+ - **Editable**: Can be reopened and modified in OpenSCAD
51
+ - **Implementation**: OpenSCAD's internal representation
52
+
53
+ ```openscad
54
+ // Export to CSG from command line
55
+ // openscad -o model.csg model.scad
56
+ ```
57
+
58
+ ### SCAD (OpenSCAD Source Code)
59
+
60
+ The original SCAD file preserves all parametric properties:
61
+
62
+ - **Complete Parameterization**: All variables and relationships
63
+ - **Code Structure**: Modules, functions, and comments
64
+ - **Implementation**: Text file with OpenSCAD code
65
+
66
+ ## Printer Compatibility
67
+
68
+ ### Prusa Printers
69
+
70
+ Prusa printers work well with:
71
+
72
+ - **3MF**: Full support in PrusaSlicer
73
+ - **AMF**: Good support for materials and colors
74
+ - **STL**: Supported but with limitations
75
+
76
+ ### Bambu Printers
77
+
78
+ Bambu printers work best with:
79
+
80
+ - **3MF**: Preferred format for Bambu Lab software
81
+ - **AMF**: Well supported
82
+ - **STL**: Basic support
83
+
84
+ ## Implementation Notes
85
+
86
+ When implementing export functionality:
87
+
88
+ 1. Use OpenSCAD's command-line interface for reliable exports
89
+ 2. Add metadata to 3MF and AMF files for better organization
90
+ 3. Test exported files with actual printer software
91
+ 4. Validate files before sending to printers
@@ -0,0 +1,66 @@
1
+ # OpenSCAD Basics
2
+
3
+ <metadata>
4
+ author: devin-ai-integration
5
+ timestamp: 2025-03-21T01:30:00Z
6
+ version: 1.0.0
7
+ tags: [openscad, 3d-modeling, csg, parametric-design]
8
+ </metadata>
9
+
10
+ ## Overview
11
+
12
+ OpenSCAD is a programmer's solid 3D CAD modeler that uses a scripting language to define 3D objects. Unlike traditional CAD software that focuses on interactive modeling, OpenSCAD emphasizes programmatic and parametric design.
13
+
14
+ ## Key Concepts
15
+
16
+ ### Constructive Solid Geometry (CSG)
17
+
18
+ OpenSCAD uses CSG operations to create complex models by combining simpler primitives:
19
+
20
+ - **Union**: Combines multiple objects (`union() { ... }`)
21
+ - **Difference**: Subtracts one object from another (`difference() { ... }`)
22
+ - **Intersection**: Creates an object from the overlapping portions of other objects (`intersection() { ... }`)
23
+
24
+ ### Primitive Shapes
25
+
26
+ OpenSCAD provides several built-in primitive shapes:
27
+
28
+ - **Cube**: `cube([width, depth, height], center=true/false)`
29
+ - **Sphere**: `sphere(r=radius, $fn=segments)`
30
+ - **Cylinder**: `cylinder(h=height, r=radius, center=true/false, $fn=segments)`
31
+ - **Polyhedron**: For complex shapes with defined faces
32
+
33
+ ### Transformations
34
+
35
+ Objects can be transformed using:
36
+
37
+ - **Translate**: `translate([x, y, z]) { ... }`
38
+ - **Rotate**: `rotate([x_deg, y_deg, z_deg]) { ... }`
39
+ - **Scale**: `scale([x, y, z]) { ... }`
40
+ - **Mirror**: `mirror([x, y, z]) { ... }`
41
+
42
+ ### Parametric Design
43
+
44
+ OpenSCAD excels at parametric design:
45
+
46
+ - Variables can define dimensions and relationships
47
+ - Modules can create reusable components with parameters
48
+ - Mathematical expressions can define complex relationships
49
+
50
+ ## Command Line Usage
51
+
52
+ OpenSCAD can be run headless using command-line options:
53
+
54
+ - Generate STL: `openscad -o output.stl input.scad`
55
+ - Pass parameters: `openscad -D "width=10" -D "height=20" -o output.stl input.scad`
56
+ - Generate PNG preview: `openscad --camera=0,0,0,0,0,0,50 --imgsize=800,600 -o preview.png input.scad`
57
+
58
+ ## Best Practices
59
+
60
+ - Use modules for reusable components
61
+ - Parameterize designs for flexibility
62
+ - Use descriptive variable names
63
+ - Comment code for clarity
64
+ - Organize complex designs hierarchically
65
+ - Use $fn judiciously for performance
66
+ - Ensure models are manifold (watertight) for 3D printing
@@ -0,0 +1,79 @@
1
+ # Testing OpenSCAD Primitives
2
+
3
+ <metadata>
4
+ author: devin-ai-integration
5
+ timestamp: 2025-03-21T12:00:00Z
6
+ version: 1.0.0
7
+ tags: [openscad, primitives, testing, 3d-modeling]
8
+ </metadata>
9
+
10
+ ## Overview
11
+
12
+ Testing OpenSCAD primitives is essential to ensure that the MCP server can reliably generate and export 3D models. This document outlines approaches for programmatically testing primitives and validating their exports.
13
+
14
+ ## Primitive Types
15
+
16
+ The OpenSCAD MCP Server supports these primitive types:
17
+
18
+ - **Basic Shapes**: cube, sphere, cylinder
19
+ - **Complex Shapes**: cone, torus, hexagonal_prism
20
+ - **Containers**: hollow_box, rounded_box, tube
21
+ - **Text**: 3D text with customizable parameters
22
+
23
+ ## Testing Approach
24
+
25
+ ### Parameter Testing
26
+
27
+ Each primitive should be tested with:
28
+
29
+ - **Default Parameters**: Ensure the primitive renders correctly with default values
30
+ - **Boundary Values**: Test minimum and maximum reasonable values
31
+ - **Special Cases**: Test cases like zero dimensions, negative values
32
+
33
+ ### Export Testing
34
+
35
+ For each primitive and parameter set:
36
+
37
+ - **Export Formats**: Test export to 3MF, AMF, CSG, and SCAD formats
38
+ - **Format Validation**: Ensure exported files meet format specifications
39
+ - **Metadata Preservation**: Verify that parametric properties are preserved
40
+
41
+ ### Integration Testing
42
+
43
+ Test the full pipeline:
44
+
45
+ - **Natural Language → Parameters**: Test parameter extraction
46
+ - **Parameters → OpenSCAD Code**: Test code generation
47
+ - **OpenSCAD Code → Export**: Test file export
48
+ - **Export → Printer**: Test compatibility with printer software
49
+
50
+ ## Validation Criteria
51
+
52
+ Exported models should meet these criteria:
53
+
54
+ - **Manifold**: Models should be watertight (no holes in the mesh)
55
+ - **Valid Format**: Files should validate against format specifications
56
+ - **Metadata**: Should contain relevant model metadata
57
+ - **Render Performance**: Models should render efficiently
58
+
59
+ ## Implementation
60
+
61
+ The `PrimitiveTester` class implements this testing approach:
62
+
63
+ ```python
64
+ # Example usage
65
+ tester = PrimitiveTester(code_generator, cad_exporter)
66
+ results = tester.test_all_primitives()
67
+
68
+ # Test specific primitives
69
+ cube_results = tester.test_primitive("cube")
70
+ ```
71
+
72
+ ## Printer Compatibility Tests
73
+
74
+ Before sending to physical printers:
75
+
76
+ 1. Import exports into PrusaSlicer or Bambu Studio
77
+ 2. Check for import warnings or errors
78
+ 3. Verify that models slice correctly
79
+ 4. Test prints with simple examples