refactor: Rename SmartTools to CmdForge
The SmartTools project was renamed to CmdForge due to name conflict with another project. This updates all references throughout the codebase: - Renamed smarttools/ directory to cmdforge/ - Updated pyproject.toml dependency URL - Updated Dockerfile build stages and paths - Updated docker-compose.yml service configs - Updated install.sh paths and comments - Updated documentation (README.md, CLAUDE.md) - Updated gui.py ecosystem reference 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
51633f1e0b
commit
3fb46c2111
12
CLAUDE.md
12
CLAUDE.md
|
|
@ -28,7 +28,7 @@ Artifact Editor is a standalone PyQt6-based GUI for creating visual artifacts (d
|
||||||
### Project Ecosystem
|
### Project Ecosystem
|
||||||
|
|
||||||
This is part of a three-project stack:
|
This is part of a three-project stack:
|
||||||
1. **SmartTools** - AI provider abstraction and tool execution (dependency)
|
1. **CmdForge** - AI provider abstraction and tool execution (dependency)
|
||||||
2. **Orchestrated Discussions** - Conversation orchestration (launches this editor)
|
2. **Orchestrated Discussions** - Conversation orchestration (launches this editor)
|
||||||
3. **Artifact Editor** (this) - Visual artifact creation
|
3. **Artifact Editor** (this) - Visual artifact creation
|
||||||
|
|
||||||
|
|
@ -101,7 +101,7 @@ src/artifact_editor/
|
||||||
|
|
||||||
### AI Integration
|
### AI Integration
|
||||||
|
|
||||||
Uses the `artifact-ai` SmartTool for AI-powered generation:
|
Uses the `artifact-ai` CmdForge tool for AI-powered generation:
|
||||||
```python
|
```python
|
||||||
subprocess.run(
|
subprocess.run(
|
||||||
["artifact-ai", "--format", format_type, "--instruction", instruction],
|
["artifact-ai", "--format", format_type, "--instruction", instruction],
|
||||||
|
|
@ -112,12 +112,12 @@ subprocess.run(
|
||||||
|
|
||||||
No direct AI provider imports - follows Unix philosophy.
|
No direct AI provider imports - follows Unix philosophy.
|
||||||
|
|
||||||
### SmartTools
|
### CmdForge Tools
|
||||||
|
|
||||||
Artifact Editor includes SmartTools for CLI/scripting use:
|
Artifact Editor includes CmdForge tools for CLI/scripting use:
|
||||||
|
|
||||||
```
|
```
|
||||||
smarttools/
|
cmdforge/
|
||||||
├── artifact-ai/ # AI-powered artifact generation/modification
|
├── artifact-ai/ # AI-powered artifact generation/modification
|
||||||
│ └── config.yaml # Supports all formats: plantuml, mermaid, openscad, svg, excalidraw, code
|
│ └── config.yaml # Supports all formats: plantuml, mermaid, openscad, svg, excalidraw, code
|
||||||
└── artifact-export/ # Render source to binary formats (PNG, SVG, PDF)
|
└── artifact-export/ # Render source to binary formats (PNG, SVG, PDF)
|
||||||
|
|
@ -139,7 +139,7 @@ cat diagram.puml | artifact-export --format plantuml --to output.svg
|
||||||
cat model.scad | artifact-export --format openscad --to output.png
|
cat model.scad | artifact-export --format openscad --to output.png
|
||||||
```
|
```
|
||||||
|
|
||||||
These tools are installed to `~/.smarttools/` and `~/.local/bin/` by `./install.sh`.
|
These tools are installed to `~/.cmdforge/` and `~/.local/bin/` by `./install.sh`.
|
||||||
|
|
||||||
### Supported Formats
|
### Supported Formats
|
||||||
|
|
||||||
|
|
|
||||||
36
Dockerfile
36
Dockerfile
|
|
@ -1,23 +1,23 @@
|
||||||
# Artifact Editor - AI-enhanced visual artifact creation
|
# Artifact Editor - AI-enhanced visual artifact creation
|
||||||
#
|
#
|
||||||
# Multi-stage build:
|
# Multi-stage build:
|
||||||
# Stage 1: Build SmartTools base
|
# Stage 1: Build CmdForge base
|
||||||
# Stage 2: Build Artifact Editor with SmartTools
|
# Stage 2: Build Artifact Editor with CmdForge
|
||||||
#
|
#
|
||||||
# Build: docker build -t artifact-editor .
|
# Build: docker build -t artifact-editor .
|
||||||
# Run: docker run -it --rm artifact-editor artifact-ai --help
|
# Run: docker run -it --rm artifact-editor artifact-ai --help
|
||||||
# GUI: See usage examples at bottom
|
# GUI: See usage examples at bottom
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# Stage 1: SmartTools Base
|
# Stage 1: CmdForge Base
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
FROM python:3.12-slim AS smarttools
|
FROM python:3.12-slim AS cmdforge
|
||||||
|
|
||||||
WORKDIR /smarttools
|
WORKDIR /cmdforge
|
||||||
|
|
||||||
ARG SMARTTOOLS_REPO=https://gitea.brrd.tech/rob/SmartTools.git
|
ARG CMDFORGE_REPO=https://gitea.brrd.tech/rob/CmdForge.git
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends git && \
|
RUN apt-get update && apt-get install -y --no-install-recommends git && \
|
||||||
git clone ${SMARTTOOLS_REPO} . || \
|
git clone ${CMDFORGE_REPO} . || \
|
||||||
echo "Clone failed - will need COPY in next stage"
|
echo "Clone failed - will need COPY in next stage"
|
||||||
|
|
||||||
RUN pip install --no-cache-dir -e . || true
|
RUN pip install --no-cache-dir -e . || true
|
||||||
|
|
@ -59,16 +59,16 @@ RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# Copy SmartTools from stage 1
|
# Copy CmdForge from stage 1
|
||||||
COPY --from=smarttools /smarttools /smarttools
|
COPY --from=cmdforge /cmdforge /cmdforge
|
||||||
|
|
||||||
# Install SmartTools
|
# Install CmdForge
|
||||||
RUN pip install --no-cache-dir -e /smarttools
|
RUN pip install --no-cache-dir -e /cmdforge
|
||||||
|
|
||||||
# Copy Artifact Editor files
|
# Copy Artifact Editor files
|
||||||
COPY pyproject.toml README.md ./
|
COPY pyproject.toml README.md ./
|
||||||
COPY src/ ./src/
|
COPY src/ ./src/
|
||||||
COPY smarttools/ ./smarttools/
|
COPY cmdforge/ ./cmdforge/
|
||||||
COPY install.sh ./
|
COPY install.sh ./
|
||||||
|
|
||||||
# Install Artifact Editor and dependencies
|
# Install Artifact Editor and dependencies
|
||||||
|
|
@ -76,14 +76,14 @@ RUN pip install --no-cache-dir -e . && \
|
||||||
pip install --no-cache-dir PyQt6 pygments
|
pip install --no-cache-dir PyQt6 pygments
|
||||||
|
|
||||||
# Create directories
|
# Create directories
|
||||||
RUN mkdir -p /root/.smarttools /root/.local/bin
|
RUN mkdir -p /root/.cmdforge /root/.local/bin
|
||||||
|
|
||||||
# Install artifact SmartTools
|
# Install artifact CmdForge tools
|
||||||
RUN ./install.sh
|
RUN ./install.sh
|
||||||
|
|
||||||
# Install SmartTools example tools
|
# Install CmdForge example tools
|
||||||
RUN python /smarttools/examples/install.py 2>/dev/null || true && \
|
RUN python /cmdforge/examples/install.py 2>/dev/null || true && \
|
||||||
smarttools refresh 2>/dev/null || true
|
cmdforge refresh 2>/dev/null || true
|
||||||
|
|
||||||
# Add local bin to PATH
|
# Add local bin to PATH
|
||||||
ENV PATH="/root/.local/bin:${PATH}"
|
ENV PATH="/root/.local/bin:${PATH}"
|
||||||
|
|
@ -91,7 +91,7 @@ ENV PATH="/root/.local/bin:${PATH}"
|
||||||
# Healthcheck - verify CLI tools work
|
# Healthcheck - verify CLI tools work
|
||||||
RUN artifact-ai --help && \
|
RUN artifact-ai --help && \
|
||||||
artifact-export --help && \
|
artifact-export --help && \
|
||||||
smarttools list | head -5
|
cmdforge list | head -5
|
||||||
|
|
||||||
# Default: show help
|
# Default: show help
|
||||||
CMD ["artifact-ai", "--help"]
|
CMD ["artifact-ai", "--help"]
|
||||||
|
|
|
||||||
10
README.md
10
README.md
|
|
@ -59,7 +59,7 @@ Run without installing anything locally (all dependencies included):
|
||||||
git clone https://gitea.brrd.tech/rob/artifact-editor.git
|
git clone https://gitea.brrd.tech/rob/artifact-editor.git
|
||||||
cd artifact-editor
|
cd artifact-editor
|
||||||
|
|
||||||
# Build (automatically clones SmartTools from Gitea)
|
# Build (automatically clones CmdForge from Gitea)
|
||||||
docker-compose build
|
docker-compose build
|
||||||
|
|
||||||
# Run tests
|
# Run tests
|
||||||
|
|
@ -164,14 +164,14 @@ artifact-editor/
|
||||||
│ ├── code.py # Pygments-based syntax highlighting
|
│ ├── code.py # Pygments-based syntax highlighting
|
||||||
│ ├── svg.py # Direct SVG editing with UI components
|
│ ├── svg.py # Direct SVG editing with UI components
|
||||||
│ └── excalidraw.py # Hand-drawn style diagrams
|
│ └── excalidraw.py # Hand-drawn style diagrams
|
||||||
└── smarttools/ # CLI tools following Unix philosophy
|
└── cmdforge/ # CLI tools following Unix philosophy
|
||||||
├── artifact-ai/ # AI-powered artifact generation/modification
|
├── artifact-ai/ # AI-powered artifact generation/modification
|
||||||
└── artifact-export/ # Render source to binary formats
|
└── artifact-export/ # Render source to binary formats
|
||||||
```
|
```
|
||||||
|
|
||||||
## CLI SmartTools
|
## CLI CmdForge Tools
|
||||||
|
|
||||||
In addition to the GUI, artifact-editor provides command-line SmartTools:
|
In addition to the GUI, artifact-editor provides command-line CmdForge tools:
|
||||||
|
|
||||||
### artifact-ai
|
### artifact-ai
|
||||||
|
|
||||||
|
|
@ -202,7 +202,7 @@ cat model.scad | artifact-export --format openscad --to output.png
|
||||||
cat flowchart.mmd | artifact-export --format mermaid --to output.pdf
|
cat flowchart.mmd | artifact-export --format mermaid --to output.pdf
|
||||||
```
|
```
|
||||||
|
|
||||||
Install SmartTools with `./install.sh` (requires SmartTools framework).
|
Install CmdForge tools with `./install.sh` (requires CmdForge framework).
|
||||||
|
|
||||||
## Keyboard Shortcuts
|
## Keyboard Shortcuts
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
# Artifact Editor - AI-enhanced diagram and artifact creation
|
# Artifact Editor - AI-enhanced diagram and artifact creation
|
||||||
#
|
#
|
||||||
# Quick Start:
|
# Quick Start:
|
||||||
# docker-compose build # Build the image (clones SmartTools from Gitea)
|
# docker-compose build # Build the image (clones CmdForge from Gitea)
|
||||||
# docker-compose run --rm test # Run tests
|
# docker-compose run --rm test # Run tests
|
||||||
# docker-compose run --rm cli artifact-ai --help
|
# docker-compose run --rm cli artifact-ai --help
|
||||||
#
|
#
|
||||||
# Dependencies:
|
# Dependencies:
|
||||||
# - SmartTools (cloned automatically from Gitea during build)
|
# - CmdForge (cloned automatically from Gitea during build)
|
||||||
|
|
||||||
version: '3.8'
|
version: '3.8'
|
||||||
|
|
||||||
|
|
@ -19,10 +19,10 @@ services:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
args:
|
args:
|
||||||
SMARTTOOLS_REPO: https://gitea.brrd.tech/rob/SmartTools.git
|
CMDFORGE_REPO: https://gitea.brrd.tech/rob/CmdForge.git
|
||||||
image: artifact-editor:latest
|
image: artifact-editor:latest
|
||||||
volumes:
|
volumes:
|
||||||
- smarttools-data:/root/.smarttools
|
- cmdforge-data:/root/.cmdforge
|
||||||
- /tmp/artifacts:/tmp/artifacts
|
- /tmp/artifacts:/tmp/artifacts
|
||||||
command: ["artifact-ai", "--help"]
|
command: ["artifact-ai", "--help"]
|
||||||
|
|
||||||
|
|
@ -34,16 +34,16 @@ services:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
args:
|
args:
|
||||||
SMARTTOOLS_REPO: https://gitea.brrd.tech/rob/SmartTools.git
|
CMDFORGE_REPO: https://gitea.brrd.tech/rob/CmdForge.git
|
||||||
image: artifact-editor:latest
|
image: artifact-editor:latest
|
||||||
volumes:
|
volumes:
|
||||||
- smarttools-data:/root/.smarttools
|
- cmdforge-data:/root/.cmdforge
|
||||||
command: >
|
command: >
|
||||||
bash -c "
|
bash -c "
|
||||||
echo '=== Artifact Editor Tests ==='
|
echo '=== Artifact Editor Tests ==='
|
||||||
echo ''
|
echo ''
|
||||||
echo '1. Checking SmartTools...'
|
echo '1. Checking CmdForge...'
|
||||||
smarttools list | head -5
|
cmdforge list | head -5
|
||||||
echo ''
|
echo ''
|
||||||
echo '2. Checking artifact-ai...'
|
echo '2. Checking artifact-ai...'
|
||||||
artifact-ai --help > /dev/null && echo 'artifact-ai: OK'
|
artifact-ai --help > /dev/null && echo 'artifact-ai: OK'
|
||||||
|
|
@ -65,13 +65,13 @@ services:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
args:
|
args:
|
||||||
SMARTTOOLS_REPO: https://gitea.brrd.tech/rob/SmartTools.git
|
CMDFORGE_REPO: https://gitea.brrd.tech/rob/CmdForge.git
|
||||||
image: artifact-editor:latest
|
image: artifact-editor:latest
|
||||||
environment:
|
environment:
|
||||||
- DISPLAY=${DISPLAY:-:0}
|
- DISPLAY=${DISPLAY:-:0}
|
||||||
- QT_QPA_PLATFORM=xcb
|
- QT_QPA_PLATFORM=xcb
|
||||||
volumes:
|
volumes:
|
||||||
- smarttools-data:/root/.smarttools
|
- cmdforge-data:/root/.cmdforge
|
||||||
- /tmp/artifacts:/tmp/artifacts
|
- /tmp/artifacts:/tmp/artifacts
|
||||||
- /tmp/.X11-unix:/tmp/.X11-unix:ro
|
- /tmp/.X11-unix:/tmp/.X11-unix:ro
|
||||||
command: ["artifact-editor"]
|
command: ["artifact-editor"]
|
||||||
|
|
@ -85,24 +85,24 @@ services:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
args:
|
args:
|
||||||
SMARTTOOLS_REPO: https://gitea.brrd.tech/rob/SmartTools.git
|
CMDFORGE_REPO: https://gitea.brrd.tech/rob/CmdForge.git
|
||||||
image: artifact-editor:latest
|
image: artifact-editor:latest
|
||||||
volumes:
|
volumes:
|
||||||
- smarttools-data:/root/.smarttools
|
- cmdforge-data:/root/.cmdforge
|
||||||
- /tmp/artifacts:/tmp/artifacts
|
- /tmp/artifacts:/tmp/artifacts
|
||||||
command: ["/bin/bash"]
|
command: ["/bin/bash"]
|
||||||
stdin_open: true
|
stdin_open: true
|
||||||
tty: true
|
tty: true
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
smarttools-data:
|
cmdforge-data:
|
||||||
# Persists ~/.smarttools between container runs
|
# Persists ~/.cmdforge between container runs
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# Usage Examples
|
# Usage Examples
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
#
|
#
|
||||||
# Build (fetches SmartTools from Gitea automatically):
|
# Build (fetches CmdForge from Gitea automatically):
|
||||||
# docker-compose build
|
# docker-compose build
|
||||||
#
|
#
|
||||||
# Run tests:
|
# Run tests:
|
||||||
|
|
|
||||||
20
install.sh
20
install.sh
|
|
@ -5,10 +5,10 @@ set -e
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
INSTALL_DIR="$HOME/.local/bin"
|
INSTALL_DIR="$HOME/.local/bin"
|
||||||
SMARTTOOLS_DIR="$HOME/.smarttools"
|
CMDFORGE_DIR="$HOME/.cmdforge"
|
||||||
|
|
||||||
mkdir -p "$INSTALL_DIR"
|
mkdir -p "$INSTALL_DIR"
|
||||||
mkdir -p "$SMARTTOOLS_DIR"
|
mkdir -p "$CMDFORGE_DIR"
|
||||||
|
|
||||||
# Create wrapper script for artifact-editor GUI
|
# Create wrapper script for artifact-editor GUI
|
||||||
cat > "$INSTALL_DIR/artifact-editor" << 'WRAPPER'
|
cat > "$INSTALL_DIR/artifact-editor" << 'WRAPPER'
|
||||||
|
|
@ -23,19 +23,19 @@ WRAPPER
|
||||||
sed -i "s|PLACEHOLDER_DIR|$SCRIPT_DIR|g" "$INSTALL_DIR/artifact-editor"
|
sed -i "s|PLACEHOLDER_DIR|$SCRIPT_DIR|g" "$INSTALL_DIR/artifact-editor"
|
||||||
chmod +x "$INSTALL_DIR/artifact-editor"
|
chmod +x "$INSTALL_DIR/artifact-editor"
|
||||||
|
|
||||||
# Install SmartTools
|
# Install CmdForge tools
|
||||||
if [ -d "$SCRIPT_DIR/smarttools" ]; then
|
if [ -d "$SCRIPT_DIR/cmdforge" ]; then
|
||||||
echo "Installing SmartTools..."
|
echo "Installing CmdForge tools..."
|
||||||
for tool in "$SCRIPT_DIR/smarttools"/*/; do
|
for tool in "$SCRIPT_DIR/cmdforge"/*/; do
|
||||||
tool_name=$(basename "$tool")
|
tool_name=$(basename "$tool")
|
||||||
cp -r "$tool" "$SMARTTOOLS_DIR/"
|
cp -r "$tool" "$CMDFORGE_DIR/"
|
||||||
|
|
||||||
# Create CLI wrapper
|
# Create CLI wrapper
|
||||||
cat > "$INSTALL_DIR/$tool_name" << WRAPPER
|
cat > "$INSTALL_DIR/$tool_name" << WRAPPER
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# SmartTools wrapper for '$tool_name'
|
# CmdForge wrapper for '$tool_name'
|
||||||
# Auto-generated
|
# Auto-generated
|
||||||
exec /usr/bin/python3 -m smarttools.runner $tool_name "\$@"
|
exec /usr/bin/python3 -m cmdforge.runner $tool_name "\$@"
|
||||||
WRAPPER
|
WRAPPER
|
||||||
chmod +x "$INSTALL_DIR/$tool_name"
|
chmod +x "$INSTALL_DIR/$tool_name"
|
||||||
echo " Installed: $tool_name"
|
echo " Installed: $tool_name"
|
||||||
|
|
@ -49,7 +49,7 @@ echo "Usage:"
|
||||||
echo " artifact-editor diagram.puml # Edit existing file"
|
echo " artifact-editor diagram.puml # Edit existing file"
|
||||||
echo " artifact-editor -o new.puml # Create new file"
|
echo " artifact-editor -o new.puml # Create new file"
|
||||||
echo ""
|
echo ""
|
||||||
echo "SmartTools:"
|
echo "CmdForge tools:"
|
||||||
echo " artifact-ai --format plantuml --instruction 'Create a class diagram'"
|
echo " artifact-ai --format plantuml --instruction 'Create a class diagram'"
|
||||||
echo " artifact-export --format plantuml --to output.svg"
|
echo " artifact-export --format plantuml --to output.svg"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ classifiers = [
|
||||||
]
|
]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"PyYAML>=6.0",
|
"PyYAML>=6.0",
|
||||||
"smarttools @ git+https://gitea.brrd.tech/rob/SmartTools.git",
|
"cmdforge @ git+https://gitea.brrd.tech/rob/CmdForge.git",
|
||||||
# GUI is required for the editor - include by default
|
# GUI is required for the editor - include by default
|
||||||
"PyQt6>=6.4.0",
|
"PyQt6>=6.4.0",
|
||||||
"QScintilla>=2.14.0",
|
"QScintilla>=2.14.0",
|
||||||
|
|
|
||||||
|
|
@ -2410,7 +2410,7 @@ class ArtifactEditorWindow(QMainWindow):
|
||||||
"• Structured element/relationship dialogs<br>"
|
"• Structured element/relationship dialogs<br>"
|
||||||
"• AI-powered diagram generation<br>"
|
"• AI-powered diagram generation<br>"
|
||||||
"• Voice input via dictation<br><br>"
|
"• Voice input via dictation<br><br>"
|
||||||
"<i>Part of the SmartTools ecosystem</i>"
|
"<i>Part of the CmdForge ecosystem</i>"
|
||||||
)
|
)
|
||||||
msg.setStandardButtons(QMessageBox.StandardButton.Ok)
|
msg.setStandardButtons(QMessageBox.StandardButton.Ok)
|
||||||
msg.exec()
|
msg.exec()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue