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.
Files changed (39) hide show
  1. {federaide_dev_nightly-2.0.4/src/federaide_dev_nightly.egg-info → federaide_dev_nightly-2.0.6}/PKG-INFO +1 -1
  2. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/pyproject.toml +2 -1
  3. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6/src/federaide_dev_nightly.egg-info}/PKG-INFO +1 -1
  4. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federaide_dev_nightly.egg-info/entry_points.txt +1 -0
  5. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/app.py +27 -0
  6. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/textIDE.py +59 -14
  7. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/LICENSE +0 -0
  8. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/MANIFEST.in +0 -0
  9. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/README.md +0 -0
  10. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/go/cmd/bridge/main.go +0 -0
  11. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/go/cmd/embed/main.go +0 -0
  12. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/go/cmd/search/main.go +0 -0
  13. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/go/go.mod +0 -0
  14. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/go/go.sum +0 -0
  15. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/scripts/build_go.sh +0 -0
  16. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/setup.cfg +0 -0
  17. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/setup.py +0 -0
  18. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federaide_dev_nightly.egg-info/SOURCES.txt +0 -0
  19. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federaide_dev_nightly.egg-info/dependency_links.txt +0 -0
  20. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federaide_dev_nightly.egg-info/requires.txt +0 -0
  21. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federaide_dev_nightly.egg-info/top_level.txt +0 -0
  22. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/__init__.py +0 -0
  23. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/__main__.py +0 -0
  24. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/agent.py +0 -0
  25. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/agent_core.py +0 -0
  26. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/audio_handler.py +0 -0
  27. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/chatgpt_auth.py +0 -0
  28. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/commands.py +0 -0
  29. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/execution.py +0 -0
  30. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/mcp_handler.py +0 -0
  31. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/orchestration.py +0 -0
  32. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/semantic_search.py +0 -0
  33. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/styles/fonts/Michroma-Regular.ttf +0 -0
  34. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/styles/fonts/SpaceGrotesk-Bold.ttf +0 -0
  35. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/styles/fonts/SpaceGrotesk-VariableFont_wght.ttf +0 -0
  36. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/styles/style.css +0 -0
  37. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/subagents.py +0 -0
  38. {federaide_dev_nightly-2.0.4 → federaide_dev_nightly-2.0.6}/src/federate/telegram_handler.py +0 -0
  39. {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.4
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.4"
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.4
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
@@ -1,3 +1,4 @@
1
1
  [console_scripts]
2
2
  federaide = federate.textIDE:main
3
3
  federate = federate.app:main
4
+ ide = federate.textIDE:ide_main
@@ -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.views =["ai_chat_view", "code_view", "exec_manager_view"]
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
- with Vertical(id="ai_chat_view"):
636
- if HAS_AI_AGENT:
637
- yield AIAgentView(id="ai_agent_view")
638
- else:
639
- yield Static(" AI Assistant Chat System\n\n(Install requirements: langgraph, langchain-openai, duckduckgo-search, bs4)", id="ai_placeholder")
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
- agent_view = self.query_one("#ai_agent_view", AIAgentView)
1164
- if hasattr(agent_view, "update_status_bar"):
1165
- agent_view.update_status_bar()
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
- toolbox.load_mcp_tools()
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()