flutter-dev 0.1.4__tar.gz → 0.1.6__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 (42) hide show
  1. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/CHANGELOG.md +29 -0
  2. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/PKG-INFO +39 -6
  3. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/README.md +37 -5
  4. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/fdev.py +28 -5
  5. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/flutter_dev.egg-info/SOURCES.txt +6 -1
  6. flutter_dev-0.1.6/managers/gui.py +536 -0
  7. flutter_dev-0.1.6/managers/package.py +148 -0
  8. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/pyproject.toml +2 -1
  9. flutter_dev-0.1.6/tests/test_fdev_cli.py +65 -0
  10. flutter_dev-0.1.6/tests/test_gui.py +183 -0
  11. flutter_dev-0.1.6/tests/test_package_commands.py +129 -0
  12. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/.env.example +0 -0
  13. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/LICENSE +0 -0
  14. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/MANIFEST.in +0 -0
  15. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/common_utils.py +0 -0
  16. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/core/__init__.py +0 -0
  17. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/core/constants.py +0 -0
  18. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/core/state.py +0 -0
  19. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/create_page.py +0 -0
  20. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/gemini_api.py +0 -0
  21. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/git_diff_output_editor.py +0 -0
  22. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/install_legacy.py +0 -0
  23. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/managers/__init__.py +0 -0
  24. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/managers/ai.py +0 -0
  25. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/managers/app.py +0 -0
  26. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/managers/brew.py +0 -0
  27. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/managers/build.py +0 -0
  28. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/managers/datetime.py +0 -0
  29. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/managers/device.py +0 -0
  30. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/managers/doctor.py +0 -0
  31. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/managers/git.py +0 -0
  32. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/managers/git_account.py +0 -0
  33. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/managers/localization.py +0 -0
  34. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/managers/merge.py +0 -0
  35. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/managers/mirror.py +0 -0
  36. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/managers/project.py +0 -0
  37. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/managers/web_deploy.py +0 -0
  38. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/requirements.txt +0 -0
  39. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/setup.cfg +0 -0
  40. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/setup.py +0 -0
  41. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/switch_ai.py +0 -0
  42. {flutter_dev-0.1.4 → flutter_dev-0.1.6}/tests/test_localization.py +0 -0
@@ -2,6 +2,35 @@
2
2
 
3
3
  All notable changes to this project are documented in this file.
4
4
 
5
+ ## 0.1.6 - 2026-06-25
6
+
7
+ ### Added
8
+
9
+ - Added `fdev upgrade` to update the local `flutter-dev` package from PyPI after detecting the current OS.
10
+ - Added `fdev delete` to uninstall the local `flutter-dev` package after detecting the current OS and confirming the destructive action.
11
+
12
+ ### Changed
13
+
14
+ - `fdev upgrade` and `fdev delete` now print the exact Python executable they target before running `sys.executable -m pip`.
15
+
16
+ ### Fixed
17
+
18
+ - Reworked the Tkinter dashboard layout to avoid platform-sensitive paned-window sizing that could open a blank `fdev` popup after installing from PyPI.
19
+
20
+ ## 0.1.5 - 2026-06-24
21
+
22
+ ### Added
23
+
24
+ - Added a Tkinter desktop dashboard that opens by running `fdev` with no command.
25
+ - Added GUI live log output with ANSI terminal color rendering.
26
+ - Added GUI buttons for all documented command groups, including mirror variants, AI provider shortcuts, and GitHub account subcommands.
27
+ - Added Python coverage for GUI command catalog, ANSI color parsing, and no-command CLI dispatch.
28
+
29
+ ### Changed
30
+
31
+ - Kept command help available through `fdev help`, `fdev --help`, and `fdev -h`.
32
+ - Documented Tkinter requirements for the desktop dashboard.
33
+
5
34
  ## 0.1.4 - 2026-06-15
6
35
 
7
36
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flutter-dev
3
- Version: 0.1.4
3
+ Version: 0.1.6
4
4
  Summary: A cross-platform CLI toolkit for Flutter development workflows.
5
5
  Author: Royal Court BD
