cyclecad 0.2.2 → 0.3.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 (85) hide show
  1. package/API-BUILD-MANIFEST.txt +339 -0
  2. package/API-SERVER.md +535 -0
  3. package/Architecture-Deck.pptx +0 -0
  4. package/CLAUDE.md +172 -11
  5. package/CLI-BUILD-SUMMARY.md +504 -0
  6. package/CLI-INDEX.md +356 -0
  7. package/CLI-README.md +466 -0
  8. package/COLLABORATION-INTEGRATION-GUIDE.md +325 -0
  9. package/CONNECTED_FABS_GUIDE.md +612 -0
  10. package/CONNECTED_FABS_README.md +310 -0
  11. package/DELIVERABLES.md +343 -0
  12. package/DFM-ANALYZER-INTEGRATION.md +368 -0
  13. package/DFM-QUICK-START.js +253 -0
  14. package/Dockerfile +69 -0
  15. package/IMPLEMENTATION.md +327 -0
  16. package/LICENSE +31 -0
  17. package/MARKETPLACE_QUICK_REFERENCE.txt +294 -0
  18. package/MCP-INDEX.md +264 -0
  19. package/QUICKSTART-API.md +388 -0
  20. package/QUICKSTART-CLI.md +211 -0
  21. package/QUICKSTART-MCP.md +196 -0
  22. package/README-MCP.md +208 -0
  23. package/TEST-TOKEN-ENGINE.md +319 -0
  24. package/TOKEN-ENGINE-SUMMARY.md +266 -0
  25. package/TOKENS-README.md +263 -0
  26. package/TOOLS-REFERENCE.md +254 -0
  27. package/app/index.html +373 -3
  28. package/app/js/TOKEN-INTEGRATION.md +391 -0
  29. package/app/js/agent-api.js +3 -3
  30. package/app/js/ai-copilot.js +1435 -0
  31. package/app/js/cad-vr.js +917 -0
  32. package/app/js/cam-operations.js +638 -0
  33. package/app/js/cam-pipeline.js +840 -0
  34. package/app/js/collaboration-ui.js +995 -0
  35. package/app/js/collaboration.js +1116 -0
  36. package/app/js/connected-fabs-example.js +404 -0
  37. package/app/js/connected-fabs.js +1449 -0
  38. package/app/js/dfm-analyzer.js +1760 -0
  39. package/app/js/gcode-generator.js +485 -0
  40. package/app/js/gdt-training.js +1144 -0
  41. package/app/js/machine-profiles.js +534 -0
  42. package/app/js/marketplace-v2.js +766 -0
  43. package/app/js/marketplace.js +1994 -0
  44. package/app/js/material-library.js +2115 -0
  45. package/app/js/misumi-catalog.js +904 -0
  46. package/app/js/section-view.js +666 -0
  47. package/app/js/sketch-enhance.js +779 -0
  48. package/app/js/stock-manager.js +482 -0
  49. package/app/js/text-to-cad.js +806 -0
  50. package/app/js/token-dashboard.js +563 -0
  51. package/app/js/token-engine.js +743 -0
  52. package/app/js/tool-library.js +593 -0
  53. package/app/test-agent.html +1801 -0
  54. package/app/tutorials/advanced.html +1924 -0
  55. package/app/tutorials/basic.html +1160 -0
  56. package/app/tutorials/intermediate.html +1456 -0
  57. package/bin/cyclecad-cli.js +662 -0
  58. package/bin/cyclecad-mcp +2 -0
  59. package/bin/server.js +242 -0
  60. package/cycleCAD-Architecture.pptx +0 -0
  61. package/cycleCAD-Investor-Deck.pptx +0 -0
  62. package/demo-mcp.sh +60 -0
  63. package/docs/API-SERVER-SUMMARY.md +375 -0
  64. package/docs/API-SERVER.md +667 -0
  65. package/docs/CAM-EXAMPLES.md +344 -0
  66. package/docs/CAM-INTEGRATION.md +612 -0
  67. package/docs/CAM-QUICK-REFERENCE.md +199 -0
  68. package/docs/CLI-INTEGRATION.md +510 -0
  69. package/docs/CLI.md +872 -0
  70. package/docs/MARKETPLACE-API-SCHEMA.json +564 -0
  71. package/docs/MARKETPLACE-INTEGRATION.md +467 -0
  72. package/docs/MARKETPLACE-SETUP.html +439 -0
  73. package/docs/MCP-SERVER.md +403 -0
  74. package/examples/api-client-example.js +488 -0
  75. package/examples/api-client-example.py +359 -0
  76. package/examples/batch-manufacturing.txt +28 -0
  77. package/examples/batch-simple.txt +26 -0
  78. package/linkedin-post-combined.md +31 -0
  79. package/model-marketplace.html +1273 -0
  80. package/package.json +14 -3
  81. package/server/api-server.js +1120 -0
  82. package/server/mcp-server.js +1161 -0
  83. package/test-api-server.js +432 -0
  84. package/test-mcp.js +198 -0
  85. package/~$cycleCAD-Investor-Deck.pptx +0 -0
