Commit 8eb50cf
committed
Merge development into main: daemon IPC, installer refactor, i18n, and uv-ffi healing
✨ Features:
* feat(i18n): per-language help routing and fast-path string micro-optimizations (8ef5cf2)
- Implement is_help_flag and is_version_flag in the C dispatcher using uint64_t
word loads to optimize string comparison for '--help' and '--version' flags.
- Check for a lightweight marker file (~/.config/omnipkg/lang_marker_en) in both
the C dispatcher and dispatcher.py to decide when to instantly serve the
baked English help text.
- Fall back to Python argparse for non-English locales to correctly serve fully
translated subcommand lists and argument menus.
- Restore translated argument descriptions (removed argparse.SUPPRESS) across
all subcommands so localized menus render properly on fallback.
- Update .bashrc and .zshrc with OMNIPKG_LANG when the language is changed via
the config menu to keep settings persistent.
- Ensure i18n.py and worker_daemon.py read the config file directly during early
initialization so language variables are set before ConfigManager starts.
Modified:
• src/omnipkg/cli.py (+296/-216 lines)
• src/omnipkg/dispatcher.c (+44/-8 lines)
• src/omnipkg/dispatcher.py (+11/-3 lines)
• src/omnipkg/i18n.py (+11/-1 lines)
• src/omnipkg/isolation/worker_daemon.py (+7/-1 lines)
* feat(daemon): add Torch MP Queue IPC fallback and interactive idle policy (290da0e)
- Implemented fallback for Turing/CUDA 13 GPUs where is broken.
- now correctly uses for true zero-copy.
- Upgraded resource monitor with interactive TUI (, ).
- Users can now configure persistent idle-worker policies directly from the CLI.
* feat(abi): implement ELF parsing for NumPy C-API resolution (11a4500)
- now parses ELF sections to extract .
- Added and to the Knowledge Base.
- Loader now injects correct NumPy ABI bubble paths before PyTorch/TensorFlow initialization.
- Added injection to sterile environments to fix Torch import verification.
* refactor(core): decouple installers and implement atomic stash-swaps (2c9a2fd)
- Extracted monolithic install logic into and .
- Implemented staircase dispatch: FFI → Daemon IPC → subprocess uv → pip.
- Added : atomically renames current packages to protect them during uv installs, eliminating the need to rebuild bubbles from scratch.
- Updated contract to support atomic plan callback interception.
* feat(cli): implement zero-overhead help system and C-dispatcher fast paths (eae5bcb)
- Extracted help text into and compiled directly into .
- C dispatcher now intercepts and instantly (0ms startup).
- Refactored to use normalized arguments and pre-rendered help strings.
- Added utility and normalized handling.
🐛 Fixes:
* fix: fix safe print usage in dispatcher.py (8dc66ab)
Modified:
• src/omnipkg/dispatcher.py (+104/-104 lines)
* fix: resolve translation shadowing, standardize safe_print, and refactor tests (d5b0642)
- Replaced tuple unpacking dummy variables (`_`) with `unused` globally to prevent shadowing the `_` gettext translation function.
- Swapped standard `print()` calls for `safe_print()` in the core, dispatcher, and tests to prevent UnicodeEncodeErrors on strict terminals and Windows.
- Refactored `test_verify_bubble_deps.py` into an OOP `KBSyncVerifier` class with bi-directional (DB ↔ Disk) symmetry checks.
- Relocated FFI and diagnostic tests (`diag_uv_ffi.py`, `test_uv_ffi_contracts.py`) to the root `tests/` directory and fixed linter-induced AttributeErrors.
- Added the "Daemon IPC Showcase" (Option 11) to the interactive `8pkg demo` CLI menu.
- Enhanced the daemon worker pre-warm logic to accurately detect and strip framework (torch/tensorflow) site-packages from the bubble path.
- Registered the `integration` pytest marker in `pytest.ini`.
New files:
• tests/diag_uv_ffi.py (425 lines)
• tests/test_uv_ffi_contracts.py (793 lines)
Modified:
• build_hooks.py (+1/-1 lines)
• src/omnipkg/cli.py (+4/-2 lines)
• src/omnipkg/core.py (+2/-2 lines)
• src/omnipkg/dispatcher.py (+34/-34 lines)
• src/omnipkg/installation/installers.py (+4/-4 lines)
• src/omnipkg/installation/smart_install.py (+3/-3 lines)
• src/omnipkg/integration/reproducible.py (+44/-40 lines)
• src/omnipkg/isolation/fs_lock_queue.py (+1/-1 lines)
• src/omnipkg/isolation/fs_watcher.py (+7/-7 lines)
• src/omnipkg/isolation/resource_monitor.py (+7/-7 lines)
• src/omnipkg/isolation/worker_daemon.py (+17/-4 lines)
• src/omnipkg/package_meta_builder.py (+10/-10 lines)
• src/omnipkg/windows_bootstrap/launcher.py (+1/-1 lines)
• setup.py (+4/-4 lines)
• pytest.ini (+1/-0 lines)
• src/omnipkg/tests/omnipkg_ipc_showcase.py (+22/-17 lines)
• src/omnipkg/tests/test_concurrent_install.py (+2/-2 lines)
• src/omnipkg/tests/test_daemon_tags.py (+22/-18 lines)
• src/omnipkg/tests/test_loader_stress_test.py (+1/-1 lines)
• src/omnipkg/tests/test_old_rich.py (+1/-1 lines)
• src/omnipkg/tests/test_rich_switching.py (+3/-3 lines)
• src/omnipkg/tests/test_tensorflow_switching.py (+1/-1 lines)
• tests/test_dispatcher_contracts.py (+1/-1 lines)
• tests/test_ffi_verify.py (+13/-9 lines)
• tests/test_flask_port_finder.py (+9/-9 lines)
• tests/test_omnipkg_contracts.py (+11/-11 lines)
• tests/test_verify_bubble_deps.py (+117/-179 lines)
* fix(windows): guard fcntl usage behind platform checks (5855d88)
- core.py: lazy import now branches to msvcrt on win32
- smart_install.py: _BubbleLock uses msvcrt.locking on win32, fcntl on POSIX
- Fixes 'Missing standard library module fcntl' crash on Windows CI
* fix(heal): target ghost repair directly to main environment (9b1a1c0)
- now checks physical site-packages paths, bypassing bubble pollution.
- now forces strategy during repair.
- Fixes bug where healed packages were bubbled while broken metadata was restored to main.
📚 Documentation:
* docs: update ARM32 piwheels stats for v3.3.5 [skip ci] (x8)
* docs: update ARM32 piwheels stats for v3.3.4 [skip ci] (866196c)
🧪 Tests:
* test: add IPC showcase and FFI contract diagnostics (c4e98cd)
- Added to demonstrate the 'Impossible Pipeline' (zero-copy GPU IPC across Python 3.9/3.10/3.11).
- Added to validate stale-dir and ghost-eviction logic.
- Added to lock in FFI expected behaviors.
- Updated to track planned install files.
📝 Other changes:
* Update 1 code files (x2)
* Modify omnipkg info commands for non-interactive mode (5c84b32)
Updated omnipkg info command to use non-interactive mode for final state verification and TensorFlow import testing.
📊 47 files changed, 9289 insertions(+), 4311 deletions(-)
📁 Detailed file changes:
Source code:
• src/omnipkg/core.py: +617 -2044
• src/omnipkg/installation/smart_install.py: +1305 -1148
• src/omnipkg/cli.py: +853 -219
• src/omnipkg/installation/installers.py: +805
• src/omnipkg/isolation/worker_daemon.py: +535 -118
• src/omnipkg/help.toml: +440
• src/omnipkg/isolation/resource_monitor.py: +348 -84
• src/omnipkg/_help.h: +354
• src/omnipkg/_help.py: +336
• src/omnipkg/dispatcher.c: +229 -28
• src/omnipkg/_vendor/uv_ffi/__init__.py: +204 -46
• src/omnipkg/dispatcher.py: +144 -106
• src/omnipkg/commands/run.py: +162 -25
• src/omnipkg/integration/reproducible.py: +58 -47
• src/omnipkg/common_utils.py: +41
• src/omnipkg/installation/verification_strategy.py: +18
• src/omnipkg/loader.py: +15 -1
• src/omnipkg/isolation/fs_watcher.py: +7 -7
• src/omnipkg/i18n.py: +11 -1
• src/omnipkg/isolation/patchers.py: +7
• src/omnipkg/_vendor/uv: +1 -1
• src/omnipkg/isolation/fs_lock_queue.py: +1 -1
• src/omnipkg/windows_bootstrap/launcher.py: +1 -1
Tests:
• src/omnipkg/tests/omnipkg_ipc_showcase.py: +1002
• tests/test_uv_ffi_contracts.py: +793
• tests/diag_uv_ffi.py: +425
• tests/test_verify_bubble_deps.py: +117 -179
• tests/test_verify_bubble_deps2.py: -127
• src/omnipkg/tests/test_loader_stress_test.py: +57 -15
• src/omnipkg/tests/test_daemon_tags.py: +22 -18
• tests/test_ffi_verify.py: +13 -9
• tests/test_omnipkg_contracts.py: +11 -11
• tests/test_flask_port_finder.py: +9 -9
• src/omnipkg/tests/test_tensorflow_switching.py: +11 -6
• src/omnipkg/tests/test_rich_switching.py: +3 -3
• src/omnipkg/tests/test_concurrent_install.py: +2 -2
• src/omnipkg/tests/test_old_rich.py: +1 -1
• tests/test_dispatcher_contracts.py: +1 -1
• pytest.ini: +1
Documentation:
• README.md: +12 -3
• .github/piwheels-stats.md: +3 -3
Configuration:
• src/omnipkg/package_meta_builder.py: +299 -34
• .github/workflows/cross_interpreter_installs.yml: +7 -6
• setup.py: +4 -4
Other:
• .github/platform-matrix.json: +2 -2
• build_hooks.py: +1 -1
• .gitignore: +1
Commits: 0e15c2f..808b0f647 files changed
Lines changed: 9289 additions & 4311 deletions
File tree
- .github
- workflows
- src/omnipkg
- _vendor
- uv_ffi
- commands
- installation
- integration
- isolation
- tests
- windows_bootstrap
- tests
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | | - | |
| 6 | + | |
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
11 | 11 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
| 9 | + | |
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
119 | 119 | | |
120 | 120 | | |
121 | 121 | | |
| 122 | + | |
| 123 | + | |
122 | 124 | | |
123 | | - | |
124 | | - | |
125 | | - | |
126 | | - | |
| 125 | + | |
127 | 126 | | |
128 | 127 | | |
129 | 128 | | |
| |||
147 | 146 | | |
148 | 147 | | |
149 | 148 | | |
| 149 | + | |
| 150 | + | |
150 | 151 | | |
151 | 152 | | |
152 | | - | |
153 | | - | |
| 153 | + | |
| 154 | + | |
154 | 155 | | |
155 | 156 | | |
156 | 157 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
214 | 214 | | |
215 | 215 | | |
216 | 216 | | |
| 217 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1405 | 1405 | | |
1406 | 1406 | | |
1407 | 1407 | | |
1408 | | - | |
| 1408 | + | |
1409 | 1409 | | |
1410 | | - | |
| 1410 | + | |
1411 | 1411 | | |
1412 | 1412 | | |
1413 | 1413 | | |
1414 | | - | |
| 1414 | + | |
1415 | 1415 | | |
1416 | 1416 | | |
1417 | 1417 | | |
| |||
1439 | 1439 | | |
1440 | 1440 | | |
1441 | 1441 | | |
| 1442 | + | |
| 1443 | + | |
| 1444 | + | |
| 1445 | + | |
| 1446 | + | |
| 1447 | + | |
| 1448 | + | |
| 1449 | + | |
| 1450 | + | |
1442 | 1451 | | |
1443 | 1452 | | |
1444 | 1453 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
101 | 101 | | |
102 | 102 | | |
103 | 103 | | |
104 | | - | |
| 104 | + | |
105 | 105 | | |
106 | 106 | | |
107 | 107 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
160 | 160 | | |
161 | 161 | | |
162 | 162 | | |
163 | | - | |
| 163 | + | |
164 | 164 | | |
165 | 165 | | |
166 | 166 | | |
| |||
276 | 276 | | |
277 | 277 | | |
278 | 278 | | |
279 | | - | |
| 279 | + | |
280 | 280 | | |
281 | 281 | | |
282 | 282 | | |
| |||
375 | 375 | | |
376 | 376 | | |
377 | 377 | | |
378 | | - | |
| 378 | + | |
379 | 379 | | |
380 | 380 | | |
381 | 381 | | |
| |||
672 | 672 | | |
673 | 673 | | |
674 | 674 | | |
675 | | - | |
| 675 | + | |
676 | 676 | | |
677 | 677 | | |
678 | 678 | | |
| |||
0 commit comments