176 lines
6.3 KiB
Markdown
176 lines
6.3 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Build & Test Commands
|
|
|
|
```bash
|
|
# Install in development mode
|
|
pip install -e .
|
|
|
|
# Install with all dependencies
|
|
pip install -e ".[dev]"
|
|
|
|
# Run the editor
|
|
artifact-editor
|
|
|
|
# Run from source (development)
|
|
PYTHONPATH=src python3 -m artifact_editor.cli
|
|
|
|
# Run with specific format
|
|
artifact-editor --type svg --output /tmp/test.svg
|
|
```
|
|
|
|
## Architecture
|
|
|
|
Artifact Editor is a standalone PyQt6-based GUI for creating visual artifacts (diagrams, 3D models, code snippets) from code-based formats. It's designed to integrate with other tools via stdin/stdout and exit codes.
|
|
|
|
### Project Ecosystem
|
|
|
|
This is part of a three-project stack:
|
|
1. **CmdForge** - AI provider abstraction and tool execution (dependency)
|
|
2. **Orchestrated Discussions** - Conversation orchestration (launches this editor)
|
|
3. **Artifact Editor** (this) - Visual artifact creation
|
|
|
|
### Integration Protocol
|
|
|
|
When launched by a parent application (e.g., Orchestrated Discussions):
|
|
|
|
```
|
|
Parent App Artifact Editor
|
|
│ │
|
|
├─ subprocess.run([ │
|
|
│ "artifact-editor", │
|
|
│ "--output", "path.puml" │
|
|
│ ]) │
|
|
│ ├─ User edits/creates artifact
|
|
│ ├─ User may switch format (e.g., .puml → .svg)
|
|
│ ├─ User clicks Save & Exit
|
|
│ │
|
|
│ ◄──────────────────────────────── ├─ stdout: "ARTIFACT_SAVED:/actual/path.svg"
|
|
│ ├─ exit code: 0 (success)
|
|
│ │
|
|
├─ Parse stdout for ARTIFACT_SAVED │
|
|
├─ Use actual path (not suggested) │
|
|
```
|
|
|
|
**Exit Codes:**
|
|
- `0` - Success, file saved. stdout contains `ARTIFACT_SAVED:/path`
|
|
- `1` - User cancelled (closed without saving)
|
|
- `2` - Error (stderr contains message)
|
|
|
|
### Key Design Decisions
|
|
|
|
1. **Code-based formats** - All artifacts are stored as text (PlantUML, Mermaid, SVG, etc.) so AI can read and modify them
|
|
2. **Format switching** - User can change format; `output_path` extension updates automatically
|
|
3. **Non-destructive** - Undo/redo works for both code and visual edits
|
|
4. **Subprocess integration** - Clean stdin/stdout contract, no shared state
|
|
|
|
### Source Structure
|
|
|
|
```
|
|
src/artifact_editor/
|
|
├── cli.py # Entry point, argument parsing
|
|
├── gui.py # PyQt6 main window (~2800 lines)
|
|
├── dialogs.py # Element editing dialogs per format
|
|
├── templates.py # Pre-built templates (100+)
|
|
├── parser.py # PlantUML parser
|
|
├── mermaid_parser.py # Mermaid parser
|
|
├── openscad_parser.py # OpenSCAD parser
|
|
├── excalidraw_parser.py # Excalidraw JSON parser
|
|
├── svg_parser.py # SVG XML parsing
|
|
├── svg_interactive.py # Qt-based SVG interaction
|
|
├── svg_scene.py # QGraphicsScene SVG rendering
|
|
└── renderers/
|
|
├── __init__.py # Renderer registry
|
|
├── plantuml.py # Calls `plantuml` CLI
|
|
├── mermaid.py # Calls `mmdc` CLI
|
|
├── openscad.py # Calls `openscad` CLI
|
|
├── code.py # Pygments syntax highlighting
|
|
├── svg.py # Direct SVG rendering
|
|
└── excalidraw.py # Excalidraw JSON → SVG
|
|
```
|
|
|
|
### Key Classes
|
|
|
|
- **`ArtifactEditorWindow`** - Main PyQt6 window with split view
|
|
- **`RenderThread`** - Background rendering to avoid UI freezes
|
|
- **`DictateThread`** - Voice input with countdown timer
|
|
- **`AIThread`** - AI generation in background
|
|
- **`SVGSceneManager`** - Interactive SVG editing with QGraphicsScene
|
|
|
|
### AI Integration
|
|
|
|
Uses the `artifact-ai` CmdForge tool for AI-powered generation:
|
|
```python
|
|
subprocess.run(
|
|
["artifact-ai", "--format", format_type, "--instruction", instruction],
|
|
input=current_code,
|
|
capture_output=True
|
|
)
|
|
```
|
|
|
|
No direct AI provider imports - follows Unix philosophy.
|
|
|
|
### CmdForge Tools
|
|
|
|
Artifact Editor includes CmdForge tools for CLI/scripting use:
|
|
|
|
```
|
|
cmdforge/
|
|
├── artifact-ai/ # AI-powered artifact generation/modification
|
|
│ └── config.yaml # Supports all formats: plantuml, mermaid, openscad, svg, excalidraw, code
|
|
└── artifact-export/ # Render source to binary formats (PNG, SVG, PDF)
|
|
└── config.yaml
|
|
```
|
|
|
|
**artifact-ai** - Generate or modify artifacts using AI:
|
|
```bash
|
|
# Create new artifact
|
|
echo "" | artifact-ai --format plantuml --instruction "Create a sequence diagram for login"
|
|
|
|
# Modify existing artifact
|
|
cat diagram.puml | artifact-ai --format plantuml --instruction "Add a cache layer"
|
|
```
|
|
|
|
**artifact-export** - Render artifacts to binary formats:
|
|
```bash
|
|
cat diagram.puml | artifact-export --format plantuml --to output.svg
|
|
cat model.scad | artifact-export --format openscad --to output.png
|
|
```
|
|
|
|
These tools are installed to `~/.cmdforge/` and `~/.local/bin/` by `./install.sh`.
|
|
|
|
### Supported Formats
|
|
|
|
| Format | Extension | Renderer | Visual Editing |
|
|
|--------|-----------|----------|----------------|
|
|
| PlantUML | `.puml` | `plantuml` CLI | Element dialogs |
|
|
| Mermaid | `.mmd` | `mmdc` CLI | Node/edge dialogs |
|
|
| OpenSCAD | `.scad` | `openscad` CLI | 3D rotation, primitives |
|
|
| Code | `.py`, etc. | Pygments | Syntax highlighting |
|
|
| SVG | `.svg` | Direct | Interactive drag/resize |
|
|
| Excalidraw | `.json` | Built-in | Hand-drawn style |
|
|
|
|
### Toolbar Actions
|
|
|
|
- **Format selector** - Switch between artifact types (updates file extension)
|
|
- **Save** - Save to current path
|
|
- **Save & Exit** - Save and close (for integration workflows)
|
|
- **Render** button by preview - Force re-render (Ctrl+R)
|
|
|
|
### AI Panel
|
|
|
|
Bottom of window:
|
|
- **Text input** - Natural language instructions
|
|
- **Dictate** - 10-second voice recording with countdown (`🎤 9s`, `🎤 8s`...)
|
|
- **AI Generate** - Sends to Claude, updates code editor
|
|
|
|
### External Dependencies
|
|
|
|
Required for rendering:
|
|
- `plantuml` - For PlantUML diagrams
|
|
- `mmdc` (mermaid-cli) - For Mermaid diagrams
|
|
- `openscad` - For 3D CAD models
|
|
- `pygments` - For code syntax highlighting
|