diff --git a/backend/apps/dashboards/dashboards.py b/backend/apps/dashboards/dashboards.py index 81dbf0c1..36a02648 100644 --- a/backend/apps/dashboards/dashboards.py +++ b/backend/apps/dashboards/dashboards.py @@ -61,8 +61,8 @@ def _delete(dashboard_id: str): os.remove(path) -def _migrate_if_needed(): - """One-time migration: if no dashboards exist, create 'Dashboard 1' from old layout.""" +def migrate_if_needed(): + """One-time migration: if no dashboards exist, create the default from old layout.""" existing = _load_all() if existing: return @@ -80,7 +80,7 @@ def _migrate_if_needed(): except Exception: logger.exception("Failed to read old layout.json, using empty layout") - dashboard = Dashboard(name="Dashboard 1", layout=layout) + dashboard = Dashboard(name="Untitled Dashboard", layout=layout) _save(dashboard) logger.info(f"Created default dashboard: {dashboard.id}") @@ -105,7 +105,7 @@ def _migrate_if_needed(): @asynccontextmanager async def dashboards_lifespan(): os.makedirs(DATA_DIR, exist_ok=True) - _migrate_if_needed() + migrate_if_needed() yield diff --git a/backend/tests/test_disk_resilience.py b/backend/tests/test_disk_resilience.py index 9b37cbae..f1993c34 100644 --- a/backend/tests/test_disk_resilience.py +++ b/backend/tests/test_disk_resilience.py @@ -143,7 +143,7 @@ def test_migration_survives_corrupt_session(tmp_path, monkeypatch): (sess_dir / "good.json").write_text(json.dumps({"id": "good"})) (sess_dir / "bad.json").write_text("{ truncated ,,,") - dmod._migrate_if_needed() # must not raise despite the corrupt session + dmod.migrate_if_needed() # must not raise despite the corrupt session dashboards = dmod._load_all() assert len(dashboards) == 1 diff --git a/electron/package-lock.json b/electron/package-lock.json index 96e0bad9..89267711 100644 --- a/electron/package-lock.json +++ b/electron/package-lock.json @@ -1,12 +1,12 @@ { "name": "openswarm", - "version": "1.2.77", + "version": "1.2.84", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "openswarm", - "version": "1.2.77", + "version": "1.2.84", "hasInstallScript": true, "dependencies": { "electron-updater": "6.8.3", diff --git a/electron/package.json b/electron/package.json index cd402307..af023c3f 100644 --- a/electron/package.json +++ b/electron/package.json @@ -1,6 +1,6 @@ { "name": "openswarm", - "version": "1.2.83", + "version": "1.2.84", "description": "OpenSwarm — AI Agent Orchestrator", "author": "openswarm-ai", "main": "main.js", @@ -51,7 +51,16 @@ "category": "public.app-category.developer-tools", "hardenedRuntime": true, "entitlements": "build/entitlements.mac.plist", - "entitlementsInherit": "build/entitlements.mac.plist" + "entitlementsInherit": "build/entitlements.mac.plist", + "extraResources": [ + { + "from": "build-staging/mouseclamp/${arch}", + "to": "mouseclamp", + "filter": [ + "**/*" + ] + } + ] }, "dmg": { "artifactName": "OpenSwarm-${arch}.${ext}", @@ -149,13 +158,6 @@ "**/*" ] }, - { - "from": "build-staging/mouseclamp/${arch}", - "to": "mouseclamp", - "filter": [ - "**/*" - ] - }, { "from": "build-staging/uv-bin/${arch}", "to": "backend/uv-bin", diff --git a/frontend/src/app/pages/Dashboard/hooks/lifecycle/useAgentSpawn.ts b/frontend/src/app/pages/Dashboard/hooks/lifecycle/useAgentSpawn.ts index 7d67962a..e26fdfa0 100644 --- a/frontend/src/app/pages/Dashboard/hooks/lifecycle/useAgentSpawn.ts +++ b/frontend/src/app/pages/Dashboard/hooks/lifecycle/useAgentSpawn.ts @@ -215,12 +215,7 @@ export function useAgentSpawn({ (s) => s.status !== 'draft' && s.dashboard_id === dashboardId, ).length; const NAME_GEN_TRIGGERS = [1, 3, 6]; - const currentDash = store.getState().dashboards.items[dashboardId]; - const canAutoName = - currentDash && - (currentDash.auto_named || currentDash.name === 'Untitled Dashboard'); - - if (NAME_GEN_TRIGGERS.includes(agentCount) && canAutoName) { + if (NAME_GEN_TRIGGERS.includes(agentCount)) { dispatch(generateDashboardName(dashboardId)); } } diff --git a/frontend/src/app/pages/Dashboard/hooks/lifecycle/useDashboardLifecycle.ts b/frontend/src/app/pages/Dashboard/hooks/lifecycle/useDashboardLifecycle.ts index b0b51f65..cfc3a428 100644 --- a/frontend/src/app/pages/Dashboard/hooks/lifecycle/useDashboardLifecycle.ts +++ b/frontend/src/app/pages/Dashboard/hooks/lifecycle/useDashboardLifecycle.ts @@ -255,16 +255,13 @@ export function useDashboardLifecycle({ const namedOnFirstMessageRef = useRef(null); useEffect(() => { - if (!dashboardId || !layoutInitialized) return; + if (!dashboardId) return; if (namedOnFirstMessageRef.current === dashboardId) return; - const dash = store.getState().dashboards.items[dashboardId]; - if (!dash) return; - if (!dash.auto_named && dash.name !== 'Untitled Dashboard') return; const hasUserMessage = Object.values(sessions).some( (s) => s.dashboard_id === dashboardId && s.messages?.some((m) => m.role === 'user'), ); if (!hasUserMessage) return; namedOnFirstMessageRef.current = dashboardId; dispatch(generateDashboardName(dashboardId)); - }, [sessions, dashboardId, layoutInitialized, dispatch]); + }, [sessions, dashboardId, dispatch]); }