@@ -26,7 +26,7 @@ iOS(WebDriverAgent)。核心能力是滑鼠/鍵盤控制、影像辨識、
2626| 套件門面 ` __all__ ` 公開名稱數 | 1380 |
2727| GUI 分頁數(` main_widget ` 註冊) | 49 |
2828| MCP 工具數(` build_default_tool_registry() ` 實測) | 711 |
29- | ` test_*.py ` 測試檔/測試函式 | 845 / 8,810 |
29+ | ` test_*.py ` 測試檔/測試函式 | 846 / 8,820 |
3030| 範例腳本 | 43 |
3131
3232** 技術基線** :Python ≥ 3.10、MIT 授權、必要相依只有 ` je_open_cv ` /` opencv-python ` /` pillow ` /` mss ` /
@@ -1156,14 +1156,14 @@ GUI 是**選用 extra**(`pip install je_auto_control[gui]`,只需要 PySide6
11561156| ` benchmarks/core_latency.py ` | 32 行 | 對穩定無頭進入點的可重複煙霧基準測試。 |
11571157| ` examples/ ` | 43 個腳本 | 從截圖點擊、OCR、排程、遠端桌面、agent loop、可觀測性,一路到 computer-use、Wayland、跨主機 DAG、chatops、pytest/BDD、anchor locator、因果 peer 控制。 |
11581158| ` browser-extension/ ` | manifest v3 擴充 | 瀏覽器端配合元件(background/content script/popup)。 |
1159- | `docker/` | Dockerfile ×8 + compose + 9 支驗證/伺服器腳本 | 無頭容器(`Dockerfile`)、帶 XFCE 桌面的容器(`Dockerfile.xfce`),以及四個**驗證用**映像:`Dockerfile.wayland`(sway headless,擷取路徑 + `libei_verify.py` 對真的 libei.so 解析符號)、`Dockerfile.eis`(`eis_server.py` 用 ctypes 綁 libeis 起一個真的 EIS server,`eis_verify.py` 把 libei sender 對著它跑完整握手與發送)、`Dockerfile.portal`(`portal_server.py` 自己佔住 `org.freedesktop.portal.Desktop`,真的 `dbus-daemon` + 真的 liboeffis 跑完 RemoteDesktop 交握)、`Dockerfile.ydotool`(真的 uinput 裝置,`ydotool_verify.py` 直接讀回 `/dev/input/eventN`)、`Dockerfile.seat`(`headless,libinput` + builtin seat,合成器真的吃下 ydotool 裝置,`seat_verify.py` 從 `grim -c` 的像素讀回游標落點)、`Dockerfile.x11`(真的 Xvfb + openbox,`x11_verify.py` 用 `xev` 把注入的事件從真的客戶端讀回(含 `synthetic NO`,這是 XTest 跟 `XSendEvent` 的差別),另用 ImageMagick `import` 做獨立擷取對照,跑兩種螢幕版面)。全部接在 `.github/workflows/docker.yml`。 |
1159+ | `docker/` | Dockerfile ×8 + compose + 9 支驗證/伺服器腳本 | 無頭容器(`Dockerfile`)、帶 XFCE 桌面的容器(`Dockerfile.xfce`),以及四個**驗證用**映像:`Dockerfile.wayland`(sway headless,擷取路徑 + `libei_verify.py` 對真的 libei.so 解析符號)、`Dockerfile.eis`(`eis_server.py` 用 ctypes 綁 libeis 起一個真的 EIS server,`eis_verify.py` 把 libei sender 對著它跑完整握手與發送)、`Dockerfile.portal`(`portal_server.py` 自己佔住 `org.freedesktop.portal.Desktop`,真的 `dbus-daemon` + 真的 liboeffis 跑完 RemoteDesktop 交握)、`Dockerfile.ydotool`(真的 uinput 裝置,`ydotool_verify.py` 直接讀回 `/dev/input/eventN`)、`Dockerfile.seat`(`headless,libinput` + builtin seat,合成器真的吃下 ydotool 裝置,`seat_verify.py` 從 `grim -c` 的像素讀回游標落點)、`Dockerfile.x11`(真的 Xvfb + openbox,`x11_verify.py` 用 `xev` 把注入的事件從真的客戶端讀回(含 `synthetic NO`,這是 XTest 跟 `XSendEvent` 的差別),另用 ImageMagick `import` 做獨立擷取對照,跑兩種螢幕版面)。全部接在 `.github/workflows/docker.yml`;`ei-lifecycle.yml` 另在 dev 以同一 EIS 映像分別收集半開釋放/拒絕與 live peer 證據 。 |
11601160| ` k8s/helm/ ` | Helm chart | Kubernetes 部署。 |
11611161| ` ci_templates/.gitlab-ci.yml ` | — | 供使用者專案複製的 GitLab CI 範本。 |
11621162| ` scripts/ci_native_diagnostics.py ` | repo 專用 CI 診斷腳本 | 合併並串流子行程輸出、記錄套件/執行環境版本與退出碼;Linux 經停用使用者初始化/shell 啟動的 batch GDB 保留各執行緒原生堆疊,以安全暫存啟動器 exec JSON argv 避開舊 GDB 空白解析;SIGINT 傳入子行程,失敗退出不轉成功。Linux 先做獨立前置檢查,dev/main 無頭工作一律上傳七天診斷 artifact;不匯入框架或請求裝置權限。 |
11631163| ` scripts/dev_release.py ` | 只用標準函式庫的發佈輔助腳本 | dev 通道(PyPI 的 ` je_auto_control_dev ` )的版本與比對:` prepare ` 把 ` dev.toml ` 寫成 ` pyproject.toml ` ,版本取 PyPI 最新一版加一個 patch(` dev.toml ` 的版本只是下限,不回寫 repo);` changed dist ` 把建好的 wheel 跟 PyPI 最新一版逐檔比對,內容沒變就不上傳。只給 ` dev.yml ` 的 ` publish-dev ` job 與拋棄式的 checkout 用,因為 ` prepare ` 會蓋掉 ` pyproject.toml ` 。 |
11641164| ` docs/ ` | Sphinx(` API ` /` Eng ` /` Zh ` /` getting_started ` ) | Read the Docs 文件。 |
11651165| ` architecture_diagram/ ` | drawio + png | 既有的架構圖原始檔。 |
1166- | ` test/ ` | ` unit_test/headless ` (主要)、` unit_test/flow_control ` 、` integrated_test ` 、` gui_test ` 、` manual_test ` 、` verify ` 、` test_source ` | 845 個 ` test_*.py ` /8,810 個測試函式。** 注意** :` test/unit_test/ ` 下的 ` *_test.py ` 是會真的驅動滑鼠鍵盤的手動示範腳本,因此 ` pyproject.toml ` 把 ` python_files ` 釘成 ` test_*.py ` 。` unit_test/headless/conftest.py ` 有一個 autouse fixture,每個測試結束都沖掉 Qt 排隊中的 ` deleteLater() ` ——不沖會讓殘留的 widget 在後面某個不相干的測試裡被銷毀,曾經整個直譯器 ` __fastfail ` 。` test_doc_counts.py ` 守住文件引用的指令/工具/子套件/範例數,` test_doc_line_counts.py ` 守住所有行數(` --fix ` 可一次重新產生)。 ` verify/macos_verify.py ` 是在真的 ` macos-14 ` runner 上量測 TCC 到底允許什麼的探針(macOS 是唯一沒有容器可用的支援平台),不被 pytest 收集。 |
1166+ | ` test/ ` | ` unit_test/headless ` (主要)、` unit_test/flow_control ` 、` integrated_test ` 、` gui_test ` 、` manual_test ` 、` verify ` 、` test_source ` | 846 個 ` test_*.py ` /8,820 個測試函式。** 注意** :` test/unit_test/ ` 下的 ` *_test.py ` 是會真的驅動滑鼠鍵盤的手動示範腳本,因此 ` pyproject.toml ` 把 ` python_files ` 釘成 ` test_*.py ` 。` unit_test/headless/conftest.py ` 有一個 autouse fixture,每個測試結束都沖掉 Qt 排隊中的 ` deleteLater() ` ——不沖會讓殘留的 widget 在後面某個不相干的測試裡被銷毀,曾經整個直譯器 ` __fastfail ` 。` test_doc_counts.py ` 守住文件引用的指令/工具/子套件/範例數,` test_doc_line_counts.py ` 守住所有行數(` --fix ` 可一次重新產生)。 ` verify/macos_verify.py ` 是在真的 ` macos-14 ` runner 上量測 TCC 到底允許什麼的探針(macOS 是唯一沒有容器可用的支援平台),不被 pytest 收集。 |
11671167
11681168---
11691169
@@ -1201,6 +1201,7 @@ GUI 是**選用 extra**(`pip install je_auto_control[gui]`,只需要 PySide6
12011201| ` quality.yml ` | ruff、bandit、dependency review、九格矩陣的 headless pytest(含 coverage 地板)與 mypy。 |
12021202| ` platform-smoke.yml ` | 跨平台煙霧測試。 |
12031203| ` docker.yml ` | 容器映像建置。 |
1204+ | ` ei-lifecycle.yml ` | 選定 dev 推送的隔離 libei/libeis 驗證;獨立執行有界半開釋放與 live peer,保留版本/原生紀錄十四天,失敗仍失敗,不開啟裝置。 |
12041205| ` action-json-lint.yml ` | 用 ` python -m je_auto_control.utils.action_lint ` 檢查 action JSON。 |
12051206
12061207** 設定基線** (` pyproject.toml ` ):
0 commit comments