6
6
  License-Expression: MIT
@@ -22,6 +22,7 @@ Classifier: Programming Language :: Python :: 3.10
22
22
  Classifier: Programming Language :: Python :: 3.11
23
23
  Classifier: Programming Language :: Python :: 3.12
24
24
  Classifier: Programming Language :: Python :: 3.13
25
+ Classifier: Programming Language :: Python :: 3.14
25
26
  Classifier: Topic :: Software Development :: Build Tools
26
27
  Classifier: Topic :: Utilities
27
28
  Requires-Python: >=3.8
@@ -38,10 +39,10 @@ Dynamic: license-file
38
39
  The package is published on PyPI as `flutter-dev` and installs console commands for day-to-day Flutter work:
39
40
 
40
41
  ```bash
41
- pip install flutter-dev
42
+ python -m pip install flutter-dev
42
43
  ```
43
44
 
44
- Current package metadata declares version `0.1.4`, Python `>=3.8`, MIT license, and support for macOS, Linux, and Windows.
45
+ Current package metadata declares version `0.1.6`, Python `>=3.8`, MIT license, and support for macOS, Linux, and Windows.
45
46
 
46
47
  ## Key Features
47
48
 
@@ -52,8 +53,9 @@ Current package metadata declares version `0.1.4`, Python `>=3.8`, MIT license,
52
53
  - AI-assisted Git commits using Groq, Mistral, SambaNova, or OpenRouter-compatible chat completion APIs.
53
54
  - Git workflow helpers for version tags, branch sync, deployment branch merge, discard, and GitHub account management through `gh`.
54
55
  - Feature/page generator that creates a `lib/features/<name>` structure using the project's presenter/base-state pattern.
56
+ - Small Tkinter desktop dashboard opened by running `fdev` with no command, with live colored command logs.
55
57
  - Environment diagnostics through `fdev doctor`.
56
- - Small utilities for Homebrew cleanup, file merging from `paths.txt`, AI provider switching, and git diff prompt export.
58
+ - Small utilities for Homebrew cleanup, file merging from `paths.txt`, AI provider switching, PyPI self-upgrade/delete, and git diff prompt export.
57
59
 
58
60
  ## Installation
59
61
 
@@ -69,7 +71,9 @@ Verify the CLI is available:
69
71
  fdev doctor
70
72
  ```
71
73
 
72
- `pip install flutter-dev` installs the Python package, Python dependencies, and console scripts. It does not install Flutter, Dart, Git, Android SDK tools, CocoaPods, Firebase CLI, GitHub CLI, `scrcpy`, Java/JDK, or VS Code CLI.
74
+ `python -m pip install flutter-dev` installs the Python package, Python dependencies, and console scripts into the Python environment selected by `python`. It does not install Flutter, Dart, Git, Android SDK tools, CocoaPods, Firebase CLI, GitHub CLI, `scrcpy`, Java/JDK, or VS Code CLI.
75
+
76
+ The desktop dashboard uses Python Tkinter. Some Python distributions install this separately; for Homebrew Python, install the matching package such as `brew install python-tk@3.14`.
73
77
 
74
78
  ### Install From Source
75
79
 
@@ -118,12 +122,22 @@ Feature-specific external tools:
118
122
  | GitHub CLI / `gh` | `fdev git ...` |
119
123
  | VS Code CLI / `code` | Conflict helper in branch sync |
120
124
  | Homebrew | `brew`, macOS `install-scrcpy` flow |
125
+ | Python Tkinter | Desktop dashboard opened by `fdev` |
121
126
 
122
127
  ## Quick Start
123
128
 
124
129
  Run commands from the root of a Flutter project when they need `pubspec.yaml`, Android Gradle files, iOS files, or build outputs.
125
130
 
126
131
  ```bash
132
+ # Open the desktop dashboard
133
+ fdev
134
+
135
+ # Show command help
136
+ fdev help
137
+
138
+ # Upgrade the fdev CLI from PyPI
139
+ fdev upgrade
140
+
127
141
  # Check environment and optional tools
