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.
- {friday_neural_os-0.1.0 → friday_neural_os-0.1.1}/PKG-INFO +24 -1
- friday_neural_os-0.1.1/friday/__init__.py +3 -0
- friday_neural_os-0.1.1/friday/agent.py +348 -0
- friday_neural_os-0.1.1/friday/cli.py +13 -0
- friday_neural_os-0.1.1/friday/config.py +23 -0
- friday_neural_os-0.1.1/friday/installer.py +30 -0
- friday_neural_os-0.1.1/friday/prompts.py +315 -0
- {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/productivity.py +35 -0
- {friday_neural_os-0.1.0 → friday_neural_os-0.1.1}/friday_neural_os.egg-info/PKG-INFO +24 -1
- friday_neural_os-0.1.1/friday_neural_os.egg-info/SOURCES.txt +24 -0
- {friday_neural_os-0.1.0 → friday_neural_os-0.1.1}/friday_neural_os.egg-info/entry_points.txt +1 -0
- friday_neural_os-0.1.1/friday_neural_os.egg-info/requires.txt +26 -0
- friday_neural_os-0.1.1/friday_neural_os.egg-info/top_level.txt +1 -0
- {friday_neural_os-0.1.0 → friday_neural_os-0.1.1}/setup.cfg +1 -1
- friday_neural_os-0.1.1/setup.py +61 -0
- friday_neural_os-0.1.0/friday_neural_os.egg-info/SOURCES.txt +0 -18
- friday_neural_os-0.1.0/friday_neural_os.egg-info/requires.txt +0 -1
- friday_neural_os-0.1.0/friday_neural_os.egg-info/top_level.txt +0 -1
- friday_neural_os-0.1.0/setup.py +0 -26
- {friday_neural_os-0.1.0 → friday_neural_os-0.1.1}/README.md +0 -0
- {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/__init__.py +0 -0
- {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/communication.py +0 -0
- {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/core.py +0 -0
- {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/files.py +0 -0
- {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/media.py +0 -0
- {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/network.py +0 -0
- {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/security.py +0 -0
- {friday_neural_os-0.1.0 → friday_neural_os-0.1.1/friday}/tools/ui.py +0 -0
- {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.
|
|
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,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.
|
|
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
|
|
@@ -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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
friday
|
|
@@ -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 +0,0 @@
|
|
|
1
|
-
tools
|
friday_neural_os-0.1.0/setup.py
DELETED
|
@@ -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
|
-
)
|
|
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
|
{friday_neural_os-0.1.0 → friday_neural_os-0.1.1}/friday_neural_os.egg-info/dependency_links.txt
RENAMED
|
File without changes
|