federaide-dev-nightly 2.0.4__tar.gz → 2.0.6__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.
- {federaide_dev_nightly-2.0.4/src/federaide_dev_nightly.egg-info → federaide_dev_nightly-2.0.6}/PKG-INFO +1 -1
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/pyproject.toml +2 -1
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6/src/federaide_dev_nightly.egg-info}/PKG-INFO +1 -1
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federaide_dev_nightly.egg-info/entry_points.txt +1 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/app.py +27 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/textIDE.py +59 -14
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/LICENSE +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/MANIFEST.in +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/README.md +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/go/cmd/bridge/main.go +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/go/cmd/embed/main.go +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/go/cmd/search/main.go +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/go/go.mod +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/go/go.sum +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/scripts/build_go.sh +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/setup.cfg +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/setup.py +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federaide_dev_nightly.egg-info/SOURCES.txt +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federaide_dev_nightly.egg-info/dependency_links.txt +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federaide_dev_nightly.egg-info/requires.txt +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federaide_dev_nightly.egg-info/top_level.txt +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/__init__.py +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/__main__.py +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/agent.py +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/agent_core.py +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/audio_handler.py +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/chatgpt_auth.py +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/commands.py +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/execution.py +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/mcp_handler.py +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/orchestration.py +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/semantic_search.py +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/styles/fonts/Michroma-Regular.ttf +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/styles/fonts/SpaceGrotesk-Bold.ttf +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/styles/fonts/SpaceGrotesk-VariableFont_wght.ttf +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/styles/style.css +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/subagents.py +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/telegram_handler.py +0 -0
- {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/toolbox.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: federaide-dev-nightly
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.6
|
|
4
4
|
Summary: A cross-platform terminal based p2p agent orchestration harness and universal automation system
|
|
5
5
|
Author-email: ROCK-LAB-PRIVATE-LIMITED <arkadeep_ghosh@rocklab.in>
|
|
6
6
|
License: GNU Affero General Public License v3
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "federaide-dev-nightly"
|
|
7
|
-
version = "2.0.
|
|
7
|
+
version = "2.0.6"
|
|
8
8
|
description = "A cross-platform terminal based p2p agent orchestration harness and universal automation system"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "GNU Affero General Public License v3"}
|
|
@@ -93,6 +93,7 @@ all = [
|
|
|
93
93
|
[project.scripts]
|
|
94
94
|
federate = "federate.app:main"
|
|
95
95
|
federaide = "federate.textIDE:main"
|
|
96
|
+
ide = "federate.textIDE:ide_main"
|
|
96
97
|
|
|
97
98
|
[project.urls]
|
|
98
99
|
Homepage = "https://federaide.rocklab.in"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: federaide-dev-nightly
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.6
|
|
4
4
|
Summary: A cross-platform terminal based p2p agent orchestration harness and universal automation system
|
|
5
5
|
Author-email: ROCK-LAB-PRIVATE-LIMITED <arkadeep_ghosh@rocklab.in>
|
|
6
6
|
License: GNU Affero General Public License v3
|
|
@@ -121,6 +121,33 @@ from textual.widgets import Header, Footer, DirectoryTree, Label, Button
|
|
|
121
121
|
from textual.screen import ModalScreen
|
|
122
122
|
from textual import on
|
|
123
123
|
|
|
124
|
+
# --- GLOBAL CTRL+SCROLL HORIZONTAL PAN PATCH ---
|
|
125
|
+
from textual.widget import Widget
|
|
126
|
+
from textual import events
|
|
127
|
+
|
|
128
|
+
_orig_scroll_down = Widget._on_mouse_scroll_down
|
|
129
|
+
_orig_scroll_up = Widget._on_mouse_scroll_up
|
|
130
|
+
|
|
131
|
+
def _patched_mouse_scroll_down(self, event: events.MouseScrollDown):
|
|
132
|
+
if getattr(event, "ctrl", False):
|
|
133
|
+
event.stop()
|
|
134
|
+
event.prevent_default()
|
|
135
|
+
self.scroll_relative(x=4, animate=False)
|
|
136
|
+
return
|
|
137
|
+
return _orig_scroll_down(self, event)
|
|
138
|
+
|
|
139
|
+
def _patched_mouse_scroll_up(self, event: events.MouseScrollUp):
|
|
140
|
+
if getattr(event, "ctrl", False):
|
|
141
|
+
event.stop()
|
|
142
|
+
event.prevent_default()
|
|
143
|
+
self.scroll_relative(x=-4, animate=False)
|
|
144
|
+
return
|
|
145
|
+
return _orig_scroll_up(self, event)
|
|
146
|
+
|
|
147
|
+
Widget._on_mouse_scroll_down = _patched_mouse_scroll_down
|
|
148
|
+
Widget._on_mouse_scroll_up = _patched_mouse_scroll_up
|
|
149
|
+
# -----------------------------------------------
|
|
150
|
+
|
|
124
151
|
log_trace("Building standard tool configurations")
|
|
125
152
|
# Required for agent's execute_code tool since textIDE is stripped away
|
|
126
153
|
DEFAULT_RUN_CONFIGS = {
|
|
@@ -69,6 +69,34 @@ from textual.widgets import (
|
|
|
69
69
|
)
|
|
70
70
|
from textual.widgets.text_area import Selection
|
|
71
71
|
from textual.message import Message
|
|
72
|
+
|
|
73
|
+
# --- GLOBAL CTRL+SCROLL HORIZONTAL PAN PATCH ---
|
|
74
|
+
from textual.widget import Widget
|
|
75
|
+
from textual import events
|
|
76
|
+
|
|
77
|
+
_orig_scroll_down = Widget._on_mouse_scroll_down
|
|
78
|
+
_orig_scroll_up = Widget._on_mouse_scroll_up
|
|
79
|
+
|
|
80
|
+
def _patched_mouse_scroll_down(self, event: events.MouseScrollDown):
|
|
81
|
+
if getattr(event, "ctrl", False):
|
|
82
|
+
event.stop()
|
|
83
|
+
event.prevent_default()
|
|
84
|
+
self.scroll_relative(x=4, animate=False)
|
|
85
|
+
return
|
|
86
|
+
return _orig_scroll_down(self, event)
|
|
87
|
+
|
|
88
|
+
def _patched_mouse_scroll_up(self, event: events.MouseScrollUp):
|
|
89
|
+
if getattr(event, "ctrl", False):
|
|
90
|
+
event.stop()
|
|
91
|
+
event.prevent_default()
|
|
92
|
+
self.scroll_relative(x=-4, animate=False)
|
|
93
|
+
return
|
|
94
|
+
return _orig_scroll_up(self, event)
|
|
95
|
+
|
|
96
|
+
Widget._on_mouse_scroll_down = _patched_mouse_scroll_down
|
|
97
|
+
Widget._on_mouse_scroll_up = _patched_mouse_scroll_up
|
|
98
|
+
# -----------------------------------------------
|
|
99
|
+
|
|
72
100
|
import toolbox
|
|
73
101
|
from execution import ExecutionManager, SettingsModal, DEFAULT_RUN_CONFIGS
|
|
74
102
|
|
|
@@ -561,10 +589,11 @@ class FEDERaiDE(App):
|
|
|
561
589
|
safe_msg = escape(str(message)) if isinstance(message, str) else message
|
|
562
590
|
super().notify(safe_msg, *args, **kwargs)
|
|
563
591
|
|
|
564
|
-
def __init__(self, initial_file: str = None):
|
|
592
|
+
def __init__(self, initial_file: str = None, with_agent: bool = True):
|
|
565
593
|
super().__init__()
|
|
566
594
|
self.initial_file = initial_file
|
|
567
|
-
self.
|
|
595
|
+
self.with_agent = with_agent
|
|
596
|
+
self.views = ["ai_chat_view", "code_view", "exec_manager_view"] if with_agent else ["code_view", "exec_manager_view"]
|
|
568
597
|
self.current_view_index = 0
|
|
569
598
|
self.open_files = {}
|
|
570
599
|
self._outline_timer = None
|
|
@@ -619,7 +648,7 @@ class FEDERaiDE(App):
|
|
|
619
648
|
|
|
620
649
|
def compose(self) -> ComposeResult:
|
|
621
650
|
yield Header()
|
|
622
|
-
with ContentSwitcher(initial="ai_chat_view", id="main_switcher"):
|
|
651
|
+
with ContentSwitcher(initial="ai_chat_view" if self.with_agent else "code_view", id="main_switcher"):
|
|
623
652
|
with Horizontal(id="code_view"):
|
|
624
653
|
with Vertical(id="explorer_pane"):
|
|
625
654
|
yield Static(" EXPLORER", classes="pane_title")
|
|
@@ -632,11 +661,12 @@ class FEDERaiDE(App):
|
|
|
632
661
|
|
|
633
662
|
yield ExecutionManager(id="exec_manager_view")
|
|
634
663
|
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
664
|
+
if self.with_agent:
|
|
665
|
+
with Vertical(id="ai_chat_view"):
|
|
666
|
+
if HAS_AI_AGENT:
|
|
667
|
+
yield AIAgentView(id="ai_agent_view")
|
|
668
|
+
else:
|
|
669
|
+
yield Static(" AI Assistant Chat System\n\n(Install requirements: langgraph, langchain-openai, duckduckgo-search, bs4)", id="ai_placeholder")
|
|
640
670
|
yield Footer()
|
|
641
671
|
|
|
642
672
|
def on_mount(self) -> None:
|
|
@@ -731,6 +761,8 @@ class FEDERaiDE(App):
|
|
|
731
761
|
|
|
732
762
|
def action_new_chat(self):
|
|
733
763
|
"""Switch to AI view and initiate a fresh multi-agent chat."""
|
|
764
|
+
if not self.with_agent:
|
|
765
|
+
return
|
|
734
766
|
switcher = self.query_one("#main_switcher")
|
|
735
767
|
self.current_view_index = self.views.index("ai_chat_view")
|
|
736
768
|
switcher.current = "ai_chat_view"
|
|
@@ -1160,9 +1192,13 @@ class FEDERaiDE(App):
|
|
|
1160
1192
|
pass
|
|
1161
1193
|
|
|
1162
1194
|
# Refresh agent UI (the fix from the previous step)
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1195
|
+
if self.with_agent:
|
|
1196
|
+
try:
|
|
1197
|
+
agent_view = self.query_one("#ai_agent_view", AIAgentView)
|
|
1198
|
+
if hasattr(agent_view, "update_status_bar"):
|
|
1199
|
+
agent_view.update_status_bar()
|
|
1200
|
+
except Exception:
|
|
1201
|
+
pass
|
|
1166
1202
|
|
|
1167
1203
|
self.push_screen(DirectoryModal(current_path), handle_dir_selection)
|
|
1168
1204
|
|
|
@@ -1280,7 +1316,7 @@ def get_positional_args(argv=None):
|
|
|
1280
1316
|
return pos_args
|
|
1281
1317
|
|
|
1282
1318
|
|
|
1283
|
-
def main():
|
|
1319
|
+
def main(with_agent=True):
|
|
1284
1320
|
import sys
|
|
1285
1321
|
import shutil
|
|
1286
1322
|
import subprocess
|
|
@@ -1311,12 +1347,21 @@ def main():
|
|
|
1311
1347
|
res = subprocess.run(["asciinema", "rec", "-c", quoted_cmd, cast_path])
|
|
1312
1348
|
sys.exit(res.returncode)
|
|
1313
1349
|
|
|
1350
|
+
# Auto-detect standalone IDE mode from flags or binary name
|
|
1351
|
+
|
|
1352
|
+
if any(flag in sys.argv for flag in ("--no-agent", "--ide")) or os.path.basename(sys.argv[0]) in ("ide", "ide.exe"):
|
|
1353
|
+
with_agent = False
|
|
1354
|
+
|
|
1314
1355
|
positional_args = get_positional_args(sys.argv[1:])
|
|
1315
1356
|
initial_file = positional_args[0] if positional_args else None
|
|
1316
|
-
|
|
1357
|
+
if with_agent:
|
|
1358
|
+
toolbox.load_mcp_tools()
|
|
1317
1359
|
stop_loading_spinner()
|
|
1318
|
-
app = FEDERaiDE(initial_file=initial_file)
|
|
1360
|
+
app = FEDERaiDE(initial_file=initial_file, with_agent=with_agent)
|
|
1319
1361
|
app.run()
|
|
1320
1362
|
|
|
1363
|
+
def ide_main():
|
|
1364
|
+
main(with_agent=False)
|
|
1365
|
+
|
|
1321
1366
|
if __name__ == "__main__":
|
|
1322
1367
|
main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/telegram_handler.py
RENAMED
|
File without changes
|
|
File without changes
|