128
142
  fdev doctor
129
143
 
@@ -225,7 +239,11 @@ Switching GitHub accounts runs `gh auth switch` and `gh auth setup-git`, but it
225
239
 
226
240
  | Command | Description |
227
241
  | --- | --- |
242
+ | `fdev` | Opens a small Tkinter desktop dashboard for running `fdev` commands with live colored logs and command input. The terminal process stays running while the window is open. |
243
+ | `fdev help` | Shows command help without opening the dashboard. |
228
244
  | `fdev doctor` | Checks platform, Python, Flutter/Dart/Git, Python packages, Android/iOS tools, optional CLIs, `.env`, Flutter project detection, and global `fdev` availability. |
245
+ | `fdev upgrade` | Detects the OS, then upgrades the active Python environment's `flutter-dev` package from PyPI with `python -m pip install --upgrade flutter-dev`. |
246
+ | `fdev delete` | Detects the OS, asks for confirmation, then uninstalls the active Python environment's `flutter-dev` package. Use `fdev delete --yes` to skip confirmation. |
229
247
  | `fdev ai` | Shows the current AI provider and opens an interactive provider switch prompt. |
230
248
  | `fdev ai <provider>` | Switches `DEFAULT_AI_SERVICE` to `groq`, `mistral`, `sambanova`, or `openrouter`. |
231
249
  | `fdev brew` | Interactive Homebrew package manager for viewing packages, uninstalling with cleanup, clearing cache, and global cleanup. |
@@ -355,6 +373,7 @@ managers/mirror.py scrcpy install, mirror, wireless ADB setup
355
373
  managers/git.py commit, tag, discard, branch sync, deployment merge
356
374
  managers/git_account.py GitHub account manager around gh CLI
357
375
  managers/doctor.py Environment diagnostics
376
+ managers/package.py PyPI self-upgrade and local uninstall commands
358
377
  managers/ai.py AI provider status and switching
359
378
  managers/brew.py Interactive Homebrew manager
360
379
  managers/merge.py paths.txt to path_merge_files.txt merger
@@ -373,7 +392,10 @@ The installed Python layout is top-level modules plus the `core` and `managers`
373
392
  - `fdev cleanup` applies `dart fix`, formats the project, and runs a major-version dependency upgrade.
374
393
  - `fdev clear-data` clears app data on Android after confirmation.
375
394
  - `fdev uninstall` may fall back to foreground app detection outside a Flutter project root.
376
- - `fdev` creates build output directories at startup in the current working directory.
395
+ - `fdev upgrade` and `fdev delete` manage the local `flutter-dev` Python package, not the Flutter app on a device.
396
+ - `fdev delete` removes the `fdev` command from the current Python environment after confirmation; reinstall with `python -m pip install flutter-dev`.
397
+ - `fdev` with no command opens the desktop dashboard. Use `fdev help` to print command usage.
398
+ - Most command subcommands create build output directories at startup in the current working directory.
377
399
  - Some subcommands return failure internally without always mapping that failure to a non-zero process exit code, so automation should inspect command output carefully.
378
400
 
379
401
  ## Troubleshooting
@@ -400,6 +422,17 @@ On Windows, use:
400
422
  where fdev
401
423
  ```
402
424
 
425
+ ### Upgrade Or Remove fdev
426
+
427
+ Use the built-in package management commands from the Python environment where `fdev` is installed:
428
+
429
+ ```bash
430
+ fdev upgrade
431
+ fdev delete
432
+ ```
433
+
434
+ Both commands print the detected OS and exact Python executable before running. They use that executable with `-m pip`, not a hardcoded `python`, `python3`, `pip`, or `pip3`, so the active venv/global Python that launched `fdev` is the environment that gets upgraded or deleted. On Windows, `fdev delete` and `fdev upgrade` schedule the same `sys.executable -m pip ...` operation in a delayed command process so the currently running console launcher can exit first.
435
+
403
436
  ### Flutter Project Not Detected
404
437
 
405
438
  Run project-specific commands from the directory that contains `pubspec.yaml`.
@@ -5,10 +5,10 @@
5
5
  The package is published on PyPI as `flutter-dev` and installs console commands for day-to-day Flutter work:
6
6
 
7
7
  ```bash
