383 lines
12 KiB
Markdown
383 lines
12 KiB
Markdown
<!-- DISCUSSION -->
|
|
<!-- Title: Artifact Editor - AI-Enhanced Diagram and 3D Model Creator -->
|
|
<!-- Phase: initial_feedback -->
|
|
<!-- Status: OPEN -->
|
|
<!-- Created: 2025-12-19T02:07:49Z -->
|
|
<!-- Template: brainstorm -->
|
|
<!-- Participants: architect, security, pragmatist -->
|
|
|
|
# Artifact Editor - AI-Enhanced Diagram and 3D Model Creator
|
|
|
|
## Context
|
|
## Overview
|
|
|
|
We want to build a standalone **Artifact Editor** that can be launched from any application to create visual artifacts like diagrams, sketches, and 3D models.
|
|
|
|
## Key Requirements
|
|
|
|
1. **Standalone executable** - Can be launched via command line with arguments
|
|
2. **Multiple artifact types** - Mermaid, PlantUML, OpenSCAD/SolidPython, SVG, ASCII art
|
|
3. **AI assistance** - Voice input, conversational editing, auto-generation
|
|
4. **Integration contract** - Simple stdin/stdout/exit-code interface for parent apps
|
|
5. **Live preview** - See rendered output as you edit code
|
|
|
|
## Integration Target
|
|
|
|
Primary integration with **orchestrated-discussions** project:
|
|
- User clicks 'Add Artifact' in comment dialog
|
|
- Launches artifact-editor with output path argument
|
|
- User creates/edits artifact
|
|
- On save, outputs 'ARTIFACT_SAVED:/path/to/file'
|
|
- Parent app embeds artifact reference in comment
|
|
|
|
## Questions to Explore
|
|
|
|
- What's the right UI framework? (urwid TUI, Dear PyGui, web-based?)
|
|
- How should AI assistance work? (SmartTools integration?)
|
|
- What's the MVP feature set?
|
|
- How do we handle 3D model preview?
|
|
- Should we support collaborative editing?
|
|
|
|
## Project Scaffold
|
|
|
|
Initial scaffold already created at ~/PycharmProjects/artifact-editor with:
|
|
- pyproject.toml
|
|
- Basic CLI structure
|
|
- Renderer base class
|
|
- Mermaid and OpenSCAD renderer stubs
|
|
|
|
## Requirements
|
|
- [ ] [Requirement 1]
|
|
- [ ] [Requirement 2]
|
|
|
|
## Open Questions
|
|
- [Question 1]
|
|
|
|
---
|
|
|
|
*Discussion begins below.*
|
|
---
|
|
|
|
Name: AI-Pragmatist
|
|
## Practical Shipping Analysis
|
|
|
|
This is a classic case of solving tomorrow's problems today. Let me break down what we actually need vs what's being proposed.
|
|
|
|
### CONCERN: COMPLEXITY - Overscoped for Integration Need
|
|
|
|
The stated goal is "User clicks 'Add Artifact' in orchestrated-discussions." But the proposed scope includes:
|
|
- Multiple diagram types (Mermaid, PlantUML, OpenSCAD, SVG, ASCII)
|
|
- Voice input
|
|
- Conversational editing
|
|
- Live preview
|
|
- 3D model rendering
|
|
- Collaborative editing (in questions)
|
|
|
|
This is 6+ months of work for a feature that needs to ship in weeks.
|
|
|
|
### MVP: Single Artifact Type + Text Editor
|
|
|
|
**What ships in 2 weeks:**
|
|
1. Launch editor with `--output-path` argument
|
|
2. Simple text editor for PlantUML/Mermaid (pick ONE)
|
|
3. Save button that outputs `ARTIFACT_SAVED:/path`
|
|
4. Exit code 0 on save, 1 on cancel
|
|
|
|
That's it. No AI, no preview, no 3D. Just a working integration.
|
|
|
|
**Defer to v2:**
|
|
- AI assistance (SmartTools)
|
|
- Live preview (nice-to-have, not blocking)
|
|
- Additional formats (add after first one works)
|
|
- Voice input (future)
|
|
- 3D models (separate project)
|
|
|
|
### UI Framework Decision
|
|
|
|
**Simplest that works:** urwid TUI
|
|
- Already in dependency tree (orchestrated-discussions uses it)
|
|
- Zero preview complexity (just show code)
|
|
- Fast to build
|
|
- Terminal-native, no GUI frameworks
|
|
|
|
**Defer:** Dear PyGui, web-based - these add complexity without solving the core integration need.
|
|
|
|
### Architecture: Just Enough
|
|
|
|
```
|
|
artifact-editor --type mermaid --output diagrams/foo.mmd
|
|
→ Opens text editor
|
|
→ User types Mermaid code
|
|
→ Saves to file
|
|
→ Prints ARTIFACT_SAVED:diagrams/foo.mmd
|
|
→ Exit 0
|
|
```
|
|
|
|
No renderers, no preview pipeline, no AI - just a glorified text editor with contract compliance.
|
|
|
|
### What Success Looks Like (v1)
|
|
|
|
User can add a diagram to a discussion comment. That's it. Ship that, get feedback, iterate.
|
|
|
|
### Recommendation
|
|
|
|
Q: What's the right UI framework?
|
|
A: urwid - simplest, already a dependency
|
|
|
|
Q: How should AI assistance work?
|
|
A: Don't build it yet - defer to v2
|
|
|
|
Q: What's the MVP feature set?
|
|
A: Text editing + save contract for ONE format
|
|
|
|
Q: How do we handle 3D preview?
|
|
A: Don't - that's a v3+ feature
|
|
|
|
Q: Collaborative editing?
|
|
A: Hard no for MVP
|
|
|
|
DIAGRAM: diagrams/artifact-editor-ai-enhanced-diagram-and-3d-model-creator_mvp_5.puml
|
|
|
|
VOTE: CHANGES - Scope needs 80% reduction to ship something useful
|
|
|
|
VOTE: CHANGES
|
|
|
|
---
|
|
|
|
Name: AI-Security
|
|
## Security Analysis
|
|
|
|
I've reviewed the Artifact Editor proposal and identified several security concerns that need to be addressed:
|
|
|
|
### High Priority Threats
|
|
|
|
**1. Command Injection via Renderer Execution**
|
|
|
|
CONCERN: PlantUML, OpenSCAD, and Mermaid renderers execute external processes. User-controlled content could escape sandboxing.
|
|
|
|
- PlantUML Java execution with user diagrams
|
|
- OpenSCAD code compilation and execution
|
|
- SVG rendering with embedded scripts
|
|
- ASCII art could contain terminal escape sequences
|
|
|
|
Mitigation: Strict input validation, sandboxed execution (containers/firejail), disable network access for renderers, CSP for web-based previews.
|
|
|
|
**2. Path Traversal in File Operations**
|
|
|
|
CONCERN: The `--output` argument could be exploited to write files outside intended directories.
|
|
|
|
```
|
|
artifact-editor --output ../../../etc/cron.d/backdoor
|
|
```
|
|
|
|
Mitigation: Validate and canonicalize all file paths, restrict writes to specific directories, check for `..` sequences.
|
|
|
|
**3. Voice Input Attack Surface**
|
|
|
|
CONCERN: Voice-to-AI pipeline introduces new vectors:
|
|
- Audio injection attacks
|
|
- Prompt injection via transcribed speech
|
|
- Privacy concerns (recording storage)
|
|
|
|
Mitigation: Sanitize transcriptions before AI processing, ephemeral audio storage, user consent for recording.
|
|
|
|
**4. AI-Generated Code Execution**
|
|
|
|
CONCERN: AI might generate malicious code in OpenSCAD/PlantUML that gets auto-executed.
|
|
|
|
- OpenSCAD can read/write files
|
|
- PlantUML can include external files
|
|
- SVG can contain JavaScript
|
|
|
|
Mitigation: Review-before-execute workflow, static analysis of generated code, disable dangerous language features.
|
|
|
|
### Medium Priority
|
|
|
|
**5. Stdout/Stdin Protocol Security**
|
|
|
|
The parent app integration uses stdout for communication. Malicious artifact content could inject fake protocol messages:
|
|
|
|
```
|
|
ARTIFACT_SAVED:/fake/path\nARTIFACT_SAVED:/actual/malicious/path
|
|
```
|
|
|
|
Mitigation: Structured format (JSON over stdout), message signing/verification.
|
|
|
|
**6. Dependency Chain Attacks**
|
|
|
|
External renderers (PlantUML JAR, OpenSCAD binary) could be compromised.
|
|
|
|
Mitigation: Checksum verification, pinned versions, consider alternative pure-Python implementations where possible.
|
|
|
|
**7. Resource Exhaustion**
|
|
|
|
CONCERN: Complex diagrams could cause DoS:
|
|
- Infinite loops in OpenSCAD
|
|
- Massive PlantUML graphs consuming memory
|
|
- SVG bomb attacks
|
|
|
|
Mitigation: Execution timeouts, memory limits, input size restrictions.
|
|
|
|
### Recommendations
|
|
|
|
**For MVP:**
|
|
1. Start with read-only ASCII art and Mermaid (client-side rendering)
|
|
2. Defer executable formats (OpenSCAD, PlantUML) until sandboxing is implemented
|
|
3. Use JSON protocol for parent communication
|
|
4. Implement strict path validation immediately
|
|
5. Add `--safe-mode` flag that disables AI features for security-critical contexts
|
|
|
|
**Architecture:**
|
|
- Separate renderer processes with minimal privileges
|
|
- Filesystem access only to designated artifact directory
|
|
- Network isolation for all renderers
|
|
- Audit logging of all file operations
|
|
|
|
**Voice/AI:**
|
|
- Disable by default, require explicit `--enable-ai` flag
|
|
- Clear user warning about data being sent to AI providers
|
|
- Local speech-to-text option for privacy
|
|
|
|
DIAGRAM: diagrams/artifact-editor-ai-enhanced-diagram-and-3d-model-creator_security_5.puml
|
|
|
|
VOTE: CHANGES
|
|
|
|
---
|
|
|
|
Name: AI-Architect
|
|
## Architectural Analysis
|
|
|
|
### Strong Foundation
|
|
|
|
The Unix philosophy alignment with orchestrated-discussions is excellent. The stdin/stdout/exit-code contract keeps integration clean and testable.
|
|
|
|
### Critical Architectural Decisions Needed
|
|
|
|
#### 1. **UI Framework Choice Has Long-Term Implications**
|
|
|
|
- **urwid TUI**: Aligns with project ecosystem, SSH-friendly, but 3D preview severely limited
|
|
- **Dear PyGui**: Native performance, better for 3D/live preview, but desktop-only
|
|
- **Web-based (local server)**: Most flexible for preview/3D, cross-platform, but adds complexity
|
|
|
|
RECOMMENDATION: **Hybrid approach** - TUI for text-based formats (PlantUML, Mermaid, ASCII), launch external viewer for 3D. Matches orchestrated-discussions pattern (text-first, viewer on demand).
|
|
|
|
#### 2. **Renderer Architecture**
|
|
|
|
ARTIFACT: diagrams/artifact-editor-architecture.puml
|
|
|
|
Key principle: **Renderers are stateless SmartTools**
|
|
|
|
```
|
|
artifact-editor (orchestration)
|
|
↓ subprocess
|
|
artifact-render-{format} (SmartTools)
|
|
↓
|
|
External tools (plantuml.jar, mermaid-cli, openscad)
|
|
```
|
|
|
|
DON'T: Build rendering logic into the editor
|
|
DO: Each renderer is a SmartTool that can be tested independently:
|
|
```bash
|
|
echo '@startuml\nA -> B\n@enduml' | artifact-render-plantuml > out.svg
|
|
```
|
|
|
|
#### 3. **AI Assistance Integration**
|
|
|
|
Two architectural patterns emerge:
|
|
|
|
**Pattern A: AI as orchestrator** (RECOMMENDED)
|
|
- User voice → `artifact-assistant` SmartTool → generates code → editor displays
|
|
- Conversational loop: user refines → tool regenerates
|
|
- Editor remains thin, AI in separate SmartTool
|
|
|
|
**Pattern B: AI embedded in editor**
|
|
- Tighter coupling, harder to test, breaks Unix philosophy
|
|
|
|
#### 4. **State Management Concern**
|
|
|
|
Current scaffold suggests single-process architecture. Consider:
|
|
- Long-running edit sessions
|
|
- Undo/redo state
|
|
- Unsaved changes handling
|
|
|
|
RECOMMENDATION: **File-based state**
|
|
- Auto-save to temp file (e.g., `/tmp/artifact-edit-{pid}.state`)
|
|
- On crash/kill, can recover
|
|
- Aligns with "discussion file is source of truth" principle
|
|
|
|
### Architecture Risks
|
|
|
|
1. **3D Preview Complexity**: OpenSCAD rendering is SLOW. Need async architecture to prevent UI blocking.
|
|
- Solution: Render process pool, preview throttling
|
|
|
|
2. **Voice Input Dependencies**: Adds heavyweight deps (speech recognition). Could bloat the tool.
|
|
- Solution: Separate `artifact-voice` SmartTool, optional integration
|
|
|
|
3. **Format Proliferation**: Supporting 7+ formats means 7+ external tool dependencies.
|
|
- Solution: Plugin architecture, core ships with Mermaid+PlantUML only
|
|
|
|
### Proposed System Architecture
|
|
|
|
```
|
|
artifact-editor # Thin orchestrator (urwid TUI)
|
|
├── Core loop: edit → render → display
|
|
├── Calls SmartTools via subprocess
|
|
└── File-based state persistence
|
|
|
|
SmartTools ecosystem:
|
|
├── artifact-render-{format} # Stateless renderers
|
|
├── artifact-assistant # AI code generation
|
|
├── artifact-voice # Speech → text (optional)
|
|
└── artifact-validate-{format} # Syntax checking
|
|
|
|
External tools (user-installed):
|
|
├── plantuml.jar
|
|
├── mermaid-cli
|
|
├── openscad
|
|
└── dot (graphviz)
|
|
```
|
|
|
|
### MVP Scope Recommendation
|
|
|
|
**Phase 1 (MVP)**:
|
|
- TUI editor (urwid)
|
|
- Mermaid + PlantUML support (most common in orchestrated-discussions)
|
|
- Basic `artifact-assistant` SmartTool (text prompt → diagram code)
|
|
- File output contract
|
|
|
|
**Phase 2**:
|
|
- OpenSCAD/3D support with external viewer
|
|
- Voice input via `artifact-voice` tool
|
|
- Live preview split-pane
|
|
|
|
**Phase 3**:
|
|
- Plugin system for custom formats
|
|
- Collaborative editing (shared state file)
|
|
|
|
### Open Architectural Questions
|
|
|
|
**Q1**: Should artifact-editor support editing existing artifacts or only creation?
|
|
- Editing adds complexity (need to parse existing files, detect format)
|
|
- Creation-only is cleaner but less useful
|
|
|
|
**Q2**: How to handle format-specific validation?
|
|
- Pre-render validation prevents invalid saves
|
|
- But adds per-format complexity
|
|
|
|
**Q3**: Should the editor be modal (vim-style) or modeless?
|
|
- Modal fits TUI better, smaller learning curve
|
|
- Modeless more familiar to non-terminal users
|
|
|
|
VOTE: CHANGES
|
|
|
|
## Required Decisions Before Implementation
|
|
|
|
1. ✅ Confirm hybrid TUI + external viewer approach
|
|
2. ✅ Confirm SmartTools-based renderer architecture
|
|
3. ❓ Define MVP format support (recommend: Mermaid + PlantUML only)
|
|
4. ❓ Decide on edit-existing vs. create-only
|
|
5. ❓ Choose modal vs. modeless editing
|
|
|
|
VOTE: CHANGES
|
|
|