(projectId: string)
| 305 | } |
| 306 | |
| 307 | async function loadProjectWorkspace(projectId: string) { |
| 308 | try { |
| 309 | setError(""); |
| 310 | const [documentsResponse, sessionsResponse, statsResponse, graphResponse] = await Promise.all([ |
| 311 | api.listDocuments(projectId, showArchivedDocuments), |
| 312 | api.listMcpSessions(projectId), |
| 313 | api.getProjectStats(projectId), |
| 314 | api.getProjectGraph(projectId) |
| 315 | ]); |
| 316 | setDocuments(documentsResponse.documents); |
| 317 | setSessionsByProjectId((current) => ({ |
| 318 | ...current, |
| 319 | [projectId]: sessionsResponse.sessions |
| 320 | })); |
| 321 | setProjectStats(statsResponse.stats); |
| 322 | setProjectGraph(graphResponse.graph); |
| 323 | if (documentsResponse.documents[0] && !documentsResponse.documents.some((item) => item.id === selectedDocumentId)) { |
| 324 | setSelectedDocumentId(documentsResponse.documents[0].id); |
| 325 | } |
| 326 | if (!documentsResponse.documents[0]) { |
| 327 | setSelectedDocumentId(""); |
| 328 | } |
| 329 | const preferredSessionId = pendingSessionIdRef.current; |
| 330 | const sessionToOpen = preferredSessionId && sessionsResponse.sessions.some((session) => session.id === preferredSessionId) |
| 331 | ? preferredSessionId |
| 332 | : sessionsResponse.sessions[0]?.id; |
| 333 | pendingSessionIdRef.current = null; |
| 334 | if (sessionToOpen) { |
| 335 | await loadMcpSession(sessionToOpen); |
| 336 | } else { |
| 337 | setMcpDetail(null); |
| 338 | } |
| 339 | setStatus(t("就绪", "Ready")); |
| 340 | } catch (err) { |
| 341 | setError(getErrorMessage(err)); |
| 342 | } |
| 343 | } |
| 344 | |
| 345 | async function loadDocumentWorkspace(documentId: string) { |
| 346 | try { |
no test coverage detected