speiidev 0.0.0-stage → 1.0.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.
- package/.claude/output-styles/speiidev-block.md +50 -0
- package/CLAUDE.md +49 -0
- package/README.md +271 -2
- package/bin/block-font +19 -0
- package/bin/speiidev.js +26 -0
- package/bin/speiidevv +20 -0
- package/package.json +10 -3
- package/pyproject.toml +62 -0
- package/scripts/run_tests.py +15 -0
- package/scripts/test_real_install.py +129 -0
- package/src/autodev/__init__.py +40 -0
- package/src/autodev/__main__.py +11 -0
- package/src/autodev/cli.py +2269 -0
- package/src/autodev/font.py +504 -0
- package/src/autodev/pixel_art.py +333 -0
- package/tests/__init__.py +3 -0
- package/tests/test_cli.py +82 -0
- package/tests/test_font.py +72 -0
- package/tests/test_pixel_art.py +75 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: SpeiiDev Block
|
|
3
|
+
description: Formats major headings, milestones, and banners with Claude Code 3D wireframe shadow or compact block font
|
|
4
|
+
keep-coding-instructions: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Output Style: SpeiiDev Block
|
|
8
|
+
|
|
9
|
+
You are Claude Code operating with the **SpeiiDev / Claude 3D Block** visual typography style.
|
|
10
|
+
|
|
11
|
+
## Signature Visual Styles
|
|
12
|
+
|
|
13
|
+
### Style 1: Claude 3D Wireframe Shadow (Primary)
|
|
14
|
+
Chunky block letters with double-line isometric drop shadow (`═`, `║`, `╔`, `╗`, `╚`, `╝`).
|
|
15
|
+
Rendered in Anthropic Terracotta Coral (`#D97757`) or Catppuccin Bok Choy Green (`#A6E3A1`).
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
▄██████╗ ██╗ ▄█████╗ ██╗ ██╗ ██████╗ ███████╗
|
|
19
|
+
██╔════╝║ ██║ ██╔═══██╗ ██║ ██║ ██╔══██╗ ██╔════╝║
|
|
20
|
+
██║ ║ ██║ █████████║ ██║ ██║ ██║ ██║ █████╗ ║
|
|
21
|
+
██║ ║ ██║ ██╔═══███║ ██║ ██║ ██║ ██║ ██╔══╝ ║
|
|
22
|
+
▀██████╗║ ███████╗ ██║ ███║ ╚███████║ ██████╔╝ ███████╗║
|
|
23
|
+
╚═════╝╝ ╚══════╝╝ ╚═╝ ╚══╝╝ ╚══════╝╝ ╚═════╝╝ ╚══════╝╝
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Style 2: Compact 2-Line Half-Block
|
|
27
|
+
For narrow terminals or concise inline banners:
|
|
28
|
+
```
|
|
29
|
+
▄▀▀ █▀█ █▀▀ █ █ █▀▄ █▀▀ █░█
|
|
30
|
+
▄██ █▀▀ ██▄ █ █ █▄▀ ██▄ ▀▄▀
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## How to Generate Text
|
|
34
|
+
Use the local CLI tool via Bash:
|
|
35
|
+
```bash
|
|
36
|
+
# 3D wireframe shadow (default)
|
|
37
|
+
block-font "MY TITLE"
|
|
38
|
+
|
|
39
|
+
# Compact 2-line style
|
|
40
|
+
block-font "MY TITLE" --style mini
|
|
41
|
+
|
|
42
|
+
# With color
|
|
43
|
+
block-font "MY TITLE" --color claude # #d97757 coral
|
|
44
|
+
block-font "MY TITLE" --color bokchoy # #a6e3a1 green
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Guidelines for Responses
|
|
48
|
+
1. Use 3D block typography for major session milestones, top-level headings, or status banners.
|
|
49
|
+
2. Keep body text, code snippets, diffs, and explanations clean, concise, and formatted with standard markdown.
|
|
50
|
+
3. Keep coding instructions fully active (tests, small atomic changes, verification).
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# SpeiiDev Project Guidelines
|
|
2
|
+
|
|
3
|
+
## Identity & Branding
|
|
4
|
+
- **Name**: SpeiiDev
|
|
5
|
+
- **Mascot / Logo**: Pixel Art Green Bok Choy Cabbage (`render_pixel_art.py` TrueColor ANSI terminal renderer)
|
|
6
|
+
- **Color Accents**:
|
|
7
|
+
- Catppuccin Bok Choy Green (`#a6e3a1`)
|
|
8
|
+
- Anthropic Terracotta Coral (`#d97757`)
|
|
9
|
+
|
|
10
|
+
## Typography & ASCII Art Styles
|
|
11
|
+
|
|
12
|
+
### Style 1: Claude 3D Wireframe Shadow (from image `1_CtHP_cjkKw3vjlgENyeF3A.png`)
|
|
13
|
+
Chunky block letters with double-line isometric drop shadow:
|
|
14
|
+
```
|
|
15
|
+
▄██████╗ ██╗ ▄█████╗ ██╗ ██╗ ██████╗ ███████╗
|
|
16
|
+
██╔════╝║ ██║ ██╔═══██╗ ██║ ██║ ██╔══██╗ ██╔════╝║
|
|
17
|
+
██║ ║ ██║ █████████║ ██║ ██║ ██║ ██║ █████╗ ║
|
|
18
|
+
██║ ║ ██║ ██╔═══███║ ██║ ██║ ██║ ██║ ██╔══╝ ║
|
|
19
|
+
▀██████╗║ ███████╗ ██║ ███║ ╚███████║ ██████╔╝ ███████╗║
|
|
20
|
+
╚═════╝╝ ╚══════╝╝ ╚═╝ ╚══╝╝ ╚══════╝╝ ╚═════╝╝ ╚══════╝╝
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Style 2: Compact 2-Line Half-Block Font
|
|
24
|
+
For narrow terminals and compact banners:
|
|
25
|
+
```
|
|
26
|
+
▄▀▀ █▀█ █▀▀ █ █ █▀▄ █▀▀ █░█
|
|
27
|
+
▄██ █▀▀ ██▄ █ █ █▄▀ ██▄ ▀▄▀
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Rendering Tools
|
|
31
|
+
- **Terminal CLI**:
|
|
32
|
+
- `block-font "MY TEXT"` (3D wireframe shadow)
|
|
33
|
+
- `block-font "MY TEXT" --style mini` (2-line)
|
|
34
|
+
- `speiidev --font "MY TEXT"`
|
|
35
|
+
- **Python Module**:
|
|
36
|
+
- `from autodev.font import render_block_text, render_claude_3d_text`
|
|
37
|
+
- **SpeiiDev REPL**:
|
|
38
|
+
- `/font <text>` (3D wireframe shadow)
|
|
39
|
+
- `/font --mini <text>` (2-line)
|
|
40
|
+
|
|
41
|
+
## Claude Code Custom Output Style
|
|
42
|
+
A custom output style `speiidev-block` is configured in:
|
|
43
|
+
- Project: `.claude/output-styles/speiidev-block.md`
|
|
44
|
+
- Global: `~/.claude/output-styles/speiidev-block.md`
|
|
45
|
+
|
|
46
|
+
To activate in Claude Code:
|
|
47
|
+
```
|
|
48
|
+
/output-style speiidev-block
|
|
49
|
+
```
|
package/README.md
CHANGED
|
@@ -1,3 +1,272 @@
|
|
|
1
|
-
#
|
|
1
|
+
# autodev-orchestrator (SpeiiDev) 🥬
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> **Interactive Multi-Agent Terminal User Interface (TUI)** and autonomous workflow orchestrator with pluggable AI coding agents, model switchers, diff gates, and conversation memory. Fully cross-platform across **macOS, Linux, and Windows**.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Architecture & Workflow
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
flowchart TD
|
|
11
|
+
UserTask["User Task / Prompt"] --> Architect["1. Architect / Planner (e.g. agy / claude / gemini)"]
|
|
12
|
+
Architect --> PlanFile["Writes PLAN.md (Phases, Signatures & Tests)"]
|
|
13
|
+
PlanFile --> ApprovalGate{"Plan Approval Gate"}
|
|
14
|
+
ApprovalGate -- Approved --> Builder["2. Builder Agent (e.g. opencode / agy / claude)"]
|
|
15
|
+
Builder --> DiffSnapshot["Snapshot & Color Diff Review (Approve / Revert)"]
|
|
16
|
+
DiffSnapshot --> Auditor["3. Auditor Review (Audits Diff & Runs Tests)"]
|
|
17
|
+
Auditor -- "STATUS: NEEDS_FIXES" --> FixLoop{"Auto-Fix Loop (Up to max retries)"}
|
|
18
|
+
FixLoop --> Builder
|
|
19
|
+
Auditor -- "STATUS: VERIFIED" --> Success(["✅ Verification Complete"])
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Key Features
|
|
25
|
+
|
|
26
|
+
- **Multi-Agent Orchestration**: Separate roles for **Planner/Auditor** (generates and verifies [`PLAN.md`](PLAN.md) without modifying source code) and **Builder** (implements the code).
|
|
27
|
+
- **Pluggable CLI Adapters**: Works seamlessly with:
|
|
28
|
+
- `agy` (*Google Antigravity CLI*)
|
|
29
|
+
- `opencode` (*OpenCode CLI*)
|
|
30
|
+
- `gemini` (*Google Gemini CLI*)
|
|
31
|
+
- `claude` (*Anthropic Claude Code CLI*)
|
|
32
|
+
- **100% Cross-Platform (macOS, Linux, & Windows)**:
|
|
33
|
+
- Resolves Windows `.cmd`, `.bat`, and `.exe` wrappers automatically via `get_safe_executable()`.
|
|
34
|
+
- Platform-aware subprocess handling (`shell=True` on Windows).
|
|
35
|
+
- Normalizes path operations using `pathlib.Path`.
|
|
36
|
+
- **Review & Approval Gate**:
|
|
37
|
+
- Live diff inspection with Rich syntax highlighting.
|
|
38
|
+
- Interactive file-by-file rollback support.
|
|
39
|
+
- Configurable permission gate (`ask`, `auto`, `deny`).
|
|
40
|
+
- **Rich Interactive TUI**:
|
|
41
|
+
- Built with `prompt_toolkit` and `rich`.
|
|
42
|
+
- TrueColor Pixel Art Green Bok Choy Cabbage logo.
|
|
43
|
+
- Keyboard shortcuts (`F2` Action Menu, `F3` Touched Files Activity Log).
|
|
44
|
+
- Live model switcher and reasoning effort adjuster.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Installation
|
|
49
|
+
|
|
50
|
+
### From Source
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
git clone https://github.com/your-username/autodev.git
|
|
54
|
+
cd autodev
|
|
55
|
+
|
|
56
|
+
# Install in editable mode
|
|
57
|
+
pip install -e .
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Dependencies
|
|
61
|
+
|
|
62
|
+
- Python `>= 3.9`
|
|
63
|
+
- `rich >= 13.0.0`
|
|
64
|
+
- `prompt_toolkit >= 3.0.0`
|
|
65
|
+
- *Optional:* `Pillow >= 9.0.0` (for image pixel art rendering)
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Quickstart
|
|
70
|
+
|
|
71
|
+
### Launch Interactive TUI
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
autodev
|
|
75
|
+
# or
|
|
76
|
+
speiidev
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Run an Automated Task Directly
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
autodev "Implement JWT authentication and unit tests"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Auto-Approve Plans and Diffs (`--yes`)
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
autodev -y "Refactor database models to SQLAlchemy 2.0"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## CLI Options
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
usage: autodev [-h] [--plan-file PLAN_FILE] [--max-retries MAX_RETRIES]
|
|
97
|
+
[--conversation CONVERSATION]
|
|
98
|
+
[--planner {agy,opencode,gemini,claude}]
|
|
99
|
+
[--builder {agy,opencode,gemini,claude}]
|
|
100
|
+
[--planner-model PLANNER_MODEL]
|
|
101
|
+
[--builder-model BUILDER_MODEL]
|
|
102
|
+
[--planner-effort PLANNER_EFFORT]
|
|
103
|
+
[--builder-effort BUILDER_EFFORT]
|
|
104
|
+
[--permissions {ask,auto,deny}] [--no-splash] [--no-save] [-y]
|
|
105
|
+
[task ...]
|
|
106
|
+
|
|
107
|
+
positional arguments:
|
|
108
|
+
task Optional task to run immediately
|
|
109
|
+
|
|
110
|
+
options:
|
|
111
|
+
-h, --help Show this help message and exit
|
|
112
|
+
--plan-file PLAN_FILE Path to implementation plan (default: PLAN.md)
|
|
113
|
+
--max-retries N Maximum auto-fix loop attempts (default: 3)
|
|
114
|
+
--conversation UUID Antigravity conversation UUID to resume
|
|
115
|
+
--planner {agy,...} CLI backend for planner/auditor role
|
|
116
|
+
--builder {agy,...} CLI backend for builder role
|
|
117
|
+
--planner-model MODEL Model override for planner
|
|
118
|
+
--builder-model MODEL Model override for builder
|
|
119
|
+
--planner-effort EFF Reasoning effort for planner
|
|
120
|
+
--builder-effort EFF Reasoning effort for builder
|
|
121
|
+
--permissions MODE Permission gate mode: ask | auto | deny
|
|
122
|
+
--font FONT Render text in 2-line Unicode block art font and exit
|
|
123
|
+
--no-splash Skip the boot animation
|
|
124
|
+
--no-save Do not persist session state to disk
|
|
125
|
+
-y, --yes Auto-approve all plans and diffs (permissions: auto)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Interactive Slash Commands & Keybindings
|
|
131
|
+
|
|
132
|
+
| Key / Command | Description |
|
|
133
|
+
| :--- | :--- |
|
|
134
|
+
| **`F2`** | Open interactive Action Menu (navigate with arrow keys) |
|
|
135
|
+
| **`F3`** | Activity viewer — inspect files and commands touched by agents |
|
|
136
|
+
| **`/plan <task>`** | Run only the planner to generate/update `PLAN.md` |
|
|
137
|
+
| **`/build`** | Run only the builder to implement code changes |
|
|
138
|
+
| **`/audit`** | Run only the auditor to test and verify implementation |
|
|
139
|
+
| **`/diff`** | Show color-coded git diff (`+` green new / `-` red old) |
|
|
140
|
+
| **`/show`** | Render `PLAN.md` formatted with Rich Markdown |
|
|
141
|
+
| **`/font <text>`** | Render text in 2-line Unicode block art font |
|
|
142
|
+
| **`/model`** | Search and select models for planner or builder |
|
|
143
|
+
| **`/effort`** | Adjust reasoning intensity level |
|
|
144
|
+
| **`/perms`** | Configure permission gate mode and manage approvals |
|
|
145
|
+
| **`/auto`** | Toggle auto-approve mode on/off |
|
|
146
|
+
| **`/conv <id>`** | Set or clear persistent conversation ID |
|
|
147
|
+
| **`/log`** | View background activity log and touched files |
|
|
148
|
+
| **`/clear`** | Clear screen and redraw banner |
|
|
149
|
+
| **`/help`** | Display command reference table |
|
|
150
|
+
| **`/exit`** | Quit application |
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Typography & Art Styles
|
|
155
|
+
|
|
156
|
+
SpeiiDev features two terminal typography engines:
|
|
157
|
+
|
|
158
|
+
### 1. Claude 3D Wireframe Shadow (Default)
|
|
159
|
+
Chunky block lettering with an isometric double-line wireframe drop shadow (`═`, `║`, `╚`, `╝`, `╗`, `╔`) in Anthropic Coral (`#D97757`) or Catppuccin Green (`#A6E3A1`):
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
▄██████╗ ██╗ ▄█████╗ ██╗ ██╗ ██████╗ ███████╗
|
|
163
|
+
██╔════╝║ ██║ ██╔═══██╗ ██║ ██║ ██╔══██╗ ██╔════╝║
|
|
164
|
+
██║ ║ ██║ █████████║ ██║ ██║ ██║ ██║ █████╗ ║
|
|
165
|
+
██║ ║ ██║ ██╔═══███║ ██║ ██║ ██║ ██║ ██╔══╝ ║
|
|
166
|
+
▀██████╗║ ███████╗ ██║ ███║ ╚███████║ ██████╔╝ ███████╗║
|
|
167
|
+
╚═════╝╝ ╚══════╝╝ ╚═╝ ╚══╝╝ ╚══════╝╝ ╚═════╝╝ ╚══════╝╝
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 2. Compact 2-Line Half-Block Font
|
|
171
|
+
Ultra-compact 2-line terminal font for narrow displays:
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
▄▀▀ █▀█ █▀▀ █ █ █▀▄ █▀▀ █░█
|
|
175
|
+
▄██ █▀▀ ██▄ █ █ █▄▀ ██▄ ▀▄▀
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Generate Block Text Anywhere
|
|
179
|
+
- **Standalone CLI**:
|
|
180
|
+
```bash
|
|
181
|
+
block-font "MY TEXT" # 3D wireframe shadow
|
|
182
|
+
block-font "MY TEXT" --style mini # Compact 2-line
|
|
183
|
+
block-font "MY TEXT" --color bokchoy # Catppuccin Bok Choy Green
|
|
184
|
+
```
|
|
185
|
+
- **SpeiiDev CLI**: `speiidev --font "MY TEXT"`
|
|
186
|
+
- **In REPL**: `/font <text>` (or `/font --mini <text>`)
|
|
187
|
+
- **Python API**:
|
|
188
|
+
```python
|
|
189
|
+
from autodev.font import render_block_text, render_claude_3d_text
|
|
190
|
+
print(render_block_text("SPEIIDEV", style="claude"))
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Claude Code Custom Output Style
|
|
194
|
+
Claude Code provides five built-in output styles (`default`, `concise`, `proactive`, `explanatory`, `learning`) and supports custom styles.
|
|
195
|
+
|
|
196
|
+
A custom style **`speiidev-block`** is included at `.claude/output-styles/speiidev-block.md` and `~/.claude/output-styles/speiidev-block.md`.
|
|
197
|
+
|
|
198
|
+
To activate it in Claude Code:
|
|
199
|
+
```
|
|
200
|
+
/output-style speiidev-block
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Running Tests
|
|
206
|
+
|
|
207
|
+
### 1. Isolated Ephemeral Sandbox Test (Real Install Simulation)
|
|
208
|
+
Tests the complete packaging workflow from scratch—creating an isolated sandbox in `/tmp`, installing `autodev-orchestrator`, verifying real console binaries (`speiidev`, `block-font`), and running all tests with **zero changes to your system**:
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
python3 scripts/test_real_install.py
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### 2. Fast Unit Test Runner
|
|
215
|
+
Run the full 16-test automated suite directly:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
python3 scripts/run_tests.py
|
|
219
|
+
# or
|
|
220
|
+
python3 -m unittest discover -s tests -v
|
|
221
|
+
|
|
222
|
+
# Run individual test suites
|
|
223
|
+
python3 -m unittest tests/test_font.py -v
|
|
224
|
+
python3 -m unittest tests/test_cli.py -v
|
|
225
|
+
python3 -m unittest tests/test_pixel_art.py -v
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Project Structure
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
autodev/
|
|
234
|
+
├── .claude/
|
|
235
|
+
│ └── output-styles/ # Claude Code custom output styles
|
|
236
|
+
│ └── speiidev-block.md # 3D wireframe shadow font style
|
|
237
|
+
├── .gitignore # Git ignore rules for Python & Node
|
|
238
|
+
├── bin/ # Executable CLI launchers & wrappers
|
|
239
|
+
│ ├── block-font # 3D block font launcher
|
|
240
|
+
│ ├── cli.js # Node.js npm/npx wrapper
|
|
241
|
+
│ └── speiidev # SpeiiDev main executable launcher
|
|
242
|
+
├── scripts/ # Development & testing utilities
|
|
243
|
+
│ ├── run_tests.py # Automated unit test suite runner
|
|
244
|
+
│ └── test_real_install.py # Disposable sandbox install & test runner
|
|
245
|
+
├── src/ # Main Python package source
|
|
246
|
+
│ └── autodev/
|
|
247
|
+
│ ├── __init__.py # Package entrypoint & public exports
|
|
248
|
+
│ ├── __main__.py # Allows `python -m autodev`
|
|
249
|
+
│ ├── cli.py # Cross-platform SpeiiDev TUI orchestrator
|
|
250
|
+
│ ├── font.py # 3D wireframe shadow & 2-line font engine
|
|
251
|
+
│ └── pixel_art.py # TrueColor ANSI terminal pixel art utility
|
|
252
|
+
├── tests/ # Automated test suite
|
|
253
|
+
│ ├── __init__.py
|
|
254
|
+
│ ├── test_cli.py # CLI options, profiles, and state tests
|
|
255
|
+
│ ├── test_font.py # Claude 3D and 2-line font typography tests
|
|
256
|
+
│ └── test_pixel_art.py # TrueColor ANSI half-block renderer tests
|
|
257
|
+
├── CLAUDE.md # Instructions and branding for Claude Code
|
|
258
|
+
├── package.json # NPM wrapper configuration
|
|
259
|
+
├── pyproject.toml # Build configuration & entry points
|
|
260
|
+
├── README.md # Documentation
|
|
261
|
+
└── speiidev -> bin/speiidev # Root convenience symlink
|
|
262
|
+
```
|
|
263
|
+
├── __main__.py # Allows `python -m autodev`
|
|
264
|
+
├── font.py # 3D wireframe shadow & 2-line font engine
|
|
265
|
+
└── cli.py # Cross-platform SpeiiDev orchestrator & TUI with Bok Choy logo
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## License
|
|
271
|
+
|
|
272
|
+
MIT License. See [LICENSE](LICENSE) for details.
|
package/bin/block-font
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
block-font: CLI utility to render text in Claude 3D isometric or compact block font.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import sys
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
# Add src to sys.path
|
|
12
|
+
SRC_DIR = Path(__file__).resolve().parent.parent / "src"
|
|
13
|
+
if str(SRC_DIR) not in sys.path:
|
|
14
|
+
sys.path.insert(0, str(SRC_DIR))
|
|
15
|
+
|
|
16
|
+
from autodev.font import main
|
|
17
|
+
|
|
18
|
+
if __name__ == "__main__":
|
|
19
|
+
sys.exit(main())
|
package/bin/speiidev.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const { spawnSync } = require('child_process');
|
|
4
|
+
const os = require('os');
|
|
5
|
+
|
|
6
|
+
const isWin = os.platform() === 'win32';
|
|
7
|
+
const pythonCmd = isWin ? 'python' : 'python3';
|
|
8
|
+
|
|
9
|
+
// 1. Check if Python 3 is installed
|
|
10
|
+
const checkPython = spawnSync(pythonCmd, ['--version'], { stdio: 'ignore' });
|
|
11
|
+
if (checkPython.error || checkPython.status !== 0) {
|
|
12
|
+
console.error('❌ Error: Python 3 is required to run speiidev, but it was not found.');
|
|
13
|
+
console.error('💡 Windows Tip: Install Python from the Microsoft Store or via: winget install Python.Python.3.11');
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// 2. Automatically install or update your core Python package from PyPI
|
|
18
|
+
console.log('🔄 Checking/updating speiidev core engine...');
|
|
19
|
+
spawnSync(pythonCmd, ['-m', 'pip', 'install', '--user', '--upgrade', 'autodev-orchestrator'], { stdio: 'inherit' });
|
|
20
|
+
|
|
21
|
+
// 3. Grab any terminal arguments passed by the user
|
|
22
|
+
const args = process.argv.slice(2);
|
|
23
|
+
|
|
24
|
+
// 4. Launch your Python program
|
|
25
|
+
const result = spawnSync(pythonCmd, ['-m', 'autodev.cli', ...args], { stdio: 'inherit' });
|
|
26
|
+
process.exit(result.status);
|
package/bin/speiidevv
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
SpeiiDev: Interactive Multi-Agent TUI with Pixel Art Green Bok Choy Cabbage logo.
|
|
4
|
+
Direct executable launcher for autodev.cli:main.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import sys
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
# Add src to sys.path
|
|
13
|
+
SRC_DIR = Path(__file__).resolve().parent.parent / "src"
|
|
14
|
+
if str(SRC_DIR) not in sys.path:
|
|
15
|
+
sys.path.insert(0, str(SRC_DIR))
|
|
16
|
+
|
|
17
|
+
from autodev.cli import main
|
|
18
|
+
|
|
19
|
+
if __name__ == "__main__":
|
|
20
|
+
sys.exit(main())
|
package/package.json
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "speiidev",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Multi-agent terminal orchestrator wrapper",
|
|
5
|
+
"author": "Toek Sopanha",
|
|
6
|
+
"bin": {
|
|
7
|
+
"speiidev": "./bin/speiidev.js"
|
|
8
|
+
},
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": ">=16.0.0"
|
|
11
|
+
},
|
|
12
|
+
"license": "MIT"
|
|
6
13
|
}
|
package/pyproject.toml
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "autodev-orchestrator"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = "Interactive Multi-Agent TUI with pluggable agents, model switcher, diff gate, and conversation memory."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "SpeiiDev Team" }
|
|
14
|
+
]
|
|
15
|
+
keywords = [
|
|
16
|
+
"multi-agent",
|
|
17
|
+
"orchestrator",
|
|
18
|
+
"ai",
|
|
19
|
+
"tui",
|
|
20
|
+
"claude",
|
|
21
|
+
"gemini",
|
|
22
|
+
"opencode",
|
|
23
|
+
"antigravity",
|
|
24
|
+
"developer-tools",
|
|
25
|
+
]
|
|
26
|
+
classifiers = [
|
|
27
|
+
"Development Status :: 4 - Beta",
|
|
28
|
+
"Environment :: Console",
|
|
29
|
+
"Intended Audience :: Developers",
|
|
30
|
+
"License :: OSI Approved :: MIT License",
|
|
31
|
+
"Operating System :: OS Independent",
|
|
32
|
+
"Operating System :: MacOS",
|
|
33
|
+
"Operating System :: Microsoft :: Windows",
|
|
34
|
+
"Operating System :: POSIX :: Linux",
|
|
35
|
+
"Programming Language :: Python :: 3",
|
|
36
|
+
"Programming Language :: Python :: 3.9",
|
|
37
|
+
"Programming Language :: Python :: 3.10",
|
|
38
|
+
"Programming Language :: Python :: 3.11",
|
|
39
|
+
"Programming Language :: Python :: 3.12",
|
|
40
|
+
"Programming Language :: Python :: 3.13",
|
|
41
|
+
"Programming Language :: Python :: 3.14",
|
|
42
|
+
"Topic :: Software Development :: Code Generators",
|
|
43
|
+
"Topic :: Software Development :: Quality Assurance",
|
|
44
|
+
]
|
|
45
|
+
dependencies = [
|
|
46
|
+
"rich>=13.0.0",
|
|
47
|
+
"prompt_toolkit>=3.0.0",
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
[project.optional-dependencies]
|
|
51
|
+
image = [
|
|
52
|
+
"Pillow>=9.0.0",
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
[project.scripts]
|
|
56
|
+
speiidev = "autodev.cli:main"
|
|
57
|
+
autodev = "autodev.cli:main"
|
|
58
|
+
block-font = "autodev.font:main"
|
|
59
|
+
render-pixel-art = "autodev.pixel_art:main"
|
|
60
|
+
|
|
61
|
+
[tool.setuptools.packages.find]
|
|
62
|
+
where = ["src"]
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Run the full automated unit test suite for SpeiiDev."""
|
|
3
|
+
import sys
|
|
4
|
+
import unittest
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
ROOT_DIR = Path(__file__).resolve().parent.parent
|
|
8
|
+
|
|
9
|
+
if __name__ == "__main__":
|
|
10
|
+
print("🧪 Running SpeiiDev Automated Test Suite...")
|
|
11
|
+
loader = unittest.TestLoader()
|
|
12
|
+
suite = loader.discover(str(ROOT_DIR / "tests"))
|
|
13
|
+
runner = unittest.TextTestRunner(verbosity=2)
|
|
14
|
+
result = runner.run(suite)
|
|
15
|
+
sys.exit(0 if result.wasSuccessful() else 1)
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
test_real_install.py: Real Isolated Installation & Execution Smoke Test.
|
|
4
|
+
|
|
5
|
+
Simulates an end-user installing the package from scratch in an isolated
|
|
6
|
+
disposable temporary virtual environment. Tests build, console script
|
|
7
|
+
entrypoints (autodev, speiidev, block-font), and the full unit test suite,
|
|
8
|
+
then automatically cleans up the sandbox on exit.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import os
|
|
14
|
+
import shutil
|
|
15
|
+
import subprocess
|
|
16
|
+
import sys
|
|
17
|
+
import tempfile
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
|
|
20
|
+
ROOT_DIR = Path(__file__).resolve().parent.parent
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def main() -> int:
|
|
24
|
+
print("=" * 64)
|
|
25
|
+
print("📦 STEP 1: Creating isolated disposable sandbox environment...")
|
|
26
|
+
print("=" * 64)
|
|
27
|
+
|
|
28
|
+
with tempfile.TemporaryDirectory(prefix="autodev_sandbox_") as tmp_dir:
|
|
29
|
+
venv_path = Path(tmp_dir) / "venv"
|
|
30
|
+
|
|
31
|
+
# Check if uv is available, otherwise use python3 -m venv
|
|
32
|
+
uv_bin = shutil.which("uv")
|
|
33
|
+
if uv_bin:
|
|
34
|
+
subprocess.run([uv_bin, "venv", str(venv_path), "-q"], check=True)
|
|
35
|
+
else:
|
|
36
|
+
import venv
|
|
37
|
+
|
|
38
|
+
venv.create(str(venv_path), with_pip=True)
|
|
39
|
+
|
|
40
|
+
# Locate binaries inside the isolated venv
|
|
41
|
+
if sys.platform == "win32":
|
|
42
|
+
bin_dir = venv_path / "Scripts"
|
|
43
|
+
python_bin = bin_dir / "python.exe"
|
|
44
|
+
speiidev_bin = bin_dir / "speiidev.exe"
|
|
45
|
+
block_font_bin = bin_dir / "block-font.exe"
|
|
46
|
+
else:
|
|
47
|
+
bin_dir = venv_path / "bin"
|
|
48
|
+
python_bin = bin_dir / "python"
|
|
49
|
+
speiidev_bin = bin_dir / "speiidev"
|
|
50
|
+
block_font_bin = bin_dir / "block-font"
|
|
51
|
+
|
|
52
|
+
print("=" * 64)
|
|
53
|
+
print("🔨 STEP 2: Installing package in editable mode from pyproject.toml...")
|
|
54
|
+
print("=" * 64)
|
|
55
|
+
if uv_bin:
|
|
56
|
+
subprocess.run(
|
|
57
|
+
[
|
|
58
|
+
uv_bin,
|
|
59
|
+
"pip",
|
|
60
|
+
"install",
|
|
61
|
+
"-e",
|
|
62
|
+
f"{ROOT_DIR}[image]",
|
|
63
|
+
"-q",
|
|
64
|
+
"--python",
|
|
65
|
+
str(python_bin),
|
|
66
|
+
],
|
|
67
|
+
check=True,
|
|
68
|
+
)
|
|
69
|
+
else:
|
|
70
|
+
subprocess.run(
|
|
71
|
+
[
|
|
72
|
+
str(python_bin),
|
|
73
|
+
"-m",
|
|
74
|
+
"pip",
|
|
75
|
+
"install",
|
|
76
|
+
"-e",
|
|
77
|
+
f"{ROOT_DIR}[image]",
|
|
78
|
+
"-q",
|
|
79
|
+
],
|
|
80
|
+
check=True,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
print("=" * 64)
|
|
84
|
+
print("🔍 STEP 3: Verifying installed console script binaries...")
|
|
85
|
+
print("=" * 64)
|
|
86
|
+
print(f"✓ speiidev binary: {speiidev_bin}")
|
|
87
|
+
print(f"✓ block-font binary: {block_font_bin}")
|
|
88
|
+
|
|
89
|
+
print("")
|
|
90
|
+
print("=" * 64)
|
|
91
|
+
print("🚀 STEP 4: Executing real installed entrypoints...")
|
|
92
|
+
print("=" * 64)
|
|
93
|
+
print("Testing 'speiidev --font \"SPEIIDEV\"'...")
|
|
94
|
+
subprocess.run([str(speiidev_bin), "--font", "SPEIIDEV"], check=True)
|
|
95
|
+
|
|
96
|
+
print("")
|
|
97
|
+
print("Testing 'block-font \"REAL INSTALL OK\"'...")
|
|
98
|
+
subprocess.run([str(block_font_bin), "REAL INSTALL OK"], check=True)
|
|
99
|
+
|
|
100
|
+
print("")
|
|
101
|
+
print("=" * 64)
|
|
102
|
+
print("🧪 STEP 5: Running full automated unit test suite inside sandbox...")
|
|
103
|
+
print("=" * 64)
|
|
104
|
+
test_proc = subprocess.run(
|
|
105
|
+
[
|
|
106
|
+
str(python_bin),
|
|
107
|
+
"-m",
|
|
108
|
+
"unittest",
|
|
109
|
+
"discover",
|
|
110
|
+
"-s",
|
|
111
|
+
str(ROOT_DIR / "tests"),
|
|
112
|
+
"-v",
|
|
113
|
+
]
|
|
114
|
+
)
|
|
115
|
+
if test_proc.returncode != 0:
|
|
116
|
+
return test_proc.returncode
|
|
117
|
+
|
|
118
|
+
print("")
|
|
119
|
+
print("=" * 64)
|
|
120
|
+
print("✅ ALL REAL-INSTALL CHECKS PASSED SUCCESSFULLY!")
|
|
121
|
+
print("=" * 64)
|
|
122
|
+
print(f"🧹 Automatically cleaning up sandbox: {tmp_dir}...")
|
|
123
|
+
|
|
124
|
+
print("✨ Done! Zero changes made to your system environment.")
|
|
125
|
+
return 0
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
if __name__ == "__main__":
|
|
129
|
+
sys.exit(main())
|