pomera-ai-commander 1.2.1 → 1.2.3
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/core/backup_recovery_manager.py +169 -3
- package/core/data_directory.py +549 -0
- package/core/diff_utils.py +239 -0
- package/core/efficient_line_numbers.py +30 -0
- package/core/mcp/find_replace_diff.py +334 -0
- package/core/mcp/tool_registry.py +369 -9
- package/core/memento.py +275 -0
- package/mcp.json +1 -1
- package/migrate_data.py +127 -0
- package/package.json +5 -2
- package/pomera.py +408 -10
- package/pomera_mcp_server.py +2 -2
- package/requirements.txt +1 -0
- package/scripts/Dockerfile.alpine +43 -0
- package/scripts/Dockerfile.gui-test +54 -0
- package/scripts/Dockerfile.linux +43 -0
- package/scripts/Dockerfile.test-linux +80 -0
- package/scripts/Dockerfile.ubuntu +39 -0
- package/scripts/README.md +53 -0
- package/scripts/build-all.bat +113 -0
- package/scripts/build-docker.bat +53 -0
- package/scripts/build-docker.sh +55 -0
- package/scripts/build-optimized.bat +101 -0
- package/scripts/build.sh +78 -0
- package/scripts/docker-compose.test.yml +27 -0
- package/scripts/docker-compose.yml +32 -0
- package/scripts/postinstall.js +62 -0
- package/scripts/requirements-minimal.txt +33 -0
- package/scripts/test-linux-simple.bat +28 -0
- package/scripts/validate-release-workflow.py +450 -0
- package/tools/diff_viewer.py +797 -52
- package/tools/find_replace.py +551 -12
- package/tools/notes_widget.py +48 -8
- package/tools/regex_extractor.py +5 -5
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Dockerfile for testing Linux executable with GUI
|
|
2
|
+
FROM ubuntu:22.04
|
|
3
|
+
|
|
4
|
+
# Avoid interactive prompts during package installation
|
|
5
|
+
ENV DEBIAN_FRONTEND=noninteractive
|
|
6
|
+
|
|
7
|
+
# Install minimal desktop environment and VNC server
|
|
8
|
+
RUN apt-get update && apt-get install -y \
|
|
9
|
+
xfce4 \
|
|
10
|
+
xfce4-goodies \
|
|
11
|
+
tightvncserver \
|
|
12
|
+
novnc \
|
|
13
|
+
websockify \
|
|
14
|
+
supervisor \
|
|
15
|
+
dbus-x11 \
|
|
16
|
+
firefox \
|
|
17
|
+
xterm \
|
|
18
|
+
nano \
|
|
19
|
+
wget \
|
|
20
|
+
curl \
|
|
21
|
+
python3 \
|
|
22
|
+
python3-tk \
|
|
23
|
+
&& apt-get clean \
|
|
24
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
25
|
+
|
|
26
|
+
# Create a user for VNC
|
|
27
|
+
RUN useradd -m -s /bin/bash testuser
|
|
28
|
+
RUN echo 'testuser:password' | chpasswd
|
|
29
|
+
|
|
30
|
+
# Set up VNC for the user
|
|
31
|
+
USER testuser
|
|
32
|
+
WORKDIR /home/testuser
|
|
33
|
+
|
|
34
|
+
# Set VNC password
|
|
35
|
+
RUN mkdir -p ~/.vnc
|
|
36
|
+
RUN echo 'password' | vncpasswd -f > ~/.vnc/passwd
|
|
37
|
+
RUN chmod 600 ~/.vnc/passwd
|
|
38
|
+
|
|
39
|
+
# Create VNC startup script
|
|
40
|
+
RUN echo '#!/bin/bash' > ~/.vnc/xstartup
|
|
41
|
+
RUN echo 'xrdb $HOME/.Xresources' >> ~/.vnc/xstartup
|
|
42
|
+
RUN echo 'startxfce4 &' >> ~/.vnc/xstartup
|
|
43
|
+
RUN chmod +x ~/.vnc/xstartup
|
|
44
|
+
|
|
45
|
+
# Switch back to root for supervisor setup
|
|
46
|
+
USER root
|
|
47
|
+
|
|
48
|
+
# Create supervisor configuration
|
|
49
|
+
RUN mkdir -p /var/log/supervisor
|
|
50
|
+
COPY <<EOF /etc/supervisor/conf.d/supervisord.conf
|
|
51
|
+
[supervisord]
|
|
52
|
+
nodaemon=true
|
|
53
|
+
user=root
|
|
54
|
+
|
|
55
|
+
[program:vnc]
|
|
56
|
+
command=/usr/bin/vncserver :1 -geometry 1024x768 -depth 24
|
|
57
|
+
user=testuser
|
|
58
|
+
autostart=true
|
|
59
|
+
autorestart=true
|
|
60
|
+
stdout_logfile=/var/log/supervisor/vnc.log
|
|
61
|
+
stderr_logfile=/var/log/supervisor/vnc.log
|
|
62
|
+
|
|
63
|
+
[program:novnc]
|
|
64
|
+
command=/usr/share/novnc/utils/launch.sh --vnc localhost:5901 --listen 6080
|
|
65
|
+
user=testuser
|
|
66
|
+
autostart=true
|
|
67
|
+
autorestart=true
|
|
68
|
+
stdout_logfile=/var/log/supervisor/novnc.log
|
|
69
|
+
stderr_logfile=/var/log/supervisor/novnc.log
|
|
70
|
+
EOF
|
|
71
|
+
|
|
72
|
+
# Create directory for the executable
|
|
73
|
+
RUN mkdir -p /home/testuser/app
|
|
74
|
+
RUN chown testuser:testuser /home/testuser/app
|
|
75
|
+
|
|
76
|
+
# Expose VNC and noVNC ports
|
|
77
|
+
EXPOSE 5901 6080
|
|
78
|
+
|
|
79
|
+
# Start supervisor
|
|
80
|
+
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Ubuntu build - good compatibility with most Linux systems
|
|
2
|
+
FROM ubuntu:22.04
|
|
3
|
+
|
|
4
|
+
# Install Python and build dependencies
|
|
5
|
+
RUN apt-get update && apt-get install -y \
|
|
6
|
+
python3 \
|
|
7
|
+
python3-pip \
|
|
8
|
+
python3-dev \
|
|
9
|
+
gcc \
|
|
10
|
+
g++ \
|
|
11
|
+
libc6-dev \
|
|
12
|
+
libffi-dev \
|
|
13
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
14
|
+
|
|
15
|
+
# Set working directory
|
|
16
|
+
WORKDIR /app
|
|
17
|
+
|
|
18
|
+
# Copy requirements and install dependencies
|
|
19
|
+
COPY requirements.txt .
|
|
20
|
+
RUN pip3 install --no-cache-dir -r requirements.txt
|
|
21
|
+
|
|
22
|
+
# Install additional AI SDK dependencies (may fail gracefully)
|
|
23
|
+
RUN pip3 install --no-cache-dir google-genai>=1.0.0 || echo "google-genai installation skipped"
|
|
24
|
+
RUN pip3 install --no-cache-dir azure-ai-inference>=1.0.0b1 azure-core>=1.30.0 || echo "azure-ai-inference installation skipped"
|
|
25
|
+
RUN pip3 install --no-cache-dir tenacity>=8.2.0 || echo "tenacity installation skipped"
|
|
26
|
+
RUN pip3 install --no-cache-dir aiohttp>=3.9.0 || echo "aiohttp installation skipped"
|
|
27
|
+
|
|
28
|
+
# Copy source code
|
|
29
|
+
COPY . .
|
|
30
|
+
|
|
31
|
+
# Build executable
|
|
32
|
+
RUN pyinstaller --onefile --name pomera-linux-ubuntu pomera.py
|
|
33
|
+
|
|
34
|
+
# Copy to output
|
|
35
|
+
RUN mkdir -p /output && \
|
|
36
|
+
cp dist/pomera-linux-ubuntu /output/ && \
|
|
37
|
+
chmod +x /output/pomera-linux-ubuntu
|
|
38
|
+
|
|
39
|
+
CMD ["cp", "/output/pomera-linux-ubuntu", "/output/"]
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Build Scripts and Tools
|
|
2
|
+
|
|
3
|
+
This directory contains all build scripts, Docker files, and build-related tools for Pomera AI Commander.
|
|
4
|
+
|
|
5
|
+
## Build Scripts
|
|
6
|
+
|
|
7
|
+
### Local Builds
|
|
8
|
+
- `build.bat` / `build.sh` - Standard local build (onedir)
|
|
9
|
+
- `build-optimized.bat` - Optimized build with maximum size reduction
|
|
10
|
+
- `build-all.bat` - Interactive menu for all build types
|
|
11
|
+
|
|
12
|
+
### Docker Builds
|
|
13
|
+
- `build-docker.bat` / `build-docker.sh` - Simple Docker Linux build
|
|
14
|
+
- `docker-compose.yml` - Multi-variant Docker builds
|
|
15
|
+
|
|
16
|
+
## Docker Files
|
|
17
|
+
- `Dockerfile.linux` - Basic Linux build (Python slim)
|
|
18
|
+
- `Dockerfile.ubuntu` - Ubuntu-based build (high compatibility)
|
|
19
|
+
- `Dockerfile.alpine` - Alpine-based build (smaller size)
|
|
20
|
+
|
|
21
|
+
## Configuration Files
|
|
22
|
+
- `requirements-minimal.txt` - Minimal dependencies for optimized builds
|
|
23
|
+
|
|
24
|
+
## Testing and Validation
|
|
25
|
+
- `validate-release-workflow.py` - Release workflow validation script
|
|
26
|
+
- `test-linux-simple.bat` - Simple Linux testing script
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
### Quick Start
|
|
31
|
+
```bash
|
|
32
|
+
# Windows - Standard build
|
|
33
|
+
scripts\build.bat
|
|
34
|
+
|
|
35
|
+
# Windows - Optimized build
|
|
36
|
+
scripts\build-optimized.bat
|
|
37
|
+
|
|
38
|
+
# Linux/macOS - Standard build
|
|
39
|
+
chmod +x scripts/build.sh
|
|
40
|
+
./scripts/build.sh
|
|
41
|
+
|
|
42
|
+
# Docker build (any platform)
|
|
43
|
+
./scripts/build-docker.sh
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Docker Multi-Platform
|
|
47
|
+
```bash
|
|
48
|
+
cd scripts
|
|
49
|
+
docker-compose up build-ubuntu # Ubuntu variant
|
|
50
|
+
docker-compose up build-alpine # Alpine variant
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
See the main [BUILD.md](../BUILD.md) for detailed documentation.
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
echo Pomera AI Commander - Multi-Platform Build Script
|
|
3
|
+
echo ==================================================
|
|
4
|
+
echo.
|
|
5
|
+
|
|
6
|
+
REM Check if Docker is available
|
|
7
|
+
docker --version >nul 2>&1
|
|
8
|
+
set DOCKER_AVAILABLE=%errorlevel%
|
|
9
|
+
|
|
10
|
+
echo Available build options:
|
|
11
|
+
echo 1. Windows (local PyInstaller)
|
|
12
|
+
echo 2. Linux (Docker - Ubuntu base)
|
|
13
|
+
echo 3. Linux (Docker - Alpine base - smaller)
|
|
14
|
+
echo 4. All platforms (Windows local + Linux Docker)
|
|
15
|
+
if %DOCKER_AVAILABLE% neq 0 echo Note: Docker not available - Linux builds disabled
|
|
16
|
+
echo 5. Exit
|
|
17
|
+
echo.
|
|
18
|
+
|
|
19
|
+
set /p choice="Select build option (1-5): "
|
|
20
|
+
|
|
21
|
+
if "%choice%"=="1" goto build_windows
|
|
22
|
+
if "%choice%"=="2" goto build_linux_ubuntu
|
|
23
|
+
if "%choice%"=="3" goto build_linux_alpine
|
|
24
|
+
if "%choice%"=="4" goto build_all
|
|
25
|
+
if "%choice%"=="5" goto exit
|
|
26
|
+
goto invalid_choice
|
|
27
|
+
|
|
28
|
+
:build_windows
|
|
29
|
+
echo.
|
|
30
|
+
echo Building Windows executable...
|
|
31
|
+
call build.bat
|
|
32
|
+
goto end
|
|
33
|
+
|
|
34
|
+
:build_linux_ubuntu
|
|
35
|
+
if %DOCKER_AVAILABLE% neq 0 goto no_docker
|
|
36
|
+
echo.
|
|
37
|
+
echo Building Linux executable (Ubuntu base)...
|
|
38
|
+
docker build -f scripts/Dockerfile.ubuntu -t pomera-ubuntu-builder .
|
|
39
|
+
if errorlevel 1 goto docker_error
|
|
40
|
+
mkdir dist-docker 2>nul
|
|
41
|
+
docker run --rm -v "%cd%\dist-docker:/output" pomera-ubuntu-builder
|
|
42
|
+
echo Linux executable: dist-docker\pomera-linux-ubuntu
|
|
43
|
+
goto end
|
|
44
|
+
|
|
45
|
+
:build_linux_alpine
|
|
46
|
+
if %DOCKER_AVAILABLE% neq 0 goto no_docker
|
|
47
|
+
echo.
|
|
48
|
+
echo Building Linux executable (Alpine base - smaller)...
|
|
49
|
+
docker build -f scripts/Dockerfile.alpine -t pomera-alpine-builder .
|
|
50
|
+
if errorlevel 1 goto docker_error
|
|
51
|
+
mkdir dist-docker 2>nul
|
|
52
|
+
docker run --rm -v "%cd%\dist-docker:/output" pomera-alpine-builder
|
|
53
|
+
echo Linux executable: dist-docker\pomera-linux-alpine
|
|
54
|
+
goto end
|
|
55
|
+
|
|
56
|
+
:build_all
|
|
57
|
+
echo.
|
|
58
|
+
echo Building all platforms...
|
|
59
|
+
echo.
|
|
60
|
+
echo [1/3] Building Windows executable...
|
|
61
|
+
call build.bat
|
|
62
|
+
if errorlevel 1 goto error
|
|
63
|
+
|
|
64
|
+
if %DOCKER_AVAILABLE% neq 0 (
|
|
65
|
+
echo Docker not available - skipping Linux builds
|
|
66
|
+
goto end
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
echo.
|
|
70
|
+
echo [2/3] Building Linux executable (Ubuntu)...
|
|
71
|
+
docker build -f scripts/Dockerfile.ubuntu -t pomera-ubuntu-builder .
|
|
72
|
+
if errorlevel 1 goto docker_error
|
|
73
|
+
mkdir dist-docker 2>nul
|
|
74
|
+
docker run --rm -v "%cd%\dist-docker:/output" pomera-ubuntu-builder
|
|
75
|
+
|
|
76
|
+
echo.
|
|
77
|
+
echo [3/3] Building Linux executable (Alpine)...
|
|
78
|
+
docker build -f scripts/Dockerfile.alpine -t pomera-alpine-builder .
|
|
79
|
+
if errorlevel 1 goto docker_error
|
|
80
|
+
docker run --rm -v "%cd%\dist-docker:/output" pomera-alpine-builder
|
|
81
|
+
|
|
82
|
+
echo.
|
|
83
|
+
echo All builds completed!
|
|
84
|
+
echo Windows: dist\pomera\pomera.exe
|
|
85
|
+
echo Linux (Ubuntu): dist-docker\pomera-linux-ubuntu
|
|
86
|
+
echo Linux (Alpine): dist-docker\pomera-linux-alpine
|
|
87
|
+
goto end
|
|
88
|
+
|
|
89
|
+
:no_docker
|
|
90
|
+
echo ERROR: Docker is not available
|
|
91
|
+
echo Please install Docker Desktop to build Linux executables
|
|
92
|
+
goto end
|
|
93
|
+
|
|
94
|
+
:docker_error
|
|
95
|
+
echo ERROR: Docker build failed
|
|
96
|
+
echo Check the output above for details
|
|
97
|
+
goto end
|
|
98
|
+
|
|
99
|
+
:invalid_choice
|
|
100
|
+
echo Invalid choice. Please select 1-5.
|
|
101
|
+
goto end
|
|
102
|
+
|
|
103
|
+
:error
|
|
104
|
+
echo Build failed!
|
|
105
|
+
goto end
|
|
106
|
+
|
|
107
|
+
:exit
|
|
108
|
+
echo Exiting...
|
|
109
|
+
goto end
|
|
110
|
+
|
|
111
|
+
:end
|
|
112
|
+
echo.
|
|
113
|
+
pause
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
echo Building Linux executable using Docker...
|
|
3
|
+
echo.
|
|
4
|
+
|
|
5
|
+
REM Check if Docker is installed and running
|
|
6
|
+
docker --version >nul 2>&1
|
|
7
|
+
if errorlevel 1 (
|
|
8
|
+
echo ERROR: Docker is not installed or not running
|
|
9
|
+
echo Please install Docker Desktop and make sure it's running
|
|
10
|
+
pause
|
|
11
|
+
exit /b 1
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
REM Create output directory
|
|
15
|
+
if not exist "dist-docker" mkdir dist-docker
|
|
16
|
+
|
|
17
|
+
echo Building Docker image...
|
|
18
|
+
docker build -f scripts/Dockerfile.linux -t pomera-linux-builder .
|
|
19
|
+
|
|
20
|
+
if errorlevel 1 (
|
|
21
|
+
echo ERROR: Failed to build Docker image
|
|
22
|
+
pause
|
|
23
|
+
exit /b 1
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
echo.
|
|
27
|
+
echo Running Docker container to build Linux executable...
|
|
28
|
+
docker run --rm -v "%cd%\dist-docker:/host-output" pomera-linux-builder
|
|
29
|
+
|
|
30
|
+
if errorlevel 1 (
|
|
31
|
+
echo ERROR: Failed to build Linux executable
|
|
32
|
+
pause
|
|
33
|
+
exit /b 1
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
echo.
|
|
37
|
+
echo Linux executable built successfully!
|
|
38
|
+
echo Location: dist-docker\pomera-linux
|
|
39
|
+
echo.
|
|
40
|
+
|
|
41
|
+
REM Check if file was created
|
|
42
|
+
if exist "dist-docker\pomera-linux" (
|
|
43
|
+
echo File size:
|
|
44
|
+
dir "dist-docker\pomera-linux" | find "pomera-linux"
|
|
45
|
+
echo.
|
|
46
|
+
echo You can now test this executable on a Linux system.
|
|
47
|
+
) else (
|
|
48
|
+
echo ERROR: Executable was not created
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
echo.
|
|
52
|
+
echo Build complete!
|
|
53
|
+
pause
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
echo "Building Linux executable using Docker..."
|
|
4
|
+
echo
|
|
5
|
+
|
|
6
|
+
# Check if Docker is installed and running
|
|
7
|
+
if ! command -v docker &> /dev/null; then
|
|
8
|
+
echo "ERROR: Docker is not installed"
|
|
9
|
+
echo "Please install Docker and try again"
|
|
10
|
+
exit 1
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
# Check if Docker daemon is running
|
|
14
|
+
if ! docker info &> /dev/null; then
|
|
15
|
+
echo "ERROR: Docker daemon is not running"
|
|
16
|
+
echo "Please start Docker and try again"
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
# Create output directory
|
|
21
|
+
mkdir -p dist-docker
|
|
22
|
+
|
|
23
|
+
echo "Building Docker image..."
|
|
24
|
+
docker build -f scripts/Dockerfile.linux -t pomera-linux-builder .
|
|
25
|
+
|
|
26
|
+
if [ $? -ne 0 ]; then
|
|
27
|
+
echo "ERROR: Failed to build Docker image"
|
|
28
|
+
exit 1
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
echo
|
|
32
|
+
echo "Running Docker container to build Linux executable..."
|
|
33
|
+
docker run --rm -v "$(pwd)/dist-docker:/host-output" pomera-linux-builder
|
|
34
|
+
|
|
35
|
+
if [ $? -ne 0 ]; then
|
|
36
|
+
echo "ERROR: Failed to build Linux executable"
|
|
37
|
+
exit 1
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
echo
|
|
41
|
+
echo "Linux executable built successfully!"
|
|
42
|
+
echo "Location: dist-docker/pomera-linux"
|
|
43
|
+
echo
|
|
44
|
+
|
|
45
|
+
# Check if file was created
|
|
46
|
+
if [ -f "dist-docker/pomera-linux" ]; then
|
|
47
|
+
echo "File size: $(ls -lh dist-docker/pomera-linux | awk '{print $5}')"
|
|
48
|
+
echo
|
|
49
|
+
echo "You can now test this executable on a Linux system."
|
|
50
|
+
else
|
|
51
|
+
echo "ERROR: Executable was not created"
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
echo
|
|
55
|
+
echo "Build complete!"
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
echo Building OPTIMIZED Pomera AI Commander executable...
|
|
3
|
+
echo This build focuses on minimal size and maximum compression.
|
|
4
|
+
echo.
|
|
5
|
+
|
|
6
|
+
REM Check if Python is installed
|
|
7
|
+
python --version >nul 2>&1
|
|
8
|
+
if errorlevel 1 (
|
|
9
|
+
echo ERROR: Python is not installed or not in PATH
|
|
10
|
+
pause
|
|
11
|
+
exit /b 1
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
REM Install minimal requirements
|
|
15
|
+
echo Installing minimal requirements...
|
|
16
|
+
pip install -r scripts/requirements-minimal.txt
|
|
17
|
+
if errorlevel 1 (
|
|
18
|
+
echo ERROR: Failed to install requirements
|
|
19
|
+
pause
|
|
20
|
+
exit /b 1
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
REM Install additional AI SDK dependencies (may fail gracefully)
|
|
24
|
+
echo Installing additional AI SDK dependencies...
|
|
25
|
+
pip install google-genai>=1.0.0 2>nul
|
|
26
|
+
pip install azure-ai-inference>=1.0.0b1 azure-core>=1.30.0 2>nul
|
|
27
|
+
pip install tenacity>=8.2.0 2>nul
|
|
28
|
+
pip install aiohttp>=3.9.0 2>nul
|
|
29
|
+
echo AI SDK dependencies installation completed.
|
|
30
|
+
|
|
31
|
+
REM Clean previous build
|
|
32
|
+
if exist build rmdir /s /q build
|
|
33
|
+
if exist dist rmdir /s /q dist
|
|
34
|
+
|
|
35
|
+
echo.
|
|
36
|
+
echo Building with maximum optimization...
|
|
37
|
+
echo This may take a few minutes...
|
|
38
|
+
|
|
39
|
+
python -m PyInstaller --onefile --windowed ^
|
|
40
|
+
--optimize 2 ^
|
|
41
|
+
--strip ^
|
|
42
|
+
--noupx ^
|
|
43
|
+
--exclude-module pytest --exclude-module test --exclude-module tests ^
|
|
44
|
+
--exclude-module matplotlib --exclude-module scipy --exclude-module pandas ^
|
|
45
|
+
--exclude-module jupyter --exclude-module IPython ^
|
|
46
|
+
--exclude-module torch --exclude-module torchvision --exclude-module torchaudio ^
|
|
47
|
+
--exclude-module tensorflow --exclude-module sklearn --exclude-module cv2 ^
|
|
48
|
+
--exclude-module numpy --exclude-module pygame --exclude-module nltk ^
|
|
49
|
+
--exclude-module spacy --exclude-module yt_dlp --exclude-module transformers ^
|
|
50
|
+
--exclude-module boto3 --exclude-module botocore --exclude-module grpc ^
|
|
51
|
+
--exclude-module onnxruntime --exclude-module opentelemetry --exclude-module timm ^
|
|
52
|
+
--exclude-module emoji --exclude-module pygments --exclude-module jinja2 ^
|
|
53
|
+
--exclude-module anyio --exclude-module orjson --exclude-module uvicorn ^
|
|
54
|
+
--exclude-module fsspec --exclude-module websockets --exclude-module psutil ^
|
|
55
|
+
--exclude-module regex --exclude-module pydantic --exclude-module dateutil ^
|
|
56
|
+
--exclude-module pytz ^
|
|
57
|
+
--exclude-module six --exclude-module pkg_resources ^
|
|
58
|
+
--name pomera-optimized pomera.py
|
|
59
|
+
|
|
60
|
+
if errorlevel 1 (
|
|
61
|
+
echo ERROR: Build failed!
|
|
62
|
+
pause
|
|
63
|
+
exit /b 1
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
echo.
|
|
67
|
+
echo Checking for UPX compression...
|
|
68
|
+
upx --version >nul 2>&1
|
|
69
|
+
if errorlevel 1 (
|
|
70
|
+
echo UPX not found. Install UPX for additional 50-70%% size reduction:
|
|
71
|
+
echo https://upx.github.io/
|
|
72
|
+
echo.
|
|
73
|
+
goto :skip_upx
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
echo Compressing with UPX...
|
|
77
|
+
echo This will take a moment...
|
|
78
|
+
upx --best --lzma dist\pomera-optimized.exe
|
|
79
|
+
if errorlevel 1 (
|
|
80
|
+
echo UPX compression failed, but executable is still usable
|
|
81
|
+
) else (
|
|
82
|
+
echo UPX compression successful!
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
:skip_upx
|
|
86
|
+
echo.
|
|
87
|
+
echo Build completed!
|
|
88
|
+
echo.
|
|
89
|
+
if exist "dist\pomera-optimized.exe" (
|
|
90
|
+
echo Executable: dist\pomera-optimized.exe
|
|
91
|
+
for %%I in ("dist\pomera-optimized.exe") do echo Size: %%~zI bytes
|
|
92
|
+
echo.
|
|
93
|
+
set /p test="Test the executable now? (y/n): "
|
|
94
|
+
if /i "!test!"=="y" (
|
|
95
|
+
start dist\pomera-optimized.exe
|
|
96
|
+
)
|
|
97
|
+
) else (
|
|
98
|
+
echo ERROR: Executable not found!
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
pause
|
package/scripts/build.sh
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
echo "Building Pomera AI Commander with PyInstaller..."
|
|
4
|
+
echo
|
|
5
|
+
|
|
6
|
+
# Check if Python is installed
|
|
7
|
+
if ! command -v python3 &> /dev/null; then
|
|
8
|
+
echo "ERROR: Python 3 is not installed or not in PATH"
|
|
9
|
+
echo "Please install Python 3.8+ and try again"
|
|
10
|
+
exit 1
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
# Check if PyInstaller is installed
|
|
14
|
+
if ! python3 -c "import PyInstaller" &> /dev/null; then
|
|
15
|
+
echo "PyInstaller not found. Installing..."
|
|
16
|
+
pip3 install pyinstaller
|
|
17
|
+
if [ $? -ne 0 ]; then
|
|
18
|
+
echo "ERROR: Failed to install PyInstaller"
|
|
19
|
+
exit 1
|
|
20
|
+
fi
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
# Install requirements if requirements.txt exists
|
|
24
|
+
if [ -f "requirements.txt" ]; then
|
|
25
|
+
echo "Installing requirements..."
|
|
26
|
+
pip3 install -r requirements.txt
|
|
27
|
+
if [ $? -ne 0 ]; then
|
|
28
|
+
echo "ERROR: Failed to install requirements"
|
|
29
|
+
exit 1
|
|
30
|
+
fi
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
# Install additional AI SDK dependencies (may fail gracefully)
|
|
34
|
+
echo "Installing additional AI SDK dependencies..."
|
|
35
|
+
pip3 install google-genai>=1.0.0 2>/dev/null || echo "google-genai installation skipped"
|
|
36
|
+
pip3 install azure-ai-inference>=1.0.0b1 azure-core>=1.30.0 2>/dev/null || echo "azure-ai-inference installation skipped"
|
|
37
|
+
pip3 install tenacity>=8.2.0 2>/dev/null || echo "tenacity installation skipped"
|
|
38
|
+
pip3 install aiohttp>=3.9.0 2>/dev/null || echo "aiohttp installation skipped"
|
|
39
|
+
echo "AI SDK dependencies installation completed."
|
|
40
|
+
|
|
41
|
+
# Clean previous build
|
|
42
|
+
rm -rf build dist
|
|
43
|
+
|
|
44
|
+
echo
|
|
45
|
+
echo "Building executable with PyInstaller..."
|
|
46
|
+
echo "Command: pyinstaller --onedir [with many exclusions] --name pomera pomera.py"
|
|
47
|
+
|
|
48
|
+
python3 -m PyInstaller --onedir --exclude-module pytest --exclude-module test --exclude-module tests --exclude-module matplotlib --exclude-module scipy --exclude-module pandas --exclude-module jupyter --exclude-module IPython --exclude-module torch --exclude-module torchvision --exclude-module torchaudio --exclude-module tensorflow --exclude-module sklearn --exclude-module cv2 --exclude-module numpy --exclude-module pygame --exclude-module nltk --exclude-module spacy --exclude-module yt_dlp --exclude-module transformers --exclude-module boto3 --exclude-module botocore --exclude-module grpc --exclude-module onnxruntime --exclude-module opentelemetry --exclude-module timm --exclude-module emoji --exclude-module pygments --exclude-module jinja2 --exclude-module anyio --exclude-module orjson --exclude-module uvicorn --exclude-module fsspec --exclude-module websockets --exclude-module psutil --exclude-module regex --name pomera pomera.py
|
|
49
|
+
|
|
50
|
+
if [ $? -ne 0 ]; then
|
|
51
|
+
echo
|
|
52
|
+
echo "ERROR: Build failed!"
|
|
53
|
+
echo "Check the output above for error details"
|
|
54
|
+
exit 1
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
echo
|
|
58
|
+
echo "Build completed successfully!"
|
|
59
|
+
echo
|
|
60
|
+
echo "Executable location: dist/pomera/pomera"
|
|
61
|
+
echo
|
|
62
|
+
echo "To run the application:"
|
|
63
|
+
echo " cd dist/pomera"
|
|
64
|
+
echo " ./pomera"
|
|
65
|
+
echo
|
|
66
|
+
|
|
67
|
+
# Optional: Test the executable
|
|
68
|
+
read -p "Do you want to test the executable now? (y/n): " test
|
|
69
|
+
if [[ $test == "y" || $test == "Y" ]]; then
|
|
70
|
+
echo
|
|
71
|
+
echo "Testing executable..."
|
|
72
|
+
cd dist/pomera
|
|
73
|
+
./pomera &
|
|
74
|
+
cd ../..
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
echo
|
|
78
|
+
echo "Build process complete!"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
version: '3.8'
|
|
2
|
+
|
|
3
|
+
services:
|
|
4
|
+
# Linux GUI environment for testing
|
|
5
|
+
linux-test:
|
|
6
|
+
build:
|
|
7
|
+
context: .
|
|
8
|
+
dockerfile: Dockerfile.test-linux
|
|
9
|
+
ports:
|
|
10
|
+
- "6080:6080" # noVNC web interface
|
|
11
|
+
- "5901:5901" # VNC direct connection
|
|
12
|
+
volumes:
|
|
13
|
+
- ./dist-docker:/home/testuser/app:ro # Mount your executable
|
|
14
|
+
environment:
|
|
15
|
+
- DISPLAY=:1
|
|
16
|
+
stdin_open: true
|
|
17
|
+
tty: true
|
|
18
|
+
|
|
19
|
+
# Alternative: Simple command-line testing
|
|
20
|
+
linux-cli:
|
|
21
|
+
image: ubuntu:22.04
|
|
22
|
+
volumes:
|
|
23
|
+
- ./dist-docker:/app:ro
|
|
24
|
+
working_dir: /app
|
|
25
|
+
command: /bin/bash
|
|
26
|
+
stdin_open: true
|
|
27
|
+
tty: true
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
version: '3.8'
|
|
2
|
+
|
|
3
|
+
services:
|
|
4
|
+
# Build for Ubuntu/Debian-based systems
|
|
5
|
+
build-ubuntu:
|
|
6
|
+
build:
|
|
7
|
+
context: .
|
|
8
|
+
dockerfile: Dockerfile.ubuntu
|
|
9
|
+
volumes:
|
|
10
|
+
- ./dist-docker:/output
|
|
11
|
+
environment:
|
|
12
|
+
- BUILD_TARGET=ubuntu
|
|
13
|
+
|
|
14
|
+
# Build for Alpine Linux (smaller, static)
|
|
15
|
+
build-alpine:
|
|
16
|
+
build:
|
|
17
|
+
context: .
|
|
18
|
+
dockerfile: Dockerfile.alpine
|
|
19
|
+
volumes:
|
|
20
|
+
- ./dist-docker:/output
|
|
21
|
+
environment:
|
|
22
|
+
- BUILD_TARGET=alpine
|
|
23
|
+
|
|
24
|
+
# Build for CentOS/RHEL-based systems
|
|
25
|
+
build-centos:
|
|
26
|
+
build:
|
|
27
|
+
context: .
|
|
28
|
+
dockerfile: Dockerfile.centos
|
|
29
|
+
volumes:
|
|
30
|
+
- ./dist-docker:/output
|
|
31
|
+
environment:
|
|
32
|
+
- BUILD_TARGET=centos
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Pomera AI Commander - npm postinstall script
|
|
4
|
+
*
|
|
5
|
+
* This script runs after npm install/update and checks for
|
|
6
|
+
* databases in the package directory that might be at risk.
|
|
7
|
+
*
|
|
8
|
+
* Displays a warning if portable mode data is detected.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const fs = require('fs');
|
|
12
|
+
const path = require('path');
|
|
13
|
+
|
|
14
|
+
// Package root directory
|
|
15
|
+
const packageDir = path.join(__dirname, '..');
|
|
16
|
+
|
|
17
|
+
// Check for databases in package directory
|
|
18
|
+
const databases = ['settings.db', 'notes.db', 'settings.json'];
|
|
19
|
+
const foundDatabases = [];
|
|
20
|
+
|
|
21
|
+
databases.forEach(db => {
|
|
22
|
+
const dbPath = path.join(packageDir, db);
|
|
23
|
+
if (fs.existsSync(dbPath)) {
|
|
24
|
+
const stats = fs.statSync(dbPath);
|
|
25
|
+
foundDatabases.push({
|
|
26
|
+
name: db,
|
|
27
|
+
path: dbPath,
|
|
28
|
+
size: stats.size
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// If databases found in package directory, show warning
|
|
34
|
+
if (foundDatabases.length > 0) {
|
|
35
|
+
console.log('\n' + '='.repeat(70));
|
|
36
|
+
console.log('⚠️ POMERA DATA WARNING ⚠️');
|
|
37
|
+
console.log('='.repeat(70));
|
|
38
|
+
console.log('\nData files detected in package directory (portable mode):');
|
|
39
|
+
foundDatabases.forEach(db => {
|
|
40
|
+
console.log(` • ${db.name} (${(db.size / 1024).toFixed(1)} KB)`);
|
|
41
|
+
});
|
|
42
|
+
console.log('\n🚨 IMPORTANT:');
|
|
43
|
+
console.log(' These files WILL BE DELETED if you run "npm update"!');
|
|
44
|
+
console.log('\n📋 BEFORE UPDATING, please:');
|
|
45
|
+
console.log(' 1. Export your settings: Help > Export Settings');
|
|
46
|
+
console.log(' 2. Copy database files to a safe location:');
|
|
47
|
+
console.log(` ${packageDir}`);
|
|
48
|
+
console.log('\n💡 RECOMMENDED: Use platform data directories instead of portable mode.');
|
|
49
|
+
console.log(' Run Pomera without --portable flag to store data in:');
|
|
50
|
+
if (process.platform === 'win32') {
|
|
51
|
+
console.log(' %LOCALAPPDATA%\\PomeraAI\\Pomera-AI-Commander\\');
|
|
52
|
+
} else if (process.platform === 'darwin') {
|
|
53
|
+
console.log(' ~/Library/Application Support/Pomera-AI-Commander/');
|
|
54
|
+
} else {
|
|
55
|
+
console.log(' ~/.local/share/Pomera-AI-Commander/');
|
|
56
|
+
}
|
|
57
|
+
console.log('\n' + '='.repeat(70) + '\n');
|
|
58
|
+
} else {
|
|
59
|
+
// No databases in package directory - safe configuration
|
|
60
|
+
console.log('✅ Pomera AI Commander installed successfully.');
|
|
61
|
+
console.log(' Data will be stored in platform-appropriate directory (safe from updates).');
|
|
62
|
+
}
|