myra-linux 0.1.0__tar.gz → 0.1.2__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.
- {myra_linux-0.1.0 → myra_linux-0.1.2}/PKG-INFO +2 -2
- {myra_linux-0.1.0 → myra_linux-0.1.2}/README.md +1 -1
- {myra_linux-0.1.0 → myra_linux-0.1.2}/linux_extra.py +62 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra/__init__.py +1 -1
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_linux.egg-info/PKG-INFO +2 -2
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_linux_boot.py +34 -8
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_slot.py +7 -1
- {myra_linux-0.1.0 → myra_linux-0.1.2}/pyproject.toml +1 -1
- {myra_linux-0.1.0 → myra_linux-0.1.2}/Aria_office_manage.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/LICENSE +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/MANIFEST.in +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/Main_normal.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/__init__.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/aria_activation.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/aria_advanced_features.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/aria_advanced_tools.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/about/cofounder.png +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/about/developer.png +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/fonts/OFL-Poppins.txt +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/fonts/Poppins-Bold.ttf +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/fonts/Poppins-ExtraBold.ttf +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/fonts/Poppins-Medium.ttf +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/fonts/Poppins-Regular.ttf +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/fonts/Poppins-SemiBold.ttf +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/myra_girl.png +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/myra_logo.png +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/splash_bg.jpg +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/ui_reference.png +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/cloud_database.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/game_install.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/gemini_rest.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/haarcascade_frontalface_default.xml +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/license_client.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/minibar_aria.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/tools.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_ui.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/camera_vision_module.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra/__main__.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra/cli.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra/config.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_actions.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_apps.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_autostart.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_coder_integration.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_edge_glow.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_float_orb.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_guardian.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_lang.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_linux.egg-info/SOURCES.txt +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_linux.egg-info/dependency_links.txt +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_linux.egg-info/entry_points.txt +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_linux.egg-info/requires.txt +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_linux.egg-info/top_level.txt +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_linux_tools.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_pages.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_prefs.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_quick_features.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_splash.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_spotify.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_studio.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_ui.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/normal_prompt.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/prompt.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/screen_share_module.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/setup.cfg +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/__init__.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/agents/__init__.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/agents/content_agent.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/agents/generator_agent.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/agents/planner_agent.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/config.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/database/__init__.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/database/projects_db.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/deploy/__init__.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/deploy/github_service.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/deploy/qr_display.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/deploy/vercel_service.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/main.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/preview/__init__.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/preview/preview_server.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/project/__init__.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/project/project_manager.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/webforge_integration.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/webforge_manager.py +0 -0
- {myra_linux-0.1.0 → myra_linux-0.1.2}/whatsapp_file_sender.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: myra-linux
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: MYRA AI Assistant for Linux — same desktop UI, Gemini Live voice, 148+ languages and Linux system control.
|
|
5
5
|
Author-email: Vikash Kumar <support@codeninjavik.in>
|
|
6
6
|
Project-URL: Homepage, https://github.com/CodeNinjaVik/myra-ai-assistant
|
|
@@ -62,7 +62,7 @@ camera vision, screen sharing, floating orb, system monitor, website studio and
|
|
|
62
62
|
|
|
63
63
|
```
|
|
64
64
|
sudo apt install -y pipx libportaudio2 libxcb-cursor0 libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 \
|
|
65
|
-
libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libgl1 libpulse0 xclip libnotify-bin playerctl brightnessctl wmctrl xdotool network-manager
|
|
65
|
+
libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libgl1 libpulse0 libasound2-plugins pulseaudio-utils xclip libnotify-bin playerctl brightnessctl wmctrl xdotool network-manager
|
|
66
66
|
pipx ensurepath
|
|
67
67
|
pipx install myra-linux
|
|
68
68
|
myra-linux
|
|
@@ -7,7 +7,7 @@ camera vision, screen sharing, floating orb, system monitor, website studio and
|
|
|
7
7
|
|
|
8
8
|
```
|
|
9
9
|
sudo apt install -y pipx libportaudio2 libxcb-cursor0 libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 \
|
|
10
|
-
libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libgl1 libpulse0 xclip libnotify-bin playerctl brightnessctl wmctrl xdotool network-manager
|
|
10
|
+
libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libgl1 libpulse0 libasound2-plugins pulseaudio-utils xclip libnotify-bin playerctl brightnessctl wmctrl xdotool network-manager
|
|
11
11
|
pipx ensurepath
|
|
12
12
|
pipx install myra-linux
|
|
13
13
|
myra-linux
|
|
@@ -238,3 +238,65 @@ def patch_autostart(au):
|
|
|
238
238
|
au.launch_command = _exec_cmd
|
|
239
239
|
au.spawn_background = autostart_spawn
|
|
240
240
|
return au
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
# ── myra_apps / myra_actions ke Windows-launcher ki jagah Linux ────────────
|
|
244
|
+
def patch_apps(apps_mod, actions_mod=None):
|
|
245
|
+
import threading
|
|
246
|
+
import myra_linux_tools as L
|
|
247
|
+
|
|
248
|
+
def ensure_index(force=False):
|
|
249
|
+
return [{"name": n, "n": L._norm(n), **a} for n, a in L.apps(bool(force)).items()]
|
|
250
|
+
|
|
251
|
+
def warm():
|
|
252
|
+
threading.Thread(target=L.apps, daemon=True).start()
|
|
253
|
+
|
|
254
|
+
def list_apps(filter_text=""):
|
|
255
|
+
f = L._norm(filter_text)
|
|
256
|
+
return sorted((n for n in L.apps() if not f or f in L._norm(n)), key=str.lower)
|
|
257
|
+
|
|
258
|
+
def open_app(query, verify_secs=10.0):
|
|
259
|
+
res = {"found": False, "ok": False, "status": "notfound", "name": "", "message": "", "alternatives": []}
|
|
260
|
+
try:
|
|
261
|
+
hits = L.find_apps(query)
|
|
262
|
+
if not hits:
|
|
263
|
+
hits = (L.apps(True) and L.find_apps(query))
|
|
264
|
+
if hits:
|
|
265
|
+
name = hits[0][1]
|
|
266
|
+
res.update(found=True, name=name, alternatives=[h[1] for h in hits[1:]])
|
|
267
|
+
if L._launch_desktop(L.apps()[name]):
|
|
268
|
+
res.update(ok=True, status="launched", message=f"✅ {name} khul gaya")
|
|
269
|
+
else:
|
|
270
|
+
res.update(status="failed", message=f"⚠️ {name} khul nahi paya")
|
|
271
|
+
return res
|
|
272
|
+
exe = shutil.which(re.sub(r"\s+", "-", (query or "").lower())) or shutil.which((query or "").lower().replace(" ", ""))
|
|
273
|
+
if exe:
|
|
274
|
+
subprocess.Popen([exe], stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL,
|
|
275
|
+
start_new_session=True)
|
|
276
|
+
res.update(found=True, ok=True, status="launched", name=os.path.basename(exe), message=f"✅ {os.path.basename(exe)} khul gaya")
|
|
277
|
+
except Exception as e:
|
|
278
|
+
res.update(status="error", message=f"❌ {e}")
|
|
279
|
+
return res
|
|
280
|
+
|
|
281
|
+
def write_text(query, text, wait=15.0, animate=True):
|
|
282
|
+
r = open_app(query)
|
|
283
|
+
if not r["ok"]:
|
|
284
|
+
return r
|
|
285
|
+
time.sleep(2.5)
|
|
286
|
+
if shutil.which("xdotool") and _sh(["xdotool", "type", "--delay", "35", "--", text], timeout=120)[0]:
|
|
287
|
+
r["message"] += " aur text likh diya ✍️"
|
|
288
|
+
else:
|
|
289
|
+
if shutil.which("xclip"):
|
|
290
|
+
_sh(["xclip", "-selection", "clipboard"], stdin=text)
|
|
291
|
+
r["message"] += " (text clipboard mein hai — Ctrl+V karo; direct typing ke liye `sudo apt install xdotool`)"
|
|
292
|
+
return r
|
|
293
|
+
|
|
294
|
+
apps_mod.ensure_index, apps_mod.warm, apps_mod.list_apps = ensure_index, warm, list_apps
|
|
295
|
+
apps_mod.open_app, apps_mod.write_text = open_app, write_text
|
|
296
|
+
apps_mod.find_apps = lambda q, limit=5, min_score=0: [(s, {"name": n}) for s, n in L.find_apps(q, limit)]
|
|
297
|
+
if actions_mod is not None:
|
|
298
|
+
def a_open(name):
|
|
299
|
+
r = open_app(name)
|
|
300
|
+
return (bool(r["ok"]), r["message"].replace("✅ ", "").replace("⚠️ ", "") or f"'{name}' nahi mila")
|
|
301
|
+
actions_mod.open_app = a_open
|
|
302
|
+
return apps_mod
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: myra-linux
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: MYRA AI Assistant for Linux — same desktop UI, Gemini Live voice, 148+ languages and Linux system control.
|
|
5
5
|
Author-email: Vikash Kumar <support@codeninjavik.in>
|
|
6
6
|
Project-URL: Homepage, https://github.com/CodeNinjaVik/myra-ai-assistant
|
|
@@ -62,7 +62,7 @@ camera vision, screen sharing, floating orb, system monitor, website studio and
|
|
|
62
62
|
|
|
63
63
|
```
|
|
64
64
|
sudo apt install -y pipx libportaudio2 libxcb-cursor0 libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 \
|
|
65
|
-
libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libgl1 libpulse0 xclip libnotify-bin playerctl brightnessctl wmctrl xdotool network-manager
|
|
65
|
+
libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libgl1 libpulse0 libasound2-plugins pulseaudio-utils xclip libnotify-bin playerctl brightnessctl wmctrl xdotool network-manager
|
|
66
66
|
pipx ensurepath
|
|
67
67
|
pipx install myra-linux
|
|
68
68
|
myra-linux
|
|
@@ -13,7 +13,7 @@ import types
|
|
|
13
13
|
from pathlib import Path
|
|
14
14
|
|
|
15
15
|
LINUX_HELP = ("sudo apt install -y libportaudio2 libxcb-cursor0 libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 "
|
|
16
|
-
"libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libgl1 libpulse0 xclip libnotify-bin playerctl brightnessctl wmctrl xdotool network-manager")
|
|
16
|
+
"libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libgl1 libpulse0 libasound2-plugins pulseaudio-utils xclip libnotify-bin playerctl brightnessctl wmctrl xdotool network-manager")
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class _WinStub:
|
|
@@ -48,7 +48,30 @@ def _shim_windows():
|
|
|
48
48
|
sys.modules["winreg"] = m
|
|
49
49
|
|
|
50
50
|
|
|
51
|
+
def _fix_audio():
|
|
52
|
+
"""PortAudio (ALSA) ko PulseAudio/PipeWire se jodo — warna mic/speaker 'No mic found' aata hai (WSL/Ubuntu)."""
|
|
53
|
+
import glob
|
|
54
|
+
if not sys.platform.startswith("linux"):
|
|
55
|
+
return
|
|
56
|
+
rc = Path.home() / ".asoundrc"
|
|
57
|
+
if rc.exists() or os.path.exists("/etc/asound.conf"):
|
|
58
|
+
return
|
|
59
|
+
pulse = os.environ.get("PULSE_SERVER") or glob.glob("/run/user/*/pulse/native") or os.path.exists("/mnt/wslg/PulseServer")
|
|
60
|
+
if not pulse:
|
|
61
|
+
return
|
|
62
|
+
if not glob.glob("/usr/lib/*/alsa-lib/libasound_module_pcm_pulse.so") and not glob.glob("/usr/lib/alsa-lib/libasound_module_pcm_pulse.so"):
|
|
63
|
+
print("[MYRA] ⚠️ Mic/speaker ke liye ek package chahiye: sudo apt install libasound2-plugins pulseaudio-utils\n"
|
|
64
|
+
" (ya `myra-linux deps` chalao), phir MYRA dobara chalao.", file=sys.stderr)
|
|
65
|
+
return
|
|
66
|
+
try:
|
|
67
|
+
rc.write_text("pcm.!default { type pulse }\nctl.!default { type pulse }\n", encoding="utf-8")
|
|
68
|
+
print("[MYRA] 🔊 Audio ko PulseAudio se joda (~/.asoundrc).", file=sys.stderr)
|
|
69
|
+
except Exception:
|
|
70
|
+
pass
|
|
71
|
+
|
|
72
|
+
|
|
51
73
|
def _shim_audio():
|
|
74
|
+
_fix_audio()
|
|
52
75
|
try:
|
|
53
76
|
import sounddevice # noqa: F401
|
|
54
77
|
return True
|
|
@@ -109,16 +132,17 @@ def _installer():
|
|
|
109
132
|
def _status():
|
|
110
133
|
from importlib.metadata import version
|
|
111
134
|
import myra_autostart as au
|
|
112
|
-
ok_audio = True
|
|
113
|
-
try:
|
|
114
|
-
import sounddevice
|
|
115
|
-
sounddevice.query_devices()
|
|
116
|
-
except Exception:
|
|
117
|
-
ok_audio = False
|
|
118
135
|
print(f"MYRA Linux {version('myra-linux')}")
|
|
119
136
|
print(f"Autostart : {'ON' if au.is_enabled() else 'OFF'}" + (f" ({au.registered_command()})" if au.is_enabled() else ""))
|
|
120
137
|
print(f"Display : {os.environ.get('WAYLAND_DISPLAY') or os.environ.get('DISPLAY') or 'NAHI MILA'}")
|
|
121
|
-
|
|
138
|
+
_fix_audio()
|
|
139
|
+
ndev = 0
|
|
140
|
+
try:
|
|
141
|
+
import sounddevice as _sd
|
|
142
|
+
ndev = len(_sd.query_devices())
|
|
143
|
+
except Exception:
|
|
144
|
+
pass
|
|
145
|
+
print(f"Audio : {'OK (%d devices)' % ndev if ndev else 'koi audio device nahi -> myra-linux deps (libasound2-plugins)'}")
|
|
122
146
|
return 0
|
|
123
147
|
|
|
124
148
|
|
|
@@ -198,6 +222,8 @@ def main():
|
|
|
198
222
|
import linux_extra
|
|
199
223
|
myra_linux_tools.install(tools)
|
|
200
224
|
linux_extra.patch_autostart(myra_autostart)
|
|
225
|
+
import myra_apps, myra_actions
|
|
226
|
+
linux_extra.patch_apps(myra_apps, myra_actions)
|
|
201
227
|
from Main_normal import main as run_app
|
|
202
228
|
run_app()
|
|
203
229
|
return 0
|
|
@@ -15,12 +15,18 @@ try:
|
|
|
15
15
|
except Exception: # pragma: no cover
|
|
16
16
|
pyqtBoundSignal = ()
|
|
17
17
|
|
|
18
|
-
_ARGERR = re.compile(r"positional argument|takes (exactly|at most|no) |were given|was given|\d+ given")
|
|
18
|
+
_ARGERR = re.compile(r"positional argument|takes (exactly|at most|no) |were given|was given|\d+ given|too many arguments|too few arguments|expected \d+ argument|takes no arguments")
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
def slot(fn):
|
|
22
22
|
if isinstance(fn, pyqtBoundSignal) or not callable(fn):
|
|
23
23
|
return fn # signal -> signal connect, ya already sahi cheez
|
|
24
|
+
try:
|
|
25
|
+
from PyQt5 import sip
|
|
26
|
+
if isinstance(getattr(fn, "__self__", None), sip.simplewrapper) and type(fn).__name__ == "builtin_function_or_method":
|
|
27
|
+
return fn # Qt ka apna method (accept/reject/close...) — PyQt khud sambhalta hai
|
|
28
|
+
except Exception:
|
|
29
|
+
pass
|
|
24
30
|
|
|
25
31
|
name = getattr(fn, "__name__", "")
|
|
26
32
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "myra-linux"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.2"
|
|
8
8
|
description = "MYRA AI Assistant for Linux — same desktop UI, Gemini Live voice, 148+ languages and Linux system control."
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.10"
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|