pomera-ai-commander 1.1.1 → 1.2.2

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.
Files changed (213) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +105 -680
  3. package/bin/pomera-ai-commander.js +62 -62
  4. package/core/__init__.py +65 -65
  5. package/core/app_context.py +482 -482
  6. package/core/async_text_processor.py +421 -421
  7. package/core/backup_manager.py +655 -655
  8. package/core/backup_recovery_manager.py +1199 -1033
  9. package/core/content_hash_cache.py +508 -508
  10. package/core/context_menu.py +313 -313
  11. package/core/data_directory.py +549 -0
  12. package/core/data_validator.py +1066 -1066
  13. package/core/database_connection_manager.py +744 -744
  14. package/core/database_curl_settings_manager.py +608 -608
  15. package/core/database_promera_ai_settings_manager.py +446 -446
  16. package/core/database_schema.py +411 -411
  17. package/core/database_schema_manager.py +395 -395
  18. package/core/database_settings_manager.py +1507 -1507
  19. package/core/database_settings_manager_interface.py +456 -456
  20. package/core/dialog_manager.py +734 -734
  21. package/core/diff_utils.py +239 -0
  22. package/core/efficient_line_numbers.py +540 -510
  23. package/core/error_handler.py +746 -746
  24. package/core/error_service.py +431 -431
  25. package/core/event_consolidator.py +511 -511
  26. package/core/mcp/__init__.py +43 -43
  27. package/core/mcp/find_replace_diff.py +334 -0
  28. package/core/mcp/protocol.py +288 -288
  29. package/core/mcp/schema.py +251 -251
  30. package/core/mcp/server_stdio.py +299 -299
  31. package/core/mcp/tool_registry.py +2699 -2345
  32. package/core/memento.py +275 -0
  33. package/core/memory_efficient_text_widget.py +711 -711
  34. package/core/migration_manager.py +914 -914
  35. package/core/migration_test_suite.py +1085 -1085
  36. package/core/migration_validator.py +1143 -1143
  37. package/core/optimized_find_replace.py +714 -714
  38. package/core/optimized_pattern_engine.py +424 -424
  39. package/core/optimized_search_highlighter.py +552 -552
  40. package/core/performance_monitor.py +674 -674
  41. package/core/persistence_manager.py +712 -712
  42. package/core/progressive_stats_calculator.py +632 -632
  43. package/core/regex_pattern_cache.py +529 -529
  44. package/core/regex_pattern_library.py +350 -350
  45. package/core/search_operation_manager.py +434 -434
  46. package/core/settings_defaults_registry.py +1087 -1087
  47. package/core/settings_integrity_validator.py +1111 -1111
  48. package/core/settings_serializer.py +557 -557
  49. package/core/settings_validator.py +1823 -1823
  50. package/core/smart_stats_calculator.py +709 -709
  51. package/core/statistics_update_manager.py +619 -619
  52. package/core/stats_config_manager.py +858 -858
  53. package/core/streaming_text_handler.py +723 -723
  54. package/core/task_scheduler.py +596 -596
  55. package/core/update_pattern_library.py +168 -168
  56. package/core/visibility_monitor.py +596 -596
  57. package/core/widget_cache.py +498 -498
  58. package/mcp.json +51 -61
  59. package/migrate_data.py +127 -0
  60. package/package.json +64 -57
  61. package/pomera.py +7883 -7482
  62. package/pomera_mcp_server.py +183 -144
  63. package/requirements.txt +33 -0
  64. package/scripts/Dockerfile.alpine +43 -0
  65. package/scripts/Dockerfile.gui-test +54 -0
  66. package/scripts/Dockerfile.linux +43 -0
  67. package/scripts/Dockerfile.test-linux +80 -0
  68. package/scripts/Dockerfile.ubuntu +39 -0
  69. package/scripts/README.md +53 -0
  70. package/scripts/build-all.bat +113 -0
  71. package/scripts/build-docker.bat +53 -0
  72. package/scripts/build-docker.sh +55 -0
  73. package/scripts/build-optimized.bat +101 -0
  74. package/scripts/build.sh +78 -0
  75. package/scripts/docker-compose.test.yml +27 -0
  76. package/scripts/docker-compose.yml +32 -0
  77. package/scripts/postinstall.js +62 -0
  78. package/scripts/requirements-minimal.txt +33 -0
  79. package/scripts/test-linux-simple.bat +28 -0
  80. package/scripts/validate-release-workflow.py +450 -0
  81. package/tools/__init__.py +4 -4
  82. package/tools/ai_tools.py +2891 -2891
  83. package/tools/ascii_art_generator.py +352 -352
  84. package/tools/base64_tools.py +183 -183
  85. package/tools/base_tool.py +511 -511
  86. package/tools/case_tool.py +308 -308
  87. package/tools/column_tools.py +395 -395
  88. package/tools/cron_tool.py +884 -884
  89. package/tools/curl_history.py +600 -600
  90. package/tools/curl_processor.py +1207 -1207
  91. package/tools/curl_settings.py +502 -502
  92. package/tools/curl_tool.py +5467 -5467
  93. package/tools/diff_viewer.py +1817 -1072
  94. package/tools/email_extraction_tool.py +248 -248
  95. package/tools/email_header_analyzer.py +425 -425
  96. package/tools/extraction_tools.py +250 -250
  97. package/tools/find_replace.py +2289 -1750
  98. package/tools/folder_file_reporter.py +1463 -1463
  99. package/tools/folder_file_reporter_adapter.py +480 -480
  100. package/tools/generator_tools.py +1216 -1216
  101. package/tools/hash_generator.py +255 -255
  102. package/tools/html_tool.py +656 -656
  103. package/tools/jsonxml_tool.py +729 -729
  104. package/tools/line_tools.py +419 -419
  105. package/tools/markdown_tools.py +561 -561
  106. package/tools/mcp_widget.py +1417 -1417
  107. package/tools/notes_widget.py +978 -973
  108. package/tools/number_base_converter.py +372 -372
  109. package/tools/regex_extractor.py +571 -571
  110. package/tools/slug_generator.py +310 -310
  111. package/tools/sorter_tools.py +458 -458
  112. package/tools/string_escape_tool.py +392 -392
  113. package/tools/text_statistics_tool.py +365 -365
  114. package/tools/text_wrapper.py +430 -430
  115. package/tools/timestamp_converter.py +421 -421
  116. package/tools/tool_loader.py +710 -710
  117. package/tools/translator_tools.py +522 -522
  118. package/tools/url_link_extractor.py +261 -261
  119. package/tools/url_parser.py +204 -204
  120. package/tools/whitespace_tools.py +355 -355
  121. package/tools/word_frequency_counter.py +146 -146
  122. package/core/__pycache__/__init__.cpython-313.pyc +0 -0
  123. package/core/__pycache__/app_context.cpython-313.pyc +0 -0
  124. package/core/__pycache__/async_text_processor.cpython-313.pyc +0 -0
  125. package/core/__pycache__/backup_manager.cpython-313.pyc +0 -0
  126. package/core/__pycache__/backup_recovery_manager.cpython-313.pyc +0 -0
  127. package/core/__pycache__/content_hash_cache.cpython-313.pyc +0 -0
  128. package/core/__pycache__/context_menu.cpython-313.pyc +0 -0
  129. package/core/__pycache__/data_validator.cpython-313.pyc +0 -0
  130. package/core/__pycache__/database_connection_manager.cpython-313.pyc +0 -0
  131. package/core/__pycache__/database_curl_settings_manager.cpython-313.pyc +0 -0
  132. package/core/__pycache__/database_promera_ai_settings_manager.cpython-313.pyc +0 -0
  133. package/core/__pycache__/database_schema.cpython-313.pyc +0 -0
  134. package/core/__pycache__/database_schema_manager.cpython-313.pyc +0 -0
  135. package/core/__pycache__/database_settings_manager.cpython-313.pyc +0 -0
  136. package/core/__pycache__/database_settings_manager_interface.cpython-313.pyc +0 -0
  137. package/core/__pycache__/dialog_manager.cpython-313.pyc +0 -0
  138. package/core/__pycache__/efficient_line_numbers.cpython-313.pyc +0 -0
  139. package/core/__pycache__/error_handler.cpython-313.pyc +0 -0
  140. package/core/__pycache__/error_service.cpython-313.pyc +0 -0
  141. package/core/__pycache__/event_consolidator.cpython-313.pyc +0 -0
  142. package/core/__pycache__/memory_efficient_text_widget.cpython-313.pyc +0 -0
  143. package/core/__pycache__/migration_manager.cpython-313.pyc +0 -0
  144. package/core/__pycache__/migration_test_suite.cpython-313.pyc +0 -0
  145. package/core/__pycache__/migration_validator.cpython-313.pyc +0 -0
  146. package/core/__pycache__/optimized_find_replace.cpython-313.pyc +0 -0
  147. package/core/__pycache__/optimized_pattern_engine.cpython-313.pyc +0 -0
  148. package/core/__pycache__/optimized_search_highlighter.cpython-313.pyc +0 -0
  149. package/core/__pycache__/performance_monitor.cpython-313.pyc +0 -0
  150. package/core/__pycache__/persistence_manager.cpython-313.pyc +0 -0
  151. package/core/__pycache__/progressive_stats_calculator.cpython-313.pyc +0 -0
  152. package/core/__pycache__/regex_pattern_cache.cpython-313.pyc +0 -0
  153. package/core/__pycache__/regex_pattern_library.cpython-313.pyc +0 -0
  154. package/core/__pycache__/search_operation_manager.cpython-313.pyc +0 -0
  155. package/core/__pycache__/settings_defaults_registry.cpython-313.pyc +0 -0
  156. package/core/__pycache__/settings_integrity_validator.cpython-313.pyc +0 -0
  157. package/core/__pycache__/settings_serializer.cpython-313.pyc +0 -0
  158. package/core/__pycache__/settings_validator.cpython-313.pyc +0 -0
  159. package/core/__pycache__/smart_stats_calculator.cpython-313.pyc +0 -0
  160. package/core/__pycache__/statistics_update_manager.cpython-313.pyc +0 -0
  161. package/core/__pycache__/stats_config_manager.cpython-313.pyc +0 -0
  162. package/core/__pycache__/streaming_text_handler.cpython-313.pyc +0 -0
  163. package/core/__pycache__/task_scheduler.cpython-313.pyc +0 -0
  164. package/core/__pycache__/visibility_monitor.cpython-313.pyc +0 -0
  165. package/core/__pycache__/widget_cache.cpython-313.pyc +0 -0
  166. package/core/mcp/__pycache__/__init__.cpython-313.pyc +0 -0
  167. package/core/mcp/__pycache__/protocol.cpython-313.pyc +0 -0
  168. package/core/mcp/__pycache__/schema.cpython-313.pyc +0 -0
  169. package/core/mcp/__pycache__/server_stdio.cpython-313.pyc +0 -0
  170. package/core/mcp/__pycache__/tool_registry.cpython-313.pyc +0 -0
  171. package/tools/__pycache__/__init__.cpython-313.pyc +0 -0
  172. package/tools/__pycache__/ai_tools.cpython-313.pyc +0 -0
  173. package/tools/__pycache__/ascii_art_generator.cpython-313.pyc +0 -0
  174. package/tools/__pycache__/base64_tools.cpython-313.pyc +0 -0
  175. package/tools/__pycache__/base_tool.cpython-313.pyc +0 -0
  176. package/tools/__pycache__/case_tool.cpython-313.pyc +0 -0
  177. package/tools/__pycache__/column_tools.cpython-313.pyc +0 -0
  178. package/tools/__pycache__/cron_tool.cpython-313.pyc +0 -0
  179. package/tools/__pycache__/curl_history.cpython-313.pyc +0 -0
  180. package/tools/__pycache__/curl_processor.cpython-313.pyc +0 -0
  181. package/tools/__pycache__/curl_settings.cpython-313.pyc +0 -0
  182. package/tools/__pycache__/curl_tool.cpython-313.pyc +0 -0
  183. package/tools/__pycache__/diff_viewer.cpython-313.pyc +0 -0
  184. package/tools/__pycache__/email_extraction_tool.cpython-313.pyc +0 -0
  185. package/tools/__pycache__/email_header_analyzer.cpython-313.pyc +0 -0
  186. package/tools/__pycache__/extraction_tools.cpython-313.pyc +0 -0
  187. package/tools/__pycache__/find_replace.cpython-313.pyc +0 -0
  188. package/tools/__pycache__/folder_file_reporter.cpython-313.pyc +0 -0
  189. package/tools/__pycache__/folder_file_reporter_adapter.cpython-313.pyc +0 -0
  190. package/tools/__pycache__/generator_tools.cpython-313.pyc +0 -0
  191. package/tools/__pycache__/hash_generator.cpython-313.pyc +0 -0
  192. package/tools/__pycache__/html_tool.cpython-313.pyc +0 -0
  193. package/tools/__pycache__/huggingface_helper.cpython-313.pyc +0 -0
  194. package/tools/__pycache__/jsonxml_tool.cpython-313.pyc +0 -0
  195. package/tools/__pycache__/line_tools.cpython-313.pyc +0 -0
  196. package/tools/__pycache__/list_comparator.cpython-313.pyc +0 -0
  197. package/tools/__pycache__/markdown_tools.cpython-313.pyc +0 -0
  198. package/tools/__pycache__/mcp_widget.cpython-313.pyc +0 -0
  199. package/tools/__pycache__/notes_widget.cpython-313.pyc +0 -0
  200. package/tools/__pycache__/number_base_converter.cpython-313.pyc +0 -0
  201. package/tools/__pycache__/regex_extractor.cpython-313.pyc +0 -0
  202. package/tools/__pycache__/slug_generator.cpython-313.pyc +0 -0
  203. package/tools/__pycache__/sorter_tools.cpython-313.pyc +0 -0
  204. package/tools/__pycache__/string_escape_tool.cpython-313.pyc +0 -0
  205. package/tools/__pycache__/text_statistics_tool.cpython-313.pyc +0 -0
  206. package/tools/__pycache__/text_wrapper.cpython-313.pyc +0 -0
  207. package/tools/__pycache__/timestamp_converter.cpython-313.pyc +0 -0
  208. package/tools/__pycache__/tool_loader.cpython-313.pyc +0 -0
  209. package/tools/__pycache__/translator_tools.cpython-313.pyc +0 -0
  210. package/tools/__pycache__/url_link_extractor.cpython-313.pyc +0 -0
  211. package/tools/__pycache__/url_parser.cpython-313.pyc +0 -0
  212. package/tools/__pycache__/whitespace_tools.cpython-313.pyc +0 -0
  213. package/tools/__pycache__/word_frequency_counter.cpython-313.pyc +0 -0