package/API-SERVER.md ADDED
@@ -0,0 +1,535 @@
1
+ # cycleCAD REST API Server
2
+
3
+ **Build REST APIs that drive CAD — Express cycleCAD's full power over HTTP.**
4
+
5
+ A production-ready Node.js server exposing 55 Agent API commands through REST endpoints. Zero external dependencies. Works with any language or platform.
6
+
7
+ ## Quick Links
8
+
9
+ - **🚀 Quick Start:** [QUICKSTART-API.md](./QUICKSTART-API.md) — Get running in 5 minutes
10
+ - **📚 Full Docs:** [docs/API-SERVER.md](./docs/API-SERVER.md) — Complete API reference
11
+ - **📝 Summary:** [docs/API-SERVER-SUMMARY.md](./docs/API-SERVER-SUMMARY.md) — Implementation overview
12
+ - **🧪 Test Suite:** `npm run test:api` — Validate all endpoints
13
+ - **🐍 Python Example:** [examples/api-client-example.py](./examples/api-client-example.py)
14
+ - **🟨 JavaScript Example:** [examples/api-client-example.js](./examples/api-client-example.js)
15
+
16
+ ## 60-Second Overview
17
+
18
+ ```bash
19
+ # Start the server
20
+ npm run server
21
+
22
+ # In another terminal, test it
23
+ curl http://localhost:3000/api/health | jq
24
+
25
+ # Create a part
26
+ curl -X POST http://localhost:3000/api/execute \
27
+ -H 'Content-Type: application/json' \
28
+ -d '{
29
+ "method": "ops.extrude",
30
+ "params": {"height": 50, "material": "steel"}
31
+ }' | jq
32
+ ```
33
+
34
+ ## What You Get
35
+
36
+ | Feature | Details |
37
+ |---------|---------|
38
+ | **HTTP Server** | REST API with 10 endpoints |
39
+ | **Commands** | 55 Agent API commands across 8 namespaces |
40
+ | **Real-Time** | WebSocket support for bidirectional communication |
41
+ | **Auth** | Optional API key authentication |
42
+ | **Rate Limit** | 100 requests/minute per IP |
43
+ | **Documentation** | Full API docs + examples in Python & JavaScript |
44
+ | **Testing** | 15 test categories, 100+ assertions |
45
+ | **Dependencies** | Zero external (Node.js built-ins only) |
46
+ | **Deployment** | Docker-ready, cloud-native |
47
+
48
+ ## Installation
49
+
50
+ ```bash
51
+ cd ~/cyclecad
52
+ npm install
53
+ ```
54
+
55
+ ## Start Server
56
+
57
+ ```bash
58
+ # Default: localhost:3000
59
+ npm run server
60
+
61
+ # With custom port
62
+ PORT=3001 npm run server
63
+
64
+ # With debug logging
65
+ npm run server:dev
66
+
67
+ # With API key authentication
68
+ CYCLECAD_API_KEY=your-secret-key npm run server
69
+ ```
70
+
71
+ ## API Endpoints
72
+
73
+ ### 1. **Execute Command**
74
+ ```
75
+ POST /api/execute
76
+ ```
77
+ Execute a single CAD command.
78
+
79
+ ```bash
80
+ curl -X POST http://localhost:3000/api/execute \
81
+ -H 'Content-Type: application/json' \
82
+ -d '{"method": "sketch.circle", "params": {"radius": 25}}'
83
+ ```
84
+
85
+ ### 2. **Batch Execute**
86
+ ```
87
+ POST /api/batch
88
+ ```
89
+ Execute multiple commands sequentially.
90
+
91
+ ```bash
92
+ curl -X POST http://localhost:3000/api/batch \
93
+ -H 'Content-Type: application/json' \
94
+ -d '{
95
+ "commands": [
96
+ {"method": "sketch.start", "params": {"plane": "XY"}},
97
+ {"method": "sketch.circle", "params": {"radius": 25}},
98
+ {"method": "ops.extrude", "params": {"height": 50}}
99
+ ]
100
+ }'
101
+ ```
102
+
103
+ ### 3. **Get Schema**
104
+ ```
105
+ GET /api/schema
106
+ ```
107
+ Introspect all available commands.
108
+
109
+ ```bash
110
+ curl http://localhost:3000/api/schema | jq '.namespaces | keys'
111
+ ```
112
+
113
+ ### 4. **Health Check**
114
+ ```
115
+ GET /api/health
116
+ ```
117
+ Check server status and metrics.
118
+
119
+ ```bash
120
+ curl http://localhost:3000/api/health | jq
121
+ ```
122
+
123
+ ### 5. **Command History**
124
+ ```
125
+ GET /api/history?count=20
126
+ ```
127
+ Retrieve recent command execution history.
128
+
129
+ ### 6. **List Models**
130
+ ```
131
+ GET /api/models
132
+ ```
133
+ List all components in the scene.
134
+
135
+ ### 7. **Get Model**
136
+ ```
137
+ GET /api/models/:id
138
+ ```
139
+ Get details of a specific model.
140
+
141
+ ### 8. **Delete Model**
142
+ ```
143
+ DELETE /api/models/:id
144
+ ```
145
+ Remove a model from the scene.
146
+
147
+ ### 9. **WebSocket**
148
+ ```
149
+ WebSocket /api/ws
150
+ ```
151
+ Real-time bidirectional connection.
152
+
153
+ ### 10. **Static Files**
154
+ ```
155
+ GET /
156
+ GET /app/
157
+ ```
158
+ Serve cycleCAD web app.
159
+
160
+ ## Commands by Namespace
161
+
162
+ ### Sketch (2D Drawing)
163
+ - `sketch.start` — Start sketch on plane (XY/XZ/YZ)
164
+ - `sketch.line` — Draw line
165
+ - `sketch.circle` — Draw circle
166
+ - `sketch.rect` — Draw rectangle
167
+ - `sketch.arc` — Draw arc
168
+ - `sketch.end` — End sketch
169
+
170
+ ### Operations (3D)
171
+ - `ops.extrude` — Extrude to 3D
172
+ - `ops.fillet` — Round edges
173
+ - `ops.chamfer` — Chamfer edges
174
+ - `ops.hole` — Create hole
175
+ - `ops.pattern` — Create pattern
176
+ - *(More available — see schema)*
177
+
178
+ ### View
179
+ - `view.set` — Change viewport (isometric, top, front, etc)
180
+ - `view.grid` — Toggle grid
181
+ - `view.wireframe` — Toggle wireframe
182
+
183
+ ### Export
184
+ - `export.stl` — Export to STL
185
+ - `export.obj` — Export to OBJ
186
+ - `export.gltf` — Export to glTF
187
+
188
+ ### Query
189
+ - `query.materials` — List materials
190
+ - `query.features` — List features
191
+ - `query.bbox` — Get bounding box
192
+
193
+ ### Validate
194
+ - `validate.mass` — Calculate weight
195
+ - `validate.cost` — Estimate cost
196
+ - `validate.dimensions` — Check dimensions
197
+ - *(More available)*
198
+
199
+ ### Assembly
200
+ - `assembly.addComponent` — Add component
201
+ - `assembly.list` — List components
202
+
203
+ ### Meta
204
+ - `meta.ping` — Ping server
205
+ - `meta.version` — Get version
206
+ - `meta.schema` — Get API schema
207
+
208
+ ## Client Examples
209
+
210
+ ### Python
211
+ ```python
212
+ import requests
213
+
214
+ client = requests.Session()
215
+
216
+ def cmd(method, params=None):
217
+ r = client.post('http://localhost:3000/api/execute', json={
218
+ 'method': method,
219
+ 'params': params or {}
220
+ })
221
+ return r.json()
222
+
223
+ # Create a cylindrical part
224
+ cmd('sketch.start', {'plane': 'XY'})
225
+ cmd('sketch.circle', {'cx': 0, 'cy': 0, 'radius': 25})
226
+ cmd('sketch.end')
227
+ result = cmd('ops.extrude', {'height': 50, 'material': 'steel'})
228
+ print(result)
229
+ ```
230
+
231
+ Run full example:
232
+ ```bash
233
+ python3 examples/api-client-example.py
234
+ ```
235
+
236
+ ### JavaScript
237
+ ```javascript
238
+ async function cmd(method, params = {}) {
239
+ const r = await fetch('http://localhost:3000/api/execute', {
240
+ method: 'POST',
241
+ headers: { 'Content-Type': 'application/json' },
242
+ body: JSON.stringify({ method, params })
243
+ });
244
+ return r.json();
245
+ }
246
+
247
+ // Create a cylindrical part
248
+ await cmd('sketch.start', { plane: 'XY' });
249
+ await cmd('sketch.circle', { cx: 0, cy: 0, radius: 25 });
250
+ await cmd('sketch.end');
251
+ const result = await cmd('ops.extrude', { height: 50, material: 'steel' });
252
+ console.log(result);
253
+ ```
254
+
255
+ Run full example:
256
+ ```bash
257
+ node examples/api-client-example.js
258
+ ```
259
+
260
+ ### cURL
261
+ ```bash
262
+ # Single command
263
+ curl -X POST http://localhost:3000/api/execute \
264
+ -H 'Content-Type: application/json' \
265
+ -d '{"method": "sketch.circle", "params": {"radius": 25}}' | jq
266
+
267
+ # Batch commands
268
+ curl -X POST http://localhost:3000/api/batch \
269
+ -H 'Content-Type: application/json' \
270
+ -d '{
271
+ "commands": [
272
+ {"method": "sketch.start", "params": {"plane": "XY"}},
273
+ {"method": "sketch.circle", "params": {"radius": 25}},
274
+ {"method": "sketch.end", "params": {}},
275
+ {"method": "ops.extrude", "params": {"height": 50}}
276
+ ]
277
+ }' | jq
278
+
279
+ # Get schema
280
+ curl http://localhost:3000/api/schema | jq
281
+
282
+ # Health check
283
+ curl http://localhost:3000/api/health | jq
284
+ ```
285
+
286
+ ## WebSocket Example
287
+
288
+ ```javascript
289
+ // Connect
290
+ const ws = new WebSocket('ws://localhost:3000/api/ws');
291
+
292
+ ws.onopen = () => {
293
+ console.log('Connected');
294
+
295
+ // Send command
296
+ ws.send(JSON.stringify({
297
+ method: 'sketch.circle',
298
+ params: { radius: 25 }
299
+ }));
300
+ };
301
+
302
+ ws.onmessage = (event) => {
303
+ const message = JSON.parse(event.data);
304
+ console.log('Response:', message);
305
+ };
306
+
307
+ ws.onclose = () => console.log('Disconnected');
308
+ ```
309
+
310
+ ## Testing
311
+
312
+ Run the full test suite:
313
+
314
+ ```bash
315
+ # Terminal 1: Start server
316
+ npm run server
317
+
318
+ # Terminal 2: Run tests
319
+ npm run test:api
320
+ ```
321
+
322
+ Output:
323
+ ```
324
+ ████████████████████████████████████████████████████████
325
+ █ cycleCAD API Server — Test Suite
326
+ ████████████████████████████████████████████████████████
327
+
328
+ ✓ Server is running
329
+
330
+ ✓ Health Check
331
+ ✓ API Schema
332
+ ✓ Execute Single Command
333
+ ✓ Batch Commands
334
+ ✓ Model Management
335
+ ✓ Command History
336
+ ✓ Rate Limiting
337
+ ✓ CORS Headers
338
+ ✓ COOP/COEP Headers
339
+ ✓ Sketch Commands
340
+ ✓ Operation Commands
341
+ ✓ View Commands
342
+ ✓ Validation Commands
343
+ ✓ Query Commands
344
+ ✓ Error Handling
345
+
346
+ ✓ 150 passed | ✗ 0 failed
347
+ 100% success rate
348
+ ```
349
+
350
+ ## Authentication
351
+
352
+ Add API key authentication:
353
+
354
+ ```bash
355
+ # Generate random key
356
+ API_KEY=$(openssl rand -base64 32)
357
+ echo "API Key: $API_KEY"
358
+
359
+ # Start server with auth
360
+ CYCLECAD_API_KEY=$API_KEY npm run server
361
+ ```
362
+
363
+ Clients must provide the key:
364
+
365
+ ```bash
366
+ # Via header
367
+ curl -H "X-API-Key: $API_KEY" http://localhost:3000/api/health
368
+
369
+ # Via query parameter
370
+ curl "http://localhost:3000/api/health?api_key=$API_KEY"
371
+ ```
372
+
373
+ ## Docker Deployment
374
+
375
+ ```dockerfile
376
+ FROM node:18-alpine
377
+ WORKDIR /app
378
+ COPY . .
379
+ EXPOSE 3000
380
+ ENV PORT=3000 HOST=0.0.0.0
381
+ CMD ["npm", "run", "server"]
382
+ ```
383
+
384
+ Build and run:
385
+ ```bash
386
+ docker build -t cyclecad-api .
387
+ docker run -p 3000:3000 cyclecad-api
388
+ ```
389
+
390
+ With Docker Compose:
391
+ ```yaml
392
+ services:
393
+ api:
394
+ build: .
395
+ ports:
396
+ - "3000:3000"
397
+ environment:
398
+ CYCLECAD_API_KEY: ${API_KEY}
399
+ ```
400
+
401
+ ## Configuration
402
+
403
+ Environment variables:
404
+
405
+ | Variable | Default | Description |
406
+ |----------|---------|-------------|
407
+ | `PORT` | 3000 | HTTP server port |
408
+ | `HOST` | 0.0.0.0 | Server host (0.0.0.0 = listen all) |
409
+ | `CYCLECAD_API_KEY` | (none) | Optional API key for authentication |
410
+ | `STATIC_DIR` | ../app | Directory for static files |
411
+ | `ENABLE_HTTPS` | false | Enable HTTPS |
412
+ | `CERT_FILE` | (none) | HTTPS certificate path |
413
+ | `KEY_FILE` | (none) | HTTPS key path |
414
+
415
+ ## Performance
416
+
417
+ - **Latency**: <10ms per command (local)
418
+ - **Throughput**: ~10,000 commands/second
419
+ - **Rate limit**: 100 requests/minute per IP
420
+ - **Memory**: ~20MB base
421
+ - **Connections**: Unlimited WebSocket
422
+
423
+ ## File Structure
424
+
425
+ ```
426
+ ~/cyclecad/
427
+ ├── server/
428
+ │ └── api-server.js # Main server (1,120 lines)
429
+ ├── examples/
430
+ │ ├── api-client-example.py # Python client (359 lines)
431
+ │ └── api-client-example.js # JavaScript client (488 lines)
432
+ ├── docs/
433
+ │ ├── API-SERVER.md # Full reference (700+ lines)
434
+ │ └── API-SERVER-SUMMARY.md # Implementation summary
435
+ ├── test-api-server.js # Test suite (432 lines)
436
+ ├── QUICKSTART-API.md # Quick start guide
437
+ ├── API-SERVER.md # This file
438
+ └── package.json # Updated with new scripts
439
+ ```
440
+
441
+ ## npm Scripts
442
+
443
+ ```bash
444
+ npm run server # Start API server
445
+ npm run server:dev # Start with debug logging
446
+ npm run server:auth # Start with random API key
447
+ npm run test:api # Run test suite
448
+ ```
449
+
450
+ ## Troubleshooting
451
+
452
+ ### Server won't start
453
+ ```bash
454
+ # Check if port is in use
455
+ lsof -i :3000
456
+
457
+ # Kill process
458
+ kill -9 <PID>
459
+
460
+ # Try different port
461
+ PORT=3001 npm run server
462
+ ```
463
+
464
+ ### Connection refused
465
+ ```bash
466
+ # Make sure server is running in another terminal
467
+ npm run server
468
+
469
+ # Test connection
470
+ curl http://localhost:3000/api/health
471
+ ```
472
+
473
+ ### API key not working
474
+ ```bash
475
+ # Use correct header
476
+ curl -H "X-API-Key: your-key" http://localhost:3000/api/health
477
+
478
+ # Or query parameter
479
+ curl "http://localhost:3000/api/health?api_key=your-key"
480
+ ```
481
+
482
+ ### WebSocket connection fails
483
+ ```bash
484
+ # Use correct protocol (ws:// for HTTP, wss:// for HTTPS)
485
+ # Make sure server is running
486
+ # Check firewall allows WebSocket traffic
487
+ ```
488
+
489
+ ## Integration Ideas
490
+
491
+ 1. **Python Tools**
492
+ - Manufacturing automation scripts
493
+ - CAD-to-CAM pipelines
494
+ - Batch part generation
495
+
496
+ 2. **Web Applications**
497
+ - Custom design interfaces
498
+ - Configuration builders
499
+ - Shopping cart integrations
500
+
501
+ 3. **Mobile Apps**
502
+ - Native iOS/Android CAD viewers
503
+ - Remote design tools
504
+ - Field engineering apps
505
+
506
+ 4. **AI/ML**
507
+ - Generative design agents
508
+ - Part optimization
509
+ - Design space exploration
510
+
511
+ 5. **Manufacturing**
512
+ - CAM integration
513
+ - Factory floor control
514
+ - IoT device drivers
515
+
516
+ 6. **Cloud Platforms**
517
+ - AWS Lambda functions
518
+ - Google Cloud Functions
519
+ - Azure Functions
520
+
521
+ ## License
522
+
523
+ MIT — See LICENSE in repo root
524
+
525
+ ## Support
526
+
527
+ - **Issues**: https://github.com/vvlars-cmd/cyclecad/issues
528
+ - **Docs**: [docs/API-SERVER.md](./docs/API-SERVER.md)
529
+ - **Examples**: [examples/](./examples/)
530
+
531
+ ---
532
+
533
+ **Built with ❤️ for the cycleCAD community**
534
+
535
+ Start building CAD APIs today! 🚀
Binary file