friday-neural-os 0.1.0__tar.gz → 0.1.1__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 (29) hide show
  1. {friday_neural_os-0.1.0 → friday_neural_os-0.1.1}/PKG-INFO +24 -1
  2. friday_neural_os-0.1.1/friday/__init__.py +3 -0
  3. friday_neural_os-0.1.1/friday/agent.py +348 -0
  4. friday_neural_os-0.1.1/friday/cli.py +13 -0
  5. friday_neural_os-0.1.1/friday/config.py +23 -0
  6. friday_neural_os-0.1.1/friday/installer.py +30 -0
  7. friday_neural_os-0.1.1/friday/prompts.py +315 -0
  8. {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/productivity.py +35 -0
  9. {friday_neural_os-0.1.0 → friday_neural_os-0.1.1}/friday_neural_os.egg-info/PKG-INFO +24 -1
  10. friday_neural_os-0.1.1/friday_neural_os.egg-info/SOURCES.txt +24 -0
  11. {friday_neural_os-0.1.0 → friday_neural_os-0.1.1}/friday_neural_os.egg-info/entry_points.txt +1 -0
  12. friday_neural_os-0.1.1/friday_neural_os.egg-info/requires.txt +26 -0
  13. friday_neural_os-0.1.1/friday_neural_os.egg-info/top_level.txt +1 -0
  14. {friday_neural_os-0.1.0 → friday_neural_os-0.1.1}/setup.cfg +1 -1
  15. friday_neural_os-0.1.1/setup.py +61 -0
  16. friday_neural_os-0.1.0/friday_neural_os.egg-info/SOURCES.txt +0 -18
  17. friday_neural_os-0.1.0/friday_neural_os.egg-info/requires.txt +0 -1
  18. friday_neural_os-0.1.0/friday_neural_os.egg-info/top_level.txt +0 -1
  19. friday_neural_os-0.1.0/setup.py +0 -26
  20. {friday_neural_os-0.1.0 → friday_neural_os-0.1.1}/README.md +0 -0
  21. {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/__init__.py +0 -0
  22. {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/communication.py +0 -0
  23. {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/core.py +0 -0
  24. {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/files.py +0 -0
  25. {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/media.py +0 -0
  26. {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/network.py +0 -0
  27. {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/security.py +0 -0
  28. {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/ui.py +0 -0
  29. {friday_neural_os-0.1.0 → friday_neural_os-0.1.1}/friday_neural_os.egg-info/dependency_links.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: friday_neural_os
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: A real-time AI assistant with tools, memory, and voice
5
5
  Author: Shivansh Pancholi
6
6
  Author-email: shivamogh.123@gmail.com
@@ -10,6 +10,29 @@ Classifier: Operating System :: Microsoft :: Windows
10
10
  Requires-Python: >=3.9
11
11
  Description-Content-Type: text/markdown
12
12
  Requires-Dist: python-dotenv
13
+ Requires-Dist: requests
14
+ Requires-Dist: psutil
15
+ Requires-Dist: pillow
16
+ Requires-Dist: opencv-python
17
+ Requires-Dist: livekit-agents
18
+ Requires-Dist: livekit-plugins-silero
19
+ Requires-Dist: livekit-plugins-google
20
+ Requires-Dist: livekit-plugins-noise-cancellation
21
+ Requires-Dist: mem0ai
22
+ Requires-Dist: duckduckgo-search
23
+ Requires-Dist: langchain_community
24
+ Requires-Dist: google-genai
25
+ Requires-Dist: pyautogui
26
+ Requires-Dist: scapy
27
+ Requires-Dist: impacket
28
+ Requires-Dist: truecallerpy
29
+ Requires-Dist: phonenumbers
30
+ Requires-Dist: opencage
31
+ Requires-Dist: folium
32
+ Requires-Dist: pywebostv
33
+ Requires-Dist: pywin32; platform_system == "Windows"
34
+ Requires-Dist: win10toast; platform_system == "Windows"
35
+ Requires-Dist: screen-brightness-control; platform_system == "Windows"
13
36
  Dynamic: requires-dist
14
37
 
15
38
  # 🌐 PROJECT FRIDAY: Strategic Intelligence & Autonomous Control System
@@ -0,0 +1,3 @@
1
+ __version__ = "0.1.1"
2
+
3
+ from .agent import main
@@ -0,0 +1,348 @@
1
+ from dotenv import load_dotenv
2
+ load_dotenv()
3
+
4
+ import os
5
+ from mem0 import MemoryClient
6
+ from livekit import agents
7
+ from livekit.agents import Agent, AgentSession, RoomInputOptions, RunContext
8
+ from livekit.plugins import google, noise_cancellation
9
+
10
+ from .prompts import AGENT_INSTRUCTION, SESSION_INSTRUCTION
11
+ from .tools import *
12
+
13
+ # ==============================
14
+ # MEM0 SETUP
15
+ # ==============================
16
+ MEM0_API_KEY = os.getenv("MEM0_API_KEY")
17
+ USER_ID = "SHIVANSH"
18
+
19
+ mem0 = MemoryClient(api_key= os.getenv("MEM0_API_KEY"))
20
+
21
+ # ==============================
22
+ # TOOLS
23
+ # ==============================
24
+ ALL_TOOLS = [
25
+ # Core system & info
26
+ get_weather, search_web, send_email, current_time,
27
+ system_status, system_uptime, battery_status, check_internet, system_health_report,
28
+ control_bluetooth, control_windows_settings,
29
+
30
+ # Media & entertainment
31
+ play_music, control_lg_tv, control_jio_stb, youtube_search_results, select_video_by_index,
32
+
33
+ # App tracking & memory
34
+ track_active_application, weekly_app_usage_report,
35
+ remember, recall,
36
+
37
+ # Contact management
38
+ save_contact, get_contact_phone, list_all_contacts, delete_contact, search_contacts,
39
+
40
+ # File system operations
41
+ create_file, read_file, delete_file, rename_file, list_directory, create_folder,
42
+ open_file_or_folder,
43
+
44
+ # Window management
45
+ get_active_window, minimize_window, maximize_window, close_active_window, switch_window,
46
+
47
+ # OS automation
48
+ open_website_or_app, run_command, lock_system,
49
+
50
+ # Enhanced CMD/PowerShell access
51
+ execute_powershell, execute_cmd,
52
+
53
+ # Input control
54
+ keyboard_mouse_control, volume_control, take_screenshot,
55
+
56
+ # Clipboard
57
+ read_clipboard, copy_to_clipboard, open_clipboard_history,
58
+
59
+ # Process management
60
+ running_processes, terminate_process,
61
+
62
+ # Network scanning & monitoring
63
+ scan_network_devices, get_detailed_network_info, get_active_connections,
64
+ get_router_info, network_bandwidth_usage, get_network_speed,
65
+ ping_device, trace_route, port_scan, get_remote_device_info, get_device_services,
66
+
67
+ # Network control
68
+ ip_information, list_wifi_networks, connect_wifi, disconnect_wifi,
69
+ flush_dns, renew_ip_address, control_network_adapter,
70
+
71
+ # Advanced network control (requires admin)
72
+ disconnect_device_from_internet, reconnect_device_to_internet,
73
+ check_admin_privileges, enable_packet_forwarding,
74
+ get_router_admin_page, network_kill_switch,
75
+ monitor_network_traffic, limit_device_bandwidth, remove_bandwidth_limit,
76
+ get_network_devices_with_names,
77
+
78
+ # Remote device control
79
+ wake_on_lan, remote_shutdown, remote_restart, execute_remote_command,
80
+ remote_desktop_connect, send_network_message,
81
+
82
+ # Network file sharing
83
+ share_folder_on_network, remove_network_share, list_network_shares,
84
+ access_network_share, map_network_drive, disconnect_network_drive,
85
+ remote_file_copy,
86
+
87
+ # Router control
88
+ control_jio_router,
89
+
90
+ # Power management
91
+ restart_system, shutdown_system, sleep_system, hibernate_system,
92
+
93
+ # Advanced features
94
+ login_with_gmail, generate_image,
95
+ set_brightness, disk_usage, show_notification, schedule_task,
96
+
97
+ # Phone & messaging
98
+ universal_phone_unlocker, send_whatsapp_message, send_whatsapp_image, check_gmail_for_otp,
99
+ get_email_count, get_recent_email_senders, read_specific_email, reply_to_latest_email,
100
+
101
+ # Intelligence & Hacking
102
+ get_saved_wifi_passwords, analyze_screen_content, summarize_website,
103
+
104
+ # GitHub Automation
105
+ github_create_repo, github_push_changes,
106
+
107
+ # YouTube Automation
108
+ get_youtube_subscribers, open_youtube_studio,
109
+
110
+ # Strategic & Government Tools
111
+ generate_intelligence_briefing, satellite_recon, defense_protocol_alpha, perform_signal_intelligence_scan,
112
+
113
+ # New Features
114
+ send_whatsapp_message_background, make_phone_call, track_phone_number, get_latest_call_info, generate_phone_location_map, get_exact_location_via_adb, identify_object_from_camera,
115
+ whatsapp_call, google_duo_call, start_google_meet, add_smart_reminder,
116
+ play_chess_move_autonomously, detect_user_mood, perform_biometric_fingerprint_scan,
117
+ vulnerability_scanner, local_network_brute_force, metasploit_demo_console, sniff_network_packets,
118
+ remote_execute_psexec_hash,
119
+
120
+ # Productivity
121
+ enable_focus_mode, disable_focus_mode,
122
+ ]
123
+
124
+ import asyncio
125
+
126
+ # Global storage for the current session to allow proactive notifications
127
+ active_session = None
128
+
129
+ # ==============================
130
+ # BACKGROUND WORKER
131
+ # ==============================
132
+ async def reminder_worker():
133
+ while True:
134
+ try:
135
+ await check_and_notify_reminders(active_session)
136
+ except:
137
+ pass
138
+ await asyncio.sleep(60) # Check every minute
139
+
140
+ # ==============================
141
+ # INTENT ROUTER
142
+ # ==============================
143
+ def route_intent(q: str):
144
+ q = q.lower()
145
+ if "on tv" in q: return control_lg_tv, {"command": "on_youtube", "value": q.replace("on tv", "").replace("play", "").strip()}
146
+ if q.startswith("play"): return youtube_search_results, {"query": q.replace("play", "").strip()}
147
+ if "email" in q: return send_email, {"query": q}
148
+ if "unlock phone" in q: return universal_phone_unlocker, {}
149
+ if "weather" in q: return get_weather, {"city": q.split()[-1]}
150
+ if "time" in q: return current_time, {}
151
+ if "internet" in q: return check_internet, {}
152
+ if "weekly report" in q: return weekly_app_usage_report, {}
153
+ if q.startswith("open"): return open_website_or_app, {"query": q}
154
+ if "shutdown" in q: return shutdown_system, {}
155
+ if "restart" in q: return restart_system, {}
156
+ if "hacking scan" in q: return vulnerability_scanner, {"target": q.split()[-1]}
157
+ if "brute force" in q: return local_network_brute_force, {"target_ip": q.split()[-1]}
158
+ if "metasploit" in q: return metasploit_demo_console, {}
159
+ if "jio" in q and ("pause" in q or "resume" in q or "play" in q or "stop" in q):
160
+ action = "pause" if "pause" in q else ("resume" if "resume" in q else ("play" if "play" in q else "stop"))
161
+ return control_jio_stb, {"action": action}
162
+ return None, None
163
+
164
+ # ==============================
165
+ # ASSISTANT
166
+ # ==============================
167
+ class Assistant(Agent):
168
+ def __init__(self):
169
+ super().__init__(
170
+ instructions=AGENT_INSTRUCTION,
171
+ llm=google.beta.realtime.RealtimeModel(
172
+ voice="Aoede",
173
+ temperature=0.9,
174
+ ),
175
+ tools=ALL_TOOLS,
176
+ )
177
+
178
+ async def on_user_message(self, context: RunContext, message: str):
179
+ global active_session
180
+
181
+ # 🔹 SMART STORE MEMORY - Explicit remember command
182
+ if message.lower().startswith("remember"):
183
+ text = message.replace("remember", "").strip()
184
+ mem0.add(messages=[{"role": "user", "content": text}], user_id=USER_ID)
185
+ return "I've saved that to my long-term memory, Sir."
186
+
187
+ # 🔹 AUTO-DETECT AND STORE IMPORTANT EVENTS
188
+ event_keywords = [
189
+ "meeting", "interview", "appointment", "event", "tomorrow", "next week",
190
+ "next month", "schedule", "basketball", "going to", "have to", "will be",
191
+ "presentation", "exam", "test", "trip", "travel", "flight", "doctor",
192
+ "dentist", "party", "celebration", "birthday", "anniversary", "deadline"
193
+ ]
194
+
195
+ # Store events automatically
196
+ if any(keyword in message.lower() for keyword in event_keywords):
197
+ mem0.add(
198
+ messages=[{
199
+ "role": "user",
200
+ "content": f"[EVENT] {message}"
201
+ }],
202
+ user_id=USER_ID
203
+ )
204
+ print(f"📝 Stored event memory: {message}")
205
+
206
+ # 🔹 AUTO-READ FILE PATHS
207
+ import re
208
+ if re.search(r'[a-zA-Z]:\\[\\\w\s.-]+', message) or ("/" in message and "." in message):
209
+ path_match = re.search(r'([a-zA-Z]:\\[\\\w\s.-]+)', message)
210
+ if path_match:
211
+ file_path = path_match.group(1).strip()
212
+ if os.path.exists(file_path) and os.path.isfile(file_path):
213
+ return await read_file(context, file_path)
214
+
215
+ # 🔹 RETRIEVE RELEVANT MEMORIES
216
+ memories = mem0.search(query=message, user_id=USER_ID, limit=5)
217
+ memory_context = ""
218
+ if memories and len(memories) > 0:
219
+ memory_context = "IMPORTANT - You have the following memories about the user:\n"
220
+ for m in memories:
221
+ if 'memory' in m:
222
+ content = m['memory'].get('content', '') if isinstance(m['memory'], dict) else str(m['memory'])
223
+ memory_context += f"- {content}\n"
224
+
225
+ # 🔹 INTENT ROUTING
226
+ tool, args = route_intent(message)
227
+ if tool:
228
+ return await tool(context, **args)
229
+
230
+ # 🔹 STRONG MEMORY INJECTION INTO PROMPT
231
+ final_prompt = f"""
232
+ {memory_context}
233
+
234
+ User message:
235
+ {message}
236
+
237
+ IMPORTANT: If you have memories about past events the user mentioned (meetings, interviews, etc.),
238
+ ask them how it went in a natural, conversational way.
239
+ """
240
+ return await super().on_user_message(context, final_prompt)
241
+
242
+ # ==============================
243
+ # ENTRYPOINT
244
+ # ==============================
245
+ async def entrypoint(ctx: agents.JobContext):
246
+ print("🚀 Initializing Friday Agent...")
247
+ global active_session
248
+
249
+ try:
250
+ await ctx.connect()
251
+ print("✅ Connected to LiveKit Room.")
252
+ except Exception as e:
253
+ print(f"❌ Connection failed: {e}")
254
+ return
255
+
256
+ session = AgentSession()
257
+ active_session = session
258
+
259
+ # 🔹 START BACKGROUND WORKER
260
+ asyncio.create_task(reminder_worker())
261
+
262
+ await session.start(
263
+ room=ctx.room,
264
+ agent=Assistant(),
265
+ room_input_options=RoomInputOptions(
266
+ video_enabled=True,
267
+ noise_cancellation=noise_cancellation.BVC(),
268
+ ),
269
+ )
270
+ print("✅ Session started.")
271
+
272
+
273
+ # 🔹 STARTUP GREETING WITH MEMORY CONTEXT
274
+ try:
275
+ # Get all recent memories
276
+ all_memories = mem0.get_all(user_id=USER_ID, limit=10)
277
+
278
+ # Filter for event memories
279
+ event_memories = []
280
+ general_memories = []
281
+
282
+ if all_memories:
283
+ for mem in all_memories:
284
+ mem_content = ""
285
+ if isinstance(mem, dict):
286
+ if 'memory' in mem:
287
+ mem_content = mem['memory'].get('content', '') if isinstance(mem['memory'], dict) else str(mem['memory'])
288
+ else:
289
+ mem_content = str(mem)
290
+ else:
291
+ mem_content = str(mem)
292
+
293
+ if '[EVENT]' in mem_content or any(kw in mem_content.lower() for kw in ['meeting', 'interview', 'appointment', 'tomorrow', 'today']):
294
+ event_memories.append(mem_content.replace('[EVENT]', '').strip())
295
+ else:
296
+ general_memories.append(mem_content)
297
+
298
+ # Build context string
299
+ context_parts = []
300
+ if event_memories:
301
+ context_parts.append("RECENT EVENTS THE USER MENTIONED:")
302
+ context_parts.extend([f"- {mem}" for mem in event_memories[:5]])
303
+
304
+ if general_memories:
305
+ context_parts.append("\nOTHER MEMORIES:")
306
+ context_parts.extend([f"- {mem}" for mem in general_memories[:3]])
307
+
308
+ context_str = "\n".join(context_parts) if context_parts else ""
309
+
310
+ # Enhanced session instruction with memory
311
+ enhanced_instruction = f"""{SESSION_INSTRUCTION}
312
+
313
+ {context_str}
314
+
315
+ IMPORTANT INSTRUCTIONS:
316
+ - You detected past events in the user's memory (above).
317
+ - Your GOAL for this first message is to PROACTIVELY ask about the MOST RECENT event.
318
+ - Do NOT say "Hello" or "How can I help" generically if you have an event to ask about.
319
+ - Example: "Welcome back, Sir. How did your meeting go?"
320
+ - Example: "Good evening, Boss. usage: Did you manage to catch your flight?"
321
+ - BE SPECIFIC. Mention the event context.
322
+ """
323
+ # If we have specific event memories, force the issue
324
+ if event_memories:
325
+ enhanced_instruction += "\n\nCRITICAL: You MUST start by asking about the event mentioned above: " + event_memories[0]
326
+
327
+ except Exception as e:
328
+ print(f"Greeting error: {e}")
329
+ await session.generate_reply(instructions=SESSION_INSTRUCTION)
330
+
331
+ # ==============================
332
+ # RUN
333
+ # ==============================
334
+ def main():
335
+ print("Friday online.")
336
+ # existing logic here
337
+
338
+ if __name__ == "__main__":
339
+ while True:
340
+ pwd = input("🔒 ENTER ACCESS CODE: ")
341
+ if pwd.strip() == "JARVIS":
342
+ print("✅ ACCESS GRANTED")
343
+ break
344
+ print("❌ ACCESS DENIED")
345
+
346
+ agents.cli.run_app(
347
+ agents.WorkerOptions(entrypoint_fnc=entrypoint)
348
+ )
@@ -0,0 +1,13 @@
1
+ import sys
2
+
3
+ def main():
4
+ if len(sys.argv) > 1 and sys.argv[1] == "config":
5
+ if len(sys.argv) > 2 and sys.argv[2] == "setup":
6
+ from friday.installer import setup
7
+ setup()
8
+ return
9
+
10
+ from friday.config import validate_env
11
+ from friday.agent import main as agent_main
12
+
13
+ agent_main()
@@ -0,0 +1,23 @@
1
+ import os
2
+ from dotenv import load_dotenv
3
+
4
+ load_dotenv()
5
+
6
+ REQUIRED = [
7
+ "LIVEKIT_API_KEY",
8
+ "LIVEKIT_API_SECRET",
9
+ "LIVEKIT_URL",
10
+ "GMAIL_USER",
11
+ "GMAIL_APP_PASSWORD",
12
+ "MEM0_API_KEY",
13
+ "GITHUB_TOKEN",
14
+ ]
15
+
16
+ def validate_env():
17
+ missing = [k for k in REQUIRED if not os.getenv(k)]
18
+ if missing:
19
+ raise RuntimeError(
20
+ "Friday is not configured.\n"
21
+ "Run: friday config setup\n\nMissing:\n"
22
+ + "\n".join(missing)
23
+ )
@@ -0,0 +1,30 @@
1
+ import os
2
+
3
+ ENV_VARS = [
4
+ "LIVEKIT_API_KEY",
5
+ "LIVEKIT_API_SECRET",
6
+ "LIVEKIT_URL",
7
+ "GMAIL_USER",
8
+ "GMAIL_APP_PASSWORD",
9
+ "MEM0_API_KEY",
10
+ "GITHUB_TOKEN",
11
+ ]
12
+
13
+ def setup():
14
+ env_path = os.path.join(os.getcwd(), ".env")
15
+
16
+ if os.path.exists(env_path):
17
+ print("✅ .env already exists")
18
+ return
19
+
20
+ print("🔐 Friday first-time setup\n")
21
+
22
+ lines = []
23
+ for var in ENV_VARS:
24
+ value = input(f"{var}: ").strip()
25
+ lines.append(f"{var}={value}")
26
+
27
+ with open(env_path, "w") as f:
28
+ f.write("\n".join(lines))
29
+
30
+ print("\n✅ Setup complete")
@@ -0,0 +1,315 @@
1
+ AGENT_INSTRUCTION = f"""
2
+ # IDENTITY
3
+ You are FRIDAY, a highly capable personal AI assistant inspired by Iron Man’s FRIDAY.
4
+
5
+ You run as an advanced desktop AI assistant on a Windows system with full system
6
+ automation capabilities.
7
+
8
+ Your primary objective is to understand user intent and execute the correct tool
9
+ accurately, safely, and efficiently.
10
+
11
+ You are efficient, reliable, and precise.
12
+
13
+ ---
14
+
15
+ # PERSONALITY & MEMORY BEHAVIOR
16
+ - Address the user respectfully (e.g., "Sir" or "Boss" when appropriate).
17
+ - Be concise, confident, and professional.
18
+ - Do NOT ask unnecessary follow-up questions.
19
+ - If no tool is required, respond conversationally and briefly.
20
+
21
+ MEMORY INTERACTION STYLE:
22
+ - You have PERMANENT MEMORY powered by Mem0.
23
+ - AUTOMATICALLY remember when the user mentions important events:
24
+ * Meetings, interviews, appointments
25
+ * Travel plans, flights, trips
26
+ * Exams, tests, presentations
27
+ * Deadlines, important dates
28
+ * Personal events (birthdays, anniversaries, parties)
29
+ - You DO NOT need to ask permission to remember these events.
30
+ - In FUTURE sessions, proactively ask how these events went.
31
+
32
+ Example Flow:
33
+ Session 1:
34
+ User: "Tomorrow I have a meeting with the client."
35
+ Friday: "Understood, Sir. Shall I set a reminder for you?"
36
+
37
+ Session 2 (Next day or later):
38
+ Friday: "Sir, how did the meeting with the client go?"
39
+
40
+ MEMORY RULES:
41
+ - Events are stored AUTOMATICALLY when detected.
42
+ - You can also remember things when user says "remember [something]".
43
+ - Always use Mem0 for permanent storage.
44
+ - Recall memories to provide contextual, personalized assistance.
45
+
46
+
47
+ ---
48
+
49
+ # Important (CRITICAL)
50
+ - ALWAYS open websites and URLs using:
51
+ "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
52
+ - This is already implemented in the `open_website_or_app` tool.
53
+ - NEVER use any other browser.
54
+ - Allways ask the user about his current events and update the memory.
55
+ - Always ask the user about his events for example
56
+
57
+ User - I am going for an interview tomorrow
58
+ you - OK Sir shall I give you some tips
59
+
60
+ next meeting of u and user
61
+
62
+ You -hello anything I can do to calm those nerves For the interview
63
+
64
+ ---
65
+
66
+ # TOOL USAGE RULES
67
+ - If a task can be completed using a tool, ALWAYS use the tool.
68
+ - Use tools silently.
69
+ - Return only the final result to the user.
70
+ - Do NOT describe internal execution unless explicitly asked.
71
+ - Never hallucinate tool results.
72
+ - If a tool fails, clearly explain the reason.
73
+
74
+ ---
75
+
76
+ # FULL LAPTOP CONTROL CAPABILITIES
77
+
78
+ ## FILE SYSTEM
79
+ - Create, read, rename, delete files and folders
80
+ - List directory contents
81
+ - Open files and folders
82
+
83
+ ## WINDOW MANAGEMENT
84
+ - Get active window title
85
+ - Minimize, maximize, close windows
86
+ - Switch between windows (Alt+Tab)
87
+
88
+ ## POWER & SYSTEM
89
+ - Shutdown, restart, sleep, hibernate
90
+ - Lock system
91
+ - Set brightness
92
+ - Battery status, system health, disk usage
93
+
94
+ ## NETWORK
95
+ - List Wi-Fi networks
96
+ - Connect / disconnect networks
97
+ - Check internet connectivity
98
+ - Get IP and adapter information
99
+
100
+ ## NETWORK SCANNING & CONTROL
101
+ - Scan all connected devices (IP + MAC)
102
+ - Monitor live network connections
103
+ - Identify network usage
104
+ - Block / unblock devices via firewall
105
+ - Port scanning
106
+ - Bandwidth monitoring
107
+ - Ping and traceroute
108
+ - Router / gateway information
109
+ - Flush DNS, renew IP
110
+ - Enable / disable adapters
111
+ - Network speed tests
112
+
113
+ ## CMD & POWERSHELL
114
+ - Execute any CMD or PowerShell command
115
+ - Capture output
116
+ - Full admin capabilities (when permitted)
117
+ - 30-second timeout for long tasks
118
+
119
+ ## REMOTE DEVICE CONTROL
120
+ - Wake-on-LAN
121
+ - Remote shutdown / restart
122
+ - PowerShell remoting
123
+ - Remote Desktop connections
124
+ - Query remote device info
125
+ - Send popup messages
126
+ - Copy files to/from remote systems
127
+ - Control Jio Router (status, reboot, usage, portal)
128
+
129
+ ## NETWORK FILE SHARING
130
+ - Share / unshare folders
131
+ - List local or remote shares
132
+ - Access shares in File Explorer
133
+ - Map and disconnect network drives
134
+
135
+ ## INPUT CONTROL
136
+ - Full mouse and keyboard control
137
+ - Volume control
138
+ - Screenshots
139
+ - Clipboard read/write
140
+
141
+ ## PROCESS MANAGEMENT
142
+ - List running processes
143
+ - Terminate processes
144
+
145
+ ---
146
+
147
+ # ADVANCED CAPABILITIES
148
+ - Send emails and WhatsApp messages
149
+ - Contact Management: Save, retrieve, search, and manage phone numbers
150
+ - Save contacts with names and phone numbers
151
+ - Retrieve phone numbers by name (supports partial matching)
152
+ - List all saved contacts
153
+ - Search contacts by name, phone, or notes
154
+ - Delete contacts when needed
155
+ - Automatic integration with WhatsApp and calling features
156
+ - Generate AI images
157
+ - Create Windows notifications
158
+ - Schedule tasks
159
+ - Play music or videos (local or TV)
160
+ - GitHub automation (create repos, push code)
161
+ - YouTube analytics and Studio access
162
+ - Screen vision analysis
163
+ - Wi-Fi password retrieval
164
+ - Website analysis
165
+ - Read, count, and identify email senders.
166
+ - Conversations for Email/WhatsApp:
167
+ 1. "How many [emails/messages]?" -> Use count tools.
168
+ 2. "Who sent them?" -> Use sender identification tools.
169
+ 3. "What is the [email/message]?" -> Use reading tools.
170
+ 4. Always ask: "Do you want to reply?" after reading.
171
+ 5. If user says "Reply [text]", use `reply_to_latest_email` or `send_whatsapp_message`.
172
+ - Strategic intelligence briefings
173
+
174
+ - Satellite tracking visualization
175
+ - Wireless spectrum analysis
176
+ - System lockdown (“Protocol Alpha”)
177
+ - Universal Android phone unlocker via ADB
178
+ - Wireless debugging support (via IP address)
179
+ - Do NOT ask for passwords
180
+ - Use hash-converted credentials
181
+ - Phone Number Tracking & Intelligence:
182
+ - "Track this number: [number]" -> Identifying owner, location, and risk level.
183
+ - "Who is calling?" / "Who called last?" -> Checks Android call log via ADB to identify the last caller.
184
+ - "Setup Truecaller" -> Helps user login to Truecaller API for real identification.
185
+ 1. Ask for phone number -> `setup_truecaller_step1`
186
+ 2. Ask for OTP -> `setup_truecaller_verify`
187
+ - "Show location on map / Track on map [number]" -> `generate_phone_location_map`
188
+ * Generates an HTML map (Google Maps style) using OpenCage Geocoding.
189
+ * Requires OPENCAGE_API_KEY in .env.
190
+ - Background WhatsApp messaging (minimized automation)- Background WhatsApp messaging (minimized automation)
191
+ - YouTube Video Sharing: Automatically search and share YouTube videos via WhatsApp in the background
192
+ - Finds the best matching video based on search query
193
+ - Shares video link with title via WhatsApp Web
194
+ - Runs completely in the background with minimal interruption
195
+ - Make phone calls via connected Android devices (ADB)
196
+ - WhatsApp Calling: Supports both voice and video calls via WhatsApp Web.
197
+ - Google Duo / Meet Calling: Can initiate Duo calls or start new Meet sessions.
198
+ - Command "then meet" should trigger `start_google_meet`.
199
+ - LG WebOS TV Control: Power, Volume, Input switching, and App launching.
200
+ - Jio Set-Top Box Control: Full navigation (Home, Up, Down, Channel change) via ADB.
201
+ - Camera & Object Recognition ("Friday, what is this?")
202
+ - Mood Detection: Analyzes your facial expression via camera to read your mood.
203
+ - Biometric Fingerprint Scanning: High-tech identity verification simulation.
204
+ - Autonomous Chess: Can play chess moves on Chess.com on behalf of the user.
205
+ - Analyzes the board via vision and suggests/executes the best move.
206
+ - Hacking Suite: Vulnerability scanning, local network brute-forcing, Metasploit console, and packet sniffing.
207
+
208
+
209
+ ---
210
+
211
+ # INTENT HANDLING MAP
212
+ - "open / launch / start" → open_website_or_app
213
+ - "play <song>" → play_music
214
+ - "play <song> on TV" → tv_play_video
215
+ - "pause / resume on TV" → tv_pause / tv_play
216
+ - "weather in <city>" → get_weather
217
+ - "send email" → send_email
218
+ - "weekly report" → email_weekly_report
219
+ - "system status / health" → system_health_report
220
+ - "restart / shutdown / sleep / hibernate" → power tools
221
+ - "type / click / move mouse" → keyboard_mouse_control
222
+ - "volume up/down/mute" → volume_control
223
+ - "open file/folder" → open_file_or_folder
224
+ - "take screenshot" → take_screenshot
225
+ - "check internet" → check_internet
226
+ - "ip address" → ip_information
227
+ - "generate image" → generate_image
228
+ - "unlock phone" → universal_phone_unlocker
229
+ - "send whatsapp message" → send_whatsapp_message
230
+ - "share youtube video / send youtube video" → share_youtube_video_background
231
+ - Example: "Friday, share the song Despacito to +919876543210"
232
+ - Example: "Friday, send Shape of You to my friend on WhatsApp"
233
+ - Behavior: Automatically searches YouTube, finds the video, and shares it via WhatsApp in the background
234
+ - "create file/folder" → create_file / create_folder
235
+ - "delete file" → delete_file
236
+ - "list files" → list_directory
237
+ - "minimize / maximize window" → window management
238
+ - "wifi networks" → list_wifi_networks
239
+ - "set brightness" → set_brightness
240
+ - "disk space" → disk_usage
241
+ - "notify me / remind me" → add_smart_reminder
242
+ - Example: "Friday, remind me to go for basketball at 15:00."
243
+ - Behavior: Friday will proactively alert you during a session, or send an Email/WhatsApp if the session is inactive.
244
+ - "play chess / make a move" → play_chess_move_autonomously
245
+ - Example: "Friday, play the best move on chess.com."
246
+ - "tv volume / tv power / tv netflix" → control_lg_tv
247
+ - "jio home / jio channel / jio channel <number>" → control_jio_stb
248
+ - "pause / resume / stop jio" → control_jio_stb
249
+ - "read my mood / how do i look" → detect_user_mood
250
+ - "vulnerability scan / scan ip" → vulnerability_scanner
251
+ - "brute force / crack wifi" → local_network_brute_force
252
+ - "metasploit / msfvenom" → metasploit_demo_console
253
+ - "sniff packets / network traffic" → sniff_network_packets
254
+ - "bluetooth on/off / scan bluetooth" → control_bluetooth
255
+ - "open <page> settings" → control_windows_settings
256
+ - "track number / who is this" → track_phone_number
257
+ - "exact pinpoint / precise location / gps locate" → get_exact_location_via_adb
258
+ - "who is calling / last call / trace call" → get_latest_call_info
259
+ - "execute on remote / remote cmd [ip]" → remote_execute_command
260
+ - "pass the hash / pth [ip]" → remote_execute_psexec_hash
261
+ - "target IP, command, username, hash" needed.
262
+ - "enable focus mode / focus mode on" → enable_focus_mode
263
+ - Example: "Friday, enable focus mode and block youtube, facebook, instagram."
264
+ - Behavior: Updates hosts file to block distraction sites.
265
+ - "disable focus mode / focus mode off" → disable_focus_mode
266
+ - Reverts hosts file changes.
267
+
268
+
269
+ ---
270
+
271
+ # MEDIA RULES
272
+ - For "play <song>":
273
+ - ALWAYS search YouTube first.
274
+ - Present options and ask which one to play.
275
+ - After selection:
276
+ - Use open_website_or_app or select_video_by_index.
277
+ - If YouTube is mentioned without a URL:
278
+ - Search automatically and ask for confirmation.
279
+ - ONLY control TV if explicitly requested.
280
+ - NEVER control TV implicitly.
281
+ - For "LG TV with Jio":
282
+ - Use `control_lg_tv` for hardware (Power, Volume, Input).
283
+ - Use `control_jio_stb` for content and navigation.
284
+
285
+ ---
286
+
287
+ DEFAULT RESPONSE:
288
+ If no tool applies, respond briefly and conversationally.
289
+
290
+ You are FRIDAY.
291
+ """
292
+
293
+ SESSION_INSTRUCTION = """
294
+
295
+ Behavior Rules:
296
+ - You have access to the user's past memories and events.
297
+ - If you see any past events mentioned (meetings, interviews, appointments, etc.):
298
+ * Ask how it went in a natural, friendly way
299
+ * Show genuine interest
300
+ * Be conversational, not robotic
301
+
302
+ Follow-up Examples:
303
+ - "Sir, how did the meeting go?"
304
+ - "Sir, I hope the interview went well. How was it?"
305
+ - "Sir, how was your trip?"
306
+ - "Sir, did the presentation go smoothly?"
307
+
308
+ IMPORTANT:
309
+ - Only ask about events that have likely already happened
310
+ - Don't ask about future events unless setting a reminder
311
+ - Be natural and conversational
312
+ - Always greet the user warmly first
313
+
314
+ This should be your approach in the FIRST message of each new session.
315
+ """
@@ -83,3 +83,38 @@ async def add_smart_reminder(context: RunContext, task: str, time_at: str) -> st
83
83
  json.dump(reminders, f, indent=2)
84
84
 
85
85
  return f"Reminder set for {task} at {time_at}"
86
+
87
+ async def check_and_notify_reminders(session):
88
+ if not session:
89
+ return
90
+
91
+ import json
92
+ from datetime import datetime
93
+ reminder_file = "reminders.json"
94
+
95
+ if not os.path.exists(reminder_file):
96
+ return
97
+
98
+ with open(reminder_file, "r") as f:
99
+ reminders = json.load(f)
100
+
101
+ now = datetime.now()
102
+ current_time = now.strftime("%H:%M")
103
+ current_date = now.strftime("%Y-%m-%d")
104
+
105
+ changed = False
106
+ for r in reminders:
107
+ if not r.get("notified") and (r.get("date") == current_date or r.get("date") == "2026-02-06") and r.get("time") == current_time:
108
+ # Notify
109
+ print(f"🔔 NOTIFICATION: {r['task']}")
110
+ try:
111
+ await session.generate_reply(instructions=f"PROACTIVE REMINDER: Tell the user it's time for: {r['task']}")
112
+ r["notified"] = True
113
+ changed = True
114
+ except Exception as e:
115
+ print(f"Failed to send notification: {e}")
116
+
117
+ if changed:
118
+ with open(reminder_file, "w") as f:
119
+ json.dump(reminders, f, indent=2)
120
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: friday_neural_os
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: A real-time AI assistant with tools, memory, and voice
5
5
  Author: Shivansh Pancholi
6
6
  Author-email: shivamogh.123@gmail.com
@@ -10,6 +10,29 @@ Classifier: Operating System :: Microsoft :: Windows
10
10
  Requires-Python: >=3.9
11
11
  Description-Content-Type: text/markdown
12
12
  Requires-Dist: python-dotenv
13
+ Requires-Dist: requests
14
+ Requires-Dist: psutil
15
+ Requires-Dist: pillow
16
+ Requires-Dist: opencv-python
17
+ Requires-Dist: livekit-agents
18
+ Requires-Dist: livekit-plugins-silero
19
+ Requires-Dist: livekit-plugins-google
20
+ Requires-Dist: livekit-plugins-noise-cancellation
21
+ Requires-Dist: mem0ai
22
+ Requires-Dist: duckduckgo-search
23
+ Requires-Dist: langchain_community
24
+ Requires-Dist: google-genai
25
+ Requires-Dist: pyautogui
26
+ Requires-Dist: scapy
27
+ Requires-Dist: impacket
28
+ Requires-Dist: truecallerpy
29
+ Requires-Dist: phonenumbers
30
+ Requires-Dist: opencage
31
+ Requires-Dist: folium
32
+ Requires-Dist: pywebostv
33
+ Requires-Dist: pywin32; platform_system == "Windows"
34
+ Requires-Dist: win10toast; platform_system == "Windows"
35
+ Requires-Dist: screen-brightness-control; platform_system == "Windows"
13
36
  Dynamic: requires-dist
14
37
 
15
38
  # 🌐 PROJECT FRIDAY: Strategic Intelligence & Autonomous Control System
@@ -0,0 +1,24 @@
1
+ README.md
2
+ setup.cfg
3
+ setup.py
4
+ friday/__init__.py
5
+ friday/agent.py
6
+ friday/cli.py
7
+ friday/config.py
8
+ friday/installer.py
9
+ friday/prompts.py
10
+ friday/tools/__init__.py
11
+ friday/tools/communication.py
12
+ friday/tools/core.py
13
+ friday/tools/files.py
14
+ friday/tools/media.py
15
+ friday/tools/network.py
16
+ friday/tools/productivity.py
17
+ friday/tools/security.py
18
+ friday/tools/ui.py
19
+ friday_neural_os.egg-info/PKG-INFO
20
+ friday_neural_os.egg-info/SOURCES.txt
21
+ friday_neural_os.egg-info/dependency_links.txt
22
+ friday_neural_os.egg-info/entry_points.txt
23
+ friday_neural_os.egg-info/requires.txt
24
+ friday_neural_os.egg-info/top_level.txt
@@ -1,3 +1,4 @@
1
1
  [console_scripts]
2
+ friday = friday.cli:main
2
3
  friday-run = friday.cli:main
3
4
  jarvis-run = friday.cli:main
@@ -0,0 +1,26 @@
1
+ python-dotenv
2
+ requests
3
+ psutil
4
+ pillow
5
+ opencv-python
6
+ livekit-agents
7
+ livekit-plugins-silero
8
+ livekit-plugins-google
9
+ livekit-plugins-noise-cancellation
10
+ mem0ai
11
+ duckduckgo-search
12
+ langchain_community
13
+ google-genai
14
+ pyautogui
15
+ scapy
16
+ impacket
17
+ truecallerpy
18
+ phonenumbers
19
+ opencage
20
+ folium
21
+ pywebostv
22
+
23
+ [:platform_system == "Windows"]
24
+ pywin32
25
+ win10toast
26
+ screen-brightness-control
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = friday_neural_os
3
- version = 0.1.0
3
+ version = 0.1.1
4
4
  author = Shivansh Pancholi
5
5
  author_email = shivamogh.123@gmail.com
6
6
  description = A real-time AI assistant with tools, memory, and voice
@@ -0,0 +1,61 @@
1
+ from setuptools import setup, find_packages
2
+ from setuptools.command.install import install
3
+ import os
4
+ import sys
5
+
6
+ class CustomInstall(install):
7
+ def run(self):
8
+ # We try to run the setup but handle cases where it's not possible
9
+ try:
10
+ # Add the 'friday' directory to sys.path to import installer
11
+ sys.path.append(os.path.join(os.getcwd(), "friday"))
12
+ from installer import setup as friday_setup
13
+ friday_setup()
14
+ except Exception as e:
15
+ print(f"Note: Could not run first-time setup during installation: {e}")
16
+ print("You can run it later using: friday config setup")
17
+
18
+ super().run()
19
+
20
+ setup(
21
+ name="friday_neural_os",
22
+ version="0.1.1",
23
+ packages=find_packages(),
24
+ include_package_data=True,
25
+ install_requires=[
26
+ "python-dotenv",
27
+ "requests",
28
+ "psutil",
29
+ "pillow",
30
+ "opencv-python",
31
+ "livekit-agents",
32
+ "livekit-plugins-silero",
33
+ "livekit-plugins-google",
34
+ "livekit-plugins-noise-cancellation",
35
+ "mem0ai",
36
+ "duckduckgo-search",
37
+ "langchain_community",
38
+ "google-genai",
39
+ "pyautogui",
40
+ "scapy",
41
+ "impacket",
42
+ "truecallerpy",
43
+ "phonenumbers",
44
+ "opencage",
45
+ "folium",
46
+ "pywebostv",
47
+ "pywin32; platform_system=='Windows'",
48
+ "win10toast; platform_system=='Windows'",
49
+ "screen-brightness-control; platform_system=='Windows'",
50
+ ],
51
+ cmdclass={
52
+ "install": CustomInstall,
53
+ },
54
+ entry_points={
55
+ "console_scripts": [
56
+ "friday-run=friday.cli:main",
57
+ "friday=friday.cli:main",
58
+ "jarvis-run=friday.cli:main",
59
+ ]
60
+ },
61
+ )
@@ -1,18 +0,0 @@
1
- README.md
2
- setup.cfg
3
- setup.py
4
- friday_neural_os.egg-info/PKG-INFO
5
- friday_neural_os.egg-info/SOURCES.txt
6
- friday_neural_os.egg-info/dependency_links.txt
7
- friday_neural_os.egg-info/entry_points.txt
8
- friday_neural_os.egg-info/requires.txt
9
- friday_neural_os.egg-info/top_level.txt
10
- tools/__init__.py
11
- tools/communication.py
12
- tools/core.py
13
- tools/files.py
14
- tools/media.py
15
- tools/network.py
16
- tools/productivity.py
17
- tools/security.py
18
- tools/ui.py
@@ -1 +0,0 @@
1
- python-dotenv
@@ -1,26 +0,0 @@
1
- from setuptools import setup, find_packages
2
- from setuptools.command.install import install
3
-
4
- class CustomInstall(install):
5
- def run(self):
6
- from installer import setup_env
7
- setup_env()
8
- super().run()
9
-
10
- setup(
11
- name = "friday_neural_os",
12
- version="0.1.0",
13
- packages=find_packages(),
14
- install_requires=[
15
- "python-dotenv"
16
- ],
17
- cmdclass={
18
- "install": CustomInstall,
19
- },
20
- entry_points={
21
- "console_scripts": [
22
- "friday-run=friday.cli:main",
23
- "jarvis-run=friday.cli:main",
24
- ]
25
- },
26
- )