Spaces:
Sleeping
Sleeping
Commit History
-
feat: add model selector dropdown to UI
Users can now pick which model to use per backend (e.g. gemini-2.5-flash vs gemini-2.5-pro) from a dropdown in the top bar. Available models are configured in config.yaml and served via GET /api/backend-models. Also adds .gitignore entries for Claude Code local files. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1f27d6a
-
refactor: type server route request models with DesignState/DesignPlan
d1b7ccd -
refactor: update BaseOrchestrator and MockChatBackend to return ChatTurnResponse
Replace raw dict returns with typed Pydantic models throughout the orchestrator layer: BaseOrchestrator.chat_turn() now declares ChatTurnResponse return type, MockChatBackend builds and returns ChatTurnResponse directly, and _execute_cad_code returns PreviewData. Remove unused _format_response helper and AGENT_COLORS/NAMES/AVATARS imports. Bridge CrewOrchestrator._fallback() and server routes to handle the new typed returns until Tasks 9-10 complete their migration. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>6d4f152 -
fix: ask agent confirm now correctly updates plan card fields
askAgentForField() and confirmRecommendation() both called sendMessage() which triggered a backend round-trip. The crew orchestrator blindly reset phase from "planning" to "exploring" and cleared the plan on any message, destroying the plan state before the auto-fill could take effect. - Add plan_context flag through the full backend chain so plan-field queries preserve the planning phase - confirmRecommendation() now updates locally instead of sending to backend, preventing the phase reset that broke auto-fill - sendMessage() accepts options param to pass planContext flag Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>cfa0cbb -
fix: path traversal in model endpoints, XSS in plan card, remove dead code
- Validate model file names against safe character regex and resolve path to prevent directory traversal in all /api/models/ endpoints - Escape HTML in plan card and wizard review to prevent XSS from agent responses containing markup - Remove duplicate _is_plan_trigger check in _run_crew (dead code, already handled in chat_turn) - Use Literal type for DesignState.phase field to catch invalid states Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>d35c03c -
feat: add 3MF export and /api/models/{name}.3mf endpoint
- Add export_3mf() function to core/executor.py for slicer-ready 3MF format - Update export_all() to include 3MF alongside STEP and STL - Add GET /api/models/{name}.3mf endpoint to server/web.py - Add TestExport3MF test class with test_export_3mf and test_export_all_includes_3mf tests - All 217 tests pass including 2 new 3MF-specific tests This adds 3MF support for Cura/PrusaSlicer/Bambu Studio compatibility.38cfebe -
feat: add /api/plan/approve and /api/plan/reject endpoints
Add two new API endpoints enabling the frontend planning review gate: - POST /api/plan/approve: merges an (optionally edited) DesignPlan into DesignState, sets phase="approved" - POST /api/plan/reject: resets DesignState phase to "exploring" and clears the plan field Also adds PlanApproveRequest and PlanRejectRequest Pydantic models, and three new test cases covering phase transitions and plan merging. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>2d9cf0c -
refactor: eliminate all Serializer classes, use Pydantic model_dump() directly
- Delete core/serializers.py entirely - Remove CAMResultSerializer from core/cam.py - ExecutionResult uses Field(serialization_alias=...) + model_dump(by_alias=True) - CNCValidationResult uses @computed_field for error_count/warning_count - All callers updated: .model_dump() replaces Serializer.to_dict() - 196 tests passing, zero Serializer references remain Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>2330e12 -
refactor: typed Pydantic config + Pydantic result models, eliminate dict access
- Replace all dict[str, Any] config fields with typed Pydantic sub-models (ServerConfig, PathsConfig, BackendsConfig, OrchestrationConfig, ValidationConfig, ExportConfig, CAMConfig, AgentConfig, RoutingConfig) - Convert ExecutionResult, CNCValidationResult, CNCIssue, CAMResult from dataclasses to Pydantic BaseModel with to_api_dict() methods - Simplify serializers to thin wrappers calling to_api_dict() - Update all 8 consumer files from dict bracket/get access to attribute access - 197 tests passing Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>e660ef7
-
refactor: remove SingleCallOrchestrator, unify all backends through CrewAI
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>65c5308 -
feat(api): add GET /api/models/{name}.gcode endpoint
ec96204 -
fix: surface CAD execution errors to user instead of silently failing
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>f50292b -
feat: remove mock/claude backends, default to gemini, add openai toggle
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>972271d -
refactor: server uses Settings + BackendFactory, eliminate hardcoded paths and backend checks
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>9af23c5 -
refactor: use serializers to eliminate duplicated result building
Replace all inline dict-building for execution and validation results in server/mcp.py and agents/orchestrator.py with ExecutionResultSerializer.to_dict() and ValidationResultSerializer.to_dict() calls from core.serializers. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>8d2137d
-
feat: switch Gemini to CrewAI multi-call orchestrator
Gemini now uses the same CrewAI sequential process as Anthropic/OpenAI, giving each agent its own independent LLM call for better quality. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>2aec70e -
feat: add DesignState memory + localStorage persistence
- agents/design_state.py: Pydantic DesignState model with regex-based extraction of materials, dimensions, fasteners, axis recommendations, and design decisions from agent messages (no extra LLM call) - agents/prompts.py: inject "Current Design Spec" block into LLM context so decisions survive history truncation - agents/orchestrator.py: both orchestrators maintain and return design_state across turns - server/routes.py: pass design_state through API - web/index.html: localStorage persistence for chat history and design state, restore on page load, "NEW" button to start fresh Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>d46cdb3 -
fix: address agentic review — security, prompts, retry, validation
- Security: remove __import__ from executor sandbox (RCE vector) - Prompts: resolve contradictory history instructions, unify CAD trigger keywords into single CAD_TRIGGER_KEYWORDS constant - Retry: add error-feedback retry loop for failed CadQuery execution (up to 2 retries via LLM self-correction) - Fallback: add role-appropriate fallback messages per agent instead of identical generic string; log backend fallback warnings - Validation: add Pydantic models (ChatRequest, ReportRequest) for /api/chat and /api/report request validation - Errors: sanitize error messages returned to client Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>edf10d0 -
feat: add chat API, MCP chat_turn tool, and rewrite frontend
- server/routes.py: POST /api/chat, POST /api/report, GET /api/agents - server/web.py: include chat routes - server/mcp.py: add chat_turn MCP tool for Claude Desktop - web/index.html: complete rewrite — fullscreen 3D viewer with slide-out multi-agent chat panel, @mention autocomplete, on-demand preview, code viewer modal, gallery modal Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>4dc45c6 -
refactor: reorganize codebase into core/, server/, agents/ packages
Extract pipeline.py into core/backends.py (LLM backends) and core/pipeline.py (run_pipeline). Move code_executor.py, cnc_validator.py, cadquery_system_prompt.py into core/. Move web_server.py and mcp_server.py into server/. Create agents/ skeleton. Update Dockerfile, docker-compose, and entrypoint for new package structure. Add crewai dependency. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>e32c964