8
- pip install flutter-dev
8
+ python -m pip install flutter-dev
9
9
  ```
10
10
 
11
- Current package metadata declares version `0.1.4`, Python `>=3.8`, MIT license, and support for macOS, Linux, and Windows.
11
+ Current package metadata declares version `0.1.6`, Python `>=3.8`, MIT license, and support for macOS, Linux, and Windows.
12
12
 
13
13
  ## Key Features
14
14
 
@@ -19,8 +19,9 @@ Current package metadata declares version `0.1.4`, Python `>=3.8`, MIT license,
19
19
  - AI-assisted Git commits using Groq, Mistral, SambaNova, or OpenRouter-compatible chat completion APIs.
20
20
  - Git workflow helpers for version tags, branch sync, deployment branch merge, discard, and GitHub account management through `gh`.
21
21
  - Feature/page generator that creates a `lib/features/<name>` structure using the project's presenter/base-state pattern.
22
+ - Small Tkinter desktop dashboard opened by running `fdev` with no command, with live colored command logs.
22
23
  - Environment diagnostics through `fdev doctor`.
23
- - Small utilities for Homebrew cleanup, file merging from `paths.txt`, AI provider switching, and git diff prompt export.
24
+ - Small utilities for Homebrew cleanup, file merging from `paths.txt`, AI provider switching, PyPI self-upgrade/delete, and git diff prompt export.
24
25
 
25
26
  ## Installation
26
27
 
@@ -36,7 +37,9 @@ Verify the CLI is available:
36
37
  fdev doctor
37
38
  ```
38
39
 
39
- `pip install flutter-dev` installs the Python package, Python dependencies, and console scripts. It does not install Flutter, Dart, Git, Android SDK tools, CocoaPods, Firebase CLI, GitHub CLI, `scrcpy`, Java/JDK, or VS Code CLI.
40
+ `python -m pip install flutter-dev` installs the Python package, Python dependencies, and console scripts into the Python environment selected by `python`. It does not install Flutter, Dart, Git, Android SDK tools, CocoaPods, Firebase CLI, GitHub CLI, `scrcpy`, Java/JDK, or VS Code CLI.
41
+
42
+ The desktop dashboard uses Python Tkinter. Some Python distributions install this separately; for Homebrew Python, install the matching package such as `brew install python-tk@3.14`.
40
43
 
41
44
  ### Install From Source
42
45
 
@@ -85,12 +88,22 @@ Feature-specific external tools:
85
88
  | GitHub CLI / `gh` | `fdev git ...` |
86
89
  | VS Code CLI / `code` | Conflict helper in branch sync |
87
90
  | Homebrew | `brew`, macOS `install-scrcpy` flow |
91
+ | Python Tkinter | Desktop dashboard opened by `fdev` |
88
92
 
89
93
  ## Quick Start
90
94
 
91
95
  Run commands from the root of a Flutter project when they need `pubspec.yaml`, Android Gradle files, iOS files, or build outputs.
92
96
 
