feat(headless): Implement Phase 1 - Project Setup & Headless Scaffold
This commit is contained in:
76
gui_2.py
76
gui_2.py
@@ -22,6 +22,7 @@ import api_hooks
|
||||
import mcp_client
|
||||
from performance_monitor import PerformanceMonitor
|
||||
|
||||
from fastapi import FastAPI
|
||||
from imgui_bundle import imgui, hello_imgui, immapp
|
||||
|
||||
CONFIG_PATH = Path("config.toml")
|
||||
@@ -303,6 +304,25 @@ class App:
|
||||
self._discussion_names_cache = []
|
||||
self._discussion_names_dirty = True
|
||||
|
||||
def create_api(self) -> FastAPI:
|
||||
api = FastAPI(title="Manual Slop Headless API")
|
||||
|
||||
@api.get("/health")
|
||||
def health():
|
||||
return {"status": "ok"}
|
||||
|
||||
@api.get("/status")
|
||||
def status():
|
||||
return {
|
||||
"provider": self.current_provider,
|
||||
"model": self.current_model,
|
||||
"active_project": self.active_project_path,
|
||||
"ai_status": self.ai_status,
|
||||
"session_usage": self.session_usage
|
||||
}
|
||||
|
||||
return api
|
||||
|
||||
# ---------------------------------------------------------------- project loading
|
||||
|
||||
def _cb_new_project_automated(self, user_data):
|
||||
@@ -2001,33 +2021,45 @@ class App:
|
||||
|
||||
def run(self):
|
||||
"""Initializes the ImGui runner and starts the main application loop."""
|
||||
theme.load_from_config(self.config)
|
||||
if "--headless" in sys.argv:
|
||||
print("Headless mode active")
|
||||
self._fetch_models(self.current_provider)
|
||||
|
||||
import uvicorn
|
||||
headless_cfg = self.config.get("headless", {})
|
||||
port = headless_cfg.get("port", 8000)
|
||||
|
||||
api = self.create_api()
|
||||
uvicorn.run(api, host="0.0.0.0", port=port)
|
||||
else:
|
||||
theme.load_from_config(self.config)
|
||||
|
||||
self.runner_params = hello_imgui.RunnerParams()
|
||||
self.runner_params.app_window_params.window_title = "manual slop"
|
||||
self.runner_params.app_window_params.window_geometry.size = (1680, 1200)
|
||||
self.runner_params.imgui_window_params.enable_viewports = False
|
||||
self.runner_params.imgui_window_params.default_imgui_window_type = hello_imgui.DefaultImGuiWindowType.provide_full_screen_dock_space
|
||||
self.runner_params.fps_idling.enable_idling = False
|
||||
self.runner_params.imgui_window_params.show_menu_bar = True
|
||||
self.runner_params.ini_folder_type = hello_imgui.IniFolderType.current_folder
|
||||
self.runner_params.ini_filename = "manualslop_layout.ini"
|
||||
self.runner_params = hello_imgui.RunnerParams()
|
||||
self.runner_params.app_window_params.window_title = "manual slop"
|
||||
self.runner_params.app_window_params.window_geometry.size = (1680, 1200)
|
||||
self.runner_params.imgui_window_params.enable_viewports = False
|
||||
self.runner_params.imgui_window_params.default_imgui_window_type = hello_imgui.DefaultImGuiWindowType.provide_full_screen_dock_space
|
||||
self.runner_params.fps_idling.enable_idling = False
|
||||
self.runner_params.imgui_window_params.show_menu_bar = True
|
||||
self.runner_params.ini_folder_type = hello_imgui.IniFolderType.current_folder
|
||||
self.runner_params.ini_filename = "manualslop_layout.ini"
|
||||
|
||||
self.runner_params.callbacks.show_gui = self._gui_func
|
||||
self.runner_params.callbacks.show_menus = self._show_menus
|
||||
self.runner_params.callbacks.load_additional_fonts = self._load_fonts
|
||||
self.runner_params.callbacks.post_init = self._post_init
|
||||
|
||||
self._fetch_models(self.current_provider)
|
||||
self.runner_params.callbacks.show_gui = self._gui_func
|
||||
self.runner_params.callbacks.show_menus = self._show_menus
|
||||
self.runner_params.callbacks.load_additional_fonts = self._load_fonts
|
||||
self.runner_params.callbacks.post_init = self._post_init
|
||||
|
||||
self._fetch_models(self.current_provider)
|
||||
|
||||
# Start API hooks server (if enabled)
|
||||
self.hook_server = api_hooks.HookServer(self)
|
||||
self.hook_server.start()
|
||||
# Start API hooks server (if enabled)
|
||||
self.hook_server = api_hooks.HookServer(self)
|
||||
self.hook_server.start()
|
||||
|
||||
immapp.run(self.runner_params)
|
||||
immapp.run(self.runner_params)
|
||||
|
||||
# On exit
|
||||
self.hook_server.stop()
|
||||
|
||||
# On exit
|
||||
self.hook_server.stop()
|
||||
self.perf_monitor.stop()
|
||||
ai_client.cleanup() # Destroy active API caches to stop billing
|
||||
self._flush_to_project()
|
||||
|
||||
Reference in New Issue
Block a user