mirror of
https://github.com/openswarm-ai/openswarm.git
synced 2026-09-11 12:17:45 +02:00
Multi-provider support (WIP - not fully tested): - Owned agent loop replacing claude_agent_sdk (agent_loop.py, mcp_client.py) - Provider adapters: Anthropic (native), OpenAI-compat (any endpoint), Gemini (native + schema cleaning) - 19 models across 9 providers (Anthropic, OpenAI, Google, xAI, Meta, DeepSeek, Mistral, Qwen, Cohere) - OpenRouter integration for 300+ models via single API key - Builtin tool reimplementations (Read, Write, Edit, Glob, Grep, Bash, WebSearch, WebFetch, AskUserQuestion) - Standalone MCP client manager (stdio/sse/http) - Frontend: grouped model dropdown, provider selection, dynamic context windows Analytics (tested): - PostHog integration as single analytics source - Tracks: app.opened, session.started/completed, tool.called, tool.approval_resolved, error.occurred - Rich session data: user messages, assistant messages, session titles, tools used, MCP servers, task categories - PostHog dashboard with 14 insights created via API - Usage stats in Settings (Usage tab) with pixel-art bars Settings (tested): - 4 tabs: General, Models, Usage, Commands - Model Providers tab with OpenRouter (recommended), Anthropic, OpenAI, Google key fields - "Get key" links for each provider - Usage tab with session/cost/tool stats + analytics opt-in toggle - analytics_opt_in defaults to true, installation_id auto-generated Merged haik/updates-v1 (tested): - Sub-agent spawning, chat branching, browser control improvements - Settings: auto_select_mode, expand_new_chats, auto_reveal_sub_agents, dev_mode Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
43 lines
1.8 KiB
Python
43 lines
1.8 KiB
Python
"""Centralised path definitions for the OpenSwarm backend.
|
|
|
|
In dev mode (default) data lives under ``backend/data/``.
|
|
When packaged as a desktop app, Electron sets ``OPENSWARM_PACKAGED=1`` and
|
|
data is stored in a platform-appropriate location
|
|
(``~/Library/Application Support/OpenSwarm/data/`` on macOS).
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
|
|
_BACKEND_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
|
|
_is_packaged = os.environ.get("OPENSWARM_PACKAGED") == "1"
|
|
|
|
if _is_packaged:
|
|
if sys.platform == "darwin":
|
|
_app_support = os.path.join(os.path.expanduser("~"), "Library", "Application Support", "OpenSwarm")
|
|
elif sys.platform == "win32":
|
|
_app_support = os.path.join(os.environ.get("APPDATA", os.path.expanduser("~")), "OpenSwarm")
|
|
else:
|
|
_app_support = os.path.join(os.environ.get("XDG_DATA_HOME", os.path.join(os.path.expanduser("~"), ".local", "share")), "OpenSwarm")
|
|
DATA_ROOT = os.path.join(_app_support, "data")
|
|
else:
|
|
DATA_ROOT = os.path.join(_BACKEND_DIR, "data")
|
|
|
|
SESSIONS_DIR = os.path.join(DATA_ROOT, "sessions")
|
|
TOOLS_DIR = os.path.join(DATA_ROOT, "tools")
|
|
SETTINGS_DIR = os.path.join(DATA_ROOT, "settings")
|
|
MODES_DIR = os.path.join(DATA_ROOT, "modes")
|
|
TEMPLATES_DIR = os.path.join(DATA_ROOT, "templates")
|
|
DASHBOARDS_DIR = os.path.join(DATA_ROOT, "dashboards")
|
|
OUTPUTS_DIR = os.path.join(DATA_ROOT, "outputs")
|
|
OUTPUTS_WORKSPACE_DIR = os.path.join(DATA_ROOT, "outputs_workspace")
|
|
SKILLS_WORKSPACE_DIR = os.path.join(DATA_ROOT, "skills_workspace")
|
|
DASHBOARD_LAYOUT_DIR = os.path.join(DATA_ROOT, "dashboard_layout")
|
|
BUILTIN_PERMISSIONS_PATH = os.path.join(DATA_ROOT, "builtin_permissions.json")
|
|
CHANNELS_DIR = os.path.join(DATA_ROOT, "channels")
|
|
CHANNELS_SESSIONS_DIR = os.path.join(DATA_ROOT, "channels", "sessions")
|
|
ANALYTICS_DIR = os.path.join(DATA_ROOT, "analytics")
|
|
|
|
BACKEND_DIR = _BACKEND_DIR
|