move python clide to legacy/

Clide is being rebuilt as a Flutter desktop app. The Python Textual
implementation moves wholesale into legacy/ rather than being deleted:
its pane model, panel set, git skills, and panel communication design
are real thought that should remain readable next to the new code
while the rebuild finds its shape. Git's rename tracking preserves
history, so `git log -- legacy/` still works.

The Flutter rebuild lives at the repo root alongside a Go sidecar
(the architecture claudian was heading toward, which folds into
clide as a core component rather than a separate plugin project).
Bootstrap of the new shape lands in subsequent commits.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-20 20:30:51 +02:00
co-authored by Claude Opus 4.7
parent 30b8cf7db9
commit a355751437
163 changed files with 0 additions and 0 deletions
+149
View File
@@ -0,0 +1,149 @@
# -*- mode: python ; coding: utf-8 -*-
"""PyInstaller spec file for Clide.
Cross-platform configuration that produces:
- macOS: .app bundle (universal2 for Intel + Apple Silicon)
- Linux: Single executable (for AppImage packaging)
- Windows: Single executable (for Inno Setup packaging)
"""
import sys
block_cipher = None
# Collect data files
datas = [
('clide/templates', 'clide/templates'), # Skill templates (SKILL.md files)
]
# Hidden imports for dynamic modules
hiddenimports = [
# Textual internals
'textual._context',
'textual.css',
# Tree-sitter grammars
'tree_sitter_python',
'tree_sitter_javascript',
'tree_sitter_typescript',
'tree_sitter_html',
'tree_sitter_css',
'tree_sitter_json',
'tree_sitter_yaml',
'tree_sitter_toml',
'tree_sitter_markdown',
'tree_sitter_rust',
'tree_sitter_go',
'tree_sitter_java',
'tree_sitter_bash',
# Watchdog backends
'watchdog.observers.fsevents', # macOS
'watchdog.observers.inotify', # Linux
'watchdog.observers.read_directory_changes', # Windows
# Pydantic
'pydantic',
'pydantic_settings',
# Vendored pyte
'clide.vendor.pyte',
]
# Exclude dev/test dependencies
excludes = [
'pytest',
'mypy',
'ruff',
'pre_commit',
'pytest_asyncio',
'pytest_textual_snapshot',
'pytest_cov',
]
a = Analysis(
['clide/__main__.py'],
pathex=[],
binaries=[],
datas=datas,
hiddenimports=hiddenimports,
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=excludes,
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure, cipher=block_cipher)
# Platform-specific executable settings
if sys.platform == 'darwin':
# macOS: Create .app bundle
# Use CLIDE_UNIVERSAL=1 env var for universal binary (requires fat Python)
import os
target_arch = 'universal2' if os.environ.get('CLIDE_UNIVERSAL') else None
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='clide',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=False, # UPX breaks macOS code signing
console=True,
target_arch=target_arch,
)
coll = COLLECT(
exe,
a.binaries,
a.datas,
strip=False,
upx=False,
name='Clide',
)
app = BUNDLE(
coll,
name='Clide.app',
icon=None, # TODO: Add icon.icns
bundle_identifier='net.schweitz.clide',
info_plist={
'CFBundleShortVersionString': '1.0.0',
'CFBundleName': 'Clide',
'CFBundleDisplayName': 'Clide',
'NSHighResolutionCapable': True,
'LSEnvironment': {
'TERM': 'xterm-256color',
},
},
)
elif sys.platform == 'win32':
# Windows: Single executable
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='clide',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
icon=None, # TODO: Add icon.ico
)
else:
# Linux: Single executable (for AppImage packaging)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='clide',
debug=False,
bootloader_ignore_signals=False,
strip=True,
upx=True,
console=True,
)