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.
Files changed (86) hide show
  1. {myra_linux-0.1.0 → myra_linux-0.1.2}/PKG-INFO +2 -2
  2. {myra_linux-0.1.0 → myra_linux-0.1.2}/README.md +1 -1
  3. {myra_linux-0.1.0 → myra_linux-0.1.2}/linux_extra.py +62 -0
  4. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra/__init__.py +1 -1
  5. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_linux.egg-info/PKG-INFO +2 -2
  6. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_linux_boot.py +34 -8
  7. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_slot.py +7 -1
  8. {myra_linux-0.1.0 → myra_linux-0.1.2}/pyproject.toml +1 -1
  9. {myra_linux-0.1.0 → myra_linux-0.1.2}/Aria_office_manage.py +0 -0
  10. {myra_linux-0.1.0 → myra_linux-0.1.2}/LICENSE +0 -0
  11. {myra_linux-0.1.0 → myra_linux-0.1.2}/MANIFEST.in +0 -0
  12. {myra_linux-0.1.0 → myra_linux-0.1.2}/Main_normal.py +0 -0
  13. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria.py +0 -0
  14. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/__init__.py +0 -0
  15. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/aria_activation.py +0 -0
  16. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/aria_advanced_features.py +0 -0
  17. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/aria_advanced_tools.py +0 -0
  18. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/about/cofounder.png +0 -0
  19. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/about/developer.png +0 -0
  20. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/fonts/OFL-Poppins.txt +0 -0
  21. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/fonts/Poppins-Bold.ttf +0 -0
  22. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/fonts/Poppins-ExtraBold.ttf +0 -0
  23. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/fonts/Poppins-Medium.ttf +0 -0
  24. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/fonts/Poppins-Regular.ttf +0 -0
  25. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/fonts/Poppins-SemiBold.ttf +0 -0
  26. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/myra_girl.png +0 -0
  27. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/myra_logo.png +0 -0
  28. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/splash_bg.jpg +0 -0
  29. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/assets/ui_reference.png +0 -0
  30. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/cloud_database.py +0 -0
  31. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/game_install.py +0 -0
  32. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/gemini_rest.py +0 -0
  33. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/haarcascade_frontalface_default.xml +0 -0
  34. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/license_client.py +0 -0
  35. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/minibar_aria.py +0 -0
  36. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_modules/tools.py +0 -0
  37. {myra_linux-0.1.0 → myra_linux-0.1.2}/aria_ui.py +0 -0
  38. {myra_linux-0.1.0 → myra_linux-0.1.2}/camera_vision_module.py +0 -0
  39. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra/__main__.py +0 -0
  40. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra/cli.py +0 -0
  41. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra/config.py +0 -0
  42. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_actions.py +0 -0
  43. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_apps.py +0 -0
  44. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_autostart.py +0 -0
  45. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_coder_integration.py +0 -0
  46. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_edge_glow.py +0 -0
  47. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_float_orb.py +0 -0
  48. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_guardian.py +0 -0
  49. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_lang.py +0 -0
  50. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_linux.egg-info/SOURCES.txt +0 -0
  51. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_linux.egg-info/dependency_links.txt +0 -0
  52. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_linux.egg-info/entry_points.txt +0 -0
  53. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_linux.egg-info/requires.txt +0 -0
  54. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_linux.egg-info/top_level.txt +0 -0
  55. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_linux_tools.py +0 -0
  56. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_pages.py +0 -0
  57. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_prefs.py +0 -0
  58. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_quick_features.py +0 -0
  59. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_splash.py +0 -0
  60. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_spotify.py +0 -0
  61. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_studio.py +0 -0
  62. {myra_linux-0.1.0 → myra_linux-0.1.2}/myra_ui.py +0 -0
  63. {myra_linux-0.1.0 → myra_linux-0.1.2}/normal_prompt.py +0 -0
  64. {myra_linux-0.1.0 → myra_linux-0.1.2}/prompt.py +0 -0
  65. {myra_linux-0.1.0 → myra_linux-0.1.2}/screen_share_module.py +0 -0
  66. {myra_linux-0.1.0 → myra_linux-0.1.2}/setup.cfg +0 -0
  67. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/__init__.py +0 -0
  68. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/agents/__init__.py +0 -0
  69. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/agents/content_agent.py +0 -0
  70. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/agents/generator_agent.py +0 -0
  71. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/agents/planner_agent.py +0 -0
  72. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/config.py +0 -0
  73. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/database/__init__.py +0 -0
  74. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/database/projects_db.py +0 -0
  75. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/deploy/__init__.py +0 -0
  76. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/deploy/github_service.py +0 -0
  77. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/deploy/qr_display.py +0 -0
  78. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/deploy/vercel_service.py +0 -0
  79. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/main.py +0 -0
  80. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/preview/__init__.py +0 -0
  81. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/preview/preview_server.py +0 -0
  82. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/project/__init__.py +0 -0
  83. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/project/project_manager.py +0 -0
  84. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/webforge_integration.py +0 -0
  85. {myra_linux-0.1.0 → myra_linux-0.1.2}/website_builder/webforge_manager.py +0 -0
  86. {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.0
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
@@ -6,5 +6,5 @@ _here = Path(__file__).resolve().parent
6
6
  _root = _here.parent
7
7
  for _p in [str(_root), str(_here)]:
8
8
  if _p not in sys.path: sys.path.insert(0, _p)
9
- __version__ = "0.3.1"
9
+ __version__ = "0.3.2"
10
10
  __author__ = "Vikash Kumar"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: myra-linux
3
- Version: 0.1.0
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
- print(f"Audio : {'OK' if ok_audio else 'PortAudio nahi mila -> myra-linux deps'}")
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.0"
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