93
97
  ```bash
98
+ # Open the desktop dashboard
99
+ fdev
100
+
101
+ # Show command help
102
+ fdev help
103
+
104
+ # Upgrade the fdev CLI from PyPI
105
+ fdev upgrade
106
+
94
107
  # Check environment and optional tools
95
108
  fdev doctor
96
109
 
@@ -192,7 +205,11 @@ Switching GitHub accounts runs `gh auth switch` and `gh auth setup-git`, but it
192
205
 
193
206
  | Command | Description |
194
207
  | --- | --- |
208
+ | `fdev` | Opens a small Tkinter desktop dashboard for running `fdev` commands with live colored logs and command input. The terminal process stays running while the window is open. |
209
+ | `fdev help` | Shows command help without opening the dashboard. |
195
210
  | `fdev doctor` | Checks platform, Python, Flutter/Dart/Git, Python packages, Android/iOS tools, optional CLIs, `.env`, Flutter project detection, and global `fdev` availability. |
211
+ | `fdev upgrade` | Detects the OS, then upgrades the active Python environment's `flutter-dev` package from PyPI with `python -m pip install --upgrade flutter-dev`. |
212
+ | `fdev delete` | Detects the OS, asks for confirmation, then uninstalls the active Python environment's `flutter-dev` package. Use `fdev delete --yes` to skip confirmation. |
196
213
  | `fdev ai` | Shows the current AI provider and opens an interactive provider switch prompt. |
197
214
  | `fdev ai <provider>` | Switches `DEFAULT_AI_SERVICE` to `groq`, `mistral`, `sambanova`, or `openrouter`. |
198
215
  | `fdev brew` | Interactive Homebrew package manager for viewing packages, uninstalling with cleanup, clearing cache, and global cleanup. |
@@ -322,6 +339,7 @@ managers/mirror.py scrcpy install, mirror, wireless ADB setup
322
339
  managers/git.py commit, tag, discard, branch sync, deployment merge
323
340
  managers/git_account.py GitHub account manager around gh CLI
324
341
  managers/doctor.py Environment diagnostics
342
+ managers/package.py PyPI self-upgrade and local uninstall commands
325
343
  managers/ai.py AI provider status and switching
326
344
  managers/brew.py Interactive Homebrew manager
327
345
  managers/merge.py paths.txt to path_merge_files.txt merger
@@ -340,7 +358,10 @@ The installed Python layout is top-level modules plus the `core` and `managers`
340
358
  - `fdev cleanup` applies `dart fix`, formats the project, and runs a major-version dependency upgrade.
341
359
  - `fdev clear-data` clears app data on Android after confirmation.
342
360
  - `fdev uninstall` may fall back to foreground app detection outside a Flutter project root.
343
- - `fdev` creates build output directories at startup in the current working directory.
361
+ - `fdev upgrade` and `fdev delete` manage the local `flutter-dev` Python package, not the Flutter app on a device.
362
+ - `fdev delete` removes the `fdev` command from the current Python environment after confirmation; reinstall with `python -m pip install flutter-dev`.
363
+ - `fdev` with no command opens the desktop dashboard. Use `fdev help` to print command usage.
364
+ - Most command subcommands create build output directories at startup in the current working directory.
344
365
  - Some subcommands return failure internally without always mapping that failure to a non-zero process exit code, so automation should inspect command output carefully.
345
366
 
346
367
  ## Troubleshooting
@@ -367,6 +388,17 @@ On Windows, use:
367
388
  where fdev
368
389
  ```
369
390
 
391
+ ### Upgrade Or Remove fdev
392
+
393
+ Use the built-in package management commands from the Python environment where `fdev` is installed:
394
+
395
+ ```bash
396
+ fdev upgrade
397
+ fdev delete
398
+ ```
399
+
400
+ Both commands print the detected OS and exact Python executable before running. They use that executable with `-m pip`, not a hardcoded `python`, `python3`, `pip`, or `pip3`, so the active venv/global Python that launched `fdev` is the environment that gets upgraded or deleted. On Windows, `fdev delete` and `fdev upgrade` schedule the same `sys.executable -m pip ...` operation in a delayed command process so the currently running console launcher can exit first.
401
+
370
402
  ### Flutter Project Not Detected
371
403
 
372
404
  Run project-specific commands from the directory that contains `pubspec.yaml`.
