safaai 0.1.0__tar.gz

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 (112) hide show
  1. safaai-0.1.0/.github/workflows/release.yml +44 -0
  2. safaai-0.1.0/.gitignore +14 -0
  3. safaai-0.1.0/.hermes/plans/2026-07-23_094100-safai-tui-implementation.md +1054 -0
  4. safaai-0.1.0/.hermes/plans/2026-07-25_001500-safai-vs-cleanmymac-benchmark.md +331 -0
  5. safaai-0.1.0/.hermes/plans/2026-07-25_031000-clean-workflow-ux-polish.md +543 -0
  6. safaai-0.1.0/.hermes/plans/2026-07-25_040000-live-streaming-parallel-cleanup-and-admin-modal.md +30 -0
  7. safaai-0.1.0/.hermes/plans/2026-07-25_141500-cleanmymac-cli-benchmark.md +242 -0
  8. safaai-0.1.0/.hermes/plans/2026-07-25_143000-gap-closure-execution.md +444 -0
  9. safaai-0.1.0/.hermes/plans/2026-07-25_225000-asciimatics-splash-animation.md +64 -0
  10. safaai-0.1.0/.python-version +1 -0
  11. safaai-0.1.0/AGENTS.md +105 -0
  12. safaai-0.1.0/PKG-INFO +118 -0
  13. safaai-0.1.0/README.md +98 -0
  14. safaai-0.1.0/design.md +75 -0
  15. safaai-0.1.0/graphify-out/.graphify_labels.json +66 -0
  16. safaai-0.1.0/graphify-out/.graphify_root +1 -0
  17. safaai-0.1.0/graphify-out/2026-07-25/.graphify_labels.json +74 -0
  18. safaai-0.1.0/graphify-out/2026-07-25/GRAPH_REPORT.md +353 -0
  19. safaai-0.1.0/graphify-out/2026-07-25/graph.json +44773 -0
  20. safaai-0.1.0/graphify-out/2026-07-25/manifest.json +442 -0
  21. safaai-0.1.0/graphify-out/2026-07-27/.graphify_labels.json +74 -0
  22. safaai-0.1.0/graphify-out/2026-07-27/GRAPH_REPORT.md +373 -0
  23. safaai-0.1.0/graphify-out/2026-07-27/graph.json +44520 -0
  24. safaai-0.1.0/graphify-out/2026-07-27/manifest.json +472 -0
  25. safaai-0.1.0/graphify-out/GRAPH_REPORT.md +329 -0
  26. safaai-0.1.0/graphify-out/graph.html +320 -0
  27. safaai-0.1.0/graphify-out/graph.json +35533 -0
  28. safaai-0.1.0/graphify-out/manifest.json +472 -0
  29. safaai-0.1.0/pyproject.toml +44 -0
  30. safaai-0.1.0/safaai/__init__.py +3 -0
  31. safaai-0.1.0/safaai/__main__.py +22 -0
  32. safaai-0.1.0/safaai/actions/__init__.py +1 -0
  33. safaai-0.1.0/safaai/actions/executor.py +201 -0
  34. safaai-0.1.0/safaai/actions/kill.py +33 -0
  35. safaai-0.1.0/safaai/actions/optimize.py +85 -0
  36. safaai-0.1.0/safaai/actions/trash.py +53 -0
  37. safaai-0.1.0/safaai/app.py +59 -0
  38. safaai-0.1.0/safaai/commands/__init__.py +1 -0
  39. safaai-0.1.0/safaai/commands/palette.py +317 -0
  40. safaai-0.1.0/safaai/config.py +36 -0
  41. safaai-0.1.0/safaai/core/__init__.py +30 -0
  42. safaai-0.1.0/safaai/core/debug_log.py +86 -0
  43. safaai-0.1.0/safaai/core/ignore_db.py +108 -0
  44. safaai-0.1.0/safaai/core/journal.py +164 -0
  45. safaai-0.1.0/safaai/core/log_db.py +203 -0
  46. safaai-0.1.0/safaai/core/updater.py +101 -0
  47. safaai-0.1.0/safaai/css/__init__.py +6 -0
  48. safaai-0.1.0/safaai/css/dashboard.py +96 -0
  49. safaai-0.1.0/safaai/css/scan_results.py +54 -0
  50. safaai-0.1.0/safaai/css/screens.py +23 -0
  51. safaai-0.1.0/safaai/css/splash.py +28 -0
  52. safaai-0.1.0/safaai/icon.txt +55 -0
  53. safaai-0.1.0/safaai/scanners/__init__.py +3 -0
  54. safaai-0.1.0/safaai/scanners/base.py +51 -0
  55. safaai-0.1.0/safaai/scanners/brew.py +172 -0
  56. safaai-0.1.0/safaai/scanners/disk.py +117 -0
  57. safaai-0.1.0/safaai/scanners/docker.py +197 -0
  58. safaai-0.1.0/safaai/scanners/graph.py +624 -0
  59. safaai-0.1.0/safaai/scanners/memory.py +84 -0
  60. safaai-0.1.0/safaai/scanners/node.py +167 -0
  61. safaai-0.1.0/safaai/scanners/project_purge.py +111 -0
  62. safaai-0.1.0/safaai/scanners/registry.py +37 -0
  63. safaai-0.1.0/safaai/scanners/startup.py +112 -0
  64. safaai-0.1.0/safaai/scanners/xcode.py +80 -0
  65. safaai-0.1.0/safaai/screens/__init__.py +42 -0
  66. safaai-0.1.0/safaai/screens/admin_password.py +124 -0
  67. safaai-0.1.0/safaai/screens/clean_result.py +120 -0
  68. safaai-0.1.0/safaai/screens/confirm.py +631 -0
  69. safaai-0.1.0/safaai/screens/dashboard.py +38 -0
  70. safaai-0.1.0/safaai/screens/ignore_screen.py +105 -0
  71. safaai-0.1.0/safaai/screens/log_screen.py +462 -0
  72. safaai-0.1.0/safaai/screens/optimize_confirm.py +85 -0
  73. safaai-0.1.0/safaai/screens/progress.py +40 -0
  74. safaai-0.1.0/safaai/screens/scan_results.py +94 -0
  75. safaai-0.1.0/safaai/screens/splash.py +30 -0
  76. safaai-0.1.0/safaai/screens/splash_asciimatics.py +99 -0
  77. safaai-0.1.0/safaai/screens/sysinfo.py +389 -0
  78. safaai-0.1.0/safaai/screens/update_confirm.py +101 -0
  79. safaai-0.1.0/safaai/widgets/broom_audit.py +55 -0
  80. safaai-0.1.0/safaai/widgets/confirm_row.py +342 -0
  81. safaai-0.1.0/safaai/widgets/disk_bento.py +77 -0
  82. safaai-0.1.0/safaai/widgets/health_gauge.py +44 -0
  83. safaai-0.1.0/safaai/widgets/metrics.py +115 -0
  84. safaai-0.1.0/safaai/widgets/suggestions.py +47 -0
  85. safaai-0.1.0/safaai/workflows/__init__.py +1 -0
  86. safaai-0.1.0/safaai/workflows/engine.py +152 -0
  87. safaai-0.1.0/tests/test_brew_scanner.py +64 -0
  88. safaai-0.1.0/tests/test_clean_workflow.py +306 -0
  89. safaai-0.1.0/tests/test_cleanup_graph.py +86 -0
  90. safaai-0.1.0/tests/test_command_palette.py +121 -0
  91. safaai-0.1.0/tests/test_confirm_row.py +32 -0
  92. safaai-0.1.0/tests/test_dashboard_metrics.py +138 -0
  93. safaai-0.1.0/tests/test_disk_scanner.py +99 -0
  94. safaai-0.1.0/tests/test_docker_scanner.py +47 -0
  95. safaai-0.1.0/tests/test_health_score.py +49 -0
  96. safaai-0.1.0/tests/test_ignore_db.py +63 -0
  97. safaai-0.1.0/tests/test_journal.py +33 -0
  98. safaai-0.1.0/tests/test_log_screen.py +115 -0
  99. safaai-0.1.0/tests/test_memory_scanner.py +28 -0
  100. safaai-0.1.0/tests/test_node_scanner.py +57 -0
  101. safaai-0.1.0/tests/test_optimize.py +29 -0
  102. safaai-0.1.0/tests/test_progress.py +91 -0
  103. safaai-0.1.0/tests/test_project_grouping.py +61 -0
  104. safaai-0.1.0/tests/test_project_purge.py +12 -0
  105. safaai-0.1.0/tests/test_scaffold.py +118 -0
  106. safaai-0.1.0/tests/test_scan_results_screen.py +63 -0
  107. safaai-0.1.0/tests/test_scanner_framework.py +168 -0
  108. safaai-0.1.0/tests/test_startup_scanner.py +26 -0
  109. safaai-0.1.0/tests/test_trash.py +21 -0
  110. safaai-0.1.0/tests/test_updater.py +110 -0
  111. safaai-0.1.0/tests/test_xcode_scanner.py +33 -0
  112. safaai-0.1.0/uv.lock +1257 -0
