ido-agent 0.1.0__tar.gz
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.
- ido_agent-0.1.0/.dockerignore +13 -0
- ido_agent-0.1.0/.env.example +50 -0
- ido_agent-0.1.0/.github/workflows/ci.yml +45 -0
- ido_agent-0.1.0/.github/workflows/release.yml +113 -0
- ido_agent-0.1.0/.gitignore +26 -0
- ido_agent-0.1.0/Dockerfile +33 -0
- ido_agent-0.1.0/PKG-INFO +183 -0
- ido_agent-0.1.0/README.md +163 -0
- ido_agent-0.1.0/adapters/__init__.py +1 -0
- ido_agent-0.1.0/adapters/blender/__init__.py +1 -0
- ido_agent-0.1.0/adapters/blender/ido_blender/__init__.py +20 -0
- ido_agent-0.1.0/adapters/blender/ido_blender/client.py +195 -0
- ido_agent-0.1.0/adapters/blender/ido_blender/executor.py +254 -0
- ido_agent-0.1.0/adapters/blender/ido_blender/harness.py +70 -0
- ido_agent-0.1.0/adapters/blender/ido_blender/planner.py +75 -0
- ido_agent-0.1.0/adapters/blender/ido_blender/state.py +109 -0
- ido_agent-0.1.0/adapters/blender/ido_blender/trace_timeline.py +45 -0
- ido_agent-0.1.0/adapters/blender/ido_blender/ui.py +560 -0
- ido_agent-0.1.0/adapters/openscad/__init__.py +5 -0
- ido_agent-0.1.0/adapters/openscad/adapter.py +204 -0
- ido_agent-0.1.0/assets/ido-banner.png +0 -0
- ido_agent-0.1.0/backend/__init__.py +4 -0
- ido_agent-0.1.0/backend/__main__.py +16 -0
- ido_agent-0.1.0/backend/airbyte_exporter.py +146 -0
- ido_agent-0.1.0/backend/api_validation.py +83 -0
- ido_agent-0.1.0/backend/clickhouse_exporter.py +223 -0
- ido_agent-0.1.0/backend/composio_exporter.py +162 -0
- ido_agent-0.1.0/backend/config.py +122 -0
- ido_agent-0.1.0/backend/guild_exporter.py +301 -0
- ido_agent-0.1.0/backend/integrations.py +59 -0
- ido_agent-0.1.0/backend/main.py +882 -0
- ido_agent-0.1.0/backend/openscad_service.py +41 -0
- ido_agent-0.1.0/backend/openui_exporter.py +154 -0
- ido_agent-0.1.0/backend/providers/__init__.py +10 -0
- ido_agent-0.1.0/backend/providers/base.py +32 -0
- ido_agent-0.1.0/backend/providers/factory.py +113 -0
- ido_agent-0.1.0/backend/providers/fallback.py +263 -0
- ido_agent-0.1.0/backend/providers/openai_provider.py +235 -0
- ido_agent-0.1.0/backend/providers/pioneer_provider.py +31 -0
- ido_agent-0.1.0/backend/request_context.py +43 -0
- ido_agent-0.1.0/backend/sponsor_exports.py +106 -0
- ido_agent-0.1.0/backend/sponsor_insights.py +74 -0
- ido_agent-0.1.0/backend/status.py +34 -0
- ido_agent-0.1.0/backend/tracing.py +52 -0
- ido_agent-0.1.0/backend/user_config.py +119 -0
- ido_agent-0.1.0/companion/__init__.py +1 -0
- ido_agent-0.1.0/companion/cli.py +457 -0
- ido_agent-0.1.0/companion/platforms.py +96 -0
- ido_agent-0.1.0/deploy_truefoundry.py +60 -0
- ido_agent-0.1.0/ido +4 -0
- ido_agent-0.1.0/ir_schema.json +374 -0
- ido_agent-0.1.0/packaging/README.md +19 -0
- ido_agent-0.1.0/packaging/ido.spec +24 -0
- ido_agent-0.1.0/packaging/windows.iss +38 -0
- ido_agent-0.1.0/pyproject.toml +44 -0
- ido_agent-0.1.0/render.yaml +37 -0
- ido_agent-0.1.0/scripts/blender_render.py +49 -0
- ido_agent-0.1.0/scripts/blender_smoke.py +56 -0
- ido_agent-0.1.0/scripts/test_real_quickstart.sh +111 -0
- ido_agent-0.1.0/shared/__init__.py +36 -0
- ido_agent-0.1.0/shared/contracts.py +155 -0
- ido_agent-0.1.0/shared/ir.py +117 -0
- ido_agent-0.1.0/shared/validation.py +68 -0
- ido_agent-0.1.0/site/ido_blender.zip +0 -0
- ido_agent-0.1.0/site/index.html +720 -0
- ido_agent-0.1.0/site/screenshot1.png +0 -0
- ido_agent-0.1.0/site/screenshot3.png +0 -0
- ido_agent-0.1.0/tests/fixtures/house_ir.json +152 -0
- ido_agent-0.1.0/tests/test_airbyte_exporter.py +90 -0
- ido_agent-0.1.0/tests/test_api.py +351 -0
- ido_agent-0.1.0/tests/test_blender_adapter.py +84 -0
- ido_agent-0.1.0/tests/test_blender_client.py +72 -0
- ido_agent-0.1.0/tests/test_blender_harness.py +27 -0
- ido_agent-0.1.0/tests/test_cli.py +130 -0
- ido_agent-0.1.0/tests/test_clickhouse_exporter.py +93 -0
- ido_agent-0.1.0/tests/test_composio_exporter.py +51 -0
- ido_agent-0.1.0/tests/test_config.py +34 -0
- ido_agent-0.1.0/tests/test_furniture.py +62 -0
- ido_agent-0.1.0/tests/test_guild_exporter.py +120 -0
- ido_agent-0.1.0/tests/test_integrations.py +117 -0
- ido_agent-0.1.0/tests/test_ir.py +74 -0
- ido_agent-0.1.0/tests/test_openscad.py +92 -0
- ido_agent-0.1.0/tests/test_openscad_clean.py +76 -0
- ido_agent-0.1.0/tests/test_openui_exporter.py +74 -0
- ido_agent-0.1.0/tests/test_pioneer_provider.py +102 -0
- ido_agent-0.1.0/tests/test_providers.py +173 -0
- ido_agent-0.1.0/tests/test_sponsor_insights.py +47 -0
- ido_agent-0.1.0/tests/test_trace_timeline.py +34 -0
- ido_agent-0.1.0/web/eslint.config.js +22 -0
- ido_agent-0.1.0/web/index.html +18 -0
- ido_agent-0.1.0/web/package-lock.json +3183 -0
- ido_agent-0.1.0/web/package.json +29 -0
- ido_agent-0.1.0/web/public/ido-icon.svg +4 -0
- ido_agent-0.1.0/web/src/App.tsx +860 -0
- ido_agent-0.1.0/web/src/main.tsx +10 -0
- ido_agent-0.1.0/web/src/setupCommands.ts +52 -0
- ido_agent-0.1.0/web/src/styles.css +452 -0
- ido_agent-0.1.0/web/tsconfig.app.json +20 -0
- ido_agent-0.1.0/web/tsconfig.json +7 -0
- ido_agent-0.1.0/web/tsconfig.node.json +11 -0
- ido_agent-0.1.0/web/vite.config.ts +7 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
CAD_AGENT_PROVIDER=openai
|
|
2
|
+
CAD_AGENT_DEMO_MODE=false
|
|
3
|
+
OPENAI_API_KEY=
|
|
4
|
+
OPENAI_BASE_URL=https://api.openai.com/v1
|
|
5
|
+
OPENAI_MODEL=gpt-4o-mini
|
|
6
|
+
TRUEFOUNDRY_API_KEY=
|
|
7
|
+
TRUEFOUNDRY_HOST=
|
|
8
|
+
CAD_AGENT_LOG_LEVEL=INFO
|
|
9
|
+
IDO_API_URL=http://127.0.0.1:8010
|
|
10
|
+
IDO_OUTPUT_DIR=
|
|
11
|
+
|
|
12
|
+
# Guild AI trace export (OpenTelemetry OTLP/HTTP JSON)
|
|
13
|
+
GUILD_TRACE_ENABLED=false
|
|
14
|
+
GUILD_OTLP_ENDPOINT=
|
|
15
|
+
GUILD_API_KEY=
|
|
16
|
+
GUILD_WORKSPACE_ID=
|
|
17
|
+
GUILD_TRACE_VIEW_URL=https://app.guild.ai/workspaces/{workspace_id}/sessions/{request_id}
|
|
18
|
+
GUILD_SERVICE_NAME=cad-agent-api
|
|
19
|
+
GUILD_EXPORT_TIMEOUT=10
|
|
20
|
+
|
|
21
|
+
# ClickHouse trace analytics (auto-exports every prompt + execution)
|
|
22
|
+
CLICKHOUSE_ENABLED=false
|
|
23
|
+
CLICKHOUSE_HOST=
|
|
24
|
+
CLICKHOUSE_PORT=8123
|
|
25
|
+
CLICKHOUSE_DATABASE=default
|
|
26
|
+
CLICKHOUSE_TABLE=cad_agent_traces
|
|
27
|
+
CLICKHOUSE_USERNAME=default
|
|
28
|
+
CLICKHOUSE_PASSWORD=
|
|
29
|
+
CLICKHOUSE_SECURE=false
|
|
30
|
+
CLICKHOUSE_AUTO_CREATE_TABLE=true
|
|
31
|
+
CLICKHOUSE_EXPORT_TIMEOUT=10
|
|
32
|
+
|
|
33
|
+
# Composio agent actions
|
|
34
|
+
COMPOSIO_ENABLED=false
|
|
35
|
+
COMPOSIO_API_KEY=
|
|
36
|
+
COMPOSIO_USER_ID=cad-agent-user
|
|
37
|
+
COMPOSIO_TOOL_SLUG=
|
|
38
|
+
COMPOSIO_EXPORT_TIMEOUT=15
|
|
39
|
+
|
|
40
|
+
# Pioneer inference (OpenAI-compatible API)
|
|
41
|
+
PIONEER_API_KEY=
|
|
42
|
+
PIONEER_MODEL_ID=gpt-4o
|
|
43
|
+
PIONEER_BASE_URL=https://api.pioneer.ai/v1
|
|
44
|
+
|
|
45
|
+
# Airbyte context layer (JSONL file and/or HTTP endpoint)
|
|
46
|
+
AIRBYTE_ENABLED=false
|
|
47
|
+
AIRBYTE_CONTEXT_DIR=./airbyte/context
|
|
48
|
+
AIRBYTE_CONTEXT_ENDPOINT=
|
|
49
|
+
AIRBYTE_API_KEY=
|
|
50
|
+
AIRBYTE_EXPORT_TIMEOUT=10
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
name: Test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
python:
|
|
10
|
+
strategy:
|
|
11
|
+
matrix:
|
|
12
|
+
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
13
|
+
python-version: ["3.11", "3.13"]
|
|
14
|
+
runs-on: ${{ matrix.os }}
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
- uses: actions/setup-python@v5
|
|
18
|
+
with:
|
|
19
|
+
python-version: ${{ matrix.python-version }}
|
|
20
|
+
cache: pip
|
|
21
|
+
- run: python -m pip install -e ".[dev]"
|
|
22
|
+
- run: python -m pytest
|
|
23
|
+
|
|
24
|
+
web:
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v4
|
|
28
|
+
- uses: actions/setup-node@v4
|
|
29
|
+
with:
|
|
30
|
+
node-version: 22
|
|
31
|
+
cache: npm
|
|
32
|
+
cache-dependency-path: web/package-lock.json
|
|
33
|
+
- run: npm ci
|
|
34
|
+
working-directory: web
|
|
35
|
+
- run: npm run lint
|
|
36
|
+
working-directory: web
|
|
37
|
+
- run: npm run build
|
|
38
|
+
working-directory: web
|
|
39
|
+
|
|
40
|
+
docker:
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
steps:
|
|
43
|
+
- uses: actions/checkout@v4
|
|
44
|
+
- name: Build Render Docker image
|
|
45
|
+
run: docker build -t ido-api .
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
name: Release desktop companion
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
package:
|
|
13
|
+
strategy:
|
|
14
|
+
fail-fast: false
|
|
15
|
+
matrix:
|
|
16
|
+
include:
|
|
17
|
+
- os: macos-latest
|
|
18
|
+
artifact: ido-macos.dmg
|
|
19
|
+
- os: windows-latest
|
|
20
|
+
artifact: ido-windows.exe
|
|
21
|
+
- os: ubuntu-latest
|
|
22
|
+
artifact: ido-linux.AppImage
|
|
23
|
+
runs-on: ${{ matrix.os }}
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v4
|
|
26
|
+
- uses: actions/setup-node@v4
|
|
27
|
+
with:
|
|
28
|
+
node-version: 22
|
|
29
|
+
cache: npm
|
|
30
|
+
cache-dependency-path: web/package-lock.json
|
|
31
|
+
- uses: actions/setup-python@v5
|
|
32
|
+
with:
|
|
33
|
+
python-version: "3.13"
|
|
34
|
+
cache: pip
|
|
35
|
+
- run: npm ci && npm run build
|
|
36
|
+
working-directory: web
|
|
37
|
+
- run: python -m pip install -e ".[packaging]"
|
|
38
|
+
- run: pyinstaller packaging/ido.spec --clean
|
|
39
|
+
|
|
40
|
+
- name: Package macOS disk image
|
|
41
|
+
if: runner.os == 'macOS'
|
|
42
|
+
run: |
|
|
43
|
+
mkdir -p release
|
|
44
|
+
cp dist/ido release/ido
|
|
45
|
+
if [ -n "${{ secrets.MACOS_SIGNING_IDENTITY }}" ]; then
|
|
46
|
+
codesign --force --options runtime --sign "${{ secrets.MACOS_SIGNING_IDENTITY }}" release/ido
|
|
47
|
+
fi
|
|
48
|
+
hdiutil create -volname ido -srcfolder release -ov -format UDZO ido-macos.dmg
|
|
49
|
+
|
|
50
|
+
- name: Package Windows installer
|
|
51
|
+
if: runner.os == 'Windows'
|
|
52
|
+
shell: pwsh
|
|
53
|
+
run: |
|
|
54
|
+
if ("${{ secrets.WINDOWS_CERTIFICATE_BASE64 }}" -ne "") {
|
|
55
|
+
$bytes = [Convert]::FromBase64String("${{ secrets.WINDOWS_CERTIFICATE_BASE64 }}")
|
|
56
|
+
[IO.File]::WriteAllBytes("certificate.pfx", $bytes)
|
|
57
|
+
signtool sign /f certificate.pfx /p "${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}" /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 dist/ido.exe
|
|
58
|
+
}
|
|
59
|
+
choco install innosetup --yes --no-progress
|
|
60
|
+
& "${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe" packaging\windows.iss
|
|
61
|
+
if ("${{ secrets.WINDOWS_CERTIFICATE_BASE64 }}" -ne "") {
|
|
62
|
+
signtool sign /f certificate.pfx /p "${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}" /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 ido-windows.exe
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
- name: Package Linux AppImage and deb
|
|
66
|
+
if: runner.os == 'Linux'
|
|
67
|
+
run: |
|
|
68
|
+
mkdir -p ido.AppDir/usr/bin ido.AppDir/usr/share/applications
|
|
69
|
+
cp dist/ido ido.AppDir/usr/bin/ido
|
|
70
|
+
printf '#!/bin/sh\nexec "$APPDIR/usr/bin/ido" "$@"\n' > ido.AppDir/AppRun
|
|
71
|
+
chmod +x ido.AppDir/AppRun ido.AppDir/usr/bin/ido
|
|
72
|
+
printf '[Desktop Entry]\nName=idō\nExec=ido\nType=Application\nCategories=Graphics;\n' > ido.AppDir/ido.desktop
|
|
73
|
+
cp ido.AppDir/ido.desktop ido.AppDir/usr/share/applications/ido.desktop
|
|
74
|
+
curl -fsSL -o appimagetool https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
|
|
75
|
+
chmod +x appimagetool
|
|
76
|
+
ARCH=x86_64 APPIMAGE_EXTRACT_AND_RUN=1 ./appimagetool ido.AppDir ido-linux.AppImage
|
|
77
|
+
mkdir -p deb/DEBIAN deb/usr/bin
|
|
78
|
+
cp dist/ido deb/usr/bin/ido
|
|
79
|
+
printf 'Package: ido\nVersion: 0.1.0\nArchitecture: amd64\nMaintainer: idō\nDescription: Local Blender and OpenSCAD companion\n' > deb/DEBIAN/control
|
|
80
|
+
dpkg-deb --build deb ido-linux.deb
|
|
81
|
+
|
|
82
|
+
- uses: actions/upload-artifact@v4
|
|
83
|
+
with:
|
|
84
|
+
name: ${{ runner.os }}
|
|
85
|
+
path: |
|
|
86
|
+
ido-macos.dmg
|
|
87
|
+
ido-windows.exe
|
|
88
|
+
ido-linux.AppImage
|
|
89
|
+
ido-linux.deb
|
|
90
|
+
if-no-files-found: ignore
|
|
91
|
+
|
|
92
|
+
blender-addon:
|
|
93
|
+
runs-on: ubuntu-latest
|
|
94
|
+
steps:
|
|
95
|
+
- uses: actions/checkout@v4
|
|
96
|
+
- run: cd adapters/blender && zip -r ../../ido_blender.zip ido_blender
|
|
97
|
+
- uses: actions/upload-artifact@v4
|
|
98
|
+
with:
|
|
99
|
+
name: blender-addon
|
|
100
|
+
path: ido_blender.zip
|
|
101
|
+
|
|
102
|
+
release:
|
|
103
|
+
runs-on: ubuntu-latest
|
|
104
|
+
needs: [package, blender-addon]
|
|
105
|
+
steps:
|
|
106
|
+
- uses: actions/download-artifact@v4
|
|
107
|
+
with:
|
|
108
|
+
path: release
|
|
109
|
+
merge-multiple: true
|
|
110
|
+
- uses: softprops/action-gh-release@v2
|
|
111
|
+
with:
|
|
112
|
+
files: release/*
|
|
113
|
+
generate_release_notes: true
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
.env
|
|
2
|
+
.venv/
|
|
3
|
+
__pycache__/
|
|
4
|
+
*.py[cod]
|
|
5
|
+
.pytest_cache/
|
|
6
|
+
.coverage
|
|
7
|
+
htmlcov/
|
|
8
|
+
dist/
|
|
9
|
+
build/
|
|
10
|
+
*.egg-info/
|
|
11
|
+
.DS_Store
|
|
12
|
+
cad_agent_backend.egg-info/
|
|
13
|
+
blender-smoke-test.blend
|
|
14
|
+
*.blend1
|
|
15
|
+
adapters/blender/*.zip
|
|
16
|
+
airbyte/context/
|
|
17
|
+
/cad_agent.zip
|
|
18
|
+
/ido_blender.zip
|
|
19
|
+
web/node_modules/
|
|
20
|
+
web/dist/
|
|
21
|
+
*.tsbuildinfo
|
|
22
|
+
web/vite.config.js
|
|
23
|
+
web/vite.config.d.ts
|
|
24
|
+
*.dmg
|
|
25
|
+
*.AppImage
|
|
26
|
+
*.deb
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
FROM node:22-bookworm-slim AS web
|
|
2
|
+
|
|
3
|
+
WORKDIR /web
|
|
4
|
+
COPY web/package.json web/package-lock.json ./
|
|
5
|
+
RUN npm ci
|
|
6
|
+
COPY web/ ./
|
|
7
|
+
RUN npm run build
|
|
8
|
+
|
|
9
|
+
FROM python:3.11-slim
|
|
10
|
+
|
|
11
|
+
ENV PYTHONDONTWRITEBYTECODE=1 \
|
|
12
|
+
PYTHONUNBUFFERED=1 \
|
|
13
|
+
PORT=8000
|
|
14
|
+
|
|
15
|
+
WORKDIR /app
|
|
16
|
+
|
|
17
|
+
COPY pyproject.toml README.md ir_schema.json ./
|
|
18
|
+
COPY backend ./backend
|
|
19
|
+
COPY shared ./shared
|
|
20
|
+
COPY companion ./companion
|
|
21
|
+
COPY adapters ./adapters
|
|
22
|
+
RUN apt-get update && apt-get install -y --no-install-recommends zip && rm -rf /var/lib/apt/lists/* \
|
|
23
|
+
&& cd adapters/blender && zip -r /app/ido_blender.zip ido_blender
|
|
24
|
+
COPY --from=web /web/dist ./web/dist
|
|
25
|
+
|
|
26
|
+
RUN pip install --no-cache-dir .
|
|
27
|
+
|
|
28
|
+
EXPOSE 8000
|
|
29
|
+
|
|
30
|
+
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
|
|
31
|
+
CMD python -c "import os, urllib.request; urllib.request.urlopen(f'http://127.0.0.1:{os.environ.get(\"PORT\", \"8000\")}/api/health', timeout=3)"
|
|
32
|
+
|
|
33
|
+
CMD ["sh", "-c", "uvicorn backend.main:app --host 0.0.0.0 --port ${PORT:-8000}"]
|
ido_agent-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ido-agent
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Tool-agnostic Engineering IR backend and Blender adapter
|
|
5
|
+
Requires-Python: >=3.11
|
|
6
|
+
Requires-Dist: fastapi<1,>=0.115
|
|
7
|
+
Requires-Dist: openai<3,>=1.75
|
|
8
|
+
Requires-Dist: platformdirs<5,>=4.3
|
|
9
|
+
Requires-Dist: pydantic<3,>=2.10
|
|
10
|
+
Requires-Dist: uvicorn[standard]<1,>=0.34
|
|
11
|
+
Provides-Extra: dev
|
|
12
|
+
Requires-Dist: httpx<1,>=0.28; extra == 'dev'
|
|
13
|
+
Requires-Dist: pytest-cov<8,>=6; extra == 'dev'
|
|
14
|
+
Requires-Dist: pytest<10,>=8.3; extra == 'dev'
|
|
15
|
+
Provides-Extra: packaging
|
|
16
|
+
Requires-Dist: pyinstaller<7,>=6.12; extra == 'packaging'
|
|
17
|
+
Provides-Extra: sponsors
|
|
18
|
+
Requires-Dist: composio>=0.9; extra == 'sponsors'
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
|
|
21
|
+
<div align="center">
|
|
22
|
+
|
|
23
|
+
<img width="850" alt="Screenshot 2026-06-12 at 11 50 14 PM" src="https://github.com/user-attachments/assets/0343ef96-fdf0-4aa0-b138-b53c30d5cd7b" />
|
|
24
|
+
|
|
25
|
+
### _The universal agent harness for 3D Design • Top 3 @ AWS x Anthropic Harness Engineering Hack_
|
|
26
|
+
|
|
27
|
+
<br>
|
|
28
|
+
|
|
29
|
+
<img width="650" alt="ido demo" src="https://github.com/user-attachments/assets/e8a34511-fdf2-494f-89cc-36b95c4b9948" />
|
|
30
|
+
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
### what people are building with Ido for Blender →
|
|
36
|
+
|
|
37
|
+
<div align="center">
|
|
38
|
+
|
|
39
|
+
<img width="250" height="180" alt="Blender example 1" src="https://github.com/user-attachments/assets/5f72c99c-3a76-468f-bc2a-bb1b90be6ee4" />
|
|
40
|
+
<img width="250" height="180" alt="Blender example 2" src="https://github.com/user-attachments/assets/8f5882c3-5b7b-4215-8570-3f92b770a80a" />
|
|
41
|
+
<img width="250" height="180" alt="Blender example 3" src="https://github.com/user-attachments/assets/c66922c6-7f37-4a65-a8e5-dca2d4932d61" />
|
|
42
|
+
|
|
43
|
+
<br />
|
|
44
|
+
|
|
45
|
+
<img width="250" height="180" alt="Blender example 4" src="https://github.com/user-attachments/assets/df3ee458-9054-4fe1-8faa-800ea297b2fe" />
|
|
46
|
+
<img width="250" height="180" alt="Blender example 5" src="https://github.com/user-attachments/assets/eb0bbbdb-11b8-4aa0-81a2-8f7c13969def" />
|
|
47
|
+
<img width="250" height="180" alt="Blender example 6" src="https://github.com/user-attachments/assets/77d1dd88-31de-407f-9e5e-9ca6952ea720" />
|
|
48
|
+
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
### what people are building with Ido for OpenSCAD →
|
|
52
|
+
|
|
53
|
+
<div align="center">
|
|
54
|
+
|
|
55
|
+
<img width="260" height="105" alt="Screenshot 1" src="https://github.com/user-attachments/assets/03db51fc-6078-4540-b222-e7c755b9f0c5" />
|
|
56
|
+
<img width="260" height="105" alt="Screenshot 2" src="https://github.com/user-attachments/assets/6667fa06-53ac-482e-b1b0-e139b23ec3f7" />
|
|
57
|
+
<img width="260" height="105" alt="Screenshot 3" src="https://github.com/user-attachments/assets/fb9c25d0-fa6d-4c33-ab96-754c01ead670" />
|
|
58
|
+
|
|
59
|
+
<br />
|
|
60
|
+
|
|
61
|
+
<img width="260" height="105" alt="Screenshot 4" src="https://github.com/user-attachments/assets/6b6cb0bc-1d8a-4242-9340-381603d0d174" />
|
|
62
|
+
<img width="260" height="105" alt="Screenshot 5" src="https://github.com/user-attachments/assets/86f080fa-56e8-49bf-b114-af71a10863be" />
|
|
63
|
+
<img width="260" height="105" alt="Screenshot 6" src="https://github.com/user-attachments/assets/f076383e-971f-449d-bb45-671ff027b03c" />
|
|
64
|
+
|
|
65
|
+
<br />
|
|
66
|
+
|
|
67
|
+
<img width="260" height="105" alt="Screenshot 7" src="https://github.com/user-attachments/assets/71364a6f-7bea-4fab-8d21-7a9b4a84ee36" />
|
|
68
|
+
<img width="260" height="105" alt="Screenshot 8" src="https://github.com/user-attachments/assets/1ac1c257-11b1-431c-af56-19b0d9363a85" />
|
|
69
|
+
<img width="260" height="105" alt="Screenshot 9" src="https://github.com/user-attachments/assets/c99bf2fb-e996-4136-ad2c-fb40a4329a1e" />
|
|
70
|
+
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
<br>
|
|
74
|
+
|
|
75
|
+
<table>
|
|
76
|
+
<tr>
|
|
77
|
+
<td width="42%" valign="middle">
|
|
78
|
+
<img width="666" alt="ido screenshot" src="https://github.com/user-attachments/assets/7e3ac19f-d885-442f-80b1-9f965e81903b" />
|
|
79
|
+
</td>
|
|
80
|
+
<td width="58%" valign="middle">
|
|
81
|
+
<h2>idō pet</h2>
|
|
82
|
+
<p>
|
|
83
|
+
the idō pet allows you to track idō's task progress while working in another tab or viewing results in your modeling software
|
|
84
|
+
</p>
|
|
85
|
+
</td>
|
|
86
|
+
</tr>
|
|
87
|
+
</table>
|
|
88
|
+
|
|
89
|
+
</br>
|
|
90
|
+
|
|
91
|
+
<details>
|
|
92
|
+
<summary><strong>Install</strong></summary>
|
|
93
|
+
|
|
94
|
+
Requires Python 3.11+ and your own OpenAI-compatible API key.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
pipx install ido-agent
|
|
98
|
+
ido
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
On first run, idō prompts for your API key, validates it with a tiny real API
|
|
102
|
+
request, saves it in your user config directory, then starts the terminal CAD
|
|
103
|
+
agent. Future runs use the saved local key:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
ido
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Useful setup commands:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
ido login
|
|
113
|
+
ido login --provider openai --model gpt-4o-mini
|
|
114
|
+
ido login --provider openrouter --base-url https://openrouter.ai/api/v1 --model <model>
|
|
115
|
+
ido doctor --api
|
|
116
|
+
ido config
|
|
117
|
+
ido config set model <model>
|
|
118
|
+
ido logout
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Credentials are stored outside the repo with `platformdirs`, for example
|
|
122
|
+
`~/Library/Application Support/ido/config.json` on macOS. `ido config` only
|
|
123
|
+
prints a masked key.
|
|
124
|
+
|
|
125
|
+
</details>
|
|
126
|
+
|
|
127
|
+
<details>
|
|
128
|
+
<summary><strong>Blender setup</strong></summary>
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
cd adapters/blender
|
|
132
|
+
zip -r ../../ido_blender.zip ido_blender
|
|
133
|
+
cd ../..
|
|
134
|
+
|
|
135
|
+
ido serve
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
In Blender:
|
|
139
|
+
|
|
140
|
+
1. Open `Edit -> Preferences -> Add-ons`
|
|
141
|
+
2. Install `ido_blender.zip`
|
|
142
|
+
3. Press `N` in the 3D View
|
|
143
|
+
4. Open the `idō` tab
|
|
144
|
+
5. Use `http://127.0.0.1:8010` as the backend
|
|
145
|
+
|
|
146
|
+
Prompt from the CLI:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
ido prompt --tool blender "make a small cabin"
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
</details>
|
|
153
|
+
|
|
154
|
+
<details>
|
|
155
|
+
<summary><strong>OpenSCAD setup</strong></summary>
|
|
156
|
+
|
|
157
|
+
Install OpenSCAD and make sure `openscad` is on your `PATH`
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
ido open openscad
|
|
161
|
+
ido prompt --tool openscad "make a bracket with two mounting holes"
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Outputs are written to your user data directory, for example
|
|
165
|
+
`~/Library/Application Support/ido/projects/default` on macOS.
|
|
166
|
+
|
|
167
|
+
</details>
|
|
168
|
+
|
|
169
|
+
<details>
|
|
170
|
+
<summary><strong>Command</strong></summary>
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
ido # terminal OpenSCAD CAD agent
|
|
174
|
+
ido login # replace the saved local API key
|
|
175
|
+
ido logout # delete the saved local API key
|
|
176
|
+
ido doctor --api # real minimal API validation
|
|
177
|
+
ido config # show config path, provider, model, masked key
|
|
178
|
+
ido serve # run the API
|
|
179
|
+
ido status # check runtime status
|
|
180
|
+
ido reset # clear generated files
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
</details>
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img width="850" alt="Screenshot 2026-06-12 at 11 50 14 PM" src="https://github.com/user-attachments/assets/0343ef96-fdf0-4aa0-b138-b53c30d5cd7b" />
|
|
4
|
+
|
|
5
|
+
### _The universal agent harness for 3D Design • Top 3 @ AWS x Anthropic Harness Engineering Hack_
|
|
6
|
+
|
|
7
|
+
<br>
|
|
8
|
+
|
|
9
|
+
<img width="650" alt="ido demo" src="https://github.com/user-attachments/assets/e8a34511-fdf2-494f-89cc-36b95c4b9948" />
|
|
10
|
+
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
### what people are building with Ido for Blender →
|
|
16
|
+
|
|
17
|
+
<div align="center">
|
|
18
|
+
|
|
19
|
+
<img width="250" height="180" alt="Blender example 1" src="https://github.com/user-attachments/assets/5f72c99c-3a76-468f-bc2a-bb1b90be6ee4" />
|
|
20
|
+
<img width="250" height="180" alt="Blender example 2" src="https://github.com/user-attachments/assets/8f5882c3-5b7b-4215-8570-3f92b770a80a" />
|
|
21
|
+
<img width="250" height="180" alt="Blender example 3" src="https://github.com/user-attachments/assets/c66922c6-7f37-4a65-a8e5-dca2d4932d61" />
|
|
22
|
+
|
|
23
|
+
<br />
|
|
24
|
+
|
|
25
|
+
<img width="250" height="180" alt="Blender example 4" src="https://github.com/user-attachments/assets/df3ee458-9054-4fe1-8faa-800ea297b2fe" />
|
|
26
|
+
<img width="250" height="180" alt="Blender example 5" src="https://github.com/user-attachments/assets/eb0bbbdb-11b8-4aa0-81a2-8f7c13969def" />
|
|
27
|
+
<img width="250" height="180" alt="Blender example 6" src="https://github.com/user-attachments/assets/77d1dd88-31de-407f-9e5e-9ca6952ea720" />
|
|
28
|
+
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
### what people are building with Ido for OpenSCAD →
|
|
32
|
+
|
|
33
|
+
<div align="center">
|
|
34
|
+
|
|
35
|
+
<img width="260" height="105" alt="Screenshot 1" src="https://github.com/user-attachments/assets/03db51fc-6078-4540-b222-e7c755b9f0c5" />
|
|
36
|
+
<img width="260" height="105" alt="Screenshot 2" src="https://github.com/user-attachments/assets/6667fa06-53ac-482e-b1b0-e139b23ec3f7" />
|
|
37
|
+
<img width="260" height="105" alt="Screenshot 3" src="https://github.com/user-attachments/assets/fb9c25d0-fa6d-4c33-ab96-754c01ead670" />
|
|
38
|
+
|
|
39
|
+
<br />
|
|
40
|
+
|
|
41
|
+
<img width="260" height="105" alt="Screenshot 4" src="https://github.com/user-attachments/assets/6b6cb0bc-1d8a-4242-9340-381603d0d174" />
|
|
42
|
+
<img width="260" height="105" alt="Screenshot 5" src="https://github.com/user-attachments/assets/86f080fa-56e8-49bf-b114-af71a10863be" />
|
|
43
|
+
<img width="260" height="105" alt="Screenshot 6" src="https://github.com/user-attachments/assets/f076383e-971f-449d-bb45-671ff027b03c" />
|
|
44
|
+
|
|
45
|
+
<br />
|
|
46
|
+
|
|
47
|
+
<img width="260" height="105" alt="Screenshot 7" src="https://github.com/user-attachments/assets/71364a6f-7bea-4fab-8d21-7a9b4a84ee36" />
|
|
48
|
+
<img width="260" height="105" alt="Screenshot 8" src="https://github.com/user-attachments/assets/1ac1c257-11b1-431c-af56-19b0d9363a85" />
|
|
49
|
+
<img width="260" height="105" alt="Screenshot 9" src="https://github.com/user-attachments/assets/c99bf2fb-e996-4136-ad2c-fb40a4329a1e" />
|
|
50
|
+
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<br>
|
|
54
|
+
|
|
55
|
+
<table>
|
|
56
|
+
<tr>
|
|
57
|
+
<td width="42%" valign="middle">
|
|
58
|
+
<img width="666" alt="ido screenshot" src="https://github.com/user-attachments/assets/7e3ac19f-d885-442f-80b1-9f965e81903b" />
|
|
59
|
+
</td>
|
|
60
|
+
<td width="58%" valign="middle">
|
|
61
|
+
<h2>idō pet</h2>
|
|
62
|
+
<p>
|
|
63
|
+
the idō pet allows you to track idō's task progress while working in another tab or viewing results in your modeling software
|
|
64
|
+
</p>
|
|
65
|
+
</td>
|
|
66
|
+
</tr>
|
|
67
|
+
</table>
|
|
68
|
+
|
|
69
|
+
</br>
|
|
70
|
+
|
|
71
|
+
<details>
|
|
72
|
+
<summary><strong>Install</strong></summary>
|
|
73
|
+
|
|
74
|
+
Requires Python 3.11+ and your own OpenAI-compatible API key.
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
pipx install ido-agent
|
|
78
|
+
ido
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
On first run, idō prompts for your API key, validates it with a tiny real API
|
|
82
|
+
request, saves it in your user config directory, then starts the terminal CAD
|
|
83
|
+
agent. Future runs use the saved local key:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
ido
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Useful setup commands:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
ido login
|
|
93
|
+
ido login --provider openai --model gpt-4o-mini
|
|
94
|
+
ido login --provider openrouter --base-url https://openrouter.ai/api/v1 --model <model>
|
|
95
|
+
ido doctor --api
|
|
96
|
+
ido config
|
|
97
|
+
ido config set model <model>
|
|
98
|
+
ido logout
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Credentials are stored outside the repo with `platformdirs`, for example
|
|
102
|
+
`~/Library/Application Support/ido/config.json` on macOS. `ido config` only
|
|
103
|
+
prints a masked key.
|
|
104
|
+
|
|
105
|
+
</details>
|
|
106
|
+
|
|
107
|
+
<details>
|
|
108
|
+
<summary><strong>Blender setup</strong></summary>
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
cd adapters/blender
|
|
112
|
+
zip -r ../../ido_blender.zip ido_blender
|
|
113
|
+
cd ../..
|
|
114
|
+
|
|
115
|
+
ido serve
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
In Blender:
|
|
119
|
+
|
|
120
|
+
1. Open `Edit -> Preferences -> Add-ons`
|
|
121
|
+
2. Install `ido_blender.zip`
|
|
122
|
+
3. Press `N` in the 3D View
|
|
123
|
+
4. Open the `idō` tab
|
|
124
|
+
5. Use `http://127.0.0.1:8010` as the backend
|
|
125
|
+
|
|
126
|
+
Prompt from the CLI:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
ido prompt --tool blender "make a small cabin"
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
</details>
|
|
133
|
+
|
|
134
|
+
<details>
|
|
135
|
+
<summary><strong>OpenSCAD setup</strong></summary>
|
|
136
|
+
|
|
137
|
+
Install OpenSCAD and make sure `openscad` is on your `PATH`
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
ido open openscad
|
|
141
|
+
ido prompt --tool openscad "make a bracket with two mounting holes"
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Outputs are written to your user data directory, for example
|
|
145
|
+
`~/Library/Application Support/ido/projects/default` on macOS.
|
|
146
|
+
|
|
147
|
+
</details>
|
|
148
|
+
|
|
149
|
+
<details>
|
|
150
|
+
<summary><strong>Command</strong></summary>
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
ido # terminal OpenSCAD CAD agent
|
|
154
|
+
ido login # replace the saved local API key
|
|
155
|
+
ido logout # delete the saved local API key
|
|
156
|
+
ido doctor --api # real minimal API validation
|
|
157
|
+
ido config # show config path, provider, model, masked key
|
|
158
|
+
ido serve # run the API
|
|
159
|
+
ido status # check runtime status
|
|
160
|
+
ido reset # clear generated files
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
</details>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Desktop CAD tool adapters."""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Blender adapter package."""
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
bl_info = {
|
|
2
|
+
"name": "ido-blender",
|
|
3
|
+
"author": "ido",
|
|
4
|
+
"version": (0, 3, 0),
|
|
5
|
+
"blender": (4, 5, 0),
|
|
6
|
+
"location": "3D View > Sidebar > ido",
|
|
7
|
+
"description": "Generate and edit 3D scenes from natural language",
|
|
8
|
+
"category": "3D View",
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
def register() -> None:
|
|
12
|
+
from .ui import register_ui
|
|
13
|
+
|
|
14
|
+
register_ui()
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def unregister() -> None:
|
|
18
|
+
from .ui import unregister_ui
|
|
19
|
+
|
|
20
|
+
unregister_ui()
|