feat: remove legacy OpenCode runtime

Cut product flows over to Coding/Pi and retain only the migration-owned v1 boundary. Promote supported native optional packages because electron-builder omitted pnpm transitive optional closure from the packaged ASAR.
This commit is contained in:
2026-08-24 12:17:43 +08:00
parent 61fede2b4d
commit 5a275b93a7
199 changed files with 1330 additions and 64725 deletions

View File

@@ -12,7 +12,7 @@ import { TooltipProvider } from '@/components/ui/tooltip';
import { useSettingsStore } from './stores/settings';
import { useProviderStore } from './stores/providers';
import { useAuthStore } from './stores/auth';
import { useOpencodeStore } from './stores/opencode';
import { codingWorkspaceStore, useCodingWorkspaceStore } from './stores/coding-workspace';
import { useProjectConfigStore } from './stores/project-config';
import {
AI_MODULE_SELECTION_PATH,
@@ -28,8 +28,6 @@ import { installRendererPerformanceDiagnostics } from '@/lib/performance-diagnos
import { resolveSupportedLanguage } from '../shared/language';
const Models = lazy(() => import('./pages/Models').then(({ Models: component }) => ({ default: component })));
const Projects = lazy(() => import('./pages/Projects').then(({ Projects: component }) => ({ default: component })));
const Sessions = lazy(() => import('./pages/Sessions').then(({ Sessions: component }) => ({ default: component })));
const Chat = lazy(() => import('./pages/Chat').then(({ Chat: component }) => ({ default: component })));
const Home = lazy(() => import('./pages/Home').then(({ Home: component }) => ({ default: component })));
const PreviewScene = lazy(() => import('./pages/Makelore').then(({ PreviewScene: component }) => ({ default: component })));
@@ -211,8 +209,8 @@ function ModuleSelectionRoute({
}
function ProjectChatRoute() {
const activeProject = useOpencodeStore((state) => state.activeProject);
const loadProjectList = useOpencodeStore((state) => state.loadProjectList);
const activeProject = useCodingWorkspaceStore((state) => state.activeProject);
const loadProjectList = useCodingWorkspaceStore((state) => state.load);
const loadProjectConfig = useProjectConfigStore((state) => state.load);
const [resolvedProjectKey, setResolvedProjectKey] = useState<string | null | undefined>(undefined);
const [resolvedRoute, setResolvedRoute] = useState<'chat' | 'config'>('config');
@@ -225,7 +223,7 @@ function ProjectChatRoute() {
try {
await loadProjectList();
const project = useOpencodeStore.getState().activeProject;
const project = codingWorkspaceStore.getState().activeProject;
if (!project) {
if (!cancelled) {
setResolvedProjectKey(null);
@@ -297,13 +295,6 @@ function App() {
return unsubscribe;
}, []);
useEffect(() => subscribeHostEvent('lifecycle:sleep', () => {
// Main owns the runtime shutdown decision. Once it has confirmed that
// there are no leases, close renderer-owned SSE/listener state as well so
// a hidden shell cannot keep reconnecting against a stopped runtime.
useOpencodeStore.getState().pauseBackgroundStreams();
}), []);
useEffect(() => {
if (rendererOnlyPreview || !authInitialized || !authAccessToken) return;
@@ -465,7 +456,7 @@ function App() {
<Route path="/makelore-home" element={<Home />} />
<Route path="/kangaroo" element={<Navigate to="/project-config" replace />} />
<Route path="/subagents" element={<Navigate to="/project-config" replace />} />
<Route path="/chat" element={<Navigate to="/opencode-chat" replace />} />
<Route path="/chat" element={<ProjectChatRoute />} />
<Route path="/deliverables" element={<PreviewScene />} />
<Route path="/image-canvas" element={<ImageCanvas />} />
<Route path="/image-prompts" element={<ImagePromptMuseum />} />
@@ -473,9 +464,6 @@ function App() {
<Route path="/learning" element={<Learning />} />
<Route path="/learning/project/:projectId" element={<LearningProjectDetail />} />
<Route path="/workbench/:projectId" element={<Workbench />} />
<Route path="/opencode-chat" element={<ProjectChatRoute />} />
<Route path="/projects" element={<Projects />} />
<Route path="/sessions" element={<Sessions />} />
<Route path="/models" element={<Models />} />
<Route path="/settings/*" element={<Settings />} />
<Route path="*" element={<Navigate to="/" replace />} />