@@ -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
@@ -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
+ }
@@ -0,0 +1,33 @@
1
+ # Minimal requirements for Pomera AI Commander
2
+ # Only the absolutely essential libraries
3
+
4
+ # Core GUI and functionality
5
+ requests>=2.25.0
6
+ reportlab>=3.6.0
7
+ python-docx>=0.8.11
8
+ aiohttp>=3.9.0
9
+
10
+ # AI Tools (optional but core feature)
11
+ huggingface-hub>=0.16.0
12
+
13
+ # Google AI SDK (recommended for better error handling and streaming)
14
+ google-genai>=1.0.0
15
+
16
+ # Azure AI SDK (recommended - Microsoft recommends migrating to this)
17
+ azure-ai-inference>=1.0.0b1
18
+ azure-core>=1.30.0
19
+
20
+ # Retry logic with exponential backoff
21
+ tenacity>=8.2.0
22
+
23
+ # Encryption for AI tools
24
+ cryptography>=3.4.0
25
+
26
+ # Image processing (required by reportlab)
27
+ Pillow>=8.0.0
28
+
29
+ # XML processing (required by python-docx)
30
+ lxml>=4.6.0
31
+
32
+ # Build tool
33
+ pyinstaller>=5.0.0
@@ -0,0 +1,28 @@
1
+ @echo off
2
+ echo Testing Linux executable in Docker container...
3
+ echo.
4
+
5
+ REM Check if the Linux executable exists
6
+ if not exist "dist-docker\pomera-linux" (
7
+ echo ERROR: Linux executable not found!
8
+ echo Please build it first using: build-docker.bat
9
+ pause
10
+ exit /b 1
11
+ )
12
+
13
+ echo Starting Ubuntu container with your Linux executable...
14
+ echo.
15
+ echo Commands you can try inside the container:
16
+ echo ./pomera-linux --help
17
+ echo ./pomera-linux --version
18
+ echo ls -la pomera-linux
19
+ echo file pomera-linux
20
+ echo.
21
+ echo Type 'exit' to return to Windows
22
+ echo.
23
+
24
+ docker run -it --rm -v "%cd%\dist-docker:/app" -w /app ubuntu:22.04 /bin/bash
25
+
26
+ echo.
27
+ echo Returned to Windows
28
+ pause