@@ -0,0 +1,44 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ jobs:
9
+ pypi:
10
+ name: Publish to PyPI
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - name: Install uv
15
+ run: curl -LsSf https://astral.sh/uv/install.sh | sh
16
+ - name: Build and Publish to PyPI
17
+ run: |
18
+ uv build
19
+ uv publish --token ${{ secrets.PYPI_API_TOKEN }}
20
+
21
+ binaries:
22
+ name: Build and Release Standalone Binaries
23
+ strategy:
24
+ matrix:
25
+ os: [macos-latest, ubuntu-latest]
26
+ runs-on: ${{ matrix.os }}
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+ - name: Setup Python
30
+ uses: actions/setup-python@v5
31
+ with:
32
+ python-version: '3.13'
33
+ - name: Install dependencies & PyInstaller
34
+ run: |
35
+ pip install uv
36
+ uv pip install --system . pyinstaller
37
+ - name: Build Binary
38
+ run: pyinstaller --onefile --name safaai safaai/__main__.py
39
+ - name: Upload Binaries to Release
40
+ uses: softprops/action-gh-release@v2
41
+ with:
42
+ files: dist/safaai
43
+ env:
44
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,14 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Virtual environments
10
+ .venv
11
+
12
+ # Graphify cache
13
+ graphify-out/cache/
14
+