flutter-dev 0.1.7__tar.gz → 0.1.8__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.
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/CHANGELOG.md +6 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/PKG-INFO +5 -3
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/README.md +4 -2
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/gui.py +36 -10
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/pyproject.toml +1 -1
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/tests/test_gui.py +22 -1
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/.env.example +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/LICENSE +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/MANIFEST.in +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/common_utils.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/core/__init__.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/core/constants.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/core/state.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/create_page.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/fdev.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/flutter_dev.egg-info/SOURCES.txt +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/gemini_api.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/git_diff_output_editor.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/install_legacy.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/__init__.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/ai.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/app.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/brew.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/build.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/datetime.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/device.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/doctor.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/git.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/git_account.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/localization.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/merge.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/mirror.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/package.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/project.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/managers/web_deploy.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/requirements.txt +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/setup.cfg +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/setup.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/switch_ai.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/tests/test_fdev_cli.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/tests/test_localization.py +0 -0
- {flutter_dev-0.1.7 → flutter_dev-0.1.8}/tests/test_package_commands.py +0 -0
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project are documented in this file.
|
|
4
4
|
|
|
5
|
+
## 0.1.8 - 2026-06-25
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Made the dashboard command output panel visibly framed with a ready message so the terminal/log area does not appear missing before commands produce output.
|
|
10
|
+
|
|
5
11
|
## 0.1.7 - 2026-06-25
|
|
6
12
|
|
|
7
13
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flutter-dev
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.8
|
|
4
4
|
Summary: A cross-platform CLI toolkit for Flutter development workflows.
|
|
5
5
|
Author: Royal Court BD
|
|
6
6
|
License-Expression: MIT
|
|
@@ -42,7 +42,7 @@ The package is published on PyPI as `flutter-dev` and installs console commands
|
|
|
42
42
|
python -m pip install flutter-dev
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
Current package metadata declares version `0.1.
|
|
45
|
+
Current package metadata declares version `0.1.8`, Python `>=3.8`, MIT license, and support for macOS, Linux, and Windows.
|
|
46
46
|
|
|
47
47
|
## Key Features
|
|
48
48
|
|
|
@@ -53,7 +53,7 @@ Current package metadata declares version `0.1.7`, Python `>=3.8`, MIT license,
|
|
|
53
53
|
- AI-assisted Git commits using Groq, Mistral, SambaNova, or OpenRouter-compatible chat completion APIs.
|
|
54
54
|
- Git workflow helpers for version tags, branch sync, deployment branch merge, discard, and GitHub account management through `gh`.
|
|
55
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
|
|
56
|
+
- Small Tkinter desktop dashboard opened by running `fdev` with no command, with a framed live command output panel.
|
|
57
57
|
- Environment diagnostics through `fdev doctor`.
|
|
58
58
|
- Small utilities for Homebrew cleanup, file merging from `paths.txt`, AI provider switching, PyPI self-upgrade/delete, and git diff prompt export.
|
|
59
59
|
|
|
@@ -443,6 +443,8 @@ fdev upgrade
|
|
|
443
443
|
|
|
444
444
|
`fdev` prints the Python executable it is using. If that path is `/Applications/Xcode.app/Contents/Developer/usr/bin/python3`, the CLI is running on Xcode's bundled Python and system Tk; 0.1.7 uses a more conservative Tk UI path for that runtime.
|
|
445
445
|
|
|
446
|
+
If the dashboard opens but the command output area looks missing or empty, upgrade to `flutter-dev` 0.1.8 or newer.
|
|
447
|
+
|
|
446
448
|
### Flutter Project Not Detected
|
|
447
449
|
|
|
448
450
|
Run project-specific commands from the directory that contains `pubspec.yaml`.
|
|
@@ -8,7 +8,7 @@ The package is published on PyPI as `flutter-dev` and installs console commands
|
|
|
8
8
|
python -m pip install flutter-dev
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
Current package metadata declares version `0.1.
|
|
11
|
+
Current package metadata declares version `0.1.8`, Python `>=3.8`, MIT license, and support for macOS, Linux, and Windows.
|
|
12
12
|
|
|
13
13
|
## Key Features
|
|
14
14
|
|
|
@@ -19,7 +19,7 @@ Current package metadata declares version `0.1.7`, 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
|
|
22
|
+
- Small Tkinter desktop dashboard opened by running `fdev` with no command, with a framed live command output panel.
|
|
23
23
|
- Environment diagnostics through `fdev doctor`.
|
|
24
24
|
- Small utilities for Homebrew cleanup, file merging from `paths.txt`, AI provider switching, PyPI self-upgrade/delete, and git diff prompt export.
|
|
25
25
|
|
|
@@ -409,6 +409,8 @@ fdev upgrade
|
|
|
409
409
|
|
|
410
410
|
`fdev` prints the Python executable it is using. If that path is `/Applications/Xcode.app/Contents/Developer/usr/bin/python3`, the CLI is running on Xcode's bundled Python and system Tk; 0.1.7 uses a more conservative Tk UI path for that runtime.
|
|
411
411
|
|
|
412
|
+
If the dashboard opens but the command output area looks missing or empty, upgrade to `flutter-dev` 0.1.8 or newer.
|
|
413
|
+
|
|
412
414
|
### Flutter Project Not Detected
|
|
413
415
|
|
|
414
416
|
Run project-specific commands from the directory that contains `pubspec.yaml`.
|
|
@@ -47,6 +47,8 @@ BUTTON_BG = "#e2e8f0"
|
|
|
47
47
|
BUTTON_ACTIVE_BG = "#cbd5e1"
|
|
48
48
|
LOG_BG = "#111827"
|
|
49
49
|
LOG_FG = "#e5e7eb"
|
|
50
|
+
LOG_BORDER = "#475569"
|
|
51
|
+
LOG_READY_MESSAGE = "[fdev] Ready. Command output will appear here.\n"
|
|
50
52
|
|
|
51
53
|
|
|
52
54
|
def prepare_tk_environment():
|
|
@@ -385,28 +387,51 @@ class FdevGui:
|
|
|
385
387
|
self.command_frame.columnconfigure(0, weight=1)
|
|
386
388
|
self.command_frame.columnconfigure(1, weight=1)
|
|
387
389
|
|
|
388
|
-
log_frame = tk.Frame(
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
390
|
+
self.log_frame = tk.Frame(
|
|
391
|
+
body,
|
|
392
|
+
bg=LOG_BG,
|
|
393
|
+
bd=1,
|
|
394
|
+
relief="solid",
|
|
395
|
+
highlightbackground=LOG_BORDER,
|
|
396
|
+
highlightcolor=LOG_BORDER,
|
|
397
|
+
highlightthickness=1,
|
|
398
|
+
)
|
|
399
|
+
self.log_frame.grid(row=1, column=0, sticky="nsew", pady=(6, 0))
|
|
400
|
+
self.log_frame.columnconfigure(0, weight=1)
|
|
401
|
+
self.log_frame.rowconfigure(1, weight=1)
|
|
402
|
+
|
|
403
|
+
self.log_header = tk.Label(
|
|
404
|
+
self.log_frame,
|
|
405
|
+
text="Command Output",
|
|
406
|
+
bg=LOG_BG,
|
|
407
|
+
fg=LOG_FG,
|
|
408
|
+
anchor="w",
|
|
409
|
+
padx=8,
|
|
410
|
+
pady=4,
|
|
411
|
+
)
|
|
412
|
+
self.log_header.grid(row=0, column=0, columnspan=2, sticky="ew")
|
|
392
413
|
|
|
393
414
|
self.log_text = tk.Text(
|
|
394
|
-
log_frame,
|
|
415
|
+
self.log_frame,
|
|
395
416
|
height=12,
|
|
396
417
|
wrap="word",
|
|
397
418
|
state="disabled",
|
|
398
419
|
bg=LOG_BG,
|
|
399
420
|
fg=LOG_FG,
|
|
400
421
|
insertbackground=LOG_FG,
|
|
401
|
-
relief="
|
|
402
|
-
bd=
|
|
422
|
+
relief="flat",
|
|
423
|
+
bd=0,
|
|
424
|
+
padx=8,
|
|
425
|
+
pady=6,
|
|
426
|
+
highlightthickness=0,
|
|
403
427
|
)
|
|
404
|
-
self.log_text.grid(row=
|
|
428
|
+
self.log_text.grid(row=1, column=0, sticky="nsew")
|
|
405
429
|
|
|
406
|
-
scrollbar = tk.Scrollbar(log_frame, orient="vertical", command=self.log_text.yview)
|
|
407
|
-
scrollbar.grid(row=
|
|
430
|
+
scrollbar = tk.Scrollbar(self.log_frame, orient="vertical", command=self.log_text.yview)
|
|
431
|
+
scrollbar.grid(row=1, column=1, sticky="ns")
|
|
408
432
|
self.log_text.configure(yscrollcommand=scrollbar.set)
|
|
409
433
|
self._configure_log_tags()
|
|
434
|
+
self._append_log(LOG_READY_MESSAGE)
|
|
410
435
|
|
|
411
436
|
input_bar = tk.Frame(content, bg=UI_BG)
|
|
412
437
|
input_bar.grid(row=2, column=0, sticky="ew", pady=(8, 0))
|
|
@@ -569,6 +594,7 @@ class FdevGui:
|
|
|
569
594
|
self.log_text.configure(state="normal")
|
|
570
595
|
self.log_text.delete("1.0", "end")
|
|
571
596
|
self.log_text.configure(state="disabled")
|
|
597
|
+
self._append_log(LOG_READY_MESSAGE)
|
|
572
598
|
|
|
573
599
|
def _send_input(self):
|
|
574
600
|
text = self.input_entry.get()
|
|
@@ -195,7 +195,7 @@ class GuiCatalogTests(unittest.TestCase):
|
|
|
195
195
|
|
|
196
196
|
try:
|
|
197
197
|
app = FdevGui(root)
|
|
198
|
-
root.after(
|
|
198
|
+
root.after(100, root.quit)
|
|
199
199
|
app.run()
|
|
200
200
|
|
|
201
201
|
self.assertTrue(app.command_frame.winfo_ismapped())
|
|
@@ -205,6 +205,27 @@ class GuiCatalogTests(unittest.TestCase):
|
|
|
205
205
|
finally:
|
|
206
206
|
root.destroy()
|
|
207
207
|
|
|
208
|
+
def test_dashboard_keeps_terminal_panel_visible_on_launch(self):
|
|
209
|
+
try:
|
|
210
|
+
import tkinter as tk
|
|
211
|
+
except ImportError:
|
|
212
|
+
self.skipTest("Tkinter is not available")
|
|
213
|
+
|
|
214
|
+
try:
|
|
215
|
+
root = tk.Tk()
|
|
216
|
+
except TclError as error:
|
|
217
|
+
self.skipTest(f"Tk display is not available: {error}")
|
|
218
|
+
|
|
219
|
+
try:
|
|
220
|
+
app = FdevGui(root)
|
|
221
|
+
root.update()
|
|
222
|
+
|
|
223
|
+
self.assertTrue(app.log_frame.winfo_ismapped())
|
|
224
|
+
self.assertEqual(app.log_frame.cget("relief"), "solid")
|
|
225
|
+
self.assertIn("[fdev] Ready", app.log_text.get("1.0", "end"))
|
|
226
|
+
finally:
|
|
227
|
+
root.destroy()
|
|
228
|
+
|
|
208
229
|
def test_dashboard_uses_classic_tk_widgets_for_system_tk_compatibility(self):
|
|
209
230
|
try:
|
|
210
231
|
import tkinter as tk
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|