@@ -70,11 +70,19 @@ from managers.brew import (
70
70
  from managers.git_account import (
71
71
  git_account_manager,
72
72
  )
73
+ from managers.gui import (
74
+ launch_gui,
75
+ )
76
+ from managers.package import (
77
+ delete_fdev_command,
78
+ upgrade_fdev_command,
79
+ )
73
80
 
74
81
 
75
- def show_usage():
82
+ def show_usage(exit_code=1):
76
83
  """Show usage information"""
77
84
  print(f"{YELLOW}Usage: {sys.argv[0]} [command] [options]{NC}")
85
+ print(f"{BLUE}Run {GREEN}fdev{NC}{BLUE} without a command to open the desktop dashboard.{NC}")
78
86
  print(f"\n{BLUE}Build Commands:{NC}")
79
87
  print(" apk Build release APK (Full Process)")
80
88
  print(" apk-split Build APK with --split-per-abi")
@@ -114,6 +122,9 @@ def show_usage():
114
122
  print(f"\n{BLUE}Utility Commands:{NC}")
115
123
  print(" doctor Check environment health (tools, deps, config)")
116
124
  print(" brew Interactive Homebrew package manager")
125
+ print(" upgrade Upgrade fdev from PyPI")
126
+ print(" delete Uninstall fdev from this computer")
127
+ print(" help Show this help")
117
128
  print(" merge Merge files from paths.txt into single output file")
118
129
  print(" ai Show current AI service or switch to another")
119
130
  print(" Usage: fdev ai [groq|mistral|sambanova|openrouter]")
@@ -137,10 +148,13 @@ def show_usage():
137
148
  print(f" {GREEN}fdev git config{NC} # Update git user.name / user.email")
138
149
  print(f" {GREEN}fdev arb-to-csv{NC} # Export lib/l10n ARB files to translations.csv")
139
150
  print(f" {GREEN}fdev csv-to-arb{NC} # Generate lib/l10n ARB files from translations.csv")
151
+ print(f" {GREEN}fdev upgrade{NC} # Upgrade flutter-dev from PyPI")
152
+ print(f" {GREEN}fdev delete{NC} # Remove flutter-dev/fdev from this computer")
153
+ print(f" {GREEN}fdev{NC} # Open small desktop dashboard")
140
154
 
141
155
  print(f"\n{BLUE}Note:{NC}")
142
156
  print(f" {YELLOW}Multiple devices detected?{NC} Tool will prompt you to select one.")
143
- sys.exit(1)
157
+ return exit_code
144
158
 
145
159
 
146
160
  def main():
@@ -151,10 +165,13 @@ def main():
151
165
  os.makedirs("build/ios/ipa", exist_ok=True)
152
166
 
153
167
  if len(sys.argv) < 2:
154
- show_usage()
168
+ return launch_gui()
155
169
 
156
170
  command = sys.argv[1].lower()
157
171
 
172
+ if command in ("help", "--help", "-h"):
173
+ return show_usage(exit_code=0)
174
+
158
175
  # Build commands
159
176
  if command == "apk":
160
177
  build_apk()
@@ -250,6 +267,12 @@ def main():
250
267
  elif command == "brew":
251
268
  brew_manager()
252
269
 
270
+ # Package self-management commands
271
+ elif command == "upgrade":
272
+ sys.exit(upgrade_fdev_command(sys.argv[2:]))
273
+ elif command == "delete":
274
+ sys.exit(delete_fdev_command(sys.argv[2:]))
275
+
253
276
  # AI command
254
277
  elif command == "ai":
255
278
  if len(sys.argv) < 3:
@@ -262,7 +285,7 @@ def main():
262
285
  git_account_manager(sys.argv[2:])
263
286
 
264
287
  else:
265
- show_usage()
288
+ sys.exit(show_usage())
266
289
 
267
290
 
268
291
  if __name__ == "__main__":
@@ -272,4 +295,4 @@ if __name__ == "__main__":
272
295
  sys.exit(0)
273
296
 
274
297
  signal.signal(signal.SIGINT, signal_handler)
275
- main()
298
+ sys.exit(main())
@@ -26,9 +26,14 @@ managers/device.py
26
26
  managers/doctor.py
27
27
  managers/git.py
28
28
  managers/git_account.py
29
+ managers/gui.py
29
30
  managers/localization.py
30
31
  managers/merge.py
31
32
  managers/mirror.py
33
+ managers/package.py
32
34
  managers/project.py
33
35
  managers/web_deploy.py
34
- tests/test_localization.py
36
+ tests/test_fdev_cli.py
37
+ tests/test_gui.py
38
+ tests/test_localization.py
39
+ tests/test_package_commands.py